Cobra — алгоритм симметричного блочного шифрования (размер блока 128 бит, ключ длиной до 576 бит), разработанный немецким криптологом Кристианом Шнайдером в качестве первого шифра, имеющего структуру гетерогенной сети Фейстеля (англ. extended Feistel network).
Cobra | |
---|---|
Создатель | Кристиан Шнайдер, |
Создан | 1996 г. |
Опубликован | 13 апреля 1996 г. |
Размер ключа | 8-576 бит |
Размер блока | 128 бит |
Число раундов | 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 бит.
См. такжеПравить
СсылкиПравить
Для улучшения этой статьи желательно:
|