Описание IDEA
Схема IDEA представлена на Рис. 13-9. 64-битовый блок данных делится на четыре 16-битовых подблока: X1, X2, X3 и X4. Эти четыре подблока становятся входными данными для первого этапа алгоритма. Всего в алгоритме восемь этапов. На каждом этапе четыре подблока подвергаются операциям XOR, сложениям и умножениям друг с другом и с шестью 16-битовыми подключами. Между этапами обмениваются местами второй и третий подблоки. Наконец четыре подблока объединяются с четырьмя подключами в окончательном преобразовании. На каждом этапе события происходят в следующей последовательности:
-
Перемножаются X1 и первый подключ.
-
Складываются X2 и второй подключ.
-
Складываются X3 и третий подключ.
-
Перемножаются X4 и четвертый подключ.
-
Выполняется XOR над результатами этапов (1) и (3).
-
Выполняется XOR над результатами этапов (2) и (4).
-
Перемножаются результаты этапа (5) и пятый подключ.
-
Складываются результаты этапов (6) и (7).
-
Перемножаются результаты этапа (8) и шестой подключ.
-
Складываются результаты этапов (7) и (9).
-
Выполняется XOR над результатами этапов (1) и (9).
-
Выполняется XOR над результатами этапов (3) и (9).
-
Выполняется XOR над результатами этапов (1) и (10).
-
Выполняется XOR над результатами этапов (4) и (10).
Рис. 13-9. IDEA.
Выходом этапа являются четыре подблока - результаты действий (11), (12), (13) и (14). Поменяйте местами два внутренних подблока (но не в последнем этапе), и вы получите исходные данные для следующего этапа.
После восьмого этапа выполняется заключительное преобразование:
-
Перемножаются Xl и первый подключ.
-
Складываются X2 и второй подключ.
-
Складываются X3 и третий подключ.
-
Перемножаются X4 и четвертый подключ.
Наконец четыре подблока снова соединяются, образуя шифротекст.
Также несложно создавать подключи. Алгоритм использует 52 из них (шесть для каждого из восьми этапов и еще четыре для заключительного преобразования). Сначала 128-битовый ключ делится на восемь 16-битовых подключей. Это первые восемь подключей алгоритма (шесть для первого этапа и два - для второго). Затем ключ циклически сдвигается налево на 25 битов и снова делится на восемь подключей. Первые четыре используются на этапе 2, а оставшиеся четыре - на этапе 3. Ключ циклически сдвигается налево на 25 битов для получения следующих восьми подключей, и так до конца алгоритма.
Дешифрирование выполняется точно также за исключением того, что подключи инвертируются и слегка изменяются. Подключи при дешифрировании представляют собой обратные значения ключей шифрования по отношению к операциям либо сложения, либо умножения. (Для IDEA подблоки, состоящие из одних нулей, считаются равными 216 = -1 для умножения по модулю 216 + 1, следовательно, обратным значением 0 относительно умножения является 0.) Эти вычисления могут занять некоторое время, но их нужно выполнить один раз для каждого ключа дешифрирования. В Табл. 13-4 представлены подключи шифрования и соответствующие подключи дешифрирования.
Табл. 13-4.
Подключи шифрования и дешифрирования IDEA
Этап |
Подключи шифрования |
Подключи дешифрирования |
1 |
Z1(1) |
Z2(1) |
Z3(1) |
Z4(1) |
Z5(1) |
Z6(1) |
Z1(9)-1 |
-Z2(9) |
-Z3(9) |
Z4(9)-1 |
Z5(8) |
Z6(8) |
|
2 |
Z1(2) |
Z2(2) |
Z3(2) |
Z4(2) |
Z5(2) |
Z6(2) |
Z1(8)-1 |
-Z2(8) |
-Z3(8) |
Z4(8)-1 |
Z5(7) |
Z6(7) |
|
3 |
Z1(3) |
Z2(3) |
Z3(3) |
Z4(3) |
Z5(3) |
Z6(3) |
Z1(7)-1 |
-Z2(7) |
-Z3(7) |
Z4(7)-1 |
Z5(6) |
Z6(6) |
|
4 |
Z1(4) |
Z2(4) |
Z3(4) |
Z4(4) |
Z5(4) |
Z6(4) |
Z1(6)-1 |
-Z2(6) |
-Z3(6) |
Z4(6)-1 |
Z5(5) |
Z6(5) |
|
5 |
Z1(5) |
Z2(5) |
Z3(5) |
Z4(5) |
Z5(5) |
Z6(5) |
Z1(5)-1 |
-Z2(5) |
-Z3(5) |
Z4(5)-1 |
Z5(4) |
Z6(4) |
|
6 |
Z1(6) |
Z2(6) |
Z3(6) |
Z4(6) |
Z5(6) |
Z6(6) |
Z1(4)-1 |
-Z2(4) |
-Z3(4) |
Z4(4)-1 |
Z5(3) |
Z6(3) |
|
7 |
Z1(7) |
Z2(7) |
Z3(7) |
Z4(7) |
Z5(7) |
Z6(7) |
Z1(3)-1 |
-Z2(3) |
-Z3(3) |
Z4(3)-1 |
Z5(2) |
Z6(2) |
|
8 |
Z1(8) |
Z2(8) |
Z3(8) |
Z4(8) |
Z5(8) |
Z6(8) |
Z1(2)-1 |
-Z2(2) |
-Z3(2) |
Z4(2)-1 |
Z5(1) |
Z6(1) |
|
заключительное преобразование |
Z1(9) |
Z2(9) |
Z3(9) |
Z4(9) |
Z1(1)-1 |
-Z2(1) |
-Z3(1) |
Z4(1)-1 |