Поскольку данный шифр был разработан недавно, важным аспектом его изучения является проверка на криптостойкость и поиск слабых ключей, для чего необходимо в первую очередь проанализировать процесс выработки раундовых подключей и константы, использующиеся в этом процессе.
Алгоритм развертывания ключа шифра «Кузнечик» использует итерационные константы Ci∈ V128, i = 1, 2, …, 32, которые определены следующим образом:
Ci = L(Vec128(i)), i = 1, 2, …, 32.
L(a) = R16(a), где a ∈ V128.
R(a) = R(a15||…||a0) = ℓ(a15, …, a0)||a15||…||a1, где a = a15||…||a0∈ V128, ai∈ V8, i = 0, 1, …, 15.
ℓ (a15, …, a0 ) = ∇(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)).
В ходе реализации шифра «Кузнечик», был сгенерированиспользуемый набор констант(табл. 1) [3, 168].. В табл. 1 каждая строка представляет собой 16 байт константы Сi в шестнадцатиричном виде, где i-номер константы. Крайняя левая ячейка строки представляет собой старший байт.Согласно спецификации шифра, данный набор остается неизменным, независимо от входных данных и ключа.
Таблица 1. Константы
С1 |
6e |
a2 |
76 |
72 |
6c |
48 |
7a |
b8 |
5d |
27 |
bd |
10 |
dd |
84 |
94 |
1 |
С2 |
dc |
87 |
ec |
e4 |
d8 |
90 |
f4 |
b3 |
ba |
4e |
b9 |
20 |
79 |
cb |
eb |
2 |
С3 |
b2 |
25 |
9a |
96 |
b4 |
d8 |
8e |
e7 |
69 |
4 |
30 |
a4 |
4f |
7f |
3 |
|
С4 |
7b |
cd |
1b |
73 |
e3 |
2b |
a5 |
b7 |
9c |
b1 |
40 |
f2 |
55 |
15 |
4 |
|
С5 |
15 |
6f |
6d |
79 |
1f |
ab |
51 |
1d |
ea |
c |
50 |
2f |
d1 |
81 |
5 |
|
С6 |
a7 |
4a |
f7 |
ef |
ab |
73 |
df |
16 |
d |
d2 |
8 |
60 |
8b |
9e |
fe |
6 |
С7 |
c9 |
e8 |
81 |
9d |
c7 |
3b |
a5 |
ae |
50 |
f5 |
b5 |
70 |
56 |
1a |
6a |
7 |
С8 |
f6 |
59 |
36 |
16 |
e6 |
5 |
56 |
89 |
ad |
fb |
a1 |
80 |
27 |
aa |
2a |
8 |
С9 |
fb |
98 |
40 |
64 |
8a |
4d |
2c |
31 |
f0 |
dc |
1c |
90 |
fa |
2e |
be |
9 |
С10 |
2a |
de |
da |
f2 |
3e |
95 |
a2 |
3a |
17 |
b5 |
18 |
a0 |
5e |
61 |
c1 |
a |
С11 |
44 |
7c |
ac |
80 |
52 |
dd |
d8 |
82 |
4a |
92 |
a5 |
b0 |
83 |
e5 |
55 |
|
С12 |
8d |
94 |
2d |
1d |
95 |
e6 |
7d |
2c |
1a |
67 |
10 |
c0 |
d5 |
ff |
3f |
c |
С13 |
e3 |
36 |
5b |
6f |
f9 |
ae |
7 |
94 |
47 |
40 |
ad |
d0 |
8 |
7b |
ab |
d |
С14 |
51 |
13 |
c1 |
f9 |
4d |
76 |
89 |
9f |
a0 |
29 |
a9 |
e0 |
ac |
34 |
d4 |
e |
С15 |
3f |
b1 |
b7 |
8b |
21 |
3e |
f3 |
27 |
fd |
e |
14 |
f0 |
71 |
b0 |
40 |
f |
С16 |
2f |
b2 |
6c |
2c |
f |
a |
ac |
d1 |
99 |
35 |
81 |
c3 |
4e |
97 |
54 |
10 |
С17 |
41 |
10 |
1a |
5e |
63 |
42 |
d6 |
69 |
c4 |
12 |
3c |
d3 |
93 |
13 |
c0 |
11 |
С18 |
f3 |
35 |
80 |
c8 |
d7 |
9a |
58 |
62 |
23 |
7b |
38 |
e3 |
37 |
5c |
bf |
12 |
С19 |
9d |
97 |
f6 |
ba |
d2 |
22 |
da |
7e |
5c |
85 |
f3 |
ea |
d8 |
2b |
13 |
|
С20 |
54 |
7f |
77 |
27 |
7c |
e9 |
87 |
74 |
2e |
a9 |
30 |
83 |
bc |
c2 |
41 |
14 |
С21 |
3a |
dd |
1 |
55 |
10 |
a1 |
fd |
cc |
73 |
8e |
8d |
93 |
61 |
46 |
d5 |
15 |
С22 |
88 |
f8 |
9b |
c3 |
a4 |
79 |
73 |
c7 |
94 |
e7 |
89 |
a3 |
c5 |
9 |
aa |
16 |
С23 |
e6 |
5a |
ed |
b1 |
c8 |
31 |
9 |
7f |
c9 |
c0 |
34 |
b3 |
18 |
8d |
3e |
17 |
С24 |
d9 |
eb |
5a |
3a |
e9 |
f |
fa |
58 |
34 |
ce |
20 |
43 |
69 |
3d |
7e |
18 |
С25 |
b7 |
49 |
2c |
48 |
85 |
47 |
80 |
e0 |
69 |
e9 |
9d |
53 |
b4 |
b9 |
ea |
19 |
С26 |
5 |
6c |
b6 |
de |
31 |
9f |
e |
eb |
8e |
80 |
99 |
63 |
10 |
f6 |
95 |
1a |
С27 |
6b |
ce |
c0 |
ac |
5d |
d7 |
74 |
53 |
d3 |
a7 |
24 |
73 |
cd |
72 |
1 |
1b |
С28 |
a2 |
26 |
41 |
31 |
9a |
ec |
d1 |
fd |
83 |
52 |
91 |
3 |
9b |
68 |
6b |
1c |
С29 |
cc |
84 |
37 |
43 |
f6 |
a4 |
ab |
45 |
de |
75 |
2c |
13 |
46 |
ec |
ff |
1d |
С30 |
7e |
a1 |
ad |
d5 |
42 |
7c |
25 |
4e |
39 |
1c |
28 |
23 |
e2 |
a3 |
80 |
1e |
С31 |
10 |
3 |
db |
a7 |
2e |
34 |
5f |
f6 |
64 |
3b |
95 |
33 |
3f |
27 |
14 |
1f |
С32 |
5e |
a7 |
d8 |
58 |
1e |
14 |
9b |
61 |
f1 |
6a |
c1 |
45 |
9c |
ed |
a8 |
20 |
В ходе исследования шифра была выявлена взаимосвязь между константами, которая отображает свойства работы функции L. Далее приведена таблица (табл. 2), в которой каждая строка – набор позиций элементов из списка констант, получившихся при сложении по модулю 2 константы с индексом данной строки и константы с индексом элемента в этой строке. Если в результате получается строка, отсутствующая в списке констант – добавляется «?», если константа складывается по модулю 2 сама с собой – «0»
Таким образом, из табл. 2 следует, что при сложении по модулю 2 первой и второй константы в результате получается третья, то естьС1 xor С2 = С3. Как видно из таблицы, в каждой строке и между соседними строками появляются зачастую четко просматривающиеся закономерности. Исключением является 32-я строка, соответствующая поочередному сложению по модулю 2 32-й константы со всеми предыдущими.
Дальнейшее исследование показало, что если в качестве исходных данных для генерации константы использовать произвольный набор байтов, зависимости между константами исчезают.
Таблица 2. Сложение констант по модулю 2.
Подобное поведение произвольной строки подтверждает, что зависимости в наборе констант появляются исключительно благодаря тому, что изначально меняется только один байт, а остальные остаются равными нулю. Это наглядно отражает свойство используемой функции:
L(axorb) = L(a)xor L(b)
Выявленные свойства будут направлены на поиск возможности практического применения полученных данных для реализации слайдовой атаки на шифр [4, 192], а именно на поиск циклически повторяющихся раундовых подключей.
Работа выполнена при поддержке гранта РФФИ №15-37-20007-мол_а_вед.
Литература:
1. Р 34.12-2015 - Блочные шифры. URL: http://www.tc26.ru/standard/ gost/GOST_R_3412-2015.pdf
2. Сайт «Infotecs», пресс-центр. URL: http://infotecs.ru/press/news/15/14508/
3. Бабенко Л.К., Ищукова Е.А., Ломов И.С.Математическое моделирование криптографического алгоритма «Кузнечик»//Информационное противодействие угрозам терроризма. 2015. № 24. С. 166-176.
4. БабенкоЛ. К., Ищукова Е. А. Современные алгоритмы блочного шифрования и методы их анализа - М.: Гелиос-АРВ, 2006 - 376.