«Кузнечик» (англ. Kuznyechik[1] или англ. Kuznechik[2][3]) — симметричный алгоритм блочного шифрования с размером блока 128 бит и длиной ключа 256 бит, использующий для генерации раундовых ключей SP-сеть.

Кузнечик
Создатель ФСБ России,
АО «ИнфоТеКС»
Опубликован 2015
Стандарты ГОСТ 34.12-2018, ГОСТ Р 34.12-2015, RFC 7801
Размер ключа 256 бит
Размер блока 128 бит
Число раундов 10
Тип Подстановочно-перестановочная сеть

Общие сведения править

Данный шифр утверждён (наряду с блочным шифром «Магма») в качестве стандарта в ГОСТ Р 34.12-2015 «Информационная технология. Криптографическая защита информации. Блочные шифры» приказом от 19 июня 2015 года № 749-ст[4]. Стандарт вступил в действие с 1 января 2016 года[5]. Шифр разработан Центром защиты информации и специальной связи ФСБ России с участием АО «Информационные технологии и коммуникационные системы» (АО «ИнфоТеКС»). Внесён Техническим комитетом по стандартизации ТК 26 «Криптографическая защита информации»[6][7].

Протоколом № 54 от 29 ноября 2018 года, на основе ГОСТ Р 34.12-2015, Межгосударственным советом по метрологии, стандартизации и сертификации был принят межгосударственный стандарт ГОСТ 34.12-2018. Приказом Федерального агентства по техническому регулированию и метрологии от 4 декабря 2018 года № 1061-ст стандарт ГОСТ 34.12-2018 введен в действие в качестве национального стандарта Российской Федерации с 1 июня 2019 года.

Обозначения править

  — поле Галуа   по модулю неприводимого многочлена  .

  — биективное отображение, ставящее в соответствие элементу кольца   ( ) его двоичное представление.

  — отображение, обратное к  .

  — биективное отображение, ставящее в соответствие двоичной строке элемент поля  .

  — отображение, обратное к  

Описание алгоритма править

Для шифрования, расшифрования и генерации ключа используются следующие функции:

 , где  ,   — двоичные строки вида    (  — символ конкатенации строк).

   — обратное к   преобразование.

   

  — обратное к   преобразование, причём    

 , где   — композиция преобразований   и   и т. д.

 

Нелинейное преобразование править

Нелинейное преобразование задается подстановкой S = Bin8 S' Bin8−1.

Значения подстановки S' заданы в виде массива S' = (S'(0), S'(1), …, S'(255)):

                           

Линейное преобразование править

Задаётся отображением  :

      

где операции сложения и умножения осуществляются в поле  .

Генерация ключа править

Алгоритм генерации ключа использует итерационные константы  , i=1,2,…32. Задается общий ключ   .

Вычисляются итерационные ключи

  

  

  

Алгоритм зашифрования править

   где a — строка размером 128 бит.

Алгоритм расшифрования править

  

Пример[8] править

Строка «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-блока шифра Кузнечик и хеш-функции Стрибог не являются (псевдо)случайными числами, а сгенерированы на основе скрытого алгоритма, который им удалось восстановить методами обратного проектирования[9]. Позднее Лео Перрин и Алексей Удовенко опубликовали два альтернативных алгоритма генерации S-блока и доказали его связь с S-блоком белорусского шифра BelT[10]. В этом исследовании авторы также утверждают, что, хотя причины использования такой структуры остаются неясны, использование скрытых алгоритмов для генерации S-блоков противоречит принципу отсутствия козыря в рукаве, который мог бы служить доказательством отсутствия специально заложенных уязвимостей в дизайне алгоритма.

Riham AlTawy и Amr M. Youssef описали атаку «встречи посередине» на 5 раундов шифра Кузнечик, имеющую вычислительную сложность 2140 и требующую 2153 памяти и 2113 данных[11].

Примечания править

  1. Согласно ГОСТ Р 34.12-2015 и RFC 7801 шифр может именоваться на английском как Kuznyechik
  2. Согласно ГОСТ 34.12-2018 шифр может именоваться на английском как Kuznechik.
  3. Некоторые программные реализации шифра с открытым исходным кодом используют наименование Grasshopper
  4. «ГОСТ Р 34.12-2015». Дата обращения: 4 сентября 2015. Архивировано из оригинала 24 сентября 2015 года.
  5. «О введении новых криптографических стандартов». Дата обращения: 4 сентября 2015. Архивировано 27 сентября 2016 года.
  6. «www.tc26.ru». Дата обращения: 14 декабря 2014. Архивировано 18 декабря 2014 года.
  7. Архивированная копия. Дата обращения: 13 апреля 2016. Архивировано из оригинала 24 апреля 2016 года.
  8. http://www.tc26.ru/standard/draft/GOSTR-bsh.pdf Архивная копия от 26 декабря 2014 на Wayback Machine см. Контрольные примеры
  9. Alex Biryukov, Léo Perrin, Aleksei Udovenko. Reverse-Engineering the S-Box of Streebog, Kuznyechik and STRIBOBr1 (Full Version) (8 мая 2016). Дата обращения: 21 мая 2021. Архивировано 4 марта 2021 года.
  10. Léo Perrin, Aleksei Udovenko. Exponential S-Boxes: a Link Between the S-Boxes of BelT and Kuznyechik/Streebog (3 февраля 2017). Дата обращения: 14 сентября 2017. Архивировано 17 апреля 2021 года.
  11. Riham AlTawy and Amr M. Youssef. A Meet in the Middle Attack on Reduced Round Kuznyechik (17 апреля 2015). Дата обращения: 8 июня 2016. Архивировано 16 июля 2017 года.

Ссылки править

  • ГОСТ Р 34.12-2015 «Информационная технология. Криптографическая защита информации. Блочные шифры»
  • ГОСТ 34.12-2018 «Информационная технология. Криптографическая защита информации. Блочные шифры»
  • В ГОСТе сидел «Кузнечик»[неавторитетный источник]