Опис алгоритму
Для шифрування, розшифрування і генерації ключа використовуються наступні функції:
, де
,
— двійкові рядки виду
…
(
— символ конкатенації рядків).
…
— зворотнє до
перетворення.
…
…
— зворотнє до
перетворення, при чому
…
…
, де
— композиція перетворень
і
і т. д.
Нелінійне перетворення
Нелінійне перетворення задається підстановкою S = Bin8 S' Bin8−1.
Значення підстановки S' задані у вигляді масиву S' = (S'(0), S'(1), …, S'(255)):
![{\displaystyle 104,162,253,58,206,204,181,112,14,86,8,12,118,18,191,114,19,71,156,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7f8be0b93f898fe37ba55c37d2ab9c54660d446a)
![{\displaystyle }](https://wikimedia.org/api/rest_v1/media/math/render/svg/df4dcd61276328f7c7ec5bdc399b6e11114a2c68)
Лінійне перетворення
Задається відображенням
:
…
де операції додавання і множення здійснюються в полі
.
Генерація ключа
Алгоритм генерації ключа використовує ітераційні константи
, 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-перетворення
Приклад генерації ключа
…
У підсумку отримуємо ітераційні ключі:
Приклад алгоритму шифрування
Відкритий текст