Kuznechik

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

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

Загальні дані

Даний шифр затверджений (поряд з блочним шифром «Магма») в якості стандарту в ГОСТ Р 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]

Примітки

Посилання

Див. також

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.