Кузнечик (шифр)

(перенаправлено с «Kuznechik»)
У этого термина существуют и другие значения, см. Кузнечик (значения).

«Кузнечик» (англ. 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. «О введении новых криптографических стандартов»
  6. «www.tc26.ru»
  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).
  10. Léo Perrin, Aleksei Udovenko. Exponential S-Boxes: a Link Between the S-Boxes of BelT and Kuznyechik/Streebog (3 февраля 2017).
  11. Riham AlTawy and Amr M. Youssef. A Meet in the Middle Attack on Reduced Round Kuznyechik (17 апреля 2015).

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