Diamond2

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

Майкл Пол Джонсон

Создан:

1995 г.

Опубликован:

1995 г.

Размер ключа:

128 (8-65536) бит с шагом 8 бит

Размер блока:

128 бит

Число раундов:

10 (10-15)

Тип:

Подстановочно-перестановочная сеть

Diamond2 — в криптографии симметричный блочный криптоалгоритм, разработанный Майклом Полом Джонсоном в 1995 году. В алгоритме используется 128-битный блок и ключ произвольной длины, по умолчанию 128 бит.

Безопасность[править | править код]

Целью создания шифра была разработка устойчивого ко всем существующим видам атак алгоритма с запасом прочности на длительное время и возможностью использования простого сгенерированного ключа. Размер ключа при этом выбирается в зависимости от необходимого уровня защиты и наличия возможности использовать большой массив ключевого материала. На данный момент существует ряд хэш-функций с переменным выходным блоком (к примеру, Skein), которые могут быть использованы для создания ключевого материала длиной более 512 бит. При этом автор заявляет о 128 битах энтропии, необходимой для надёжной защиты. При условии отсутствия специальных видов атак, атака грубой силой против ключа длиной 128 бит будет технически невозможна на существующем оборудовании в обозримом будущем. Для этого также применяется довольно сложная и сравнительно медленная функция расширения и установки ключа. Полагается, что смена ключа будет производиться значительно реже операций зашифровки и расшифровки как в программной, так и в аппаратной реализациях. Использование блока длиной 128 бит, нетипичной для шифров во время разработки Diamond2, обосновано необходимостью затруднения атак грубой силой с использованием предварительно сгенерированных таблиц.

Несмотря на заявленную близость к идеальному шифру, алгоритм не получил широкого распространения. Хотя шифр был опубликован в 1995 году, за 13 лет не было произведено детальных исследований криптостойкости Diamond2. Фактически данный блочный шифр используется в некоторых приложениях в качестве одного из дополнительно доступных алгоритмов симметричного шифрования[1], также шифр реализован в некоторых криптографических библиотеках.

Описание алгоритма[править | править код]

Концепция разработки[править | править код]

  1. Линейные функции и комбинации функций могут часто решаться аналитическими способами, которые неочевидны для автора шифра и должны быть исключены. Сюда включаются стандартные арифметические функции, математика в конечных полях и булева алгебра.
  2. Реверсивные блочные шифры с размером блока n бит могут быть рассмотрены как простой шифр подстановки на алфавите 2n символов, с ключом, который выбирает используемую перестановку.
  3. Простые шифры подстановки могут быть представлены с таблицей поиска или массивом, но практически требуемый массив является слишком большим для практичного размещения в ОЗУ.
  4. Адекватное подмножество таблицы поиска с завышенными размерами может быть моделировано, просто прослаивая раунды подстановки субблоков с разрядными перестановками, которые служат для распространения функциональных зависимостей за границы субблока.

Алгоритм[править | править код]

Блочный шифр Diamond2 состоит из трёх основных частей: 1 — ключевое расписание, 2 — шаги подстановки, 3 — шаги перестановки. Шифрование и расшифровка состоят из n раундов операций подстановки, где n — по крайней мере 10. Каждая операция подстановки берёт каждый из 16 входных байтов по 8 битов каждый и заменяет их другими байтами. Это производится из содержимого массива подстановки на основе позиции байта и числа раунда. Операция ключевого расписания заполняет внутренние массивы подстановки, основанные на ключе. Между каждой подстановкой установленный шаг перестановки использует процесс выборки бит, чтобы сделать каждый байт вывода функцией восьми различных входных байтов. В отличие от DES каждый раунд изменяет каждый байт входного блока (вместо только половины входного блока). После 5 раундов каждый бит выходного блока — нелинейная функция каждого бита входного блока и каждого бита ключа. Дополнительные раунды после пятого раунда используются, чтобы гарантировать, что вычисление содержимого индивидуальных массивов подстановки будет сложнее, чем атака грубой силой на шифр. Они также служат для увеличения числа возможных функциональных зависимостей от ключа, таким образом делая этот алгоритм ближе к идеальному блочному шифру и усложняя криптоанализ.

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

Ссылки[править | править код]