«Кузнечик»
(
англ.
Kuznyechik
или
англ.
Kuznechik
) — симметричный алгоритм
блочного шифрования
с размером блока 128 бит и длиной ключа 256 бит, использующий для генерации раундовых ключей
SP-сеть
.
Общие сведения
Данный шифр утверждён (наряду с
блочным шифром «Магма»
) в качестве стандарта в
ГОСТ Р 34.12-2015
«Информационная технология. Криптографическая защита информации. Блочные шифры» приказом от 19 июня 2015 года № 749-ст
. Стандарт вступил в действие с 1 января 2016 года
. Шифр разработан Центром защиты информации и специальной связи
ФСБ России
с участием АО «Информационные технологии и коммуникационные системы» (
АО «ИнфоТеКС»
). Внесён Техническим комитетом по стандартизации ТК 26 «Криптографическая защита информации»
.
Протоколом № 54 от
29 ноября
2018 года
, на основе
ГОСТ Р 34.12-2015
,
Межгосударственным советом по метрологии, стандартизации и сертификации
был принят межгосударственный стандарт
ГОСТ 34.12-2018
. Приказом
Федерального агентства по техническому регулированию и метрологии
от
4 декабря
2018 года
№ 1061-ст стандарт
ГОСТ 34.12-2018
введен в действие в качестве национального стандарта
Российской Федерации
с
1 июня
2019 года
.
Обозначения
—
поле Галуа
по модулю неприводимого многочлена
.
— биективное отображение, ставящее в соответствие элементу кольца
(
) его двоичное представление.
— отображение, обратное к
.
— биективное отображение, ставящее в соответствие двоичной строке элемент поля
.
— отображение, обратное к
Описание алгоритма
Для шифрования, расшифрования и генерации ключа используются следующие функции:
, где
,
— двоичные строки вида
…
(
— символ
конкатенации
строк).
…
— обратное к
преобразование.
…
…
— обратное к
преобразование, причём
…
…
, где
— композиция преобразований
и
и т. д.
Нелинейное преобразование
Нелинейное преобразование задается подстановкой
S = Bin
8
S' Bin
8
−1
.
Значения подстановки
S'
заданы в виде массива
S' = (S'(0), S'(1), …, S'(255))
:
Линейное преобразование
Задаётся отображением
:
…
где операции сложения и умножения осуществляются в поле
.
Генерация ключа
Алгоритм генерации ключа использует итерационные константы
, i=1,2,…32.
Задается общий ключ
…
.
Вычисляются итерационные ключи
…
…
…
Алгоритм зашифрования
…
где a — строка размером 128 бит.
Алгоритм расшифрования
…
Пример
Строка
«a»
задается в шестнадцатеричном виде и имеет размер 16 байт, причём каждый байт задается двумя шестнадцатеричными числами.
Таблица соответствия строк в двоичном и в шестнадцатеричном виде:
0000
|
0001
|
0010
|
0011
|
0100
|
0101
|
0110
|
0111
|
1000
|
1001
|
1010
|
1011
|
1100
|
1101
|
1110
|
1111
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
a
|
b
|
c
|
d
|
e
|
f
|
Пример N-преобразования
Пример G-преобразования
Пример H-преобразования
Пример генерации ключа
…
В итоге получаем итерационные ключи:
Пример алгоритма зашифрования
Открытый текст
Криптостойкость
Ожидается, что новый блочный шифр «Кузнечик» будет
устойчив
ко всем видам
атак на блочные шифры
.
На конференции «CRYPTO 2015» Алекс Бирюков, Лео Перрин и Алексей Удовенко представили доклад, в котором говорится о том, что несмотря на утверждения разработчиков, значения S-блока шифра Кузнечик и
хеш-функции Стрибог
не являются (псевдо)случайными числами, а сгенерированы на основе скрытого алгоритма, который им удалось восстановить методами
обратного проектирования
. Позднее Лео Перрин и Алексей Удовенко опубликовали два альтернативных алгоритма генерации S-блока и доказали его связь с S-блоком белорусского шифра
BelT
. В этом исследовании авторы также утверждают, что, хотя причины использования такой структуры остаются неясны, использование скрытых алгоритмов для генерации
S-блоков
противоречит принципу
, который мог бы служить доказательством отсутствия специально заложенных уязвимостей в дизайне алгоритма.
Riham AlTawy и Amr M. Youssef описали атаку «
встречи посередине
» на 5 раундов шифра Кузнечик, имеющую вычислительную сложность 2
140
и требующую 2
153
памяти и 2
113
данных
.
Примечания
-
Согласно
ГОСТ Р 34.12-2015
и
шифр может именоваться на английском как
Kuznyechik
-
Согласно
ГОСТ 34.12-2018
шифр может именоваться на английском как
Kuznechik
.
-
Некоторые программные реализации шифра с
открытым исходным кодом
используют наименование
Grasshopper
-
(неопр.)
. Дата обращения: 4 сентября 2015. Архивировано из
24 сентября 2015 года.
-
(неопр.)
. Дата обращения: 4 сентября 2015.
27 сентября 2016 года.
-
(неопр.)
. Дата обращения: 14 декабря 2014.
18 декабря 2014 года.
-
(неопр.)
. Дата обращения: 13 апреля 2016. Архивировано из
24 апреля 2016 года.
-
от 26 декабря 2014 на
Wayback Machine
см. Контрольные примеры
-
Alex Biryukov, Léo Perrin, Aleksei Udovenko.
(неопр.)
(8 мая 2016). Дата обращения: 21 мая 2021.
4 марта 2021 года.
-
Léo Perrin, Aleksei Udovenko.
(неопр.)
(3 февраля 2017). Дата обращения: 14 сентября 2017.
17 апреля 2021 года.
-
Riham AlTawy and Amr M. Youssef.
(неопр.)
(17 апреля 2015). Дата обращения: 8 июня 2016.
16 июля 2017 года.
Ссылки
-
«Информационная технология. Криптографическая защита информации. Блочные шифры»
-
«Информационная технология. Криптографическая защита информации. Блочные шифры»
-
[
неавторитетный источник
]