MESH (шифр)

09.09.2021

В криптографии, MESH — блочный шифр, являющийся модификацией IDEA. Разработан Жорже Накахарой, Винсентом Рэйменом, Бартом Пренелем и Йоосом Вандевалле в 2002 году. В отличие от IDEA, MESH имеет более сложную раундовую структуру. Иной алгоритм генерации ключей позволяет MESH избегать проблемы слабых ключей.

Структура шифра

Каждый раунд в IDEA и MESH состоит из операций сложения и умножения. Последовательность таких вычислений в пределах одного раунда образует MA-бокс. Все MA-боксы в MESH используют минимум три чередующихся уровня сложений и умножений (по схеме «зиг-заг»), в то время, как в IDEA таковых только два. Это делает MESH более стойким против дифференциальной и линейной криптоатак. Также, с целью избежать проблемы слабых ключей, в MESH используются два следующих принципа:

  • Каждый подключ зависит от почти всех подключей, более точно — как минимум от шести предыдущих ключей нелинейно
  • Используются фиксированные константы. Без них, например, ключ из всех нулей перешел бы в подключи, каждый из которых равнялся бы нулю в любом раунде

Как и в IDEA, MESH использует следующие операции:

  • умножение по модулю 2 16 + 1 {displaystyle 2^{16}+1} , причем вместо нуля используется 2 16 {displaystyle 2^{16}} ( ⊙ {displaystyle odot } )
  • циклический сдвиг влево на n {displaystyle n} бит ( ⋘   n {displaystyle lll n} )
  • сложение по модулю 2 16 {displaystyle 2^{16}} ( ⊞ {displaystyle oxplus } )
  • побитовое исключающее ИЛИ ( ⊕ {displaystyle oplus } )

Операции расположены в порядке уменьшения приоритета. В вычислениях запись A k ( i ) {displaystyle A_{k}^{(i)}} обозначает 16-битное слово. Индексы описываются далее.

MESH описывается в трех вариациях по размерам блока: 64, 96, 128 бит. Размер ключа при этом берется вдвое больший.

MESH-64

В данной вариации размер блока составляет 64 бит, ключ — 128 бит. Шифрование проходит в 8,5 раунда. Половина раунда относится к выходным преобразованиям.

Раундовые преобразования

Обозначим входную информацию для i {displaystyle i} -го раунда:
X ( i )   =   ( X 1 ( i ) ,   X 2 ( i ) ,   X 3 ( i ) ,   X 4 ( i ) ) ,   i = 1...9 {displaystyle X^{(i)} = (X_{1}^{(i)}, X_{2}^{(i)}, X_{3}^{(i)}, X_{4}^{(i)}), i=1...9}

Каждый раунд состоит из двух частей: перемешивание входных данных с подключами и MA-вычисления. На четных и нечетных раундах перемешивание происходит по-разному:

  • Для нечетных раундов:

( Y 1 ( i ) ,   Y 2 ( i ) ,   Y 3 ( i ) ,   Y 4 ( i ) )   =   ( X 1 ( i )   ⊙   Z 1 ( i ) ,   X 2 ( i )   ⊞   Z 2 ( i ) ,   X 3 ( i )   ⊞   Z 3 ( i ) ,   X 4 ( i )   ⊙   Z 4 ( i ) ) {displaystyle (Y_{1}^{(i)}, Y_{2}^{(i)}, Y_{3}^{(i)}, Y_{4}^{(i)}) = (X_{1}^{(i)} odot Z_{1}^{(i)}, X_{2}^{(i)} oxplus Z_{2}^{(i)}, X_{3}^{(i)} oxplus Z_{3}^{(i)}, X_{4}^{(i)} odot Z_{4}^{(i)})}

  • Для четных раундов:

( Y 1 ( i ) ,   Y 2 ( i ) ,   Y 3 ( i ) ,   Y 4 ( i ) )   =   ( X 1 ( i )   ⊞   Z 1 ( i ) ,   X 2 ( i )   ⊙   Z 2 ( i ) ,   X 3 ( i )   ⊙   Z 3 ( i ) ,   X 4 ( i )   ⊞   Z 4 ( i ) ) {displaystyle (Y_{1}^{(i)}, Y_{2}^{(i)}, Y_{3}^{(i)}, Y_{4}^{(i)}) = (X_{1}^{(i)} oxplus Z_{1}^{(i)}, X_{2}^{(i)} odot Z_{2}^{(i)}, X_{3}^{(i)} odot Z_{3}^{(i)}, X_{4}^{(i)} oxplus Z_{4}^{(i)})}

Преобразования, выполняемые MA-боксами, одинаковы для всех раундов. Входные данные для них получаются следующим образом:
( Y 5 ( i ) ,   Y 6 ( i ) )   =   ( Y 1 ( i )   ⊕   Y 3 ( i ) ,   Y 2 ( i )   ⊕   Y 4 ( i ) ) {displaystyle (Y_{5}^{(i)}, Y_{6}^{(i)}) = (Y_{1}^{(i)} oplus Y_{3}^{(i)}, Y_{2}^{(i)} oplus Y_{4}^{(i)})}

МА-вычисления описываются следующими формулами:
Y 7 ( i )   =   ( ( Y 5 ( i )   ⊙   Z 5 ( i )   ⊞   Y 6 ( i ) )   ⊙   Z 6 ( i )   ⊞   ( Y 5 ( i )   ⊙   Z 5 ( i ) ) )   ⊙   Z 7 ( i ) {displaystyle Y_{7}^{(i)} = ((Y_{5}^{(i)} odot Z_{5}^{(i)} oxplus Y_{6}^{(i)}) odot Z_{6}^{(i)} oxplus (Y_{5}^{(i)} odot Z_{5}^{(i)})) odot Z_{7}^{(i)}}
Y 8 ( i )   =   Y 7 ( i )   ⊞   ( ( Y 5 ( i )   ⊙   Z 5 ( i )   ⊞   Y 6 ( i ) )   ⊙   Z 6 ( i ) ) {displaystyle Y_{8}^{(i)} = Y_{7}^{(i)} oxplus ((Y_{5}^{(i)} odot Z_{5}^{(i)} oxplus Y_{6}^{(i)}) odot Z_{6}^{(i)})}

Используя результаты, полученные MA-боксами, находим входные данные для следующего раунда:
X ( i + 1 )   =   ( Y 1 ( i )   ⊕   Y 8 ( i ) ,   Y 3 ( i )   ⊕   Y 8 ( i ) ,   Y 2 ( i )   ⊕   Y 7 ( i ) ,   Y 4 ( i )   ⊕   Y 7 ( i ) ) {displaystyle X^{(i+1)} = (Y_{1}^{(i)} oplus Y_{8}^{(i)}, Y_{3}^{(i)} oplus Y_{8}^{(i)}, Y_{2}^{(i)} oplus Y_{7}^{(i)}, Y_{4}^{(i)} oplus Y_{7}^{(i)})}

Согласно схеме, для получения зашифрованного сообщения необходимо после восьмого раунда провести перемешивание по нечетной схеме ( i = 9 ) {displaystyle (i=9)}

Генерация ключей

Для генерации ключей используется 128-битный пользовательский ключ, а также 16-битные константы c i {displaystyle c_{i}} : c 0   =   1 {displaystyle c_{0} = 1} , c i   =   3 ∗ c i − 1 {displaystyle c_{i} = 3*c_{i-1}} , они вычисляются в Поле Галуа G F ( 2 16 ) {displaystyle GF(2^{16})} по модулю многочлена x 16   +   x 5   +   x 3   +   x 2   +   1 {displaystyle x^{16} + x^{5} + x^{3} + x^{2} + 1} . Пользовательский ключ разбивается на 8 16-битных слов K i ,   0   ⩽   i   ⩽   7 {displaystyle K_{i}, 0 leqslant i leqslant 7} .

Вычисление подключей происходит следующим образом:
Z i + 1 ( 1 )   =   K i   ⊕   c i ,   0   ⩽   i   ⩽   6 {displaystyle Z_{i+1}^{(1)} = K_{i} oplus c_{i}, 0 leqslant i leqslant 6}
Z 1 ( 2 )   =   K 7   ⊕   c 7 {displaystyle Z_{1}^{(2)} = K_{7} oplus c_{7}}
Z l ( i ) ( h ( i ) )   =   ( ( ( ( ( Z l ( i − 8 ) ( h ( i − 8 ) )   ⊞   Z l ( i − 7 ) ( h ( i − 7 ) ) )   ⊕   Z l ( i − 6 ) ( h ( i − 6 ) ) )   ⊞   Z l ( i − 3 ) ( h ( i − 3 ) ) )   ⊕   Z l ( i − 2 ) ( h ( i − 2 ) ) )   ⊞   Z l ( i − 1 ) ( h ( i − 1 ) ) )   ⋘   7   ⊕   c i , {displaystyle Z_{l(i)}^{(h(i))} = (((((Z_{l(i-8)}^{(h(i-8))} oxplus Z_{l(i-7)}^{(h(i-7))}) oplus Z_{l(i-6)}^{(h(i-6))}) oxplus Z_{l(i-3)}^{(h(i-3))}) oplus Z_{l(i-2)}^{(h(i-2))}) oxplus Z_{l(i-1)}^{(h(i-1))}) lll 7 oplus c_{i},}
где 8   ⩽   i   ⩽   59 ,   h ( i )   =   i   d i v   7   +   1 ,   l ( i )   =   i   mod   7   +   1 {displaystyle 8 leqslant i leqslant 59, h(i) = i div 7 + 1, l(i) = i {mod { }}7 + 1} .

Расшифровка

Для расшифровки MESH, как и IDEA, использует уже существующую схему, но с измененными раундовыми подключами. Обозначим подключи, использовавшиеся при шифровании, следующим образом:
( Z 1 ( r ) ,   . . . ,   Z 7 ( r ) ) ,   1   ⩽   r   ⩽   8 {displaystyle (Z_{1}^{(r)}, ..., Z_{7}^{(r)}), 1 leqslant r leqslant 8} - подключи полных раундов;
( Z 1 ( 9 ) ,   . . . ,   Z 4 ( 9 ) ) {displaystyle (Z_{1}^{(9)}, ..., Z_{4}^{(9)})} - подключи выходных преобразований.

Тогда подключи расшифровки задаются следующим образом:

  • ( ( Z 1 ( 9 ) ) − 1 ,   − Z 2 ( 9 ) ,   − Z 3 ( 9 ) ,   ( Z 4 ( 9 ) ) − 1 ,   Z 5 ( 8 ) ,   Z 6 ( 8 ) ,   Z 7 ( 8 ) ) {displaystyle ((Z_{1}^{(9)})^{-1}, -Z_{2}^{(9)}, -Z_{3}^{(9)}, (Z_{4}^{(9)})^{-1}, Z_{5}^{(8)}, Z_{6}^{(8)}, Z_{7}^{(8)})} , - первый раунд расшифровки;
  • ( − Z 1 ( 10 − r ) ,   ( Z 3 ( 10 − r ) ) − 1 ,   ( Z 2 ( 10 − r ) ) − 1 ,   − Z 4 ( 10 − r ) ,   Z 5 ( 9 − r ) ,   Z 6 ( 9 − r ) ,   Z 7 ( 9 − r ) ) {displaystyle (-Z_{1}^{(10-r)}, (Z_{3}^{(10-r)})^{-1}, (Z_{2}^{(10-r)})^{-1}, -Z_{4}^{(10-r)}, Z_{5}^{(9-r)}, Z_{6}^{(9-r)}, Z_{7}^{(9-r)})} , - r {displaystyle r} -й четный раунд, r   ∈   { 2 ,   4 ,   6 ,   8 } {displaystyle r in {2, 4, 6, 8}} ;
  • ( ( Z 1 ( 9 − r ) ) − 1 ,   − Z 3 ( 9 − r ) ,   − Z 2 ( 9 − r ) ,   ( Z 4 ( 9 − r ) ) − 1 ,   Z 5 ( 8 − r ) ,   Z 6 ( 8 − r ) ,   Z 7 ( 8 − r ) ) {displaystyle ((Z_{1}^{(9-r)})^{-1}, -Z_{3}^{(9-r)}, -Z_{2}^{(9-r)}, (Z_{4}^{(9-r)})^{-1}, Z_{5}^{(8-r)}, Z_{6}^{(8-r)}, Z_{7}^{(8-r)})} , - r {displaystyle r} -й нечетный раунд, r   ∈   { 3 ,   5 ,   7 } {displaystyle r in {3, 5, 7}} ;
  • ( ( Z 1 ( 1 ) ) − 1 ,   − Z 2 ( 1 ) ,   − Z 3 ( 1 ) ,   ( Z 4 ( 1 ) ) − 1 ) {displaystyle ((Z_{1}^{(1)})^{-1}, -Z_{2}^{(1)}, -Z_{3}^{(1)}, (Z_{4}^{(1)})^{-1})} , - выходные преобразования.

MESH-96

В данной вариации размер блока составляет 96 бит, ключ — 192 бит. Шифрование проходит в 10,5 раунда. Половина раунда относится к выходным преобразованиям.

Раундовые преобразования

Обозначим входную информацию для i {displaystyle i} -го раунда:
X ( i )   =   ( X 1 ( i ) ,   X 2 ( i ) ,   X 3 ( i ) ,   X 4 ( i ) ,   X 5 ( i ) ,   X 6 ( i ) ) ,   i = 1...11 {displaystyle X^{(i)} = (X_{1}^{(i)}, X_{2}^{(i)}, X_{3}^{(i)}, X_{4}^{(i)}, X_{5}^{(i)}, X_{6}^{(i)}), i=1...11}

Каждый раунд состоит из двух частей: перемешивание входных данных с подключами и MA-вычисления. На четных и нечетных раундах перемешивание происходит по-разному:

  • Для нечетных раундов:

( Y 1 ( i ) ,   Y 2 ( i ) ,   Y 3 ( i ) ,   Y 4 ( i ) ,   Y 5 ( i ) ,   Y 6 ( i ) )   =   ( X 1 ( i )   ⊙   Z 1 ( i ) ,   X 2 ( i )   ⊞   Z 2 ( i ) ,   X 3 ( i )   ⊙   Z 3 ( i ) ,   X 4 ( i )   ⊞   Z 4 ( i ) ,   X 5 ( i )   ⊙   Z 5 ( i ) ,   X 6 ( i )   ⊞   Z 6 ( i ) ) {displaystyle (Y_{1}^{(i)}, Y_{2}^{(i)}, Y_{3}^{(i)}, Y_{4}^{(i)}, Y_{5}^{(i)}, Y_{6}^{(i)}) = (X_{1}^{(i)} odot Z_{1}^{(i)}, X_{2}^{(i)} oxplus Z_{2}^{(i)}, X_{3}^{(i)} odot Z_{3}^{(i)}, X_{4}^{(i)} oxplus Z_{4}^{(i)}, X_{5}^{(i)} odot Z_{5}^{(i)}, X_{6}^{(i)} oxplus Z_{6}^{(i)})}

  • Для четных раундов:

( Y 1 ( i ) ,   Y 2 ( i ) ,   Y 3 ( i ) ,   Y 4 ( i ) ,   Y 5 ( i ) ,   Y 6 ( i ) )   =   ( X 1 ( i )   ⊞   Z 1 ( i ) ,   X 2 ( i )   ⊙   Z 2 ( i ) ,   X 3 ( i )   ⊞   Z 3 ( i ) ,   X 4 ( i )   ⊙   Z 4 ( i ) ,   X 5 ( i )   ⊞   Z 5 ( i ) ,   X 6 ( i )   ⊙   Z 6 ( i ) ) {displaystyle (Y_{1}^{(i)}, Y_{2}^{(i)}, Y_{3}^{(i)}, Y_{4}^{(i)}, Y_{5}^{(i)}, Y_{6}^{(i)}) = (X_{1}^{(i)} oxplus Z_{1}^{(i)}, X_{2}^{(i)} odot Z_{2}^{(i)}, X_{3}^{(i)} oxplus Z_{3}^{(i)}, X_{4}^{(i)} odot Z_{4}^{(i)}, X_{5}^{(i)} oxplus Z_{5}^{(i)}, X_{6}^{(i)} odot Z_{6}^{(i)})}

Преобразования, выполняемые MA-боксами, одинаковы для всех раундов. Входные данные для них получаются следующим образом:
( Y 7 ( i ) ,   Y 8 ( i ) ,   Y 9 ( i ) )   =   ( Y 1 ( i )   ⊕   Y 4 ( i ) ,   Y 2 ( i )   ⊕   Y 5 ( i ) ,   Y 3 ( i )   ⊕   Y 6 ( i ) ) {displaystyle (Y_{7}^{(i)}, Y_{8}^{(i)}, Y_{9}^{(i)}) = (Y_{1}^{(i)} oplus Y_{4}^{(i)}, Y_{2}^{(i)} oplus Y_{5}^{(i)}, Y_{3}^{(i)} oplus Y_{6}^{(i)})}

МА-вычисления описываются следующими формулами:
Y 10 ( i )   =   ( ( ( Y 7 ( i )   ⊙   Z 7 ( i )   ⊞   Y 8 ( i ) )   ⊙   Y 9 ( i )   ⊞   Z 8 ( i ) )   ⊙   ( Y 7 ( i )   ⊙   Z 7 ( i )   ⊞   Y 8 ( i ) )   ⊞   Y 7 ( i )   ⊙   Z 7 ( i ) )   ⊙   Z 9 ( i ) {displaystyle Y_{10}^{(i)} = (((Y_{7}^{(i)} odot Z_{7}^{(i)} oxplus Y_{8}^{(i)}) odot Y_{9}^{(i)} oxplus Z_{8}^{(i)}) odot (Y_{7}^{(i)} odot Z_{7}^{(i)} oxplus Y_{8}^{(i)}) oxplus Y_{7}^{(i)} odot Z_{7}^{(i)}) odot Z_{9}^{(i)}}
Y 11 ( i )   =   Y 10 ( i )   ⊞   ( ( Y 7 ( i )   ⊙   Z 7 ( i )   ⊞   Y 8 ( i ) )   ⊙   Y 9 ( i )   ⊞   Z 8 ( i ) )   ⊙   ( Y 7 ( i )   ⊙   Z 7 ( i )   ⊞   Y 8 ( i ) ) {displaystyle Y_{11}^{(i)} = Y_{10}^{(i)} oxplus ((Y_{7}^{(i)} odot Z_{7}^{(i)} oxplus Y_{8}^{(i)}) odot Y_{9}^{(i)} oxplus Z_{8}^{(i)}) odot (Y_{7}^{(i)} odot Z_{7}^{(i)} oxplus Y_{8}^{(i)})}
Y 12 ( i )   =   Y 11 ( i )   ⊙   ( ( Y 7 ( i )   ⊙   Z 7 ( i )   ⊞   Y 8 ( i ) )   ⊙   Y 9 ( i )   ⊞   Z 8 ( i ) ) {displaystyle Y_{12}^{(i)} = Y_{11}^{(i)} odot ((Y_{7}^{(i)} odot Z_{7}^{(i)} oxplus Y_{8}^{(i)}) odot Y_{9}^{(i)} oxplus Z_{8}^{(i)})}

Используя результаты, полученные MA-боксами, находим входные данные для следующего раунда:
X ( i + 1 )   =   ( Y 1 ( i )   ⊕   Y 12 ( i ) ,   Y 4 ( i )   ⊕   Y 12 ( i ) ,   Y 5 ( i )   ⊕   Y 11 ( i ) ,   Y 2 ( i )   ⊕   Y 11 ( i ) ,   Y 3 ( i )   ⊕   Y 10 ( i ) ,   Y 6 ( i )   ⊕   Y 10 ( i ) ) {displaystyle X^{(i+1)} = (Y_{1}^{(i)} oplus Y_{12}^{(i)}, Y_{4}^{(i)} oplus Y_{12}^{(i)}, Y_{5}^{(i)} oplus Y_{11}^{(i)}, Y_{2}^{(i)} oplus Y_{11}^{(i)}, Y_{3}^{(i)} oplus Y_{10}^{(i)}, Y_{6}^{(i)} oplus Y_{10}^{(i)})}

Для получения зашифрованного сообщения необходимо после 10-го раунда провести перемешивание по нечетной схеме ( i = 9 ) {displaystyle (i=9)}

Генерация ключей

Для генерации ключей используется 192-битный пользовательский ключ, а также 16-битные константы, такие же, как и для MESH-64.

Вычисление подключей происходит следующим образом:
Z i + 1 ( 1 )   =   K i   ⊕   c i ,   0   ⩽   i   ⩽   8 {displaystyle Z_{i+1}^{(1)} = K_{i} oplus c_{i}, 0 leqslant i leqslant 8}
Z 1 ( 2 )   =   K 9   ⊕   c 9 {displaystyle Z_{1}^{(2)} = K_{9} oplus c_{9}}
Z 2 ( 2 )   =   K 10   ⊕   c 10 {displaystyle Z_{2}^{(2)} = K_{10} oplus c_{10}}
Z 3 ( 2 )   =   K 11   ⊕   c 11 {displaystyle Z_{3}^{(2)} = K_{11} oplus c_{11}}
Z l ( i ) ( h ( i ) )   =   ( ( ( ( ( Z l ( i − 12 ) ( h ( i − 12 ) )   ⊞   Z l ( i − 8 ) ( h ( i − 8 ) ) )   ⊕   Z l ( i − 6 ) ( h ( i − 6 ) ) )   ⊞   Z l ( i − 4 ) ( h ( i − 4 ) ) )   ⊕   Z l ( i − 2 ) ( h ( i − 2 ) ) )   ⊞   Z l ( i − 1 ) ( h ( i − 1 ) ) )   ⋘   9   ⊕   c i , {displaystyle Z_{l(i)}^{(h(i))} = (((((Z_{l(i-12)}^{(h(i-12))} oxplus Z_{l(i-8)}^{(h(i-8))}) oplus Z_{l(i-6)}^{(h(i-6))}) oxplus Z_{l(i-4)}^{(h(i-4))}) oplus Z_{l(i-2)}^{(h(i-2))}) oxplus Z_{l(i-1)}^{(h(i-1))}) lll 9 oplus c_{i},}
где 12   ⩽   i   ⩽   95 ,   h ( i )   =   i   d i v   9   +   1 ,   l ( i )   =   i   mod   9   +   1 {displaystyle 12 leqslant i leqslant 95, h(i) = i div 9 + 1, l(i) = i {mod { }}9 + 1} .

Расшифровка

Для расшифровки MESH, как и IDEA, использует уже существующую схему, но с измененными раундовыми подключами. Обозначим подключи, использовавшиеся при шифровании, следующим образом:
( Z 1 ( r ) ,   . . . ,   Z 9 ( r ) ) ,   1   ⩽   r   ⩽   10 {displaystyle (Z_{1}^{(r)}, ..., Z_{9}^{(r)}), 1 leqslant r leqslant 10} — подключи полных раундов;
( Z 1 ( 11 ) ,   . . . ,   Z 6 ( 11 ) ) {displaystyle (Z_{1}^{(11)}, ..., Z_{6}^{(11)})} - подключи выходных преобразований.

Тогда подключи расшифровки задаются следующим образом:

  • ( ( Z 1 ( 11 ) ) − 1 ,   − Z 2 ( 11 ) ,   ( Z 3 ( 11 ) ) − 1 ,   − Z 4 ( 11 ) ,   ( Z 5 ( 11 ) ) − 1 ,   − Z 6 ( 11 ) ,   Z 7 ( 10 ) ,   Z 8 ( 10 ) ,   Z 9 ( 10 ) ) {displaystyle ((Z_{1}^{(11)})^{-1}, -Z_{2}^{(11)}, (Z_{3}^{(11)})^{-1}, -Z_{4}^{(11)}, (Z_{5}^{(11)})^{-1}, -Z_{6}^{(11)}, Z_{7}^{(10)}, Z_{8}^{(10)}, Z_{9}^{(10)})} , — первый раунд расшифровки;
  • ( − Z 1 ( 12 − r ) ,   ( Z 4 ( 12 − r ) ) − 1 ,   − Z 5 ( 12 − r ) ,   ( Z 2 ( 12 − r ) ) − 1 ,   − Z 3 ( 12 − r ) ,   ( Z 6 ( 12 − r ) ) − 1 ,   Z 7 ( 11 − r ) ,   Z 8 ( 11 − r ) ,   Z 9 ( 11 − r ) ) {displaystyle (-Z_{1}^{(12-r)}, (Z_{4}^{(12-r)})^{-1}, -Z_{5}^{(12-r)}, (Z_{2}^{(12-r)})^{-1}, -Z_{3}^{(12-r)}, (Z_{6}^{(12-r)})^{-1}, Z_{7}^{(11-r)}, Z_{8}^{(11-r)}, Z_{9}^{(11-r)})} , — r {displaystyle r} -й чётный раунд, r   ∈   { 2 ,   4 ,   6 ,   8 ,   10 } {displaystyle r in {2, 4, 6, 8, 10}} ;
  • ( ( Z 1 ( 11 − r ) ) − 1 ,   − Z 4 ( 11 − r ) ,   ( Z 5 ( 11 − r ) ) − 1 ,   − Z 2 ( 11 − r ) ,   ( Z 3 ( 11 − r ) ) − 1 ,   − Z 6 ( 11 − r ) ,   Z 7 ( 10 − r ) ,   Z 8 ( 10 − r ) ,   Z 9 ( 10 − r ) ) {displaystyle ((Z_{1}^{(11-r)})^{-1}, -Z_{4}^{(11-r)}, (Z_{5}^{(11-r)})^{-1}, -Z_{2}^{(11-r)}, (Z_{3}^{(11-r)})^{-1}, -Z_{6}^{(11-r)}, Z_{7}^{(10-r)}, Z_{8}^{(10-r)}, Z_{9}^{(10-r)})} , — r {displaystyle r} -й нечётный раунд, r   ∈   { 3 ,   5 ,   7 ,   9 } {displaystyle r in {3, 5, 7, 9}} ;
  • ( ( Z 1 ( 1 ) ) − 1 ,   − Z 2 ( 1 ) ,   ( Z 3 ( 1 ) ) − 1 ,   − Z 4 ( 1 ) ,   ( Z 5 ( 1 ) ) − 1 ,   − Z 6 ( 1 ) ) {displaystyle ((Z_{1}^{(1)})^{-1}, -Z_{2}^{(1)}, (Z_{3}^{(1)})^{-1}, -Z_{4}^{(1)}, (Z_{5}^{(1)})^{-1}, -Z_{6}^{(1)})} , — выходные преобразования.

MESH-128

В данной вариации размер блока составляет 128 бит, ключ — 256 бит. Шифрование проходит в 12,5 раунда. Половина раунда относится к выходным преобразованиям.

Раундовые преобразования

Обозначим входную информацию для i {displaystyle i} -го раунда:
X ( i )   =   ( X 1 ( i ) ,   X 2 ( i ) ,   X 3 ( i ) ,   X 4 ( i ) ,   X 5 ( i ) ,   X 6 ( i ) ,   X 7 ( i ) ,   X 8 ( i ) ) ,   i = 1...13 {displaystyle X^{(i)} = (X_{1}^{(i)}, X_{2}^{(i)}, X_{3}^{(i)}, X_{4}^{(i)}, X_{5}^{(i)}, X_{6}^{(i)}, X_{7}^{(i)}, X_{8}^{(i)}), i=1...13}

Каждый раунд состоит из двух частей: перемешивание входных данных с подключами и MA-вычисления. На чётных и нечётных раундах перемешивание происходит по-разному:

  • Для нечётных раундов:

( Y 1 ( i ) ,   Y 2 ( i ) ,   Y 3 ( i ) ,   Y 4 ( i ) ,   Y 5 ( i ) ,   Y 6 ( i ) ,   Y 7 ( i ) ,   Y 8 ( i ) )   = {displaystyle (Y_{1}^{(i)}, Y_{2}^{(i)}, Y_{3}^{(i)}, Y_{4}^{(i)}, Y_{5}^{(i)}, Y_{6}^{(i)}, Y_{7}^{(i)}, Y_{8}^{(i)}) =}
                          ( X 1 ( i )   ⊙   Z 1 ( i ) ,   X 2 ( i )   ⊞   Z 2 ( i ) ,   X 3 ( i )   ⊙   Z 3 ( i ) ,   X 4 ( i )   ⊞   Z 4 ( i ) ,   X 5 ( i )   ⊙   Z 5 ( i ) ,   X 6 ( i )   ⊞   Z 6 ( i ) ,   X 7 ( i )   ⊙   Z 7 ( i ) ,   X 8 ( i )   ⊞   Z 8 ( i ) ) {displaystyle (X_{1}^{(i)} odot Z_{1}^{(i)}, X_{2}^{(i)} oxplus Z_{2}^{(i)}, X_{3}^{(i)} odot Z_{3}^{(i)}, X_{4}^{(i)} oxplus Z_{4}^{(i)}, X_{5}^{(i)} odot Z_{5}^{(i)}, X_{6}^{(i)} oxplus Z_{6}^{(i)}, X_{7}^{(i)} odot Z_{7}^{(i)}, X_{8}^{(i)} oxplus Z_{8}^{(i)})}

  • Для чётных раундов:

( Y 1 ( i ) ,   Y 2 ( i ) ,   Y 3 ( i ) ,   Y 4 ( i ) ,   Y 5 ( i ) ,   Y 6 ( i ) ,   Y 7 ( i ) ,   Y 8 ( i ) )   = {displaystyle (Y_{1}^{(i)}, Y_{2}^{(i)}, Y_{3}^{(i)}, Y_{4}^{(i)}, Y_{5}^{(i)}, Y_{6}^{(i)}, Y_{7}^{(i)}, Y_{8}^{(i)}) =}
                          ( X 1 ( i )   ⊞   Z 1 ( i ) ,   X 2 ( i )   ⊙   Z 2 ( i ) ,   X 3 ( i )   ⊞   Z 3 ( i ) ,   X 4 ( i )   ⊙   Z 4 ( i ) ,   X 5 ( i )   ⊞   Z 5 ( i ) ,   X 6 ( i )   ⊙   Z 6 ( i ) ,   X 7 ( i )   ⊞   Z 7 ( i ) ,   X 8 ( i )   ⊙   Z 8 ( i ) ) {displaystyle (X_{1}^{(i)} oxplus Z_{1}^{(i)}, X_{2}^{(i)} odot Z_{2}^{(i)}, X_{3}^{(i)} oxplus Z_{3}^{(i)}, X_{4}^{(i)} odot Z_{4}^{(i)}, X_{5}^{(i)} oxplus Z_{5}^{(i)}, X_{6}^{(i)} odot Z_{6}^{(i)}, X_{7}^{(i)} oxplus Z_{7}^{(i)}, X_{8}^{(i)} odot Z_{8}^{(i)})}

Преобразования, выполняемые MA-боксами, одинаковы для всех раундов. Входные данные для них получаются следующим образом:
( Y 9 ( i ) ,   Y 10 ( i ) ,   Y 11 ( i ) ,   Y 12 ( i ) )   =   ( Y 1 ( i )   ⊕   Y 5 ( i ) ,   Y 2 ( i )   ⊕   Y 6 ( i ) ,   Y 3 ( i )   ⊕   Y 7 ( i ) ,   Y 4 ( i )   ⊕   Y 8 ( i ) ) {displaystyle (Y_{9}^{(i)}, Y_{10}^{(i)}, Y_{11}^{(i)}, Y_{12}^{(i)}) = (Y_{1}^{(i)} oplus Y_{5}^{(i)}, Y_{2}^{(i)} oplus Y_{6}^{(i)}, Y_{3}^{(i)} oplus Y_{7}^{(i)}, Y_{4}^{(i)} oplus Y_{8}^{(i)})}

МА-вычисления описываются следующими формулами:
Y 13 ( i )   =   Y 9 ( i )   ⊙   Z 9 ( i ) ,           Y 14 ( i )   =   Y 13 ( i )   ⊞   Y 10 ( i ) , {displaystyle Y_{13}^{(i)} = Y_{9}^{(i)} odot Z_{9}^{(i)}, Y_{14}^{(i)} = Y_{13}^{(i)} oxplus Y_{10}^{(i)},}
Y 15 ( i )   =   Y 14 ( i )   ⊙   Y 11 ( i ) ,           Y 16 ( i )   =   Y 15 ( i )   ⊞   Y 12 ( i ) , {displaystyle Y_{15}^{(i)} = Y_{14}^{(i)} odot Y_{11}^{(i)}, Y_{16}^{(i)} = Y_{15}^{(i)} oxplus Y_{12}^{(i)},}
Y 17 ( i )   =   Y 16 ( i )   ⊙   Z 10 ( i ) ,           Y 18 ( i )   =   Y 15 ( i )   ⊞   Y 17 ( i ) , {displaystyle Y_{17}^{(i)} = Y_{16}^{(i)} odot Z_{10}^{(i)}, Y_{18}^{(i)} = Y_{15}^{(i)} oxplus Y_{17}^{(i)},}
Y 19 ( i )   =   Y 14 ( i )   ⊙   Y 18 ( i ) ,           Y 20 ( i )   =   Y 13 ( i )   ⊞   Y 19 ( i ) , {displaystyle Y_{19}^{(i)} = Y_{14}^{(i)} odot Y_{18}^{(i)}, Y_{20}^{(i)} = Y_{13}^{(i)} oxplus Y_{19}^{(i)},}
Y 21 ( i )   =   Y 20 ( i )   ⊙   Z 11 ( i ) ,           Y 22 ( i )   =   Y 19 ( i )   ⊞   Y 21 ( i ) , {displaystyle Y_{21}^{(i)} = Y_{20}^{(i)} odot Z_{11}^{(i)}, Y_{22}^{(i)} = Y_{19}^{(i)} oxplus Y_{21}^{(i)},}
Y 23 ( i )   =   Y 18 ( i )   ⊙   Y 22 ( i ) ,           Y 24 ( i )   =   Y 17 ( i )   ⊞   Y 23 ( i ) , {displaystyle Y_{23}^{(i)} = Y_{18}^{(i)} odot Y_{22}^{(i)}, Y_{24}^{(i)} = Y_{17}^{(i)} oxplus Y_{23}^{(i)},}
Y 25 ( i )   =   Y 24 ( i )   ⊙   Z 12 ( i ) ,           Y 26 ( i )   =   Y 23 ( i )   ⊞   Y 25 ( i ) , {displaystyle Y_{25}^{(i)} = Y_{24}^{(i)} odot Z_{12}^{(i)}, Y_{26}^{(i)} = Y_{23}^{(i)} oxplus Y_{25}^{(i)},}
Y 27 ( i )   =   Y 22 ( i )   ⊙   Y 26 ( i ) ,           Y 28 ( i )   =   Y 21 ( i )   ⊞   Y 27 ( i ) . {displaystyle Y_{27}^{(i)} = Y_{22}^{(i)} odot Y_{26}^{(i)}, Y_{28}^{(i)} = Y_{21}^{(i)} oxplus Y_{27}^{(i)}.}

Используя результаты, полученные MA-боксами, находим входные данные для следующего раунда:
X ( i + 1 )   =   ( Y 1 ( i )   ⊕   Y 25 ( i ) ,   Y 5 ( i )   ⊕   Y 25 ( i ) ,   Y 6 ( i )   ⊕   Y 26 ( i ) ,   Y 7 ( i )   ⊕   Y 27 ( i ) ,   Y 2 ( i )   ⊕   Y 26 ( i ) ,   Y 3 ( i )   ⊕   Y 27 ( i ) ,   Y 4 ( i )   ⊕   Y 28 ( i ) ,   Y 8 ( i )   ⊕   Y 28 ( i ) ) {displaystyle X^{(i+1)} = (Y_{1}^{(i)} oplus Y_{25}^{(i)}, Y_{5}^{(i)} oplus Y_{25}^{(i)}, Y_{6}^{(i)} oplus Y_{26}^{(i)}, Y_{7}^{(i)} oplus Y_{27}^{(i)}, Y_{2}^{(i)} oplus Y_{26}^{(i)}, Y_{3}^{(i)} oplus Y_{27}^{(i)}, Y_{4}^{(i)} oplus Y_{28}^{(i)}, Y_{8}^{(i)} oplus Y_{28}^{(i)})}

Для получения зашифрованного сообщения необходимо после 12-го раунда провести перемешивание по нечетной схеме ( i = 9 ) {displaystyle (i=9)}

Генерация ключей

Для генерации ключей используется 256-битный пользовательский ключ, а также 16-битные константы, такие же, как для MESH-64 и для MESH-96.

Вычисление подключей происходит следующим образом:
Z i + 1 ( 1 )   =   K i   ⊕   c i ,   0   ⩽   i   ⩽   11 {displaystyle Z_{i+1}^{(1)} = K_{i} oplus c_{i}, 0 leqslant i leqslant 11}
Z j   mod   12   +   1 ( 2 )   =   K j   ⊕   c j ,   12   ⩽   j   ⩽   15 {displaystyle Z_{j {mod { }}12 + 1}^{(2)} = K_{j} oplus c_{j}, 12 leqslant j leqslant 15}
Z l ( i ) ( h ( i ) )   =   ( ( ( ( ( Z l ( i − 16 ) ( h ( i − 16 ) )   ⊞   Z l ( i − 13 ) ( h ( i − 13 ) ) )   ⊕   Z l ( i − 12 ) ( h ( i − 12 ) ) )   ⊞   Z l ( i − 8 ) ( h ( i − 8 ) ) )   ⊕   Z l ( i − 2 ) ( h ( i − 2 ) ) )   ⊞   Z l ( i − 1 ) ( h ( i − 1 ) ) )   ⋘   11   ⊕   c i , {displaystyle Z_{l(i)}^{(h(i))} = (((((Z_{l(i-16)}^{(h(i-16))} oxplus Z_{l(i-13)}^{(h(i-13))}) oplus Z_{l(i-12)}^{(h(i-12))}) oxplus Z_{l(i-8)}^{(h(i-8))}) oplus Z_{l(i-2)}^{(h(i-2))}) oxplus Z_{l(i-1)}^{(h(i-1))}) lll 11 oplus c_{i},}
где 16   ⩽   i   ⩽   151 ,   h ( i )   =   i   d i v   12   +   1 ,   l ( i )   =   i   mod   12   +   1 {displaystyle 16 leqslant i leqslant 151, h(i) = i div 12 + 1, l(i) = i {mod { }}12 + 1} .

Расшифровка

Для расшифровки MESH, как и IDEA, использует уже существующую схему, но с измененными раундовыми подключами. Обозначим подключи, использовавшиеся при шифровании, следующим образом:
( Z 1 ( r ) ,   . . . ,   Z 12 ( r ) ) ,   1   ⩽   r   ⩽   12 {displaystyle (Z_{1}^{(r)}, ..., Z_{12}^{(r)}), 1 leqslant r leqslant 12} — подключи полных раундов;
( Z 1 ( 13 ) ,   . . . ,   Z 8 ( 13 ) ) {displaystyle (Z_{1}^{(13)}, ..., Z_{8}^{(13)})} — подключи выходных преобразований.

Тогда подключи расшифровки задаются следующим образом:

  • ( ( Z 1 ( 13 ) ) − 1 ,   − Z 2 ( 13 ) ,   ( Z 3 ( 13 ) ) − 1 ,   − Z 4 ( 13 ) ,   − Z 5 ( 13 ) ,   ( Z 6 ( 13 ) ) − 1 ,   − Z 7 ( 13 ) ,   ( Z 8 ( 13 ) ) − 1 ,   Z 9 ( 12 ) ,   Z 10 ( 12 ) ,   Z 11 ( 12 ) ,   Z 12 ( 12 ) ) {displaystyle ((Z_{1}^{(13)})^{-1}, -Z_{2}^{(13)}, (Z_{3}^{(13)})^{-1}, -Z_{4}^{(13)}, -Z_{5}^{(13)}, (Z_{6}^{(13)})^{-1}, -Z_{7}^{(13)}, (Z_{8}^{(13)})^{-1}, Z_{9}^{(12)}, Z_{10}^{(12)}, Z_{11}^{(12)}, Z_{12}^{(12)})} , - первый раунд расшифровки;
  • ( − Z 1 ( 14 − r ) ,   ( Z 5 ( 14 − r ) ) − 1 ,   − Z 6 ( 14 − r ) ,   ( Z 7 ( 14 − r ) ) − 1 ,   ( Z 2 ( 14 − r ) ) − 1 ,   − Z 3 ( 14 − r ) ,   ( Z 4 ( 14 − r ) ) − 1 ,   − Z 8 ( 14 − r ) ,   Z 9 ( 13 − r ) ,   Z 10 ( 13 − r ) ,   Z 11 ( 13 − r ) ,   Z 12 ( 13 − r ) ) {displaystyle (-Z_{1}^{(14-r)}, (Z_{5}^{(14-r)})^{-1}, -Z_{6}^{(14-r)}, (Z_{7}^{(14-r)})^{-1}, (Z_{2}^{(14-r)})^{-1}, -Z_{3}^{(14-r)}, (Z_{4}^{(14-r)})^{-1}, -Z_{8}^{(14-r)}, Z_{9}^{(13-r)}, Z_{10}^{(13-r)}, Z_{11}^{(13-r)}, Z_{12}^{(13-r)})} , - r {displaystyle r} -й чётный раунд, r   ∈   { 2 ,   4 ,   6 ,   8 ,   10 ,   12 } {displaystyle r in {2, 4, 6, 8, 10, 12}} ;
  • ( ( Z 1 ( 13 − r ) ) − 1 ,   − Z 5 ( 13 − r ) ,   ( Z 6 ( 13 − r ) ) − 1 ,   − Z 7 ( 13 − r ) ,   − Z 2 ( 13 − r ) ,   ( − Z 3 ( 13 − r ) ) − 1 ,   − Z 4 ( 13 − r ) ,   ( Z 8 ( 13 − r ) ) − 1 ,   Z 9 ( 12 − r ) ,   Z 10 ( 12 − r ) ,   Z 11 ( 12 − r ) ,   Z 12 ( 12 − r ) ) {displaystyle ((Z_{1}^{(13-r)})^{-1}, -Z_{5}^{(13-r)}, (Z_{6}^{(13-r)})^{-1}, -Z_{7}^{(13-r)}, -Z_{2}^{(13-r)}, (-Z_{3}^{(13-r)})^{-1}, -Z_{4}^{(13-r)}, (Z_{8}^{(13-r)})^{-1}, Z_{9}^{(12-r)}, Z_{10}^{(12-r)}, Z_{11}^{(12-r)}, Z_{12}^{(12-r)})} , - r {displaystyle r} -й нечётный раунд, r   ∈   { 3 ,   5 ,   7 ,   9 ,   11 } {displaystyle r in {3, 5, 7, 9, 11}} ;
  • ( ( Z 1 ( 1 ) ) − 1 ,   − Z 2 ( 1 ) ,   ( Z 3 ( 1 ) ) − 1 ,   − Z 4 ( 1 ) ,   − Z 5 ( 1 ) ,   ( Z 6 ( 1 ) ) − 1 ,   − Z 7 ( 1 ) ,   ( Z 8 ( 1 ) ) − 1 ) {displaystyle ((Z_{1}^{(1)})^{-1}, -Z_{2}^{(1)}, (Z_{3}^{(1)})^{-1}, -Z_{4}^{(1)}, -Z_{5}^{(1)}, (Z_{6}^{(1)})^{-1}, -Z_{7}^{(1)}, (Z_{8}^{(1)})^{-1})} , — выходные преобразования.

Криптоанализ

Ниже приводится таблица, содержащая расчетную информацию по возможным криптоатакам. В ней рассматриваются урезанные алгоритмы, количество раундов можно увидеть в соответствующей колонке. За данные принимаются выбранные подобранные открытые тексты, указывается необходимое количество таковых (в блоках). Время оценивается в количестве вычислений. Память отражает количество ячеек памяти, необходимых для хранения каких-либо данных во время криптоатаки. Как видно из таблицы, все варианты MESH более сложны для взлома представленными криптоатаками, чем IDEA, на котором он основан.