В криптографии, 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, на котором он основан.