Cobra (шифр)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Cobra
Розробники Крістіан Шнайдер
Уперше оприлюднений 13 квітня 1996 року
Раундів 12
Тип Мережа Фейстеля

Cobra — алгоритм симетричного блочного шифрування (розмір блоку 128 біт, ключ довжиною до 576 біт), розроблений німецьким криптологом Крістіаном Шнайдером в якості першого шифру, що має структуру гетерогенної мережі Фейстеля (англ. extended Feistel network).


Структура

[ред. | ред. код]
шифр Cobra

Алгоритм має структуру гетерогенної мережі Фейстеля. Дана мережа, на відміну від класичної, передбачає використання більш ніж двох підблоків. Додатково, шифр використовує кілька наборів залежних від ключа таблиць підстановки (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 є поточним раудом.

471.989x471.989пкс
471.989x471.989пкс

Таблиці підстановки

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

Класичні шифри на основі мережі Фейстеля (наприклад, стандарт шифрування ГОСТ 28147-89) сильно залежні від використовуваної таблиці підстановки, яка і є нелінійною частиною алгоритму. Але, як і в алгоритмі Blowfish, таблиці підстановки можуть бути секретними і залежними від ключа. В даному випадку, таблиці S-Box генеруються ключовим розкладом, яке є свого роду криптографічним генератором псевдовипадкових чисел. В даному випадку, природно, не виключено наявність слабких ключів і генеруючих ними слабких таблиць підстановки. Однак, для рішення даної проблеми введена генерація декількох незалежних таблиць і додаткова операція дифузії. В даному випадку, ймовірність появи слабкого ключа настільки мала, що може не враховуватися. Ця теза особливо вірна, а підхід практичний при використанні в якості ключового матеріалу виходу геш-функції.

Реалізація

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

Алгоритм, хоча і не отримав широкого розповсюдження, але був реалізований в популярній криптоутиліті Blowfish Advanced 97 Маркуса Хана, де використовувався його варіант з 64-бітним блоком і ключем 256 біт. Потім в наступній редакції утиліти — версії CS була реалізована редакція з 128-бітовим блоком і ключем до 576 біт.

Див. також

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

Примітки

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

Посилання

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