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

Материал из testwiki
Перейти к навигации Перейти к поиску

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

Общие сведения

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

Обозначения

𝔽 — поле Галуа GF(28) по модулю неприводимого многочлена x8+x7+x6+x+1.

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

Bin81:V8p — отображение, обратное к Bin8.

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

δ1:𝔽V8 — отображение, обратное к δ

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

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

Add2[k](a)=ka, где k, a — двоичные строки вида a=a15||||a0 (|| — символ конкатенации строк).

N(a)=S(a15)||||S(a0).N1(a) — обратное к N(a) преобразование.

G(a)=γ(a15,,a0)||a15||||a1.

G1(a) — обратное к G(a) преобразование, причём G1(a)=a14||a13||||a0||γ(a14,a13,,a0,a15).

H(a)=G16(a), где G16 — композиция преобразований G15 и G и т. д.

F[k](a1,a0)=(HNAdd2[k](a1)a0,a1).

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

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

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

S=(252,238,221,17,207,110,49,22,251,196,250,218,35,197,4,77,233, 119,240,219,147,46,153,186,23,54,241,187,20,205,95,193,249,24,101, 90,226,92,239,33,129,28,60,66,139,1,142,79,5,132,2,174,227,106,143, 160,6,11,237,152,127,212,211,31,235,52,44,81,234,200,72,171,242,42, 104,162,253,58,206,204,181,112,14,86,8,12,118,18,191,114,19,71,156, 183,93,135,21,161,150,41,16,123,154,199,243,145,120,111,157,158,178, 177,50,117,25,61,255,53,138,126,109,84,198,128,195,189,13,87,223, 245,36,169,62,168,67,201,215,121,214,246,124,34,185,3,224,15,236, 222,122,148,176,188,220,232,40,80,78,51,10,74,167,151,96,115,30,0, 98,68,26,184,56,130,100,159,38,65,173,69,70,146,39,94,85,47,140,163, 165,125,105,213,149,59,7,88,179,64,134,172,29,247,48,55,107,228,136, 217,231,137,225,27,131,73,76,63,248,254,141,83,170,144,202,216,133, 97,32,113,103,164,45,43,9,91,203,155,37,208,190,229,108,82,89,166, 116,210,230,244,180,192,209,102,175,194,57,75,99,182).

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

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

γ(a15,,a0)=δ1(148*δ(a15)+32*δ(a14)+133*δ(a13)+16*δ(a12)+ 194*δ(a11)+192*δ(a10)+1*δ(a9)+251*δ(a8)+1*δ(a7)+192*δ(a6)+ 194*δ(a5)+16*δ(a4)+133*δ(a3)+32*δ(a2)+148*δ(a1)+1*δ(a0)),

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

Генерация ключа

Алгоритм генерации ключа использует итерационные константы Ci=H(Bin128(i)), i=1,2,…32. Задается общий ключ K=k255||||k0.

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

K1=k255||||k128

K2=k127||||k0

(K2i+1,K2i+2)=F[C8(i1)+8]F[C8(i1)+1](K2i1,K2i),i=1,2,3,4.

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

E(a)=Add2[K10]HNAdd2[K9]HNAdd2[K2]HNAdd2[K1](a), где a — строка размером 128 бит.

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

D(a)=Add2[K1]N1H1Add2[K2]N1H1Add2[K9]N1H1Add2[K10](a).

Пример[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-преобразования

N(00112233445566778899aabbccddeeff)=fc7765aeeaoc9a7ee8d7387d88d86cb6

Пример G-преобразования

G(00000000000000000000000000000100)=94000000000000000000000000000001

G(94000000000000000000000000000001)=a5940000000000000000000000000000

G(a5940000000000000000000000000000)=64a59400000000000000000000000000

G(64a59400000000000000000000000000)=0d64a594000000000000000000000000

Пример H-преобразования

H(64a59400000000000000000000000000)=d456584dd0e3e84cc3166e4b7fa2890d

Пример генерации ключа

K=8899aabbccddeeff0011223344556677fedcba98765432100123456789abcdef.

K1=8899aabbccddeeff0011223344556677,

K2=fedcba98765432100123456789abcdef.

C1=6ea276726c487ab85d27bd10dd849401,

Add2[C1](K1)=e63bdcc9a09594475d369f2399d1f276,

NAdd2[C1[(K1)=0998ca37a7947aabb78f4a5ae81b748a,

HNAdd2[C1](K1)=3d0940999db75d6a9257071d5e6144a6,

F[C1](K1,K2)=(HNAdd2[C1](K1)K2,K1)=(c3d5fa01ebe36f7a9374427ad7ca8949,8899aabbccddeeff0011223344556677).


C2=dc87ece4d890f4b3ba4eb92079cbeb02,

F[C2]F[C1](K1,K2)=(37777748e56453377d5e262d90903f87,c3d5fa01ebe36f7a9374427ad7ca8949).


C3=b2259a96b4d88e0be7690430a44f7f03,

F[C3]F[C2]F[C1](K1,K2)=(f9eae5f29b2815e31f11ac5d9c29fb01,37777748e56453377d5e262d90903f87).


C4=7bcd1b0b73e32ba5b79cb140f2551504,

F[C4]F[C3]F[C2]F[C1](K1,K2)=(e980089683d00d4be37dd3434699b98f,f9eae5f29b2815e31f11ac5d9c29fb01).


C5=156f6d791fab511deabb0c502fd18105,

F[C5]F[C4]F[C3]F[C2]F[C1](K1,K2)=(b7bd70acea4460714f4ebe13835cf004,e980089683d00d4be37dd3434699b98f).


C6=a74af7efab73df160dd208608b9efe06,

F[C6]F[C5]F[C4]F[C3]F[C2]F[C1](K1,K2)=(1a46ea1cf6ccd236467287df93fdf974,b7bd70acea4460714f4ebe13835cf004).


C7=c9e8819dc73ba5ae50f5b570561a6a07,

F[C7]F[C6]F[C5]F[C4]F[C3]F[C2]F[C1](K1,K2)=(3d4553d8e9cfec6815ebadc40a9ffd04,1a46ea1cf6ccd236467287df93fdf974).


C8=f6593616e6055689adfba18027aa2a08,

(K3,K4)=F[C8]F[C7]F[C2]F[C1](K1,K2)=(db31485315694343228d6aef8cc78c44,3d4553d8e9cfec6815ebadc40a9ffd04).


В итоге получаем итерационные ключи:

K1=8899aabbccddeeff0011223344556677,

K2=fedcba98765432100123456789abcdef,

K3=db31485315694343228d6aef8cc78c44,

K4=3d4553d8e9cfec6815ebadc40a9ffd04,

K5=57646468c44a5e28d3e59246f429f1ac,

K6=bd079435165c6432b532e82834da581b,

K7=51e640757e8745de705727265a0098b1,

K8=5a7925017b9fdd3ed72a91a22286f984,

K9=bb44e25378c73123a5f32f73cdb6e517,

K10=72e9dd7416bcf45b755dbaa88e4a4043.

Пример алгоритма зашифрования

Шаблон:Дополнить раздел Открытый текст a=1122334455667700ffeeddccbbaa9988,

Криптостойкость

Ожидается, что новый блочный шифр «Кузнечик» будет устойчив ко всем видам атак на блочные шифры.

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

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

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Симметричные криптосистемы

Шаблон:Rq

  1. Согласно ГОСТ Р 34.12-2015 и RFC 7801 шифр может именоваться на английском как Шаблон:Lang-en2
  2. Согласно ГОСТ 34.12-2018 шифр может именоваться на английском как Шаблон:Lang-en2.
  3. Некоторые программные реализации шифра с открытым исходным кодом используют наименование Шаблон:Lang-en2
  4. Шаблон:Cite web
  5. Шаблон:Cite web
  6. Шаблон:Cite web
  7. Шаблон:Cite web
  8. http://www.tc26.ru/standard/draft/GOSTR-bsh.pdf Шаблон:Wayback см. Контрольные примеры
  9. Шаблон:Cite web
  10. Шаблон:Cite web
  11. Шаблон:Cite web