Відмінності між версіями «Шифр Serpent»

Рядок 77: Рядок 77:
 
Розшифрування відрізняється від шифрування тільки тим, що повинні бути використані інверсні (зворотні) таблиці замін, а також зворотні лінійні перетворення, і ключі подаються у зворотному порядку. Як і інші алгоритми, що брали участь у конкурсі AES, Serpent має можливі довжини ключа 128, 192 або 256 біт. "Неповний» ключ довжиною менше 256 біт доповнюється за наступним правилом: додається одиничний біт праворуч, за ним іде стільки нульових бітів, щоб довжина ключа стала дорівнювати 256 бітам.
 
Розшифрування відрізняється від шифрування тільки тим, що повинні бути використані інверсні (зворотні) таблиці замін, а також зворотні лінійні перетворення, і ключі подаються у зворотному порядку. Як і інші алгоритми, що брали участь у конкурсі AES, Serpent має можливі довжини ключа 128, 192 або 256 біт. "Неповний» ключ довжиною менше 256 біт доповнюється за наступним правилом: додається одиничний біт праворуч, за ним іде стільки нульових бітів, щоб довжина ключа стала дорівнювати 256 бітам.
  
 +
== Алгоритм вибору підключів із ключа ==
 +
Спочату при необхідності ключ доповнюється до 256 біт і перетворюється в 33 підключа <math>K_{0}, ..., K_{32}\,</math> довжиною 128 біт наступним чином:
 +
<br />
 +
Оригінальний ключ представляється у вигляді 8 32-бітових слів  <math>w_{-8}, ..., w_{-1}</math> для обчислення проміжного ключа за правилом:<br />
 +
<math>w_i = (w_{i-8}+w_{i-5}+w_{i-3}+w_{i-1}+\phi+i) <<< 11 \,</math>,<br />
 +
де <math>\phi \,</math> — це дробова частина золотого січення <math>\frac{\sqrt{5}+1}{2}</math> або 0x9e3779b9 . <br />
 +
Раундовий ключі обчислюються з проміжних ключів використанням таблиць підстановок  S-box наступним чином:<br />
 +
 +
{|
 +
|-
 +
|<math>\left \{ k_{0}, k_{1}, k_{2}, k_{3} \right \} = S_3\left ( w_{0}, w_{1}, w_{2}, w_{3} \right ) \,</math>
 +
|-
 +
|<math>\left \{ k_{4}, k_{5}, k_{6}, k_{7} \right \} = S_2\left ( w_{4}, w_{5}, w_{6}, w_{7} \right ) \,</math>
 +
|-
 +
|<math>\left \{ k_{8}, k_{9}, k_{10}, k_{11} \right \} = S_1\left ( w_{8}, w_{9}, w_{10}, w_{11} \right ) \,</math>
 +
|-
 +
|<math>\left \{ k_{12}, k_{13}, k_{14}, k_{15} \right \} = S_0\left ( w_{12}, w_{13}, w_{14}, w_{15} \right ) \,</math>
 +
|-
 +
|<math>\left \{ k_{16}, k_{17}, k_{18}, k_{19} \right \} = S_7\left ( w_{16}, w_{17}, w_{18}, w_{19} \right ) \,</math>
 +
|-
 +
|<math> \cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots \,</math>
 +
|-
 +
|<math>\left \{ k_{124}, k_{125}, k_{126}, k_{127} \right \} = S_4\left ( w_{124}, w_{125}, w_{126}, w_{127} \right ) \,</math>
 +
|-
 +
|<math>\left \{ k_{128}, k_{129}, k_{130}, k_{131} \right \} = S_3\left ( w_{128}, w_{129}, w_{130}, w_{131} \right ) \,</math>
 +
|-
 +
|}
  
  

Версія за 19:43, 28 квітня 2010

Алгоритм блочного шифрування
Назва: Serpent
Розробник: Елі Біхам, Ларс Кнудсен, Росс Андерсон
Створений: 1999
Опублікований: 2000
Розмір ключа: 128, 192, 256
Розмір блоку: 128 біт
Число раундів: 32
Тип: симетричний, блоковий
{{{img}}}
Імя Марія
Прізвище Стадник
По-батькові Андріївна
Факультет ФІС
Група СН-41
Залікова книжка № ПК-06-064











Основні відомості про шифр Serpent

Головна родзинка шифру SERPENT в тому, що всі три його автора - це "аси криптоаналізу", найбільш відомі розкриттям шифрів інших криптографів. Ізраїльський дослідник Елі Біхам - один з творців диференціального криптоаналізу - техніки, що лежить в основі більшості сучасних методів розкриття блокових шифрів. В даний час є професором ізраїльського технологічного інституту відділу інформатики. Починаючи з жовтня 2008 року, Biham є деканом факультету комп'ютерних наук, після роботи протягом двох років у якості головного аспірантури CS. Biham отримав докторський ступінь за винахід (публічно) диференціального криптоаналізу, працюючи разом із Аді Шамір.

Данець Ларс Кнудсен вже згадувався в цьому огляді у зв'язку з шифром угоди (Кнудсен - єдиний криптограф, що фігурує одразу в двох проектах). Після декількох ранніх робіт в банківській сфері, Кнудсен вступив в Орхус-університет в 1984 вивчав математику та інформатику, отримавши ступінь магістра в 1992 і ступінь доктора філософії в 1994 році. У 1997-2001 він працював в Університеті Бергена, Норвегія. В даний час, Кнудсен є професором на кафедрі математики в технічному університеті Данії.

Англієць Росс Андерсон з Кембриджського університету з початку 90-х років відомий своїми неординарними криптоаналітичних роботами. Росс Джон Андерсон, (р. 1956), дослідник, письменник і консультант у галузі безпеки, техніки. Він також є професором в області безпеки інженерії в Кембріджському університеті комп'ютерної лабораторії, де він бере участь у групі безпеки. У 1978 році Андерсон закінчив зі ступенем бакалавра в області математики і природничих наук у Трініті-коледжі в Кембриджі, а потім отримав кваліфікацію в галузі комп'ютерної техніки. Він працював в авіаційній промисловості і банківської перш ніж перейти в 1992 році до Кембриджського університету, для роботи над докторською дисертацією під керівництвом Роджера Нідхам і розпочав свою кар'єру як вчений-дослідник. Він отримав докторську ступінь у 1995 році і став викладачем в тому ж році.

Serpent має розмір блоку 128 біт і можливу довжинe ключа 128, 192 або 256 біт. Алгоритм представляє собою 32-раундову SP-мережу, що працює з блоком з чотирьох 32-бітових слів. Але Serpent був розроблений так, що всі операції можуть бути виконані паралельно, використовуючи 32 1-бітових потоки. При розробці Serpent використовувався більш консервативний підхід до безпеки, ніж у інших фіналістів AES, проектувальники шифру вважали, що 16 раундів достатньо, щоб протистояти відомим видам криптоаналізу, але збільшили число раундів до 32, щоб алгоритм міг краще протистояти ще не відомим методам криптоаналізу. Ставши фіналістом конкурсу AES, Serpent алгоритм в результаті голосування зайняв 2 місце. Особливостями алгоритму є: алгоритм оптимізовано для програмної реалізації в техніці "бітових зрізів" (bitslice) і має ряд обумовлених цим фактом особливостей, а саме, у ньому використовуються початкова та зворотна їй кінцева бітові перестановки, які не впливають на стійкість шифру і призначені для оптимізації його реалізації. При реалізації в техніці "бітових зрізів" виконання цих перестановок в явному вигляді не потрібно, при традиційній реалізації - потрібно. Крім того, з тієї ж самої причини в алгоритмі використовуються вузли замін малого розміру (4 на 4 біта), тому що в рамках зазначеної техніки вони реалізуються у вигляді серії логічних операцій над даними і при більшому розмірі це стає важко реалізованим.


Структура алгоритму

Алгоритм являє собою мережу Фейштеля для чотирьох гілок змішаного типу: 2 парні гілки змінюють сумісності значення непарних, потім міняються місцями. Як криптоперетворення використовуються тільки виключне "АБО", табличні підстановки і бітові зрушення. Алгоритм складається з 32 раундів. Самі раунди складені таким чином, що додавання до гілок матеріалу ключа на першому і останньому раундах утворює вхідне і вихідне забілювання. Алгоритм Serpent являє собою SP-мережу, в якій весь блок даних довжиною 128 біт на кожному раунді розбивається на 4 слова довжиною по 32 біта. Всі значення, що використовуються для шифрування, представляються бітовими потоками. Індекси біт пробігають значення від 0 до 31 для 32-бітових слів, від 0 до 127 для 128-бітових блоків, від 0 до 255 для 256-бітових ключів і так далі. Для внутрішніх обчислень всі біти величин представлені в прямому порядку (little-endian). Serpent шифрує відкритий текст P довжиною 128 біт в шифротекст C довжиною 128 біт за 32 раунди за допомогою 33 підключів [math]K_{0}, ..., K_{32}\,[/math] довжиною 128 біт. Довжина використовуваного ключа може приймати різні значення, але для конкретики зафіксуємо їх довжину у 128, 192 або 256 біт. Короткі ключі довжиною менше 256 біт доповнюються до повної довжини в 256 біт.
Шифрування складається з наступних основних кроків:

  • Початкова перестановка;
  • 32 раунди, кожен з яких складається з операції змішування з 128-бітовим ключем (побітове логічне що виключає «або»), таблична заміна (S-box) і лінійне перетворення. В останньому раунді лінійне перетворення замінюється додатковим накладанням ключа;
  • Кінцева перестановка;

Початкова і кінцева перестановки не мають будь-якої криптографічно] значущості. Вони використовуються для спрощення оптимізованої реалізації алгоритму і підвищення обчислювальної ефективності.
Рівняння стуктури алгоритму:
[math]\hat B_0 = IP(P)\,[/math]
[math]\hat B_{i+1} = R_i(\hat B_{i})\,[/math]
[math]C = FP(\hat B_{32})\,[/math],
де
[math]R_i(X) = L(\hat S_i(X \oplus \hat K_i)), i = 0, ..., 30\,[/math]
[math]R_i(X) = \hat S_i(X \oplus \hat K_i) \oplus \hat K_{32}, i = 31\,[/math],
де [math]\hat S_i\,[/math] - це змінні таблиці підстановки [math]\hat S_{i mod 8}\,[/math] 32 рази паралельно і [math]L\,[/math] — лінійне перетворення.

Розшифрування та розширення ключа

Розшифрування відрізняється від шифрування тільки тим, що повинні бути використані інверсні (зворотні) таблиці замін, а також зворотні лінійні перетворення, і ключі подаються у зворотному порядку. Як і інші алгоритми, що брали участь у конкурсі AES, Serpent має можливі довжини ключа 128, 192 або 256 біт. "Неповний» ключ довжиною менше 256 біт доповнюється за наступним правилом: додається одиничний біт праворуч, за ним іде стільки нульових бітів, щоб довжина ключа стала дорівнювати 256 бітам.

Алгоритм вибору підключів із ключа

Спочату при необхідності ключ доповнюється до 256 біт і перетворюється в 33 підключа [math]K_{0}, ..., K_{32}\,[/math] довжиною 128 біт наступним чином:


Оригінальний ключ представляється у вигляді 8 32-бітових слів [math]w_{-8}, ..., w_{-1}[/math] для обчислення проміжного ключа за правилом:
[math]w_i = (w_{i-8}+w_{i-5}+w_{i-3}+w_{i-1}+\phi+i) \lt \lt \lt 11 \,[/math],
де [math]\phi \,[/math] — це дробова частина золотого січення [math]\frac{\sqrt{5}+1}{2}[/math] або 0x9e3779b9 .
Раундовий ключі обчислюються з проміжних ключів використанням таблиць підстановок S-box наступним чином:

[math]\left \{ k_{0}, k_{1}, k_{2}, k_{3} \right \} = S_3\left ( w_{0}, w_{1}, w_{2}, w_{3} \right ) \,[/math]
[math]\left \{ k_{4}, k_{5}, k_{6}, k_{7} \right \} = S_2\left ( w_{4}, w_{5}, w_{6}, w_{7} \right ) \,[/math]
[math]\left \{ k_{8}, k_{9}, k_{10}, k_{11} \right \} = S_1\left ( w_{8}, w_{9}, w_{10}, w_{11} \right ) \,[/math]
[math]\left \{ k_{12}, k_{13}, k_{14}, k_{15} \right \} = S_0\left ( w_{12}, w_{13}, w_{14}, w_{15} \right ) \,[/math]
[math]\left \{ k_{16}, k_{17}, k_{18}, k_{19} \right \} = S_7\left ( w_{16}, w_{17}, w_{18}, w_{19} \right ) \,[/math]
[math]\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots \,[/math]
[math]\left \{ k_{124}, k_{125}, k_{126}, k_{127} \right \} = S_4\left ( w_{124}, w_{125}, w_{126}, w_{127} \right ) \,[/math]
[math]\left \{ k_{128}, k_{129}, k_{130}, k_{131} \right \} = S_3\left ( w_{128}, w_{129}, w_{130}, w_{131} \right ) \,[/math]