Cobra (шифр)
Cobra — алгоритм симетричного блочного шифрування (розмір блоку 128 біт, ключ довжиною до 576 біт), розроблений німецьким криптологом Крістіаном Шнайдером в якості першого шифру, що має структуру гетерогенної мережі Фейстеля (англ. extended Feistel network).
Розробники | Крістіан Шнайдер |
---|---|
Уперше оприлюднений | 13 квітня 1996 року |
Раундів | 12 |
Тип | Мережа Фейстеля |
Структура
ред.Алгоритм має структуру гетерогенної мережі Фейстеля. Дана мережа, на відміну від класичної, передбачає використання більш ніж двох підблоків. Додатково, шифр використовує кілька наборів залежних від ключа таблиць підстановки (S-блоків, названих автором як англ. S-units) і додаткову операцію для підвищення дифузії. Cobra — шифр з 128-бітовим (16-байтним) блоком і змінною довжиною ключа. Алгоритм складається з двох частин: процедура розширення ключа і процедури шифрування. Ключ (довжиною до 576 біт) розширюється до масиву підключів довжиною 12464 байта. Шифрування полягає в операції введення, повторення раундової функції 12 разів і операції виведення.
Процедура шифрування включає попереднє і наступне ключове забілювання.
Один раунд розширеної мережі Фейстеля в загальному випадку виглядає наступним чином: Di = Ai-1 Ci = Di-1 XOR F(D i; K i, c) Bi = Ci-1 XOR F(C i; K i, b) Ai = Bi-1 XOR F(B i; K i, a)
Що в разі Cobra виглядає наступним чином:
A = A XOR W1,1 B = B XOR W1,2 C = C XOR W1,3 D = D XOR W1,4 for r = 1 to 12 D' = A C' = (D XOR F(D';Pr,3;Sc ))>>>1 B' = (C XOR F(C';Pr,2;Sb ))>>>1 A' = (B XOR F(B';Pr,1;Sa ))>>>1 A = A' B = B' C = C' D = D' next r A = A XOR W2,1 B = B XOR W2,2 C = C XOR W2,3 D = D XOR W2,4
У процесі розширення ключа генеруються 12 P-Box з трьома 32-бітними елементами кожна, 12 S-Box 256 32-бітних елементів кожна, дві W-Box по чотири елементи кожна.
F функція є нелінійною підстановкою 32 бітного елемента. Тут A' = (B XOR F(B';Pr,1;Sa))>>>1, що означає A' отримується шляхом циклічного зсуву вправо результату додавання по модулю 2 змінної B з виходом функції F, яка має B', раундовий підключ Pr,1, перший елемент S Unit, Sa, як вихід, де r є поточним раудом.
Таблиці підстановки
ред.Класичні шифри на основі мережі Фейстеля (наприклад, стандарт шифрування ГОСТ 28147-89) сильно залежні від використовуваної таблиці підстановки, яка і є нелінійною частиною алгоритму. Але, як і в алгоритмі Blowfish, таблиці підстановки можуть бути секретними і залежними від ключа. В даному випадку, таблиці S-Box генеруються ключовим розкладом, яке є свого роду криптографічним генератором псевдовипадкових чисел. В даному випадку, природно, не виключено наявність слабких ключів і генеруючих ними слабких таблиць підстановки. Однак, для рішення даної проблеми введена генерація декількох незалежних таблиць і додаткова операція дифузії. В даному випадку, ймовірність появи слабкого ключа настільки мала, що може не враховуватися. Ця теза особливо вірна, а підхід практичний при використанні в якості ключового матеріалу виходу геш-функції.
Реалізація
ред.Алгоритм, хоча і не отримав широкого розповсюдження, але був реалізований в популярній криптоутиліті Blowfish Advanced 97 Маркуса Хана, де використовувався його варіант з 64-бітним блоком і ключем 256 біт. Потім в наступній редакції утиліти — версії CS була реалізована редакція з 128-бітовим блоком і ключем до 576 біт.
Див. також
ред.Примітки
ред.Посилання
ред.На цю статтю не посилаються інші статті Вікіпедії. Будь ласка розставте посилання відповідно до прийнятих рекомендацій. |