В январе 2006 года был рассекречен, созданный профессором Лю Шу-Ваном, алгоритм блочного шифрования SM4. Используется в Китае как национальный стандарт для беспроводных локальных сетей. Именно поэтому исследования, связанные с анализом SM4 актуальны и продолжаются до сих пор. С момента создания алгоритма, к нему было применено множество методов анализа, но приемлемый на практике результат для полного алгоритма так и не был получен. Исключение, пожалуй, составил только дифференциальный анализ, основанный на использовании атаки по ошибкам вычислений, но допущения, используемые в нем, проблематично реализовать вне рамок исследования. Поэтому вопрос о возможности применения тех или иных подходов к анализу SM4 остается открытым.
После выхода стандарта GM/T 0002-2012 SM4 Block Cipher Algorithm 21 марта 2012, года алгоритм был официально переименован в SM4
Параметры исходных данных
Обозначим исходный блок, размер которого составляет 128 бит, как M. Исходный блок делится на четыре 32-битных элемента, для удобства называемых словами. M = (, , , ), или M = (i = 0, 1, 2, 3).
Размер ключа так же составляет 128 бит и он так же разделен на 4 слова. MK = (, , , ), или (i = 0, 1, 2, 3).
Раундовые ключи имеют вид:
(rk0, rk1, . . . , rk31), где каждое rki(i = 0, . . . , 31) является словом.
Процесс образования раундовых ключей будет рассмотрен ниже.
Функция F
Далее, в виде сети Фейстеля, на рис. 1, представлен один раунд шифрования, по сути, являющийся функцией F:
RKi
T
Рис.1 – Схема одного раунда шифрования SM4
В этой функции используются только операции типа XOR, кругового сдвига и приложения S-Box. Выполняется 32 раунда для обработки одного блока. Каждый раунд обновляет четверть текущего состояния блока – одно слово(32 бита).
F(, , , , rk) = ⊕ T( ⊕ ⊕ ⊕ rk)
Смешанная подстановка T
Эта подстановка не меняет длину входного блока(преобразует 32 бита в 32 бита). Является обратимой. Состоит из нелинейной подстановки, τ, и линейной подстановки L. Таким образом:
T(.) = L(τ (.)).
Нелинейная подстановка τ.
Обрабатывает 4 S-box одновременно, исходя из длины слова и длины входного блока для S-box – 8 бит. В таком случае, если входное слово обозначить как A = (, , , ), а выходное как B = (, , , ), то:
(, , , ) = τ (A) = (Sbox(), Sbox(), Sbox(), Sbox()).
Значения S-box указаны в Таблице 1. Все числа в S-box представлены в шестнадцатеричной записи[4]:
Таблица 1 – S-box
_ |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
a |
С |
d |
e |
F |
|
0 |
d6 |
90 |
e9 |
fe |
Cc |
e1 |
3d |
b7 |
16 |
b6 |
14 |
c2 |
28 |
fb |
2c |
05 |
1 |
2b |
67 |
9a |
76 |
2a |
be |
04 |
c3 |
aa |
44 |
13 |
26 |
49 |
86 |
06 |
99 |
2 |
9c |
42 |
50 |
f4 |
91 |
ef |
98 |
7a |
33 |
54 |
0b |
43 |
ed |
cf |
ac |
62 |
3 |
e4 |
b3 |
1c |
a9 |
c9 |
08 |
e8 |
95 |
80 |
df |
94 |
fa |
75 |
8f |
3f |
a6 |
4 |
47 |
07 |
a7 |
fc |
f3 |
73 |
17 |
ba |
83 |
59 |
3c |
19 |
e6 |
85 |
4f |
a8 |
5 |
68 |
6b |
81 |
b2 |
71 |
64 |
da |
8b |
f8 |
eb |
0f |
4b |
70 |
56 |
9d |
35 |
6 |
1e |
24 |
0e |
5e |
63 |
58 |
d1 |
a2 |
25 |
22 |
7c |
3b |
01 |
21 |
78 |
87 |
7 |
d4 |
00 |
46 |
57 |
9f |
d3 |
27 |
52 |
4c |
36 |
02 |
e7 |
a0 |
c4 |
c8 |
9e |
8 |
ea |
bf |
8a |
d2 |
40 |
c7 |
38 |
b5 |
a3 |
f7 |
f2 |
ce |
f9 |
61 |
15 |
a1 |
9 |
e0 |
ae |
5d |
a4 |
9b |
34 |
1a |
55 |
ad |
93 |
32 |
30 |
f5 |
8c |
b1 |
e3 |
a |
1d |
f6 |
e2 |
2e |
82 |
66 |
ca |
60 |
c0 |
29 |
23 |
ab |
0d |
53 |
4e |
6f |
d5 |
db |
37 |
45 |
De |
fd |
8e |
2f |
03 |
ff |
6a |
72 |
6d |
6c |
5b |
51 |
|
c |
8d |
1b |
af |
92 |
dd |
bc |
7f |
11 |
d9 |
5c |
41 |
1f |
10 |
5a |
d8 |
|
d |
0a |
c1 |
31 |
88 |
a5 |
cd |
7b |
bd |
2d |
74 |
d0 |
12 |
b8 |
e5 |
b4 |
b0 |
e |
89 |
69 |
97 |
4a |
0c |
96 |
77 |
7e |
65 |
b9 |
f1 |
09 |
c5 |
6e |
c6 |
84 |
f |
18 |
f0 |
7d |
ec |
3a |
dc |
4d |
20 |
79 |
ee |
5f |
3e |
d7 |
cb |
39 |
48 |
Например, если на входе Sbox принимает значение «de», тогда по строке «d» и столбцу «e» получаем значение Sbox(«de») = «b4».
Линейная подстановка L.
Если слово В, являющееся выходом τ будет входным словом в L, тогда выходное слово после перестановки:
C = L(B) = B ⊕ (B