MMB-шифр


MMB-шифр (англ. modular multiplication-based block cipher — модульный блочный шифр, использующий умножение) — блочный алгоритм шифрования, основанный на операции умножения в конечной группе.

Блочный шифр, основанный на операции умножения в конечной группе (MMB) представляет собой блочный шифр, разработанный Йоан Дайменом в 1993 году как улучшение шифра IDEA. Основное новшество этого шифра заключается в использовании циклического умножения в группе Z2n−1. Создатели шифра предлагали сделать n=32, таким образом умножение будет производиться в группе Z4294967295. Также стоит отметить, что длина слов, с которыми будут производиться операции, равна n, то есть 32 в данном случае. Основная цель, которая преследовалась при создании этого шифра — создать шифр, устойчивый к дифференциальному криптоанализу. Недостатки в ключевом расписании были обнаружены Эли Бихамом, что, в комбинации с тем фактом, что шифр не был защищён от линейного криптоанализа, привело к использованию других шифров, например 3-Way шифра.

Нелинейность шифра возникает из-за операции умножения по модулю 232−1 (следует из названия шифра). Шифр состоит из шести раундов. Вектор инициализации и финальный шаг в данном шифре не используются. Размер ключа и блока в MMB равен 128 битам. Блок и ключ разделены на 4 32-битовых слова каждый x0, x1, x2, x3 и k0, k1, k2, k3 соответственно. В каждом раунде выполняются 4 преобразования над этими словами: σ[kj], γ, η, и θ над этими словами. Операции σ[kj], η, и θ — это инволюции.

σ[kj]: это преобразование добавляет ключ к тексту. Оно выполняет операцию XOR между частью ключа и сообщением следующим образом: σ[kj](x0, x1, x2, x3) = (x0 ⊕ kj0, x1 ⊕ kj1, x2 ⊕ kj2, x3 ⊕ kj3), где ⊕ обозначает исключающую-или операцию, а j обозначает номер раунда. Данное преобразование выполняется 7 раз, по одному разу в раунд и еще один раз после последнего раунда.

Преобразование γ производит умножение числа по модулю 232−1. Эта операция умножения — единственная нелинейная операция в этом шифре. В каждом раунде каждое 32-битное слово умножается на фиксированную константу, такую, чтобы результат умножения yi был:

G1 = 2⊗G0, G2 = 8⊗G0, G3 = 128⊗G0. Таким образом, результатом операции γ является вектор (y0, y1, y2, y3) = γ(x0, x1, x2, x3).