Алгоритм блокового шифрування
Назва: Kuznechik
Розробник:
Створений:
Опублікований:
Розмір ключа: 250 біт
Розмір блоку: 128 біт
Число раундів: 10
Тип: мережа замін-перестановок

Kuznechik (або англ. Kuznyechik, або рос. Кузнечик) — симетричний алгоритм блочного шифрування з розміром блоку 128 бітів і довжиною ключа 256 бітів який входить в стандарту ГОСТ Р 34.12-2015 та ГОСТ 34.12-2018. Шифр використовує для генерації раундових ключів мережу замін-перестановок.

Загальні даніРедагувати

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

ПозначенняРедагувати

  — поле Галуа   за модулем незвідного багаточлена  .

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

  — відображення, зворотне до  .

  — бієктивне відображення, що ставить у відповідність двійковому рядку елемент поля  .

  — відображення, зворотне до  

Опис алгоритмуРедагувати

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

 , де  ,   — двійкові рядки виду    (  — символ конкатенації рядків).

   — зворотнє до   перетворення.

   

  — зворотнє до   перетворення, при чому    

 , де   — композиція перетворень   і   і т. д.

 


Нелінійне перетворенняРедагувати

Нелінійне перетворення задається підстановкою S = Bin8 S' Bin8−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-перетворенняРедагувати

 

Приклад генерації ключаРедагувати

 


 

 


 

 

 

 

 


 

 


 

 


 

 


 

 


 

 


 

 


 

  


У підсумку отримуємо ітераційні ключі:

 

 

 

 

 

 

 

 

 

 

Приклад алгоритму шифруванняРедагувати

Відкритий текст  

КрипостійкістьРедагувати

Очікується, що новий блочний шифр Kuznechik буде стійкий до всіх видів атак на блочні шифри.

На конференції «CRYPTO-2015» Алекс Бірюков, Лео Перрін і Олексій Удовенко представили доповідь, в якій говориться про те, що незважаючи на твердження розробників, значення S-блоку шифру Kuznechik і геш-функції Streebog не є (псевдо) випадковими числами, а згенеровані на основі прихованого алгоритму, який їм вдалося відновити методами зворотного проектування[3]. Пізніше Лео Перрін і Олексій Удовенко опублікували два альтернативних алгоритми генерації S-блоку і довели його зв'язок з S-блоком білоруського шифру BelT[4]. У цьому дослідженні автори також стверджують, що, хоча причини використання такої структури залишаються неясні, використання прихованих алгоритмів для генерації S-блоків суперечить принципу відсутності козиря в рукаві, який міг би служити доказом відсутністі спеціально закладених вразливостей в дизайні алгоритму.

Riham AlTawy і Amr M. Youssef описали атаку «зустрічі посередині» на 5 раундів шифру Kuznechik, 256-бітний майстер-ключ відновлюється з складністю часу 2140.3 і вимагає 2153.3 пам'яті та 2113 даних.[5]

ПриміткиРедагувати

ПосиланняРедагувати

Див. такожРедагувати