Сеть Фейстеля

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Сеть Фе́йстеля (конструкция Фейстеля) — один из методов построения блочных шифров. Сеть представляет собой определённую многократно повторяющуюся (итерированную) структуру, называющуюся ячейкой Фейстеля. При переходе от одной ячейки к другой меняется ключ, причём выбор ключа зависит от конкретного алгоритма. Операции шифрования и расшифрования на каждом этапе очень просты, и при определённой доработке совпадают, требуя только обратного порядка используемых ключей. Шифрование при помощи данной конструкции легко реализуется как на программном уровне, так и на аппаратном, что обеспечивает широкие возможности применения. Большинство современных блочных шифров используют сеть Фейстеля в качестве основы. Альтернативой сети Фейстеля является подстановочно-перестановочная сеть.

История[править | править исходный текст]

В 1971 году Хорст Фейстель (Horst Feistel) запатентовал два устройства, реализовавшие различные алгоритмы шифрования, названные затем общим названием «Люцифер» (Lucifer). Одно из устройств использовало конструкцию, впоследствии названную «сетью Фейстеля» («Feistel cipher», «Feistel network»). Работа над созданием новых криптосистем велась им в стенах IBM вместе с Доном Копперсмитом (Don Coppersmith). Проект «Люцифер» был скорее экспериментальным, но стал базисом для алгоритма Data Encryption Standard (DES). В 1973 году Хорст Фейстель в журнале Scientific American опубликовал статью «Криптография и Компьютерная безопасность»[1][2] («Cryptography and Computer Privacy»), в которой раскрыл ряд важных аспектов шифрования и привёл описание первой версии проекта «Люцифер», не использовавшей сеть Фейстеля. В 1977 году DES стал стандартом в США на шифрование данных, и до последнего времени широко использовался в криптографических системах. Итеративная структура алгоритма позволяла упростить его реализацию в программных и аппаратных средах. Согласно некоторым данным[3] уже в 1970-е годы в КГБ (СССР) разрабатывался блочный шифр, использовавший сеть Фейстеля, и, вероятно, именно он позднее был принят в качестве ГОСТ 28147-89 в 1990 году.

В 1987 году были разработаны алгоритмы FEAL и RC2. Широкое распространение сети Фейстеля получили в 1990-е годы, когда появились такие алгоритмы, как: Blowfish, CAST-128, TEA, XTEA, XXTEA, RC5, RC6 и др. 2 января 1997 года NIST объявило конкурс по созданию нового стандарта шифрования данных, пришедшего на замену DES. Новый блочный шифр был утверждён 26 мая 2002 года под названием Advanced Encryption Standard и вместо сети Фейстеля использует SP-сеть.

Конструкция блочного шифра на основе сетей Фейстеля[править | править исходный текст]

Шифрование
Расшифрование

Простое описание[править | править исходный текст]

Шифрование[править | править исходный текст]

Рассмотрим случай, когда мы хотим зашифровать некоторую информацию, представленную в двоичном виде в компьютерной памяти (например, файл) или электронике, как последовательность нулей и единиц.

  • Вся информация разбивается на блоки фиксированной длины. В случае, если длина входного блока меньше, чем размер, который шифруется заданным алгоритмом, то блок удлиняется каким-либо способом. Как правило длина блока является степенью двойки, например: 64 бита, 128 бит. Далее будем рассматривать операции происходящие только с одним блоком, так как с другими в процессе шифрования выполняются те же самые операции.
  • Выбранный блок делится на два равных подблока — «левый» (L_0) и «правый» (R_0).
  • «Левый подблок» L_0 видоизменяется функцией f(L_0, K_0) в зависимости от раундового ключа K_0, после чего он складывается по модулю 2 с «правым подблоком» R_0.
  • Результат сложения присваивается новому левому подблоку L_1, который будет половиной входных данных для следующего раунда, а «левый подблок» L_0 присваивается без изменений новому правому подблоку R_1 (см. схему), который будет другой половиной.
  • После чего операция повторяется N-1 раз, при этом при переходе от одного этапа к другому меняются раундовые ключи (K_0 на K_{1} и т. д.) по какому-либо математическому правилу, где N — количество раундов в заданном алгоритме.

Расшифрование[править | править исходный текст]

Расшифровка информации происходит так же, как и шифрование, с тем лишь исключением, что ключи идут в обратном порядке, то есть не от первого к N-ному, а от N-го к первому.

Алгоритмическое описание[править | править исходный текст]

  • блок открытого текста делится на 2 равные части (L_0,\  R_0)
  • в каждом раунде вычисляется (i=1\ldots n — номер раунда)

L_i\ =\ R_{i-1}\oplus f(L_{i-1},K_{i-1})

R_i\ =\ L_{i-1},

где f — некоторая функция, а K_{i-1} — ключ i-го раунда.

Результатом выполнения n раундов является (L_n,\  R_n). Но обычно в n-ом раунде перестановка L_n и R_n не производится, что позволяет использовать ту же процедуру и для расшифрования, просто инвертировав порядок использования раундовой ключевой информации:

L_{i-1}\ =\ R_{i}\oplus f(L_{i},\ K_{i-1})

R_{i-1}\ =\ L_i,

Небольшим изменением можно добиться и полной идентичности процедур шифрования и расшифрования.

Одно из преимуществ такой модели — обратимость алгоритма независимо от используемой функции f, и она может быть сколь угодно сложной.

Математическое описание[править | править исходный текст]

Инволюция[4] — взаимно-однозначное преобразование, которое является обратным самому себе. Рассмотрим на примере: Пусть X — входной блок, а A — некоторое инволютивное преобразование, Y — результат. При однократном применении преобразования к входному блоку получится: Y=AX, при применении преобразования к результату предыдущего преобразования получится: AY=A^2X=AAX=X,  \forall X.

Пусть входной блок X=(L, R) состоит из двух подблоков (L и R) равной длины. Определим два преобразования G(X, K)=(L \oplus F(K, R), R) (шифрование ключом K) и T(L, R)=(R, L) (перестановка подблоков). Введём обозначения: \tilde{X} = (\tilde{L}, \tilde{R}) = GX,\ \tilde{\tilde{X}} = (\tilde{\tilde{L}}, \tilde{\tilde{R}}) = G^2X

Докажем их инволютивность:

  1. Несложно заметить, что преобразование G меняет только левый подблок L, оставляя правый R неизменным. Поэтому далее будем рассматривать только подблок L. После того как преобразование G будет дважды применено к L получим:\tilde{\tilde{L}} = \tilde{L}\oplus F(K, \tilde{R}) = \tilde{L}\oplus F(K, R) = L\oplus F(K, R) \oplus F(K, R) = L. Таким образом G^2X = X, следовательно G — инволюция.
  2. T^2X = T^2(L, R) = T(R, L) = (L, R) = X.

Рассмотрим сам процесс шифрования. Определим X как входное значение. Пусть G_i — преобразование с ключом K_i, а Y_i — выходное значение после i-го раунда. Тогда преобразование на i+1-м раунде можно записать в виде Y_{i+1} = TG_iY_i, кроме первого, где Y_1=TG_1X. Следовательно, выходное значение после m раундов шифрования будет Y_m = TG_mY_{m-1} = TG_mTG_{m-1}\ldots TG_1X. Можно заметить, что на последнем этапе не обязательно выполнять перестановку T.

Расшифрование ведётся применением всех преобразований в обратном порядке. В силу инволютивности каждого из преобразований обратный порядок даёт исходный результат:

X = G_1TG_2T\ldots G_{m-1}TG_mT(Y_m) = G_1TG_2T\ldots G_{m-1}T(Y_{m-1})= \ldots = G_1T(Y_1) = X.

Функции, используемые в сетях Фейстеля[править | править исходный текст]

В своей работе «Криптография и Компьютерная безопасность» Хорст Фейстель описывает два различных блока преобразований (функций f(L_{i},\ K_{i})) — блок подстановок (S-блок) и блок перестановок (P-блок). Можно показать, что любое двоичное преобразование над двоичным блоком фиксированной длины, сводятся к S-блоку, но на практике в силу сложности строения n-разрядного S-блока при больших n, применяют более простые конструкции.

Термин «блок» в оригинальной статье используется вместо функции вследствие того, что речь идёт о блочном шифре и предполагалось, что S- и P-блоки будут цифровыми микросхемами (цифровыми блоками).

Принципиальная схема 3-разрядного S-блока
Принципиальная схема 8-разрядного P-блока

S-блок (S-box)[править | править исходный текст]

Блок подстановок (S-блок) состоит из дешифратора, преобразующего n-разрядный двоичный сигнал в одноразрядный сигнал по основанию 2^n, системы коммутаторов внутренних соединений (всего возможных соединений 2^n!) и шифратора, переводящего сигнал из одноразрядного 2^n-ричного в n-разрядный двоичный. Анализ n-разрядного S-блока при большом n крайне сложен, однако реализовать такой блок на практике очень сложно, так как число возможных соединений крайне велико (2^n!). На практике блок подстановок используется как часть более сложных систем.

В общем случае S-блок может иметь несовпадающее число входов/выходов, в этом случае в системе коммутации от каждого выхода дешифратора может идти не строго одно соединение, а 2 или более или не идти вовсе. То же самое справедливо и для входов шифратора.

В электронике можно непосредственно применять приведённую справа схему, в программировании же генерируют таблицы замены. Оба этих подхода являются эквивалентными, то есть файл, зашифрованный на компьютере, можно расшифровать на электронном устройстве и наоборот.

Таблица замены для приведённого 3-разрядного S-блока
№ комбинации 0 1 2 3 4 5 6 7
Вход 000 001 010 011 100 101 110 111
Выход 011 000 001 100 110 111 010 101

P-блок (P-box)[править | править исходный текст]

Блок перестановок всего лишь изменяет положение цифр и является линейным устройством. Этот блок может иметь очень большое количество входов-выходов, однако в силу линейности систему нельзя считать криптоустойчивой. Криптоанализ ключа для n-разрядного P-блока проводится путём подачи на вход n-1 различных сообщений, каждое из которых состоит из n-1 нуля («0») и 1 единицы («1»).

Циклический сдвиг[править | править исходный текст]

Циклический сдвиг влево на 3 разряда 8-битной шины

Можно показать, что циклический сдвиг является частным случаем P-блока.

В простейшем случае (сдвиг на 1 бит), крайний бит отщепляется и перемещается на другой конец регистра или шины. В зависимости от того какой бит берётся, правый или левый, сдвиг называется вправо или влево. Сдвиги на большее число бит можно рассматривать, как многократное применение сдвига на 1.

Циклический сдвиг на m бит для n-разрядного входа (m < n)
Направление сдвига Порядок следования битов до сдвига Порядок следования битов после сдвига
влево b_0,b_1,b_2, ... , b_{n-1} b_m, b_{m+1}, ... b_{n-1}, b_0, b_1, ... , b_{m-1}
вправо b_0,b_1,b_2, ... , b_{n-1} b_{n-m}, b_{n-m+1}, ... b_{n-1}, b_0, b_1, ... , b_{n-m-1}

Сложение по модулю n[править | править исходный текст]

Обозначение операции — (A + B) mod n — это остаток от деления суммы A + B на n, где A и B — складываемые числа.

Можно показать, что сложение двух чисел по модулю n представляется в двоичной системе счисления, как S-блок, у которого на вход подаётся число A, а в качестве системы коммутации S-блока используется циклический сдвиг влево на B разрядов.

В компьютерной технике и электронике операция сложения, как правило, реализована как сложение по модулю n = 2 ^ m, где m — целое (обычно m равно разрядности машины). Для получения в двоичной системе A + B mod 2^m достаточно сложить числа, после чего отбросить разряды начиная с m-того и старше.

Умножение по модулю n[править | править исходный текст]

Обозначение операции — (A * B) mod n — это остаток от деления произведения A * B на n, где A и B — перемножаемые числа.

В персональных компьютерах на платформе x86 при перемножении двух m-разрядных чисел получается число разрядностью 2*m. Чтобы получить остаток от деления на 2^m нужно отбросить m старших бит.

Пример реализации на языке Си[править | править исходный текст]

Общий вид алгоритма шифрования, использующего сеть Фейстеля:

/* функция преобразования подблока по ключу (зависит от конкретного алгоритма)
subblock - преобразуемый подблок
key - ключ
возвращаяемое значение - преобразованный блок*/
int f(int subblock, int key); 
 
/*Шифрование открытого текста
left - левый входной подблок
right - правый входной подблок
* key - массив ключей (по ключу на раунд)
rounds - количество раундов*/
void crypt(int *left, int *right, int rounds, int *key)
{
	int i, temp;
	for(i = 0; i < rounds; i++)
	{
		temp = *right ^ f(*left, key[i]);
		*right = *left;
		*left = temp;
	}
}
 
/*Расшифрование текста
left - левый зашифрованный подблок
right - правый зашифрованный подблок*/
void decrypt(int *left, int *right, int rounds, int *key)
 {
	int i, temp;
	for(i = rounds - 1; i >= 0; i--)
	{
		temp = *left ^ f(*right, key[i]);
		*left = *right;
		*right = temp;
	}	
 }

Достоинства и недостатки[править | править исходный текст]

Достоинства:

  • Простота аппаратной реализации на современной электронной базе
  • Простота программной реализации в силу того, что значительная часть функций поддерживается на аппаратном уровне в современных компьютерах (например, сложение по модулю 2, сложение по модулю 2^n, умножение по модулю 2^n, и т. д.)
  • Хорошая изученность алгоритмов на основе сетей Фейстеля[5]

Недостатки:

  • За один раунд шифруется только половина входного блока[6]

Теоретические исследования[править | править исходный текст]

Сети Фейстеля были широко изучены криптографами в силу их обширного распространения. В 1988 году Майкл Люби (Michael Luby) и Чарльз Ракофф (Charles Rackoff) провели исследования сети Фейстеля и доказали, что если раундовая функция является криптостойкой псевдослучайной, и используемые ключи независимы в каждом раунде, то 3-х раундов будет достаточно для того, чтобы блочный шифр являлся псевдослучайной перестановкой, тогда как четырёх раундов будет достаточно для того чтобы сделать сильную псевдослучайную перестановку.

Псевдослучайной перестановкой Люби и Ракофф назвали такую, которая устойчива к атаке с адаптивным выбором открытого текста, а сильной псевдослучайной перестановкой — псевдослучайную перестановку устойчивую к атаке с использованием выбранного шифрованного текста.

Иногда сеть Фейстеля в западной литературе называют «Luby-Rackoff block cipher» в честь Люби и Ракоффа, которые проделали большой объём теоретических исследований в этой области.

В дальнейшем, в 1997 году, Мони Наор (Moni Naor) и Омер Рейнголд (Omer Reingold) предложили упрощённый вариант конструкции Люби — Ракоффа из четырёх раундов, где в качестве первого и последнего раунда используются две попарно-независимые перестановки. Два средних раунда конструкции Наора — Рейнголда идентичны раундам в конструкции Люби — Ракоффа.[7]

Большинство же исследований посвящено изучению конкретных алгоритмов. Во многих блочных шифрах на основе сети Фейстеля были найдены те или иные уязвимости, однако в ряде случаев эти уязвимости являются чисто теоретическими и при нынешней производительности компьютеров использовать их на практике для взлома невозможно.

Модификации сети Фейстеля[править | править исходный текст]

При большом размере блоков шифрования (128 бит и более) реализация такой сети Фейстеля на 32-разрядных архитектурах может вызвать затруднения, поэтому применяются модифицированные варианты этой конструкции. Обычно используются сети с 4 ветвями. На рисунке показаны наиболее распространенные модификации. Также существуют схемы, в которых длины половинок L_0 и R_0 не совпадают. Они называются несбалансированными.

Алгоритм IDEA[8][править | править исходный текст]

Схема одной итерации
полного раунда алгоритма IDEA
International Data Encryption Algorithm InfoBox Diagram.svg
Operations.png

Примером алгоритма, использующим глубоко модифицированную сеть Фейстеля, является алгоритм IDEA. В нём 64-х битные входные блоки данных (обозначим за X_0) делятся на 4 подблока длиной 16 бит X_0 = \{ X^{(0)}X^{(1)}X^{(2)}X^{(3)}\}. На каждом этапе используется 6 16-ти битных ключей. Всего используется 8 основных этапов и 1 укороченный.

Формулы для вычисления значения подблоков на i-м раунде (для раундов c 1-го по 8-й):

Предвычисления:

A_{i} = ((X_{i-1}^{(0)}*K_{i}^{(1)}) \oplus (X_{i-1}^{(2)}+K_{i}^{(3)}))*K_{i}^{(5)}

B_{i} = (((X_{i-1}^{(1)}+K_{i}^{(2)} ) \oplus (X_{i-1}^{(3)}*K_{i}^{(4)}) + A_{i})*K_{i}^{(6)})

C_{i} = ((X_{i-1}^{(1)}+K_{i}^{(2)}) \oplus (X_{i-1}^{(3)}*K_{i}^{(4)}) + ((X_{i-1}^{(0)}*K_{i}^{(1)}) \oplus (X_{i-1}^{(2)}+K_{i}^{(3)}))*K_{i}^{(5)})*K_{i}^{(6)}


Финальные вычисления:

X_{i}^{(0)}\ =\ ( X_{i-1}^{(0)}*K_{i}^{(1)} ) \oplus B_{i}

X_{i}^{(1)}\ =\ ( X_{i-1}^{(2)}+K_{i}^{(3)} ) \oplus B_{i}

X_{i}^{(2)}\ =\ ( X_{i-1}^{(1)}+K_{i}^{(2)} ) \oplus (A_{i}+C_{i})

X_{i}^{(3)}\ =\ ( X_{i-1}^{(3)}*K_{i}^{(4)} ) \oplus (A_{i}+C_{i})

где K_{i}^{(j)} — j-й ключ на i-м раунде.

Формула для вычисления 9-го раунда:

X_{9}^{(0)}\ =\ X_{8}^{(0)}*K_{9}^{(1)}

X_{9}^{(1)}\ =\ X_{8}^{(2)}+K_{9}^{(2)}

X_{9}^{(2)}\ =\ X_{8}^{(1)}+K_{9}^{(3)}

X_{9}^{(3)}\ =\ X_{8}^{(3)}*K_{9}^{(4)}

Выходом функции будет Y=\{X_{9}^{(0)}X_{9}^{(1)}X_{9}^{(2)}X_{9}^{(3)}\}

Как видно одной из особенностей является то, что не используются S- и P-блоки в чистом виде, в качестве основных операций используют умножение по модулю 2^{16} + 1 = 65537 и сложение по модулю 2^{16} = 65536.

Шифры на основе сети Фейстеля[править | править исходный текст]

Люцифер (Lucifer)[править | править исходный текст]

Модуль, выбирающий используемую таблицу подстановок по битовому ключу
Упрощённая схема S- и P-слоёв в алгоритме «Люцифер» (июнь 1971)
Схема генерации и распространения единиц

Исторически, первым алгоритмом, использующим сеть Фейстеля, был алгоритм Люцифер, при работе над которым Фейстелем и была, собственно, разработана структура, которую затем стали называть «сетью Фейстеля». В июне 1971 года Фейстелем был получен американский патент № 3798359.[9]

Первая версия этого алгоритма использовала блоки и ключи длиной по 48 бит и не использовала конструкцию «сеть Фейстеля». Последующая модификация алгоритма была запатентована на имя Джона Л. Смитта (John Lynn Smith) в ноябре того же года (US Patent 3,796,830; Nov 1971)[10], и в патенте содержится как описание собственно самой «сети Фейстеля», так и конкретной функции шифрования. В ней использовались 64-разрядные ключи и 32-битные блоки. И, наконец, последняя версия предложена в 1973 году и оперировала с 128-битными блоками и ключами. Наиболее полное описание алгоритма «Люцифер» было приведено в статье Артура Соркина (Arthur Sorkin) «Люцифер. Криптографический алгоритм» («Lucifer, A Cryptographic Algorithm») в журнале Криптология (Cryptologia) за январь 1984.[11]

Хотя изначальная модификация «Люцифера» обходилась без «ячеек Фейстеля», она хорошо демонстрирует то, как только применением S- и P-блоков можно сильно исказить исходный текст. Структура алгоритма Люцифер образца июня 1971 года представляет собой «сэндвич» из слоёв двух типов, используемых по очереди — так называемые SP-сети (или подстановочно-перестановочная сеть). Первый тип слоя — P-блок разрядности 128 бит, за ним идёт второй слой, представляющий собой 32 модуля, каждый из которых состоит их двух четырёхбитных S-блоков, чьи соответствующие входы закорочены и на них подаётся одно и то же значение с выхода предыдущего слоя. Но сами блоки подстановок различны (отличаются таблицами замен). На выход модуля подаются значения только с одного из S-блоков, какого конкретно определяется одним из битов в ключе, номер которого соответствовал номеру S-блока в структуре. Упрощённая схема алгоритма меньшей разрядности и неполным числом раундов приведена на рисунке. В ней используется 16 модулей выбора S-блоков (всего 32 S-блока), таким образом такая схема использует 16-битный ключ.

Рассмотрим теперь, как будет меняться шифротекст, в приведённом выше алгоритме, при изменении всего одного бита. Для простоты возьмём таблицы замен S-блоков такими, что если на вход S-блока подаются все нули, то и на выходе будут все нули. В силу нашего выбора S-блоков, если на вход шифрующего устройства подаются все нули, то и на выходе устройства будут все нули. В реальных системах такие таблицы замен не используются, так как они сильно упрощают работу криптоаналитика, но в нашем примере они наглядно иллюстрируют сильную межсимвольную взаимосвязь при изменении одного бита шифруемого сообщения. Видно, что благодаря первому P-блоку единственная единица сдвигается перемещается в центр блока, затем следующий нелинейный S-блок «размножает» её, и уже две единицы за счёт следующего P-блока изменяют своё положение и т. д. В конце устройства шифрования, благодаря сильной межсимвольной связи, выходные биты стали сложной функцией от входных и от используемого ключа. В среднем на выходе половина бит будет равна «0» и половина «1».

По своей сути сеть Фейстеля является альтернативой сложным SP-сетям и используется намного шире. С теоретической точки зрения раундовая функция шифрования может быть сведена к SP-сети, однако сеть Фейстеля является более практичной, так как шифрование и дешифрование может вестись одним и тем же устройством, но с обратным порядком используемых ключей. Вторая и третья версия алгоритма (использующие сеть Фейстеля) оперировали над 32-битными блоками с 64-битным ключом и 128-битными блоками со 128-битными ключами. В последней (третьей) версии раундовая функция шифрования была устроена очень просто — сначала шифруемый подблок пропускался через слой 4-битных S-блоков (аналогично слоям в SP-сетях, только S-блок является константным и не зависит от ключа), затем к нему по модулю 2 добавлялся раундовый ключ, после чего результат пропускался через P-блок.

DES[править | править исходный текст]

Функция f(L_i, K_i) (где L_i — 32-разрядный входной блок на i-й итерации, K_i — 48-ми разрядный ключ на данной итерации) в алгоритме DES состоит из следующих операций:

  • Расширение входного блока L до 48 разрядов (некоторые входные разряды могут повторяться).
  • Сложение по модулю два с ключом K_i: \tilde{L_i} = L_i \oplus K_i.
  • Результат разбивается на 8 блоков длиной 6 бит каждый: \tilde{L_i} = \{\tilde{L_i}^{(0)}\tilde{L_i}^{(1)}\tilde{L_i}^{(2)}\tilde{L_i}^{(3)}\tilde{L_i}^{(4)}\tilde{L_i}^{(5)}\tilde{L_i}^{(6)}\tilde{L_i}^{(7)}\}.
  • Полученные блоки информации \tilde{L_i^{(j)}} подаются на блоки подстановок имеющие 6-ти разрядные входы и 4-разрядные выходы.
  • На выходе 4-х битные блоки объединяются в 32-х битный, который и является результатом функции f(L_i, K_i).

Полное число раундов в алгоритме DES — 16.

ГОСТ[править | править исходный текст]

Функция f(L_i, K_i) (где L_i и K_i — 32-хбитные числа) вычисляется следующим образом:

  • Складываются L_i и K_i по модулю 2^{32}:
    \tilde{L_i} = (L_i + K_i)\ \bmod\ 2^{32}.
  • Результат разбивается на 8 4-хбитных блоков, которые подаются на вход 4-хразрядных S-блоков (которые могут быть различными).
  • Выходы S-блоков объединяют в 32-хбитное число, которое затем сдвигается циклически на 11 битов влево.

Полученный результат является выходом функции.

Количество раундов в алгоритме ГОСТ 28147—89 равно 32.

Сравнительный список алгоритмов[править | править исходный текст]

Следующие блочные шифры используют классическую или модифицированную сеть Фейстеля в качестве своей основы:

Алгоритм Год Число раундов Длина ключа Размер блока Количество подблоков
Blowfish 1993 16 от 32 до 448 64 2
Camellia 2000 18/24 128/192/256 128 2
CAST-128 1996 12/16 40-128 64 2
CAST-256 1998 12×4=48 128/192/256 128 2
CIPHERUNICORN-A 2000 16 128/192/256 128 2
CIPHERUNICORN-E 1998 16 128 64 2
CLEFIA 2007 16 128/192/256 128 16
DEAL 1998 6 (8) (128/192) 256 128 2
DES 1977 16 56 64 2
DFC 1998 8 128/192/256 128  ?
FEAL 1987 4-32 64 64 2
ГОСТ 28147-89 1989[3] 32/16 256 64 2
IDEA 1991 8+1 128 64 4
KASUMI 1999 8 128 64 2
Khufu 1990 16-32/64 512 64 2
LOKI97 1997 16 128/192/256 128 2
Lucifer 1971 16 48/64/128 48/32/128 2
MacGuffin 1994 32 128 64 4
MAGENTA 1998 6/8 128/192/256 128 2
MARS 1998 32 128—1248 128 2
Mercy 2000 6 128 4096  ?
MISTY1 1995 4×n(8) 128 64 4
Raiden 2006 16 128 64 2
RC2 1987 16+2 8-128 64 4
RC5 1994 1-255(12) 0-2040(128) 32/64/128 2
RC6 1998 20 128/192/256 128 4
RTEA 2007 48/64 128/256 64 2
SEED 1998 16 128 128 2
Sinople 2003 64 128 128 4
Skipjack 1998 23 80 64 4
TEA 1994 64 128 64 2
Triple DES 1978 32/48 112/168 64 2
Twofish 1998 16 128/192/256 128 4
XTEA 1997 64 128 64 2
XTEA-3 1999 64 256 128 4
XXTEA 1998 12-64 128 64 2

Примечания[править | править исходный текст]

  1. Horst Feistel. Cryptography and Computer Privacy  (англ.)
  2. Хорст Файстель. Криптография и компьютерная безопасность. Перевод Андрея Винокурова
  3. 1 2 А. Винокуров. Алгоритм шифрования ГОСТ 28147-89, его использование и реализация для компьютеров платформы Intel x86
  4. ДИСКРЕТНАЯ МАТЕМАТИКА: АЛГОРИТМЫ. Симметричные системы и блочные шифры
  5. Журнал Byte. № 8 (60), август 2003. Современные алгоритмы шифрования, Сергей Панасенко
  6. Баричев С.Г., Гончаров В.В., Серов Р.Е. Основы современной криптографии. — М.: Горячая линия — Телеком, 2002. — 175 с. — (Специальность. Для высших учебных заведений). — 3000 экз. — ISBN 5-93517-075-2
  7. On The Construction of Pseudo-Random Permutation: Luby-Rackoff Revisited
  8. A. Menezes, P. van Oorschot, S. Vanstone. §7.6 IDEA // Handbook of Applied Cryptography. — CRC-Press, 1996. — P. 263. — (Discrete Mathematics and Its Applications). — ISBN 0-8493-8523-7
  9. U.S. Patent 3 798 359
  10. U.S. Patent 3 796 830
  11. Arthur Sorkin. Lucifer, A Cryptographic Algorithm. Cryptologia, Выпуск 8(1), Январь 1984, стр. 22—41, с дополнением в выпуске 8(3), стр. 260—261