MMB
Недовольство использованием в IDEA 64-битового блока шифрования привело к созданию Джоном Дэймоном алгоритма под названием MMB (Modular Multiplication-based Block cipher, модульный блочный шифр, использующий умножения) [385, 405, 406]. В основе MMB лежит теория, используемая и в IDEA: перемешивающие операции из различных групп. MMB - это итеративный алгоритм, главным образом состоящий из линейных действий (XOR и использование ключа) и параллельное использование четырех больших нелинейных изменяющих обычный порядок подстановок. Эти подстановки определяются с помощью умножения по модулю 232-1 с постоянными множителями. Результатом применения этих действий является алгоритм, использующий и 128-битовый ключ и 128-битовый блок.
MMB оперирует 32-битовыми подблоками текста (x0, x1, x2, x3) и 32-битовыми подблоками ключа (k0, k1, k2, k3). Это делает удобным реализацию алгоритма на современных 32-битовых процессорах. Чередуясь с XOR, шесть раз используется нелинейная функция f. Вот этот алгоритм (все операции с индексами выполняются по модулю 3):
xi = xi A ki, для i = 0 до 3
f(x0, x1, x2, x3)
xi = xi A ki+1, для i = 0 до 3
f(x0, x1, x2, x3)
xi = xi A ki+2, для i = 0 до 3
f(x0, x1, x2, x3)
xi = xi A ki, для i = 0 до 3
f(x0, x1, x2, x3)
xi = xi A ki+1, для i = 0 до 3
f(x0, x1, x2, x3)
xi = xi A ki+2, для i = 0 до 3
f(x0, x1, x2, x3)
У функции f три этапа:
-
x1 = ci * xi, для i = 0 до 3 (Если на входе умножения одни единицы, то на выходе - тоже одни единицы.)
-
Если младший значащий бит x0 = 1, то x0 = x0 A C. Если младший значащий бит x3 = 0, то x3 = x3 A C.
-
xi = xi-1 A xi A xi+1, для i = 0 до 3
Все операции с индексами выполняются по модулю 3. Операция умножения на этапе (1) выполняется по модулю 232-1. В данном алгоритме если второй операнд - это 232-1, то результат также равен 232-1. В алгоритме используются следующие константы:
C = 2aaaaaaa
c0 = 025f1cdb
cl = 2 * c0
c2= 23 * c0
c3 = 27 * c0
Константа C - это "простейшая" константа с высоким троичным весом, нулевым младшим значащим битом и без круговой симметрии. У константы c0 несколько иные характеристики. Константы cl, c2 и c3 являются смещенными версиями c0, и используются для предотвращения вскрытий основанных на симметрии. Подробности можно найти в [405].
Дешифрирование является обратным процессом. Этапы (2) и (3) заменяются на свою инверсию. На этапе (1) вместо ci-1 используется ci. ci-1 = 0dad4694.