Streit Group Cobra
- 1 year ago
- 0
- 0
Cobra — алгоритм симметричного блочного шифрования (размер блока 128 бит, ключ длиной до 576 бит), разработанный немецким криптологом Кристианом Шнайдером в качестве первого шифра, имеющего структуру гетерогенной сети Фейстеля ( англ. extended Feistel network ).
Алгоритм имеет структуру гетерогенной сети Фейстеля. Данная сеть, в отличие от классической, подразумевает использование более чем двух подблоков. Дополнительно, шифр использует несколько наборов зависимых от ключа таблиц подстановки (S-блоков, именуемых автором как англ. S-units ) и дополнительную операцию для повышения диффузии.
Cobra - шифр со 128-битным (16-байтным) блоком и переменной длиной ключа. Алгоритм состоит из двух частей: процедуры расширения ключа и процедуры шифрования. Ключ (длиной до 576 бит) расширяется до массива подключей длиной 12464 байта. Шифрование заключается в операции ввода, повторения раундовой функции 12 раз и операции вывода.
Процедура шифрования включает предварительное и последующее ключевое забеливание.
Один раунд расширенной сети Фейстеля в общем случае выглядит следующим образом:
D
i
= A
i-1
C
i
= D
i-1
XOR F(D i; K i,c)
B
i
= C
i-1
XOR F(C i; K i,b)
A
i
= B
i-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, S a , как выход, где r является текущим раудом.
Классические шифры на основе сети Фейстеля (к примеру, отечественный стандарт шифрования ГОСТ 28147—89 ) сильно зависимы от используемой таблицы подстановки, которая и является нелинейной частью алгоритма. Но, как и в алгоритме Blowfish , таблицы подстановки могут быть секретными и зависимыми от ключа. В данном случае, таблицы S-Box генерируются ключевым расписанием, которое является своего рода криптографическим ГПСЧ. В данном случае, естественно, не исключено наличие слабых ключей и генерируемых ими слабых таблиц подстановки. Однако, для решения данной проблемы введена генерация нескольких независимых таблиц и дополнительная операция диффузии. В данном случае, вероятность появления слабого ключа настолько мала, что может не учитываться. Этот тезис особенно верен, а подход практичен при использовании в качестве ключевого материала выхода хеш-функции.
Алгоритм, хотя и не получил широкого распространения, был реализован в популярной криптоутилите Blowfish Advanced 97 Маркуса Хана, где использовался его вариант с 64-битным блоком и ключом 256 бит. Затем в следующей редакции утилиты - версии CS была реализована редакция с 128-битным блоком и ключом до 576 бит.