Алгоритм шифрування 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 і RK…RK) формуються зі значенням b = 1; підключ RK, що використовується у фінальному перетворенні, формується зі значенням b = 0; при розшифруванні для попереднього накладання ключа і 15 раундів перетворень використовуються, відповідно, фрагменти RK і RK…RK, які формуються з модифікуючим бітом b=0; підключ RK, що використовується у фінальному перетворенні, формується зі значенням b = 1.
Криптоаналіз алгоритму Алгоритм ICEBERG з'явився відносно нещодавно і, мабуть, не викликав широкого інтересу з боку криптологів — будь-які роботи, присвяченні криптоаналізу даного алгоритму, не набули широкої популярності.
Джерела Панасенко С. Алгоритмы шифрования. Специальный справочник. СПб.:БХВ-Петербург, 2009.- 576 с. Корченко О. Г. Прикладна криптологія: системи шифрування: підручник / О. Г. Корченко, В. П. Сіденко, Ю. О. Дрейс. — К. : ДУТ, 2014. — 448 с. Остапов С. Е. Технології захисту інформації: навчальний посібник / С. Е. Остапов, С. П. Євсеєв, О. Г. Король. — Х. : Вид. ХНЕУ, 2013. — 476 с. https://iacr.org/archive/fse2004/30170280/30170280.pdf