Алгоритми шифрування iceberg

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Алгоритм шифрування ICEBERG («Involutional Cipher Efficient for Block Encryption in Reconfigurable Hardware» — «Інволюційний шифр для ефективного блокового шифрування в реконфігурованому апаратному забезпеченні» ) — блоковий шифр, розроблений для реконфігурованих апаратних реалізацій. ICEBERG запропонований відносно нещодавно у 2004 р. — французьким криптологом Жилем-Франсуа Піре (Gilles-François Piret). Як видно з назви, цей алгоритм оптимізовано під апаратні реалізації за допомогою програмованих логічних інтегральних схем.

Структура алгоритму[ред. | ред. код]

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

1. Таблична заміна. Вектор даних подається у вигляді 16 значень по 4 біти, кожне з яких заміщається згідно з таблицею:

2. Бітова перестановка P8, що переставляє біти вектору даних за наступним правилом: y8i+j = x8i+p8(j), i = 0…7, j = 0…7,
де:
xn та yn — відповідно, вхідний та вихідний біти вектору даних;
▪функція p8() визначена згідно таблиці:

3. Таблична заміна, що працює аналогічно до заміни, але згідно з іншою таблицею:

4. Знову виконується перестановка P8, після якої повторно застосовується таблична заміна S0.
5. Бітова перестановка Р64, що переставляє біти вектору даних наступним чином:
yi = xp64(i), i = 0…63,
де функція р64() визначена згідно таблиці:

Згідно таблиці вхідним значенням 0, 1, 2, … відповідають вихідні значення 0, 12, 23 і т. д. 6. Операція множення на матрицю М. Застосовується до кожного 4-бітного фрагмента вектору даних шляхом його множення на фіксовану матрицю

Це аналогічно до застосування наступної табличної заміни:

7. Накладання матеріалу ключа (операція δ):
yi = xi⊕RK[n],
де RK[n]i- і-й біт фрагмента розширеного ключа для n-го раунду (процедура розширення ключа буде описана далі). 8. Бітова перестановка Р4, яка застосовується до кожного 4-бітного фрагмента векторних даних:
y[i]j = x[i]p4(j), i = 0…15, j = 0…3,
y[i] та x[i] — відповідно, вхідне та вихідне значення і-го 4-бітного фрагмента, а функція р4() визначається згідно таблиці

9. Повторно застосовується описана вище операція Р64.

Алгоритм складається із 15 раундів перетворень. Перед першим раундом виконується попереднє накладення ключа, а після заключного раунду — фінальне перетворення, що складається з наступних операцій (описаних вище):

  • табличної заміни S0;
  • бітової перестановки P8;
  • табличні заміни S1;
  • бітової перестановки P8;
  • табличної заміни S0.
При розшифруванні виконуються абсолютно ті ж операції, але фрагменти розширеного ключа використовуються у зворотному порядку (при цьому вони формуються дещо інакше, ніж при зашифруванні — див. далі).

Процедура розширення ключа[ред. | ред. код]

Процедура розширення ключа складається із декількох етапів. На першому етапі з вихідного 128-бітного ключа шифрування К наступним чином обчислюється послідовність 128-бітових проміжних ключів IK0…IK16:
IK0 = K;
IKi+1 = G(IKi,Ci),
де G() — раунд процедури розширення ключа, а Ci — модифікуючі константи.
У кожному раунді виконується наступна послідовність дій:

1. Операція τ здійснює циклічний зсув вхідних даних в залежності від значення Ci:

  • при Ci = 0 виконується обертання на 8 бітів ліворуч;
  • при Ci = 1 — циклічний зсув на 8 бітів праворуч.

Константи Ci визначено як 0 для першої половини раундів, тобто для i=0…7, для решти раундів Ci = 1.

2. Бітова перестановка Р128 здійснює перестановку за наступним законом:
yi = xp128(i), i = 0…127,
де функція р128() визначена згідно таблиці:

Вхідні значення 0, 1, 2, … відповідають вихідні значення 76, 110, 83 і т. д.

3. До 4-бітних фрагментів оброблюваних даних застосовується описана вище таблична заміна S0.

4. Повторно застосовується перестановка Р128, після якої повторно виконується операція τ.

На наступному етапі формується 64-бітові підключі IK'0…IK'16, які просто «набираються» зі значень непарних бітів відповідних проміжних ключів IK0…IK16.

На заключному етапі процедури розширення ключа обчислюється раундові ключі RK[n]. Для цього кожен 4-бітний фрагмент кожного підключа IK'0…IK'16 паралельно обробляється операцією φ, яка визначена наступним чином:
y0 = ((x0⊕x1⊕x2)&b)|((x0⊕x1&(~b));
y1 = ((x1⊕x2)&b)|((x1&(~b));
y2 = ((x2⊕x3⊕x0)&b)|((x2⊕x3&(~b));
y3 = ((x3⊕x0)&b)|((x3&(~b)),
де:

  • yi та xi — i-ті біти, відповідно, вхідного і вихідного значення;
  • b — модифікуючий біт, його призначення буде пояснено далі;
  • ~ — логічна операція заперечення;
  • & — логічна операція «і»;
  • | - логічна операція «або».

Модифікуючий біт b керує формуванням різних значень підключів для зашифрування та розшифрування:

  • при зашифруванні для операції попереднього накладання ключа і 15 раундів перетворень відповідні підключі (RK[0] і RK[1]…RK[15]) формуються зі значенням b = 1; підключ RK[16], що використовується у фінальному перетворенні, формується зі значенням b = 0;
  • при розшифруванні для попереднього накладання ключа і 15 раундів перетворень використовуються, відповідно, фрагменти RK[16] і RK[15]…RK[1], які формуються з модифікуючим бітом b=0; підключ RK[0], що використовується у фінальному перетворенні, формується зі значенням b = 1.

Криптоаналіз алгоритму[ред. | ред. код]

Алгоритм ICEBERG з'явився відносно нещодавно і, мабуть, не викликав широкого інтересу з боку криптологів — будь-які роботи, присвяченні криптоаналізу даного алгоритму, не набули широкої популярності.

Джерела[ред. | ред. код]

  • Панасенко С. Алгоритмы шифрования. Специальный справочник. СПб.:БХВ-Петербург, 2009.- 576 с.
  • Корченко О. Г. Прикладна криптологія: системи шифрування: підручник / О. Г. Корченко, В. П. Сіденко, Ю. О. Дрейс. — К. : ДУТ, 2014. — 448 с.
  • Остапов С. Е. Технології захисту інформації: навчальний посібник / С. Е. Остапов, С. П. Євсеєв, О. Г. Король. — Х. : Вид. ХНЕУ, 2013. — 476 с.
  • https://iacr.org/archive/fse2004/30170280/30170280.pdf