- Общепризнанно, что начальная и заключительная перестановки криптографически бессмысленны, а поэтому должны быть исключены.
- Все скоростные реализации DES заранее вычисляют ключи для каждого раунда. Отсюда, нет причин не сделать эти вычисления более сложными.
- В отличие от DES, критерии проектирования S-блоков должны быть общедоступны.
В настоящее время к этому перечню Меркл, возможно, добавил бы «устойчивость к дифференциальному и линейному криптоанализу, ведь в то время эти методы вскрытия не были известны.
3.5.1 Алгоритм Khufu
Khufu - это 64-битовый блочный шифр. 64-битовый открытый тест сначала расщепляется на две 32-битовые половины, L и R. Над обеими половинами и определенными частями ключа выполняется операция XOR. Затем, аналогично DES, результаты проходят некоторую последовательность раундов. В каждом раунде младший значащий байт L используется как вход S-блока. У каждого S-блока 8 входных битов и 32 выходных бита. Далее выбранный в S-блоке 32-битовый элемент подвергается операции XOR с R. Затем L циклически сдвигается на число, кратное восьми битам, L и R меняются местами, и раунд завершается. Сам S-блок не статичен, он меняется каждые восемь раундов. Наконец, по окончании последнего раунда, над L и R выполняется операция XOR с другими частями ключа, и половины объединяются, образуя блок шифртекста.
Хотя части ключа используются для операции XOR с блоком шифрования в начале и конце исполнения алгоритма, главное назначение ключа - генерация S-блоков. Эти S-блоки секретны, по существу, это часть ключа. Полный размер ключа алгоритма Khufu равен 512 бит (64 байт), алгоритм предоставляет способ генерации S-блоков по ключу. Вопрос о достаточном числе раундов остается открытым. Как указывает Меркл, 8-раундовый алгоритм Khufu уязвим к вскрытию с подобранным открытым текстом. Он рекомендует использовать 16, 24 или 32 раунда. (Меркл ограничивает количество раундов числами, кратными восьми).
Поскольку S-блоки Khufu зависят от ключа и секретны, алгоритм устойчив к дифференциальному криптоанализу. Известна дифференциальная атака на 16-раундовый Khufu, которая восстанавливает ключ с помощью 231 подобранных открытых текстов, однако этот метод не удалось расширить на большее число раундов. Если принять, что лучший метод взлома Khufu - лобовое вскрытие, стойкость алгоритма впечатляет. 512-би-овый ключ обеспечивает сложность вскрытия 2512 - это огромное число в любом случае.
3.5.2. Алгоритм Khafre
Khafre - это вторая криптосистема, предложенная Мерклом. (Khufu (Хуфу) и Khafre (Хафр) - имена египетских фараонов). Конструкция этого алгоритма близка Khufu, однако он спроектирован для приложений, где невозможны предварительные вычисления. S-блоки не зависят от ключа. Вместо этого в Khafre используются фиксированные S-блоки. Блок шифрования подвергается операции XOR с ключом не только перед первым раундом и после последнего, но и после каждых восьми раундов шифрования.
Меркл предполагал, что в алгоритме Khafre следует использовать 64- или 128-битовые ключи и что в этом алгоритме понадобится большее число раундов, чем в Khufu. Это, наряду с тем, что каждый раунд Khafre сложнее раунда Khufu, делает Khafre менее скоростным. Зато алгоритму Khafre не нужны никакие предварительные расчеты, что ускорит шифрование небольших порций данных.
В 1990 году Бихам и Шамир применили свой метод дифференциального криптоанализа к алгоритму Khafre. Им удалось взломать 16-раундовый Khafre атакой с подобранным открытым текстом, используя около 1500 различных шифрований. На их персональном компьютере это заняло около часа. Преобразование этой атаки в атаку с известным открытым текстом потребует около 238 шифрований. Алгоритм Khafre с 24 раундами можно взломать с помощью атаки с подобранным открытым текстом за 253 шифрования, а с помощью атаки с известным открытым текстом – за 259 шифрования.
Алгоритмы Khufu и Khafre запатентованы. Исходный код этих алгоритмов приведен в патенте.
3.6. Алгоритм ММВ
Недовольство использованием в одном из криптоалгоритмов 64-битового блока шифрования привело к созданию Джоаной Дэймен алгоритма под названием ММВ (Modular Multiplication-based Block cipher - модулярный мультипликативный блочный шифр). В основе ММВ лежит смешивание операций различных алгебраических групп. ММВ - итеративный алгоритм, главным образом состоящий из линейных действий (XOR и использование ключа) и параллельного применения четырех крупных обратимых нелинейных подстановок. Эти подстановки определяются с помощью умножения по модулю 232-1 с постоянными множителями. В итоге появляется алгоритм, использующий 128-битовый ключ и 128-битовый блок.
Алгоритм ММВ оперирует 32-битовыми подблоками текста (х0, х1, х2, x3) и 32-битовыми подблоками ключа (k0, k1, k2, k3). Это упрощает реализацию алгоритма на современных 32-битовых процессорах. Чередуясь с операцией XOR, шесть раз используется нелинейная функция f. Вот этот алгоритм (все операции с индексами выполняются по модулю 4):
xi = xi Å ki для i = 0..3
f(х0, х1, х2, x3)
xi = xi Å ki+1 для i = 0..3
f(х0, х1, х2, x3)
xi = xi Å ki+2 для i = 0..3
f(х0, х1, х2, x3)
xi = xi Å ki для i = 0..3
f(х0, х1, х2, x3)
xi = xi Å ki+1 для i = 0..3
f(х0, х1, х2, x3)
xi = xi Å ki+2 для i = 0..3
f(х0, х1, х2, x3)
Функция f исполняется в три шага:
1. xi = сi * xi для i = 0..3 (Если на входе умножения одни единицы, то на выходе - тоже одни единицы).
2. Если младший значащий бит х0 = 1, то x0 = х0 Å С. Если младший значащий байт х3 = 0, то х3 = х3Å С.
3. xi = хi-1 Å xi Å хi+1 для i = 0..3.
Все операции с индексами выполняются по модулю 4. Операция умножения на шаге 1 выполняется по модулю 232-1. Специальный случай для данного алгоритма: если второй операнд равен 232-1, результат тоже равен 232-1. В алгоритме используются следующие константы:
С = 2ааааааа
c0 = 025f1cdb
c1 = 2*c0
с2=23 *с0
с3=27 *с0
Константа С - «простейшая» константа без круговой симметрии, высоким троичным весом и нулевым младшим значащим битом. У константы с0 есть другие особые характеристики. Константы c1, с2 и с3 - сдвинутые версии с0, и служат для предотвращения атак, основанных на симметрии.
Расшифрование выполняется в обратном порядке, Этапы 2 и 3 инверсны им самим. На этапе 1 вместо сi используется сi-1 . Значение с0-1 = 0dad4694 .
3.6.1. Стойкость алгоритма ММВ
Схема алгоритма ММВ обеспечивает на каждом раунде значительное и независимое от ключа рассеивание. ММВ изначально проектировался в расчете на отсутствие слабых ключей.
ММВ – это уже мертвый алгоритм. Это утверждение справедливо по многим причинам, хотя криптоанализ ММВ и не был опубликован. Во-первых, алгоритм проектировался без учета требования устойчивости к линейному криптоанализу. Устойчивость к дифференциальному криптоанализу обеспечил выбор мультипликативных множителей, но о существовании линейного криптоанализа авторы не знали.
Во-вторых, Эли Бихам реализовал эффективную атаку с подобранным ключом, использующую тот факт, что все раунды идентичны, а развертка ключа – просто циклический сдвиг на 32 бита. В третьих, несмотря на эффективность программной реализации ММВ, аппаратное исполнение менее эффективно по сравнению с DES.
Дэймен предлагает желающим улучшить алгоритм ММВ сначала проанализировать умножение по модулю с помощью линейного криптоанализа и подобрать новый множитель, а затем сделать константу С различной на каждом раунде. Затем улучшить развертку ключа, добавляя к ключам раундов константы с целью устранения смещения. Однако сам он не стал заниматься этим, а разработал алгоритм 3-Way.
3.7. Алгоритм Blowfish
Blowfish - это алгоритм, разработанный Брюсом Шнайером специально для реализации на больших микропроцессорах. Алгоритм Blowfish не запатентован. При проектировании алгоритма Blowfish Шнайер пытался удовлетворить следующим критериям:
- Скорость. Программа, реализующая алгоритм Blowfish на 32-битовых микропроцессорах, шифрует данные со скоростью 26 тактов на байт.
- Компактность. Для исполнения программной реализации алгоритма Blowfish достаточно 5 Кбайт памяти.
- Простота. В алгоритме Blowfish используются только простые операции: сложение, XOR и подстановка из таблицы по 32-битовому операнду. Анализ его схемы несложен, что снижает риск ошибок реализации алгоритма.
- Настраиваемая стойкость. Длина ключа Blowfish переменна и может достигать 448 бит.
Алгоритм Blowfish оптимизирован для применения в системах, не практикующих частой смены ключей, например, в линиях связи и программах автоматического шифрования файлов. При реализации на 32-битовых микропроцессорах с большим размером кэша данных, например, процессорах Pentium и PowerPC, алгоритм Blowfish заметно быстрее DES. Алгоритм Blowfish не годится для применения в случаях, где требуется частая смена ключей, например, в коммутаторах пакетов, или в качестве однонаправленной хэш-функции. Большие требования к памяти не позволяют использовать этот алгоритм в смарт-картах.