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 три этапа:

  1. x1 = ci * xi, для i = 0 до 3 (Если на входе умножения одни единицы, то на выходе - тоже одни единицы.)

  2. Если младший значащий бит x0 = 1, то x0 = x0 A C. Если младший значащий бит x3 = 0, то x3 = x3 A C.

  3. 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.