Учбово-методичний посібник для виконання лабораторних робіт з дисципліни „Основи теорії криптографії і криптоаналізу”, страница 35

Існуючі програмні реалізації алгоритму IDEA приблизно удвічі швидше реалізації алгоритму DES. Алгоритм IDEA шифрує дані на IBM РС/486 зі швидкістю 2,4 Мбіт/с. Реалізація IDEA на СВІС шифрує дані зі швидкістю 177 Мбіт/із при частоті 25 Мгц. Алгоритм IDEA запатентований у Європі і США[1].

В алгоритмі IDEA використовуються наступні математичні операції:

• порозрядне додавання по модулю 2 (операція XOR) і позначається як Å;

• додавання беззнакових цілих по модулю 216 (mod 65536); операція позначається як +;

• множення цілих по модулю (216+1) (mod 65537), що розглядаються як беззнакові цілі, за винятком того, що блок з 16 нулів розглядається як 216; операція позначається як *.

Всі операції виконуються над 16-бітовими підблоками. Ці три операції несумісні в тому розумінні, що:

• ніяка пара з цих трьох операцій не задовольняє асоціативному закону, наприклад а + (b Å с) Å (а + b) Å с;

• ніяка пара з цих трьох операцій не задовольняє дистрибутивному закону, наприклад: a + (b * с) Å (а + b) * (a + c).

Комбінування цих трьох операцій забезпечує комплексне перетворення входу, істотно утруднюючи криптоаналіз IDEA у порівнянні з DES, що базується винятково на операції XOR[1].

Позначення:

Xi – 16-бітовий підблок відкритого тексту, i = 1...4;

yi – 16-бітовий підблок шифртексту, i = 1...4;

Zj(r)- 16-бітовий підключ, j = 1..6, r=1..8;

Å – поразрядне додавання по модулю 2 (XOR) 16-бітових під блоків;

+ – додавання по модулю 216 16-бітових цілих;

(*) -множення по модулю (216+1) 16-бітових цілих (з нульовим підблоком, що відповідає 216.

64-бітовий блок даних поділяється на чотири 16-бітових підблока. Ці чотири підблока стають входом у перший цикл алгоритму. Усього виконується вісім циклів. Між циклами другий і третій підблоки міняються місцями. У кожному циклі має місце наступна послідовність операцій:

1.  (*) – множення підблока X1 і першого підключа.

2.  + – додавання підблока Х2 і другого підключа.

3.  + – додавання підблока Х3 і третього підключа.

4.  (*) – множення підблока Х4 і четвертого підключа.

5.  – додавання результатів кроків (1) і (3).

6.  – додавання результатів кроків (2) і (4).

7.  (*) – множення результату кроку (5) і п'ятого підключа.

8.  + – додавання результатів кроків (6) і (7).

9.  (*) – множення результату кроку (8) із шостим підключом.

10.  + – додавання результатів кроків (7) і (9).

11.  – додавання результатів кроків (1) і (9).

12.  – додавання результатів кроків (3) і (9).

13.  – додавання результатів кроків (2) і (10).

14.  – додавання результатів кроків (4) і (10).

Виходом циклу є чотири підблока, що одержують як результати виконання кроків (11), (12), (13) і (14). По завершенні циклу переставляють місцями два внутрішніх підблока (за винятком останнього циклу), і в результаті формується вхід для наступного циклу.

Після восьмого циклу здійснюють заключне перетворення виходу:

1.  (*) – множення підблока X1 і першого підключа.

2.  + – додавання підблока X2 і другого підключа.

3.  + – додавання підблока Х3 і третього підключа.

4.  (*) – множення підблока X4 і четвертого підключа.

Нарешті, ці результуючі чотири підблока Y1..Y4 знову поєднують для одержання блоку шифртексту.

Створення підключей Zj також відносно нескладна операція. Алгоритм використовує всього 52 підключа (по шість для кожного з восьми циклів і ще чотири для перетворення виходу). Спочатку 128-бітовий ключ поділяють на вісім 16-бітових підключів. Це – перші вісім підключів для алгоритму (шість підключів – для першого циклу і перші два підключа – для другого циклу). Потім 128-бітовий ключ циклічно зрушується вліво на 25 біт і знову поділяється на вісім підключів. Перші чотири з них використовують у другому циклі; останні чотири – у третьому циклі. Ключ знову циклічно зрушується вліво ще на 25 біт для одержання наступних восьми підключів і т.д., поки виконання алгоритму не завершиться.[5]

Розшифрування здійснюють аналогічним чином, за винятком того, що порядок використання підключів стає зворотним, причому ряд значень підключів заміняється на зворотні значення. Підключі розшифрування є в основному або адітивними, або мультиплікативними зворотними величинами підключів шифрування (табл. 7.1).

Таблиця 7.1. Підключі шифрування і розшифрування алгоритму 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(8) Z6(8)

3

Z1(3) Z2(3) Z3(3) Z4(3) Z5(3) Z6(3)

Z1(7)-1 -Z2(7) -Z3(7) Z4(7)-1 Z5(7) Z6(7)

4

Z1(4) Z2(4) Z3(4) Z4(4) Z5(4) Z6(4)

Z1(6)-1 -Z2(6) -Z3(6) Z4(6)-1 Z5(6) Z6(6)

5

Z1(5) Z2(5) Z3(5) Z4(5) Z5(5) Z6(5)

Z1(5)-1 -Z2(5) -Z3(5) Z4(5)-1 Z5(5) Z6(5)

6

Z1(6) Z2(6) Z3(6) Z4(6) Z5(6) Z6(6)

Z1(4)-1 -Z2(4) -Z3(4) Z4(4)-1 Z5(4) Z6(4)

7

Z1(7) Z2(7) Z3(7) Z4(7) Z5(7) Z6(7)

Z1(3)-1 -Z2(3) -Z3(3) Z4(3)-1 Z5(3) Z6(3)

8

Z1(8) Z2(8) Z3(8) Z4(8) Z5(8) Z6(8)

Z1(2)-1 -Z2(2) -Z3(2) Z4(2)-1 Z5(2) Z6(2)

Вихід

Z1(9) Z2(9) Z3(9) Z4(9)

Z1(1)-1 -Z2(1) -Z3(1) Z4(1)-1

Для реалізації алгоритму IDEA було прийняте припущення, що нульовий підблок дорівнює 216 –1; при цьому мультиплікативна зворотна величина від 0 дорівнює 0. Обчислення значень мультиплікативних зворотних величин вимагає деяких витрат часу, але це доводиться робити тільки один раз для кожного підключа розшифрування.

Алгоритм IDEA може працювати в будь-якому режимі блокового шифру, передбаченому для алгоритму DES. Алгоритм IDEA має кілька переваг перед алгоритмом DES. Він значно безпечніше алгоритму DES, оскільки 128-бітовий ключ алгоритму IDEA удвічі більше ключа DES. Внутрішня структура алгоритму IDEA забезпечує кращу стійкість до криптоаналізу[1].