Cobra (шифр)

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
Cobra
Создатель Кристиан Шнайдер,
Создан 1996 г.
Опубликован 13 апреля 1996 г.
Размер ключа 8-576 бит
Размер блока 128 бит
Число раундов 12
Тип Сеть Фейстеля

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

Структура

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

См. также

Ссылки