IDEA (шифр): відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
LifeDJIK (обговорення | внесок)
Entry1337 (обговорення | внесок)
Функція пропозицій посилань: додано 3 посилання.
 
(Не показано 42 проміжні версії 28 користувачів)
Рядок 1: Рядок 1:
{{Refimprove|дата=листопад 2017}}
{{Otheruses|IDEA}}
{{Картка блочного шифру
{{Картка блочного шифру
|назва = IDEA
|назва = IDEA
|зображення = [[Файл:International Data Encryption Algorithm InfoBox Diagram.png|250пкс|]]
|зображення = [[Файл:International Data Encryption Algorithm InfoBox Diagram.svg|250пкс|]]
|розробник = Швейцарська фірма [[Ascom]]
|розробник = Швейцарська фірма [[Ascom]]
|створений = [[1991]] р.
|створений = [[1991]] р.
Рядок 10: Рядок 12:
|тип = модифікована [[мережа Фейстеля]]}}
|тип = модифікована [[мережа Фейстеля]]}}


'''IDEA''' ({{lang-en | '''I'''nternational '''D'''ata '''E'''ncryption '''A'''lgorithm}}, міжнародний алгоритм шифрування даних) — [[Симетричні криптосистеми|симетричний]] [[Блоковий шифр|блочний]] [[алгоритм]] [[криптографія|шифрування]] [[дані|даних]], [[патент|запатентований]] швейцарською фірмою [[Ascom]]. Відомий тим, що застосовувався в пакеті програм шифрування [[PGP]]. У листопаді [[2000]]року IDEA був представлений в якості кандидата в проекті [http://www.cryptonessie.org/ NESSIE] в рамках програми Європейської комісії IST ({{lang-en | Information Societes Technology}}, інформаційні громадські технології).
'''IDEA''' ({{lang-en | '''I'''nternational '''D'''ata '''E'''ncryption '''A'''lgorithm}}, міжнародний алгоритм шифрування даних) — [[Шифрування з симетричними ключами|симетричний]] [[Блоковий шифр|блоковий]] [[алгоритм]] [[криптографія|шифрування]] [[дані|даних]], [[патент|запатентований]] швейцарською фірмою [[Ascom]]. Відомий тим, що застосовувався в пакеті програм шифрування [[PGP]]. У листопаді [[2000 ]]року IDEA був представлений як кандидат у проекті [https://web.archive.org/web/20121123075827/http://www.cryptonessie.org/ NESSIE] в рамках програми [[Європейська комісія|Європейської комісії]] IST ({{lang-en | Information Societes Technology}}, інформаційні громадські технології).


== Історія ==
== Історія ==
Першу версію алгоритму розробили в [[1990]]році [[Лай Сюецзя]] (''Xuejia Lai'') і Джеймс Мессі (''James Massey'') зі Швейцарського інституту [[ETH Zürich]] (за контрактом з [[Hasler Foundation]], яка пізніше влилася в Ascom-Tech AG) в якості заміни [[Data Encryption Standard|DES]] ({{lang-en | Data Encryption Standard}}, стандарт шифрування даних) і назвали її PES ({{lang-en | Proposed Encryption Standard}}, запропонований стандарт шифрування). Потім, після публікації робіт Біхамом і Шаміра по [[диференціальний криптоаналіз|диференціальному криптоанализу]] PES, алгоритм був поліпшений з метою посилення [[криптографічна стійкість|криптостійкості]] і названий IPES ({{lang-en | Improved Proposed Encryption Standard}}, покращений запропонований стандарт шифрування). Через рік його перейменували в IDEA ({{lang-en | International Data Encryption Algorythm}}).
Першу версію алгоритму розробили в [[1990]]році [[Лай Сюецзя]] (''Xuejia Lai'') і Джеймс Мессі (''James Massey'') зі Швейцарського інституту [[ETH Zürich]] (за контрактом з [[Hasler Foundation]], яка пізніше влилася в Ascom-Tech AG) як заміна [[Data Encryption Standard|DES]] ({{lang-en | Data Encryption Standard}}, стандарт шифрування даних) і назвали її PES ({{lang-en | Proposed Encryption Standard}}, запропонований стандарт шифрування). Потім, після публікації робіт Біхамом і Шаміра по [[диференціальний криптоаналіз|диференціальному криптоанализу]] PES, алгоритм був поліпшений з метою посилення [[криптографічна стійкість|криптостійкості]] і названий IPES ({{lang-en | Improved Proposed Encryption Standard}}, покращений запропонований стандарт шифрування). Через рік його перейменували в IDEA ({{lang-en | International Data Encryption Algorythm}}).


== Опис ==
== Опис ==
Так як IDEA використовує 128-бітний [[ключ (криптографія)|ключ]] і 64-бітний [[Блочний шифр|розмір блоку]], відкритий текст розбивається на блоки по 64 біт. Якщо таке розбиття неможливо, останній блок доповнюється різними способами певною послідовністю біт. Для уникнення витоку інформації про кожному окремому блоці використовуються різні [[режим шифрування|режими шифрування]]. Кожен вихідний незашифрований 64 — [[біт]] ний блок ділиться на чотири подблока по 16 біт кожен, так як всі алгебраїчні операції, що використовуються в процесі шифрування, відбуваються над 16-бітними числами. Для шифрування і розшифрування IDEA використовує один і той же алгоритм.
Так як IDEA використовує 128-бітний [[ключ (криптографія)|ключ]] і 64-бітний [[Блочний шифр|розмір блоку]], [[відкритий текст]] розбивається на блоки по 64 біт. Якщо таке розбиття неможливо, останній блок доповнюється різними способами певною послідовністю біт. Для уникнення витоку інформації про кожному окремому блоці використовуються різні [[Режими блокового шифрування|режими шифрування]]. Кожен вихідний незашифрований 64 — [[біт]] ний блок ділиться на чотири підблока по 16 біт кожен, так як всі алгебраїчні операції, що використовуються в процесі шифрування, відбуваються над 16-бітними числами. Для шифрування і розшифрування IDEA використовує один і той же алгоритм.

[[Файл:Operations.png|міні|праворуч|200пкс|Використовувані позначення операцій]]


{|class="wikitable" style="{{float_right}} width: 280px;"
|+Позначення операцій
|-
|<big>{{Font color|green|⊞}}</big> || Додавання по модулю {{math|2<sup>16</sup>}}
|-
|<big>{{Font color|red|⊙}}</big> || Множення по модулю {{math|2<sup>16</sup>+1}}
|-
|<big>{{Font color|blue|⊕}}</big> || Побітова [[виключна диз'юнкція]]
|}
Фундаментальним нововведенням в алгоритмі є використання операцій з різних алгебраїчних [[група (математика)|груп]], а саме:
Фундаментальним нововведенням в алгоритмі є використання операцій з різних алгебраїчних [[група (математика)|груп]], а саме:
* [[Додавання]] по модулю <math> 2 ^ {16} </math>
* [[Додавання]] по модулю <math> 2 ^ {16} </math>
* [[Множення]] по модулю <math> 2 ^ {16} + 1 </math>
* [[Множення]] по модулю <math> 2 ^ {16} + 1 </math>
* Побітове [[виключає АБО]] ([[XOR]]).
* Побітова [[виключна диз'юнкція]] (XOR).
Ці три операції несумісні в тому сенсі, що:
Ці три операції несумісні в тому сенсі, що ніякі дві з них не задовольняють [[Дистрибутивність|дистрибутивному закону]], тобто <math>a \odot (b \oplus c) \ \neq \ (a \odot b) \oplus (a \odot c) </math>
<!-- Якась дурниця, бо асоціативність стосується _однієї_ операції і для XOR це виконується, тобто і «дві», і «ніякі» не підходить
* Ніякі дві з них не задовольняють дистрибутивному закону, тобто <math> a * (b + c) \ <> \ (a * b) + (a * c) </math>
* Ніякі дві з них не задовольняють асоціативному закону, тобто <math> a + (b \oplus c) \ <> \ (a + b) \oplus c </math>
* Ніякі дві з них не задовольняють асоціативному закону, тобто <math> a + (b \oplus c) \ <> \ (a + b) \oplus c </math> -->
Застосування цих трьох операцій ускладнює криптоаналіз IDEA в порівнянні з [[DES]], який базується виключно на операції [[виключає АБО]], а також дозволяє відмовитися від використання S-блоків і таблиць заміни. IDEA є модифікацією [[мережа Фейстел|мережі Фейстел]].
Застосування цих трьох операцій ускладнює криптоаналіз IDEA в порівнянні з [[DES]], який базується виключно на операції [[Виключна диз'юнкція|виключає АБО]], а також дозволяє відмовитися від використання S-блоків і таблиць заміни. IDEA є модифікацією [[Мережа Фейстеля|мережі Фейстеля]].


=== Генерація ключів ===
=== Генерація ключів ===
З 128-бітного ключа для кожного з восьми [[Раунд (кріптографія)|раундів]] шифрування генерується по шість 16-бітних подключів, а для вихідного перетворення генерується чотири 16-бітних підключа. Всього буде потрібно 52 = 8 x 6 + 4 різних подключів по 16 біт кожен. Процес генерації п'ятдесяти двох 16-бітних ключів полягає в наступному:
З 128-бітного ключа для кожного з восьми [[Раунд (криптографія)|раундів]] шифрування генерується по шість 16-бітних подключів, а для вихідного перетворення генерується чотири 16-бітних підключа. Всього буде потрібно 52 = 8 x 6 + 4 різних подключів по 16 біт кожен. Процес генерації п'ятдесяти двох 16-бітних ключів полягає в наступному:
* Насамперед, 128-бітний ключ розбивається на вісім 16-бітних блоків. Це будуть перші вісім подключів по 16 біт кожен — <math> (K_1 ^ {(1)} K_2 ^ {(1)} K_3 ^ {(1)} K_4 ^ {(1)} K_5 ^ {(1)} K_6 ^ {(1)} K_1 ^ {(2)} K_2 ^ {(2)}) </math>
* Насамперед, 128-бітний ключ розбивається на вісім 16-бітних блоків. Це будуть перші вісім подключів по 16 біт кожен&nbsp;— <math> (K_1 ^ {(1)} K_2 ^ {(1)} K_3 ^ {(1)} K_4 ^ {(1)} K_5 ^ {(1)} K_6 ^ {(1)} K_1 ^ {(2)} K_2 ^ {(2)}) </math>
* Потім цей 128-бітний ключ циклічно зсувається вліво на 25 позицій, після чого новий 128-бітний блок знову розбивається на вісім 16-бітних блоків. Це вже наступні вісім подключів по 16 біт кожен — <math> (K_3 ^ {(2)} K_4 ^ {(2)} K_5 ^ {(2)} K_6 ^ {(2)} K_1 ^ {(3)} K_2 ^ {(3)} K_3 ^ {(3)} K_4 ^ {(3)}) </math>
* Потім цей 128-бітний ключ циклічно зсувається вліво на 25 позицій, після чого новий 128-бітний блок знову розбивається на вісім 16-бітних блоків. Це вже наступні вісім подключів по 16 біт кожен&nbsp;— <math> (K_3 ^ {(2)} K_4 ^ {(2)} K_5 ^ {(2)} K_6 ^ {(2)} K_1 ^ {(3)} K_2 ^ {(3)} K_3 ^ {(3)} K_4 ^ {(3)}) </math>
* Процедура циклічного зсуву і розбивки на блоки триває до тих пір, поки не будуть згенеровані всі 52 16-бітних підключа.
* Процедура циклічного зсуву і розбивки на блоки триває до тих пір, поки не будуть згенеровані всі 52 16-бітних підключа.


{| border="1" class="standard"
{| border="1" class="standard"
|+ Таблиця підключів для каждого [[Раунд (криптографія)|раундів]]
|+Таблиця підключів для кожного [[Раунд (криптографія)|раунду]]
!Номер [[Раунд (криптографія)|раунда]]
!Номер [[Раунд (криптографія)|раунду]]
!Підключі
!Підключі
|-
|-
Рядок 64: Рядок 73:
|<math>K_1^{(8)}K_2^{(8)}K_3^{(8)}K_4^{(8)}K_5^{(8)}K_6^{(8)}</math>
|<math>K_1^{(8)}K_2^{(8)}K_3^{(8)}K_4^{(8)}K_5^{(8)}K_6^{(8)}</math>
|-
|-
!Вихідне перетворення
!выходное преобразование
|<math>K_1^{(9)}K_2^{(9)}K_3^{(9)}K_4^{(9)}</math>
|<math>K_1^{(9)}K_2^{(9)}K_3^{(9)}K_4^{(9)}</math>
|}
|}


=== [[Шифрування]] ===
=== [[Шифрування]] ===
Структура алгоритму IDEA показана на малюнку. Процес [[шифрування]] складається з восьми однакових [[Раунд (кріптографія)|раундів]] шифрування і одного вихідного перетворення. Вихідний незашифрований текст ділиться на блоки по 64 біта. Кожен такий блок ділиться на чотири підблока по 16 біт кожен. На малюнку ці підблоки позначені <math> D_1 </math>, <math> D_2 </math>, <math> D_3 </math>, <math> D_4 </math>. У кожному [[Раунд (криптографія)|раунді]] використовуються свої підключі згідно з таблицею підключів. Над 16-бітними підключами і підблока незашифрованого тексту проводяться наступні операції:
Структура алгоритму IDEA показана на малюнку. Процес [[шифрування]] складається з восьми однакових [[Раунд (криптографія)|раундів]] шифрування і одного вихідного перетворення. Вихідний незашифрований текст ділиться на блоки по 64 біта. Кожен такий блок ділиться на чотири підблока по 16 біт кожен. На малюнку ці підблоки позначені <math> D_1 </math>, <math> D_2 </math>, <math> D_3 </math>, <math> D_4 </math>. У кожному [[Раунд (криптографія)|раунді]] використовуються свої підключі згідно з таблицею підключів. Над 16-бітними підключами і підблока незашифрованого тексту проводяться наступні операції:
* Множення по модулю <math> 2 ^ {16} + 1 </math> = 65537, причому замість нуля використовується <math> 2 ^ {16} </math>
* Множення по модулю <math> 2 ^ {16} + 1 </math> = 65537, причому замість нуля використовується <math> 2 ^ {16} </math>
* Додавання по модулю <math> 2 ^ {16} </math>
* Додавання по модулю <math> 2 ^ {16} </math>
* Побітове [[виключає АБО]]
* Побітове [[Виключна диз'юнкція|виключне АБО]]
В кінці кожного [[Раунд (кріптографія)|раунду]] шифрування є чотири 16-бітних підблока, які потім використовуються як вхідні підблоки для наступного [[Раунд (кріптографія)|раунду]] шифрування. Вихідна перетворення являє собою скорочений [[Раунд (кріптографія)|раунд]], а саме, чотири 16-бітних подблока на виході восьмого [[Раунд (кріптографія)|раунду]] і чотири відповідних підключа піддаються операціям:
В кінці кожного [[Раунд (криптографія)|раунду]] шифрування є чотири 16-бітних підблоки, які потім використовуються як вхідні підблоки для наступного [[Раунд (криптографія)|раунду]] шифрування. Вихідна перетворення являє собою скорочений [[Раунд (криптографія)|раунд]], а саме, чотири 16-бітних підблоки на виході восьмого [[Раунд (криптографія)|раунду]] і чотири відповідних підключа піддаються операціям:
* Множення по модулю <math> 2 ^ {16} + 1 </math>
* Множення по модулю <math> 2 ^ {16} + 1 </math>
* Додавання по модулю <math> 2 ^ {16} </math>
* Додавання по модулю <math> 2 ^ {16} </math>
Після виконання вихідного перетворення [[конкатенація]] підблоків <math> D_1 '</math>, <math> D_2' </math>, <math> D_3 '</math> і <math> D_4' </math> представляє собою зашифрований текст. Потім береться наступний 64-бітний блок незашифрованого тексту і алгоритм шифрування повторюється. Так продовжується до тих пір, поки не зашифрують всі 64-бітові блоки вихідного тексту.
Після виконання вихідного перетворення [[конкатенація]] підблоків <math> D_1 '</math>, <math> D_2' </math>, <math> D_3 '</math> і <math> D_4' </math> являє собою зашифрований текст. Потім береться наступний 64-бітний блок незашифрованого тексту і алгоритм шифрування повторюється. Так продовжується до тих пір, поки не зашифрують всі 64-бітові блоки вихідного тексту.


==== Математичний опис ====
==== Математичний опис ====
* Блок відкритого тексту розміром 64 біт ділиться на чотири рівні подблока розміром по 16 біт <math> (D_1 ^ {(0)}, D_2 ^ {(0)}, D_3 ^ {(0)}, D_4 ^ {(0) }) </math>
* Блок відкритого тексту розміром 64 біт ділиться на чотири рівні подблока розміром по 16 біт <math> (D_1 ^ {(0)}, D_2 ^ {(0)}, D_3 ^ {(0)}, D_4 ^ {(0) }) </math>
* Для кожного [[Раунд (в кріптографіі)|раунду]] <math> (i = 1 ... 8) </math> обчислюються:
* Для кожного [[Раунд (криптографія)|раунду]] <math> (i = 1 ... 8) </math> обчислюються:
<math>A^{(i)}\ =\ D_1^{(i-1)}*K_1^{(i)}</math><br />
: <math>A^{(i)}\ =\ D_1^{(i-1)}*K_1^{(i)}</math>
<math>B^{(i)}\ =\ D_2^{(i-1)}+K_2^{(i)}</math><br />
: <math>B^{(i)}\ =\ D_2^{(i-1)}+K_2^{(i)}</math>
<math>C^{(i)}\ =\ D_3^{(i-1)}+K_3^{(i)}</math><br />
: <math>C^{(i)}\ =\ D_3^{(i-1)}+K_3^{(i)}</math>
<math>D^{(i)}\ =\ D_4^{(i-1)}*K_4^{(i)}</math><br />
: <math>D^{(i)}\ =\ D_4^{(i-1)}*K_4^{(i)}</math>
<math>E^{(i)}\ =\ A^{(i)} \oplus C^{(i)}</math><br />
: <math>E^{(i)}\ =\ A^{(i)} \oplus C^{(i)}</math>
<math>F^{(i)}\ =\ B^{(i)} \oplus D^{(i)}</math><br />
: <math>F^{(i)}\ =\ B^{(i)} \oplus D^{(i)}</math>


<math>D_1^{(i)}\ =\ A^{(i)} \oplus ((F^{(i)} + E^{(i)}*K_5^{(i)})*K_6^{(i)})</math><br />
: <math>D_1^{(i)}\ =\ A^{(i)} \oplus ((F^{(i)} + E^{(i)}*K_5^{(i)})*K_6^{(i)})</math>
<math>D_2^{(i)}\ =\ C^{(i)} \oplus ((F^{(i)} + E^{(i)}*K_5^{(i)})*K_6^{(i)})</math><br />
: <math>D_2^{(i)}\ =\ C^{(i)} \oplus ((F^{(i)} + E^{(i)}*K_5^{(i)})*K_6^{(i)})</math>
<math>D_3^{(i)}\ =\ B^{(i)} \oplus (E^{(i)}*K_5^{(i)}+(F^{(i)} + E^{(i)}*K_5^{(i)})*K_6^{(i)})</math><br />
: <math>D_3^{(i)}\ =\ B^{(i)} \oplus (E^{(i)}*K_5^{(i)}+(F^{(i)} + E^{(i)}*K_5^{(i)})*K_6^{(i)})</math>
<math>D_4^{(i)}\ =\ D^{(i)} \oplus (E^{(i)}*K_5^{(i)}+(F^{(i)} + E^{(i)}*K_5^{(i)})*K_6^{(i)})</math><br />
: <math>D_4^{(i)}\ =\ D^{(i)} \oplus (E^{(i)}*K_5^{(i)}+(F^{(i)} + E^{(i)}*K_5^{(i)})*K_6^{(i)})</math>
Результатом виконання восьми раундів будуть наступні чотири подблока <math> (D_1 ^ {(8)}, D_2 ^ {(8)}, D_3 ^ {(8)}, D_4 ^ {(8)}) </math>
Результатом виконання восьми раундів будуть наступні чотири подблока <math> (D_1 ^ {(8)}, D_2 ^ {(8)}, D_3 ^ {(8)}, D_4 ^ {(8)}) </math>
* Виконується вихідна перетворення <math> (i = 9) </math>:
* Виконується вихідне перетворення <math> (i = 9) </math>:
<math>D_1^{(9)}\ =\ D_1^{(8)}*K_1^{(9)}</math>
: <math>D_1^{(9)}\ =\ D_1^{(8)}*K_1^{(9)}</math>
<br /><math>D_2^{(9)}\ =\ D_3^{(8)}+K_2^{(9)}</math>
: <math>D_2^{(9)}\ =\ D_3^{(8)}+K_2^{(9)}</math>
<br /><math>D_3^{(9)}\ =\ D_2^{(8)}+K_3^{(9)}</math>
: <math>D_3^{(9)}\ =\ D_2^{(8)}+K_3^{(9)}</math>
<br /><math>D_4^{(9)}\ =\ D_4^{(8)}*K_4^{(9)}</math><br />
: <math>D_4^{(9)}\ =\ D_4^{(8)}*K_4^{(9)}</math>

Результатом виконання вихідного перетворення є зашифрований текст <math> (D_1 ^ {(9)}, D_2 ^ {(9)}, D_3 ^ {(9)}, D_4 ^ {(9)}) </math>
Результатом виконання вихідного перетворення є зашифрований текст <math> (D_1 ^ {(9)}, D_2 ^ {(9)}, D_3 ^ {(9)}, D_4 ^ {(9)}) </math>


=== Розшифровка ===
=== Розшифрування ===
Метод обчислення, що використовується для розшифровки тексту по суті такий же, як і при його шифруванні. Єдина відмінність полягає в тому, що для розшифровки використовуються інші підключі. У процесі розшифровки підключі повинні використовуватися у зворотному порядку. Перший і четвертий підключі i-го раунду розшифровки виходять з першого і четвертого підключа (10-i)-го раунду шифрування мультиплікативною інверсією. Для 1-го та 9-го раундів другий і третій підключи розшифровки виходять з другого і третього подключів 9-го і 1-го раундів шифрування аддитивною інверсією. Для раундів з 2-го по 8-й другий і третій підключі розшифровки виходять з третього і другого подключів з 8-го по 2-й раундів шифрування аддитивною інверсією. Останні два підключа i-го раунду розшифровки рівні останніх двох підключів (9-i)-го раунду шифрування. Мультиплікативна інверсія підключа K позначається 1 / K і <math> (1 / K) * K = 1 \mod \ (2 ^ {16} +1) </math>. Так як <math> 2 ^ {16} +1 </math> — [[просте число]], кожне ціле не дорівнює нулю K має унікальну мультипликативну інверсію по модулю <math> 2 ^ {16} +1 </math> . Адитивна інверсія підключа K позначається-K і <math>-K + K = 0 \mod \ (2 ^ {16}) </math>.
Метод обчислення, що використовується для розшифровки тексту по суті такий же, як і при його шифруванні. Єдина відмінність полягає в тому, що для розшифровки використовуються інші підключі. У процесі розшифровки підключі повинні використовуватися у зворотному порядку. Перший і четвертий підключі i-го раунду розшифровки виходять з першого і четвертого підключа (10-i)-го раунду шифрування мультиплікативною інверсією. Для 1-го та 9-го раундів другий і третій підключи розшифровки виходять з другого і третього подключів 9-го і 1-го раундів шифрування аддитивною інверсією. Для раундів з 2-го по 8-й другий і третій підключі розшифровки виходять з третього і другого подключів з 8-го по 2-й раундів шифрування аддитивною інверсією. Останні два підключа i-го раунду розшифровки рівні останніх двох підключів (9-i)-го раунду шифрування. Мультиплікативна інверсія підключа K позначається 1 / K і <math> (1 / K) * K = 1 \mod \ (2 ^ {16} +1) </math>. Так як <math> 2 ^ {16} +1 </math>&nbsp;— [[просте число]], кожне ціле не дорівнює нулю K має унікальну мультипликативну інверсію по модулю <math> 2 ^ {16} +1 </math> . Адитивна інверсія підключа K позначається-K і <math>-K + K = 0 \mod \ (2 ^ {16}) </math>.


{| border="1" class="standard"
{| border="1" class="standard"
|+ Таблиця підключів для кожного раунда
|+Таблиця підключів для кожного раунду
!Номер раунда
!Номер раунду
!Підключі
!Підключі
|-
|-
Рядок 132: Рядок 142:
|<math>1/K_1^{(2)}\ -K_3^{(2)}\ -K_2^{(2)}\ 1/K_4^{(2)}\ K_5^{(1)}\ K_6^{(1)}</math>
|<math>1/K_1^{(2)}\ -K_3^{(2)}\ -K_2^{(2)}\ 1/K_4^{(2)}\ K_5^{(1)}\ K_6^{(1)}</math>
|-
|-
!вихідне перетворення
!Вихідне перетворення
|<math>1/K_1^{(1)}\ -K_2^{(1)}\ -K_3^{(1)}\ 1/K_4^{(1)}</math>
|<math>1/K_1^{(1)}\ -K_2^{(1)}\ -K_3^{(1)}\ 1/K_4^{(1)}</math>
|}
|}
Рядок 140: Рядок 150:


=== Приклад шифрування ===
=== Приклад шифрування ===
В якості 128-бітного ключа використовуємо'' K'' = (0001,0002,0003,0004,0005,0006,0007,0008), а в якості 64-бітного відкритого тексту'' M'' = (0000,0001, 0002,0003)
Як 128-бітний ключ використовуємо ''K'' = (0001,0002,0003,0004,0005,0006,0007,0008), а як 64-бітний відкритий текст ''M'' = (0000,0001, 0002,0003)


{| border="1" class="standard"
{| border="1" class="standard"
|+ Таблиця підключів і підблоків для кожного раунда
|+ Таблиця підключів і підблоків для кожного раунду
! rowspan=2 | Раунд
! rowspan=2 | Раунд
! colspan=6 | Раундові ключі
! colspan=6 | Раундові ключі
Рядок 272: Рядок 282:


=== Приклад розшифровки ===
=== Приклад розшифровки ===
В якості 128-бітного ключа використовуємо ''K'' = (0001,0002,0003,0004,0005,0006,0007,0008), а в якості 64-бітного зашифрованого тексту ''C'' = (11fb, ed2b, 0198,6 de5)
Як 128-бітного ключа використовуємо ''K'' = (0001,0002,0003,0004,0005,0006,0007,0008), а як 64-бітного зашифрованого тексту ''C'' = (11fb, ed2b, 0198,6 de5)
{| border="1" class="standard"
{| border="1" class="standard"
|+ Таблиця підключів та підблоків для кожного раунду
|+ Таблица подключей и подблоков для каждого раунда
! rowspan=2 | Раунд
! rowspan=2 | Раунд
! colspan=6 | Раундові ключі
! colspan=6 | Раундові ключі
Рядок 401: Рядок 411:


== Апаратна реалізація ==
== Апаратна реалізація ==
Апаратна реалізація має перед програмної наступні переваги:
Апаратна реалізація має такі переваги:
* '''Істотне підвищення швидкості шифрування''' за рахунок використання паралелізму при виконанні операцій
* '''Істотне підвищення швидкості шифрування''' за рахунок використання паралелізму при виконанні операцій
* '''Менше енергоспоживання'''
* '''Менше енергоспоживання'''
Перша реалізація алгоритму IDEA на [[інтегральна схема|інтегральній схемі]] ({{lang-en | Very Large Scale Integration}}) була розроблена і [[верифікація|верифікована]] Лаем, Мессі і Мерфі в [[1992 рік]] у з використанням технологічного процесу 1,5 мкм і технології [[КМОП]]
Перша реалізація алгоритму IDEA на [[інтегральна схема|інтегральній схемі]] ({{lang-en | Very Large Scale Integration}}) була розроблена і [[верифікація|верифікована]] Лаем, Мессі і Мерфі в [[1992 рік]] у з використанням технологічного процесу 1,5 мкм і технології [[КМОН]]
Швидкість шифрування даного пристрою складала 44 Мб / сек.
Швидкість шифрування даного пристрою становила 44 Мб / сек.


В [[1994 рік]] у Карігером, Бонненбергом, Зіммерманом та ін було розроблено пристрій VINCI. Швидкість шифрування даної реалізації IDEA становила 177 Мб / сек при тактовій частоті 25 МГц, техпроцес 1,2 мкм. Це було перше напівпровідниковий пристрій, який вже могло застосовуватися для шифрування в реальному часі в таких високошвидкісних [[мережеві протоколи|мережних протоколах]], як [[ATM (технологія)|ATM]] ({{lang-en|Asynchronous Transfer Mode}}, асинхронний режим передавання) або [[FDDI]] ({{lang-en|Fiber Distributed Data Interface}}, розподілений волоконний інтерфейс даних). Швидкість 177 Мб / сек була досягнута завдяки використанню досить витонченої схеми [[конвеєр]]ної обробки і чотирьох звичайних помножувачів по модулю <math> 2 ^ {16} + 1 </math>. У пристрої також використовуються два односпрямованих високошвидкісних 16-бітних порту даних. Ці порти забезпечують постійну завантаженість блоків шифрування.
В [[1994 рік]] у Карігером, Бонненбергом, Зіммерманом та ін було розроблено пристрій VINCI.
Швидкість шифрування даної реалізації IDEA становила 177 Мб / сек при тактовій частоті 25 МГц, техпроцес 1,2 мкм. Це було перше напівпровідниковий пристрій, який вже могло застосовуватися для шифрування в реальному часі в таких високошвидкісних [[мережеві протоколи|мережних протоколах]], як [[ATM]] ({{lang-en | Asynchronous Transfer Mode}}, асинхронний спосіб передачі даних) або [[FDDI]] ({{lang-en | Fiber Distributed Data Interface}}, розподілений волоконний інтерфейс даних). Швидкість 177 Мб / сек була досягнута завдяки використанню досить витонченої схеми [[конвеєр]] ної обробки і чотирьох звичайних помножувачів по модулю <math> 2 ^ {16} + 1 </math>. У пристрої також використовуються два односпрямованих високошвидкісних 16-бітних порту даних. Ці порти забезпечують постійну завантаженість блоків шифрування.


== Криптостійкість ==
== Криптостійкість ==
Алгоритм IDEA з'явився в результаті незначних модифікацій алгоритму PES. На малюнку наведено структури обох алгоритмів, і видно, що змін не так вже й багато:
Алгоритм IDEA з'явився в результаті незначних модифікацій алгоритму PES. На малюнку наведено структури обох алгоритмів, і видно, що змін не так вже й багато:
* Множення подблока <math> D_2 </math> з другим підключимо раунду замінено складанням
* Множення підблока <math> D_2 </math> з другим підключимо раунду замінено складанням
* Складання подблока <math> D_4 </math> з четвертим підключимо раунду замінено на множення
* Складання підблока <math> D_4 </math> з четвертим підключимо раунду замінено на множення
* Змінений зрушення подблоков в кінці раунду
* Змінений зрушення{{що?}} підблоків в кінці раунду
Один з найбільш відомих у світі криптологів [[Брюс Шнайеєр|Брюс Шнайер]] у своїй книзі «Прикладна криптографія» зауважив: «… дивно, як такі незначні зміни можуть привести до настільки великим відмінностей».
Один з найбільш відомих у світі криптологів [[Брюс Шнаєр]] у своїй книзі «Прикладна криптографія» зауважив: «… дивно, як такі незначні зміни можуть привести до настільки великим відмінностей».
[[Файл:PES IDEA.png|міні|ліворуч|200пкс| Структури алгоритмів PES і IDEA]]


У тій же книзі, що вийшла в [[1996]] року, Брюс Шнайер відгукнувся про IDEA так: «Мені здається, це найкращий і надійний блоковий алгоритм, опублікований дотепер».
У тій же книзі, що вийшла в [[1996]] року, Брюс Шнаєр відгукнувся про IDEA так: «Мені здається, це найкращий і надійний блоковий алгоритм, опублікований дотепер».


В алгоритмі IDEA використовує 64-бітові блоки. Довжина блоку повинна бути достатньою, щоб приховати статистичні характеристики вихідного повідомлення. Але зі збільшенням розміру блоку експоненціально зростає складність реалізації криптографічного алгоритму. В алгоритмі IDEA використовується 128-бітний ключ. Довжина ключа повинна бути досить великою, щоб запобігти можливості перебору ключа. Для розкриття 128-бітного ключа повним перебором ключів за умови, що відомий відкритий і відповідний йому зашифрований текст, потрібно <math> 2 ^ {128} </math> (порядку <math> 10 ^ {38} </math>) шифрування . При такій довжині ключа IDEA вважається досить безпечним. Висока крипостійкість IDEA забезпечується також такими характеристиками:
В алгоритмі IDEA використовує 64-бітові блоки. Довжина блоку повинна бути достатньою, щоб приховати статистичні характеристики вихідного повідомлення. Але зі збільшенням розміру блоку експоненціально зростає складність реалізації криптографічного алгоритму. В алгоритмі IDEA використовується 128-бітний ключ. Довжина ключа повинна бути досить великою, щоб запобігти можливості перебору ключа. Для розкриття 128-бітного ключа повним перебором ключів за умови, що відомий відкритий і відповідний йому зашифрований текст, потрібно <math> 2 ^ {128} </math> (порядку <math> 10 ^ {38} </math>) шифрування . При такій довжині ключа IDEA вважається досить безпечним. Висока крипостійкість IDEA забезпечується також такими характеристиками:
* Заплутування — шифрування залежить від ключа складним і заплутаним чином
* Заплутування — шифрування залежить від ключа складним і заплутаним чином
* Розсіювання — кожен біт незашифрованого тексту впливає на кожен біт зашифрованого тексту
* Розсіювання — кожен біт незашифрованого тексту впливає на кожен біт зашифрованого тексту
[[Лай Сюецзя]] (''Xuejia Lai'') і Джеймс Мессі (''James Massey'') провели ретельний аналіз IDEA з метою з'ясування його [[крипостійкість|криптостойкости]] до [[диференціальний криптоаналіз|диференціальному криптоанализу]] . Для цього ними було введено поняття марківського шифру і продемонстровано, що стійкість до диференціального криптоаналізу може бути промодельована і оцінена кількісно.
[[Лай Сюецзя]] (''Xuejia Lai'') і Джеймс Мессі (''James Massey'') провели ретельний аналіз IDEA з метою з'ясування його [[крипостійкість|криптостійкості]] до [[диференціальний криптоаналіз|диференціальному криптоаналізу]] . Для цього ними було введено поняття марківського шифру і продемонстровано, що стійкість до диференціального криптоаналізу може бути промодельована і оцінена кількісно.
[[Лінійний криптоаналіз|Лінійних]] або алгебраїчних слабкостей у IDEA виявлено не було. Спроба взлому за допомогою криптоаналізу з пов'язаними ключами, проведена Біхамом (''Biham''), також не увінчалася успіхом<ref> E. Biham, personal communication, 1993 </ref>.
[[Лінійний криптоаналіз|Лінійних]] або алгебраїчних слабкостей у IDEA виявлено не було. Спроба взлому за допомогою криптоаналізу з пов'язаними ключами, проведена Біхамом (''Biham''), також не увінчалася успіхом<ref> E. Biham, personal communication, 1993 </ref>.


Рядок 429: Рядок 437:


Методом «зустріч посередині» був взломаний IDEA з 4,5 раундами. Для цього потрібне знання всіх <math> 2 ^ {64} </math> блоків відкритих текстів і складність аналізу становить <math> 2 ^ {112} </math> операцій.
Методом «зустріч посередині» був взломаний IDEA з 4,5 раундами. Для цього потрібне знання всіх <math> 2 ^ {64} </math> блоків відкритих текстів і складність аналізу становить <math> 2 ^ {112} </math> операцій.
Краща атака на [[2007 рік]] застосовна до всіх ключам і може зламати IDEA з 6-ма раундами.
Найкраща атака на [[2007 рік]] застосовна до всіх ключам і може зламати IDEA з 6-ма раундами.


=== Слабкі ключі ===
=== Слабкі ключі ===
Існують великі класи [[слабкий ключ|слабких ключів]]. Слабкі вони в тому сенсі, що існують процедури, що дозволяють визначити, чи відноситься ключ до даного класу, а потім і сам ключ. В даний час відомі наступні:
Існують великі класи [[слабкий ключ|слабких ключів]]. Слабкі вони в тому сенсі, що існують процедури, що дозволяють визначити, чи відноситься ключ до даного класу, а потім і сам ключ. В даний час відомі наступні:


* <math> 2 ^ {23} + 2 ^ {35} + 2 ^ {51} </math> слабких до [[диференціальний криптоаналіз|диференціальному криптоанализу]] ключів. Приналежність до класу <math> 2 ^ {51} </math> можна обчислити за <math> 2 ^ {12} </math> операцій за допомогою підібраного відкритого тексту. Автори даної атаки запропонували модифікацію алгоритму IDEA. Дана модифікація полягає в заміні подключів <math> K_i ^ {(r)} </math> на відповідні <math> K_i ^ {'(r)} \ = a \oplus K_i ^ {(r)} </math>, де'' r'' — номер раунду шифрування. Точне значення'' a'' не критично. Наприклад при <math> a \ = \ 0dae </math> (в шістнадцятковій системі числення) дані слабкі ключі виключаються.
* <math> 2 ^ {23} + 2 ^ {35} + 2 ^ {51} </math> слабких до [[диференціальний криптоаналіз|диференціальному криптоаналізу]] ключів. Приналежність до класу <math> 2 ^ {51} </math> можна обчислити за <math> 2 ^ {12} </math> операцій за допомогою підібраного відкритого тексту. Автори даної атаки запропонували модифікацію алгоритму IDEA. Дана модифікація полягає в заміні підключів <math> K_i ^ {(r)} </math> на відповідні <math> K_i ^ {'(r)} \ = a \oplus K_i ^ {(r)} </math>, де'' r'' — номер раунду шифрування. Точне значення'' a'' не критично. Наприклад при <math> a \ = \ 0dae </math> (в шістнадцятковій системі числення) дані слабкі ключі виключаються.


* <math> 2 ^ {63} </math> слабких до лінійного диференціального криптоаналізу ключів. Приналежність до даного класу з'ясовується за допомогою тесту на пов'язаних ключах.
* <math> 2 ^ {63} </math> слабких до лінійного диференціального криптоаналізу ключів. Приналежність до даного класу з'ясовується за допомогою тесту на пов'язаних ключах.


* <math> 2 ^ {53} + 2 ^ {56} + 2 ^ {64} </math> слабких ключів було знайдено з використанням [[метод бумеранга|методу бумеранга]] ({{lang-en | boomerang attack}}), запропонованого Девідом Вагнером ('' David Wagner''). Тест на приналежність до даного класу виконується за <math> 2 ^ {16} </math> операцій і потребують <math> 2 ^ {16} </math> елементів пам'яті .
* <math> 2 ^ {53} + 2 ^ {56} + 2 ^ {64} </math> слабких ключів було знайдено з використанням [[метод бумеранга|методу бумеранга]] ({{lang-en | boomerang attack}}), запропонованого Девідом Вагнером ('' David Wagner''). Тест на приналежність до даного класу виконується за <math> 2 ^ {16} </math> операцій і потребують <math> 2 ^ {16} </math> елементів пам'яті.


Існування таких великих класів слабких ключів не впливає на практичну крипостійкість алгоритму IDEA, тому що повне число всіх можливих ключів одно <math> 2 ^ {128} </math>.
Існування таких великих класів слабких ключів не впливає на практичну крипостійкість алгоритму IDEA, тому що повна [[множина]] всіх можливих ключів становить <math> 2 ^ {128} </math>.


== Примітки ==
== Примітки ==
{{reflist}}
{{reflist}}

== Література ==
* {{cite article | volume = 19 | number = 1 | year = 2017 | doi = 10.18372/2410-7840.19.11199 | title = Алгоритми шифрування ГОСТ 28147-89-IDEA8-4 и ГОСТ 28147-89-RFWKIDEA8-4 | author = Gulom Numovych Tuychiev | issn = 2410-7840 | url = http://jrnl.nau.edu.ua/index.php/ZI/article/view/11199 | publisher = НАУ | journal = Захист інформації | accessdate = 14 листопада 2017 | archivedate = 24 листопада 2017 | archiveurl = https://web.archive.org/web/20171124112144/http://jrnl.nau.edu.ua/index.php/ZI/article/view/11199 }}


== Посилання ==
== Посилання ==
* {{cite web
* {{cite web
| url = http://www.rsasecurity.com/rsalabs/node.asp?id=2254
|url = http://www.rsasecurity.com/rsalabs/node.asp?id=2254
| title = RSA FAQ on Block Ciphers
|title = RSA FAQ on Block Ciphers
| accessdate = 6 ноября 2008
|accessdate = 6 ноября 2008
|language = англійською
| lang = en
|archiveurl = https://web.archive.org/web/20041019102316/http://www.rsasecurity.com/rsalabs/node.asp?id=2254
}}
|archivedate = 19 жовтня 2004
|deadurl = yes
}}
* {{cite web
* {{cite web
| url = http://www.users.zetnet.co.uk/hopwood/crypto/scan/cs.html#IDEA
|url = http://www.users.zetnet.co.uk/hopwood/crypto/scan/cs.html#IDEA
| title = SCAN entry for IDEA
|title = SCAN entry for IDEA
| accessdate = 6 ноября 2008
|accessdate = 6 ноября 2008
| lang = en
|language = англійською
| archiveurl = http://www.webcitation.org/652BeKiUl
|archiveurl = https://www.webcitation.org/652BeKiUl?url=http://www.users.zetnet.co.uk/hopwood/crypto/scan/cs.html#IDEA#IDEA
| archivedate = 2012-01-28
|archivedate = 2012-01-28
|deadurl = no
}}
}}
* {{cite web
* {{cite web
| url = http://www.informationsuebertragung.ch/indexAlgorithmen.html
|url = http://www.informationsuebertragung.ch/indexAlgorithmen.html
| title = IDEA Applet
|title = IDEA Applet
| accessdate = 6 ноября 2008
|accessdate = 6 ноября 2008
| lang = de
|language = німецькою
| archiveurl = http://www.webcitation.org/658F6keeh
|archiveurl = https://www.webcitation.org/658F6keeh?url=http://www.informationsuebertragung.ch/indexAlgorithmen.html
| archivedate = 2012-02-01
|archivedate = 2012-02-01
|deadurl = no
}}
}}
* {{cite web
* {{cite web
| url = http://www.regenechsen.de/phpwcms/index.php?krypto_idea
|url = http://www.regenechsen.de/phpwcms/index.php?krypto_idea
| title = Erläuterung und Schaubild zum Verfahren
|title = Erläuterung und Schaubild zum Verfahren
| accessdate = 6 ноября 2008
|accessdate = 6 ноября 2008
| lang = de
|language = німецькою
| archiveurl = http://www.webcitation.org/652BenJLw
|archiveurl = https://www.webcitation.org/652BenJLw?url=http://www.regenechsen.de/phpwcms/index.php?krypto_idea
| archivedate = 2012-01-28
|archivedate = 2012-01-28
|deadurl = no
}}
}}


{{Crypto-stub}}


{{Крипто блочні алгоритми навігація}}
{{Блочні алгоритми шифрування}}
{{Крипто навігація}}
{{Крипто навігація}}
{{ВП-портали|Програмування|Інформаційні технології|Математика}}


[[Категорія:Блочні шифри]]
[[Категорія:Блокові шифри]]

{{Link GA|ru}}

[[bg:IDEA]]
[[ca:IDEA (xifratge)]]
[[cs:International Data Encryption Algorithm]]
[[de:International Data Encryption Algorithm]]
[[en:International Data Encryption Algorithm]]
[[es:International Data Encryption Algorithm]]
[[eu:Internacional Data Encryption Algorithm]]
[[fa:الگوریتم بین‌المللی رمزگذاری داده‌ها]]
[[fi:IDEA]]
[[fr:International Data Encryption Algorithm]]
[[it:International Data Encryption Algorithm]]
[[ja:International Data Encryption Algorithm]]
[[ko:IDEA 알고리즘]]
[[nl:International Data Encryption Algorithm]]
[[pl:International Data Encryption Algorithm]]
[[pt:International Data Encryption Algorithm]]
[[ru:IDEA]]
[[simple:International Data Encryption Algorithm]]
[[sl:IDEA]]
[[tg:IDEA]]
[[vi:IDEA]]

Поточна версія на 10:54, 4 червня 2024

IDEA
РозробникиШвейцарська фірма Ascom
Уперше оприлюднений1991 р.
Раундів8,5
Типмодифікована мережа Фейстеля

IDEA (англ. International Data Encryption Algorithm, міжнародний алгоритм шифрування даних) — симетричний блоковий алгоритм шифрування даних, запатентований швейцарською фірмою Ascom. Відомий тим, що застосовувався в пакеті програм шифрування PGP. У листопаді 2000 року IDEA був представлений як кандидат у проекті NESSIE в рамках програми Європейської комісії IST (англ. Information Societes Technology, інформаційні громадські технології).

Історія

[ред. | ред. код]

Першу версію алгоритму розробили в 1990році Лай Сюецзя (Xuejia Lai) і Джеймс Мессі (James Massey) зі Швейцарського інституту ETH Zürich (за контрактом з Hasler Foundation, яка пізніше влилася в Ascom-Tech AG) як заміна DES (англ. Data Encryption Standard, стандарт шифрування даних) і назвали її PES (англ. Proposed Encryption Standard, запропонований стандарт шифрування). Потім, після публікації робіт Біхамом і Шаміра по диференціальному криптоанализу PES, алгоритм був поліпшений з метою посилення криптостійкості і названий IPES (англ. Improved Proposed Encryption Standard, покращений запропонований стандарт шифрування). Через рік його перейменували в IDEA (англ. International Data Encryption Algorythm).

Так як IDEA використовує 128-бітний ключ і 64-бітний розмір блоку, відкритий текст розбивається на блоки по 64 біт. Якщо таке розбиття неможливо, останній блок доповнюється різними способами певною послідовністю біт. Для уникнення витоку інформації про кожному окремому блоці використовуються різні режими шифрування. Кожен вихідний незашифрований 64 — біт ний блок ділиться на чотири підблока по 16 біт кожен, так як всі алгебраїчні операції, що використовуються в процесі шифрування, відбуваються над 16-бітними числами. Для шифрування і розшифрування IDEA використовує один і той же алгоритм.

Позначення операцій
Додавання по модулю 216
Множення по модулю 216+1
Побітова виключна диз'юнкція

Фундаментальним нововведенням в алгоритмі є використання операцій з різних алгебраїчних груп, а саме:

Ці три операції несумісні в тому сенсі, що ніякі дві з них не задовольняють дистрибутивному закону, тобто Застосування цих трьох операцій ускладнює криптоаналіз IDEA в порівнянні з DES, який базується виключно на операції виключає АБО, а також дозволяє відмовитися від використання S-блоків і таблиць заміни. IDEA є модифікацією мережі Фейстеля.

Генерація ключів

[ред. | ред. код]

З 128-бітного ключа для кожного з восьми раундів шифрування генерується по шість 16-бітних подключів, а для вихідного перетворення генерується чотири 16-бітних підключа. Всього буде потрібно 52 = 8 x 6 + 4 різних подключів по 16 біт кожен. Процес генерації п'ятдесяти двох 16-бітних ключів полягає в наступному:

  • Насамперед, 128-бітний ключ розбивається на вісім 16-бітних блоків. Це будуть перші вісім подключів по 16 біт кожен —
  • Потім цей 128-бітний ключ циклічно зсувається вліво на 25 позицій, після чого новий 128-бітний блок знову розбивається на вісім 16-бітних блоків. Це вже наступні вісім подключів по 16 біт кожен —
  • Процедура циклічного зсуву і розбивки на блоки триває до тих пір, поки не будуть згенеровані всі 52 16-бітних підключа.
Таблиця підключів для кожного раунду
Номер раунду Підключі
1
2
3
4
5
6
7
8
Вихідне перетворення

Структура алгоритму IDEA показана на малюнку. Процес шифрування складається з восьми однакових раундів шифрування і одного вихідного перетворення. Вихідний незашифрований текст ділиться на блоки по 64 біта. Кожен такий блок ділиться на чотири підблока по 16 біт кожен. На малюнку ці підблоки позначені , , , . У кожному раунді використовуються свої підключі згідно з таблицею підключів. Над 16-бітними підключами і підблока незашифрованого тексту проводяться наступні операції:

  • Множення по модулю = 65537, причому замість нуля використовується
  • Додавання по модулю
  • Побітове виключне АБО

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

  • Множення по модулю
  • Додавання по модулю

Після виконання вихідного перетворення конкатенація підблоків , , і являє собою зашифрований текст. Потім береться наступний 64-бітний блок незашифрованого тексту і алгоритм шифрування повторюється. Так продовжується до тих пір, поки не зашифрують всі 64-бітові блоки вихідного тексту.

Математичний опис

[ред. | ред. код]
  • Блок відкритого тексту розміром 64 біт ділиться на чотири рівні подблока розміром по 16 біт
  • Для кожного раунду обчислюються:

Результатом виконання восьми раундів будуть наступні чотири подблока

  • Виконується вихідне перетворення :

Результатом виконання вихідного перетворення є зашифрований текст

Розшифрування

[ред. | ред. код]

Метод обчислення, що використовується для розшифровки тексту по суті такий же, як і при його шифруванні. Єдина відмінність полягає в тому, що для розшифровки використовуються інші підключі. У процесі розшифровки підключі повинні використовуватися у зворотному порядку. Перший і четвертий підключі i-го раунду розшифровки виходять з першого і четвертого підключа (10-i)-го раунду шифрування мультиплікативною інверсією. Для 1-го та 9-го раундів другий і третій підключи розшифровки виходять з другого і третього подключів 9-го і 1-го раундів шифрування аддитивною інверсією. Для раундів з 2-го по 8-й другий і третій підключі розшифровки виходять з третього і другого подключів з 8-го по 2-й раундів шифрування аддитивною інверсією. Останні два підключа i-го раунду розшифровки рівні останніх двох підключів (9-i)-го раунду шифрування. Мультиплікативна інверсія підключа K позначається 1 / K і . Так як  — просте число, кожне ціле не дорівнює нулю K має унікальну мультипликативну інверсію по модулю . Адитивна інверсія підключа K позначається-K і .

Таблиця підключів для кожного раунду
Номер раунду Підключі
1
2
3
4
5
6
7
8
Вихідне перетворення

Приклад

[ред. | ред. код]

Для зручності числа представляємо в шістнадцятковому вигляді.

Приклад шифрування

[ред. | ред. код]

Як 128-бітний ключ використовуємо K = (0001,0002,0003,0004,0005,0006,0007,0008), а як 64-бітний відкритий текст M = (0000,0001, 0002,0003)

Таблиця підключів і підблоків для кожного раунду
Раунд Раундові ключі Значення блоків даних
 — - 0000 0001 0002 0003
1 0001 0002 0003 0004 0005 0006 00f0 00f5 010a 0105
2 0007 0008 0400 0600 0800 0a00 222f 21b5 f45e e959
3 0c00 0e00 1000 0200 0010 0014 0f86 39be 8ee8 1173
4 0018 001c 0020 0004 0008 000c 57df ac58 c65b ba4d
5 2800 3000 3800 4000 0800 1000 8e81 ba9c f77f 3a4a
6 1800 2000 0070 0080 0010 0020 6942 9409 e21b 1c64
7 0030 0040 0050 0060 0000 2000 99d0 c7f6 5331 620e
8 4000 6000 8000 a000 c000 e001 0a24 0098 ec6b 4925
9 0080 00c0 0100 0140 - - 11fb ed2b 0198 6de5

Приклад розшифровки

[ред. | ред. код]

Як 128-бітного ключа використовуємо K = (0001,0002,0003,0004,0005,0006,0007,0008), а як 64-бітного зашифрованого тексту C = (11fb, ed2b, 0198,6 de5)

Таблиця підключів та підблоків для кожного раунду
Раунд Раундові ключі Значення блоків даних
1 fe01 ff40 ff00 659a c000 e001 d98d d331 27f6 82b8
2 fffd 8000 a000 cccc 0000 2000 bc4d e26b 9449 a576
3 a556 ffb0 ffc0 52ab 0010 0020 0aa4 f7ef da9c 24e3
4 554b ff90 e000 fe01 0800 1000 ca46 fe5b dc58 116d
5 332d c800 d000 fffd 0008 000c 748f 8f08 39da 45cc
6 4aab ffe0 ffe4 c001 0010 0014 3266 045e 2fb5 b02e
7 aa96 f000 f200 ff81 0800 0a00 0690 050a 00fd 1dfa
8 4925 fc00 fff8 552b 0005 0006 0000 0005 0003 000c
9 0001 fffe fffd c001 - - 0000 0001 0002 0003


Апаратна реалізація

[ред. | ред. код]

Апаратна реалізація має такі переваги:

  • Істотне підвищення швидкості шифрування за рахунок використання паралелізму при виконанні операцій
  • Менше енергоспоживання

Перша реалізація алгоритму IDEA на інтегральній схемі (англ. Very Large Scale Integration) була розроблена і верифікована Лаем, Мессі і Мерфі в 1992 рік у з використанням технологічного процесу 1,5 мкм і технології КМОН Швидкість шифрування даного пристрою становила 44 Мб / сек.

В 1994 рік у Карігером, Бонненбергом, Зіммерманом та ін було розроблено пристрій VINCI. Швидкість шифрування даної реалізації IDEA становила 177 Мб / сек при тактовій частоті 25 МГц, техпроцес 1,2 мкм. Це було перше напівпровідниковий пристрій, який вже могло застосовуватися для шифрування в реальному часі в таких високошвидкісних мережних протоколах, як ATM (англ. Asynchronous Transfer Mode, асинхронний режим передавання) або FDDI (англ. Fiber Distributed Data Interface, розподілений волоконний інтерфейс даних). Швидкість 177 Мб / сек була досягнута завдяки використанню досить витонченої схеми конвеєрної обробки і чотирьох звичайних помножувачів по модулю . У пристрої також використовуються два односпрямованих високошвидкісних 16-бітних порту даних. Ці порти забезпечують постійну завантаженість блоків шифрування.

Криптостійкість

[ред. | ред. код]

Алгоритм IDEA з'явився в результаті незначних модифікацій алгоритму PES. На малюнку наведено структури обох алгоритмів, і видно, що змін не так вже й багато:

  • Множення підблока з другим підключимо раунду замінено складанням
  • Складання підблока з четвертим підключимо раунду замінено на множення
  • Змінений зрушення[що?] підблоків в кінці раунду

Один з найбільш відомих у світі криптологів Брюс Шнаєр у своїй книзі «Прикладна криптографія» зауважив: «… дивно, як такі незначні зміни можуть привести до настільки великим відмінностей».

У тій же книзі, що вийшла в 1996 року, Брюс Шнаєр відгукнувся про IDEA так: «Мені здається, це найкращий і надійний блоковий алгоритм, опублікований дотепер».

В алгоритмі IDEA використовує 64-бітові блоки. Довжина блоку повинна бути достатньою, щоб приховати статистичні характеристики вихідного повідомлення. Але зі збільшенням розміру блоку експоненціально зростає складність реалізації криптографічного алгоритму. В алгоритмі IDEA використовується 128-бітний ключ. Довжина ключа повинна бути досить великою, щоб запобігти можливості перебору ключа. Для розкриття 128-бітного ключа повним перебором ключів за умови, що відомий відкритий і відповідний йому зашифрований текст, потрібно (порядку ) шифрування . При такій довжині ключа IDEA вважається досить безпечним. Висока крипостійкість IDEA забезпечується також такими характеристиками:

  • Заплутування — шифрування залежить від ключа складним і заплутаним чином
  • Розсіювання — кожен біт незашифрованого тексту впливає на кожен біт зашифрованого тексту

Лай Сюецзя (Xuejia Lai) і Джеймс Мессі (James Massey) провели ретельний аналіз IDEA з метою з'ясування його криптостійкості до диференціальному криптоаналізу . Для цього ними було введено поняття марківського шифру і продемонстровано, що стійкість до диференціального криптоаналізу може бути промодельована і оцінена кількісно. Лінійних або алгебраїчних слабкостей у IDEA виявлено не було. Спроба взлому за допомогою криптоаналізу з пов'язаними ключами, проведена Біхамом (Biham), також не увінчалася успіхом[1].

Існують успішні атаки, що застосовуються до IDEA з меншим числом раундів (повний IDEA має 8.5 раундів). Успішною вважається атака, якщо взлом шифру з її допомогою вимагає меншої кількості операцій, ніж при повному переборі ключів. Метод розкриття Віллі Майера (Willi Meier) виявився ефективніше взлому повним перебором ключів тільки для IDEA з 2 раундами

Методом «зустріч посередині» був взломаний IDEA з 4,5 раундами. Для цього потрібне знання всіх блоків відкритих текстів і складність аналізу становить операцій. Найкраща атака на 2007 рік застосовна до всіх ключам і може зламати IDEA з 6-ма раундами.

Слабкі ключі

[ред. | ред. код]

Існують великі класи слабких ключів. Слабкі вони в тому сенсі, що існують процедури, що дозволяють визначити, чи відноситься ключ до даного класу, а потім і сам ключ. В даний час відомі наступні:

  • слабких до диференціальному криптоаналізу ключів. Приналежність до класу можна обчислити за операцій за допомогою підібраного відкритого тексту. Автори даної атаки запропонували модифікацію алгоритму IDEA. Дана модифікація полягає в заміні підключів на відповідні , де r — номер раунду шифрування. Точне значення a не критично. Наприклад при (в шістнадцятковій системі числення) дані слабкі ключі виключаються.
  • слабких до лінійного диференціального криптоаналізу ключів. Приналежність до даного класу з'ясовується за допомогою тесту на пов'язаних ключах.
  • слабких ключів було знайдено з використанням методу бумеранга (англ. boomerang attack), запропонованого Девідом Вагнером ( David Wagner). Тест на приналежність до даного класу виконується за операцій і потребують елементів пам'яті.

Існування таких великих класів слабких ключів не впливає на практичну крипостійкість алгоритму IDEA, тому що повна множина всіх можливих ключів становить .

Примітки

[ред. | ред. код]
  1. E. Biham, personal communication, 1993

Література

[ред. | ред. код]

Посилання

[ред. | ред. код]
  • RSA FAQ on Block Ciphers (англійською) . Архів оригіналу за 19 жовтня 2004. Процитовано 6 ноября 2008.
  • SCAN entry for IDEA (англійською) . Архів оригіналу за 28 січня 2012. Процитовано 6 ноября 2008.
  • IDEA Applet (німецькою) . Архів оригіналу за 1 лютого 2012. Процитовано 6 ноября 2008.
  • Erläuterung und Schaubild zum Verfahren (німецькою) . Архів оригіналу за 28 січня 2012. Процитовано 6 ноября 2008.