Перейти к содержанию

MESH (шифр)

Материал из Мегавики — свободной энциклопедии
MESH
Создатель Накахара, Рэймен, Пренель, Вандевалле
Опубликован 2002
Размер ключа 128, 192, 256 бит
Размер блока 64, 96, 128 бит
Число раундов 8,5, 10,5, 12,5
Тип основан на IDEA, модификация Сети Фейстеля

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

Структура шифра[править]

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

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

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

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

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

MESH-64[править]

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

Раундовые преобразования[править]

Обозначим входную информацию для i-го раунда:
X(i) = (X1(i), X2(i), X3(i), X4(i)), i=1...9

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

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

(Y1(i), Y2(i), Y3(i), Y4(i)) = (X1(i)  Z1(i), X2(i)  Z2(i), X3(i)  Z3(i), X4(i)  Z4(i))

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

(Y1(i), Y2(i), Y3(i), Y4(i)) = (X1(i)  Z1(i), X2(i)  Z2(i), X3(i)  Z3(i), X4(i)  Z4(i))

Преобразования, выполняемые MA-боксами, одинаковы для всех раундов. Входные данные для них получаются следующим образом:
(Y5(i), Y6(i)) = (Y1(i)  Y3(i), Y2(i)  Y4(i))

МА-вычисления описываются следующими формулами:
Y7(i) = ((Y5(i)  Z5(i)  Y6(i))  Z6(i)  (Y5(i)  Z5(i)))  Z7(i)
Y8(i) = Y7(i)  ((Y5(i)  Z5(i)  Y6(i))  Z6(i))

Используя результаты, полученные MA-боксами, находим входные данные для следующего раунда:
X(i+1) = (Y1(i)  Y8(i), Y3(i)  Y8(i), Y2(i)  Y7(i), Y4(i)  Y7(i))

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

Генерация ключей[править]

Для генерации ключей используется 128-битный пользовательский ключ, а также 16-битные константы ci: c0 = 1, ci = 3*ci1, они вычисляются в Поле Галуа GF(216) по модулю многочлена x16 + x5 + x3 + x2 + 1. Пользовательский ключ разбивается на 8 16-битных слов Ki, 0  i  7.

Вычисление подключей происходит следующим образом[5]:
Zi+1(1) = Ki  ci, 0  i  6
Z1(2) = K7  c7
Zl(i)(h(i)) = (((((Zl(i8)(h(i8))  Zl(i7)(h(i7)))  Zl(i6)(h(i6)))  Zl(i3)(h(i3)))  Zl(i2)(h(i2)))  Zl(i1)(h(i1)))  7  ci,
где 8  i  59, h(i) = i div 7 + 1, l(i) = i mod 7 + 1.

Расшифровка[править]

Для расшифровки MESH, как и IDEA, использует уже существующую схему, но с измененными раундовыми подключами. Обозначим подключи, использовавшиеся при шифровании, следующим образом:
(Z1(r), ..., Z7(r)), 1  r  8 - подключи полных раундов;
(Z1(9), ..., Z4(9)) - подключи выходных преобразований.

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

  • ((Z1(9))1, Z2(9), Z3(9), (Z4(9))1, Z5(8), Z6(8), Z7(8)), - первый раунд расшифровки;
  • (Z1(10r), (Z3(10r))1, (Z2(10r))1, Z4(10r), Z5(9r), Z6(9r), Z7(9r)), - rчетный раунд, r  {2, 4, 6, 8};
  • ((Z1(9r))1, Z3(9r), Z2(9r), (Z4(9r))1, Z5(8r), Z6(8r), Z7(8r)), - rнечетный раунд, r  {3, 5, 7};
  • ((Z1(1))1, Z2(1), Z3(1), (Z4(1))1), - выходные преобразования.

MESH-96[править]

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

Раундовые преобразования[править]

Обозначим входную информацию для i-го раунда:
X(i) = (X1(i), X2(i), X3(i), X4(i), X5(i), X6(i)), i=1...11

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

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

(Y1(i), Y2(i), Y3(i), Y4(i), Y5(i), Y6(i)) = (X1(i)  Z1(i), X2(i)  Z2(i), X3(i)  Z3(i), X4(i)  Z4(i), X5(i)  Z5(i), X6(i)  Z6(i))

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

(Y1(i), Y2(i), Y3(i), Y4(i), Y5(i), Y6(i)) = (X1(i)  Z1(i), X2(i)  Z2(i), X3(i)  Z3(i), X4(i)  Z4(i), X5(i)  Z5(i), X6(i)  Z6(i))

Преобразования, выполняемые MA-боксами, одинаковы для всех раундов. Входные данные для них получаются следующим образом:
(Y7(i), Y8(i), Y9(i)) = (Y1(i)  Y4(i), Y2(i)  Y5(i), Y3(i)  Y6(i))

МА-вычисления описываются следующими формулами:
Y10(i) = (((Y7(i)  Z7(i)  Y8(i))  Y9(i)  Z8(i))  (Y7(i)  Z7(i)  Y8(i))  Y7(i)  Z7(i))  Z9(i)
Y11(i) = Y10(i)  ((Y7(i)  Z7(i)  Y8(i))  Y9(i)  Z8(i))  (Y7(i)  Z7(i)  Y8(i))
Y12(i) = Y11(i)  ((Y7(i)  Z7(i)  Y8(i))  Y9(i)  Z8(i))

Используя результаты, полученные MA-боксами, находим входные данные для следующего раунда:
X(i+1) = (Y1(i)  Y12(i), Y4(i)  Y12(i), Y5(i)  Y11(i), Y2(i)  Y11(i), Y3(i)  Y10(i), Y6(i)  Y10(i))

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

Генерация ключей[править]

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

Вычисление подключей происходит следующим образом[9]:
Zi+1(1) = Ki  ci, 0  i  8
Z1(2) = K9  c9
Z2(2) = K10  c10
Z3(2) = K11  c11
Zl(i)(h(i)) = (((((Zl(i12)(h(i12))  Zl(i8)(h(i8)))  Zl(i6)(h(i6)))  Zl(i4)(h(i4)))  Zl(i2)(h(i2)))  Zl(i1)(h(i1)))  9  ci,
где 12  i  95, h(i) = i div 9 + 1, l(i) = i mod 9 + 1.

Расшифровка[править]

Для расшифровки MESH, как и IDEA, использует уже существующую схему, но с измененными раундовыми подключами. Обозначим подключи, использовавшиеся при шифровании, следующим образом:
(Z1(r), ..., Z9(r)), 1  r  10 — подключи полных раундов;
(Z1(11), ..., Z6(11)) - подключи выходных преобразований.

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

  • ((Z1(11))1, Z2(11), (Z3(11))1, Z4(11), (Z5(11))1, Z6(11), Z7(10), Z8(10), Z9(10)), — первый раунд расшифровки;
  • (Z1(12r), (Z4(12r))1, Z5(12r), (Z2(12r))1, Z3(12r), (Z6(12r))1, Z7(11r), Z8(11r), Z9(11r)), — rчётный раунд, r  {2, 4, 6, 8, 10};
  • ((Z1(11r))1, Z4(11r), (Z5(11r))1, Z2(11r), (Z3(11r))1, Z6(11r), Z7(10r), Z8(10r), Z9(10r)), — rнечётный раунд, r  {3, 5, 7, 9};
  • ((Z1(1))1, Z2(1), (Z3(1))1, Z4(1), (Z5(1))1, Z6(1)), — выходные преобразования.

MESH-128[править]

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

Раундовые преобразования[править]

Обозначим входную информацию для i-го раунда:
X(i) = (X1(i), X2(i), X3(i), X4(i), X5(i), X6(i), X7(i), X8(i)), i=1...13

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

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

(Y1(i), Y2(i), Y3(i), Y4(i), Y5(i), Y6(i), Y7(i), Y8(i)) =
             (X1(i)  Z1(i), X2(i)  Z2(i), X3(i)  Z3(i), X4(i)  Z4(i), X5(i)  Z5(i), X6(i)  Z6(i), X7(i)  Z7(i), X8(i)  Z8(i))

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

(Y1(i), Y2(i), Y3(i), Y4(i), Y5(i), Y6(i), Y7(i), Y8(i)) =
             (X1(i)  Z1(i), X2(i)  Z2(i), X3(i)  Z3(i), X4(i)  Z4(i), X5(i)  Z5(i), X6(i)  Z6(i), X7(i)  Z7(i), X8(i)  Z8(i))

Преобразования, выполняемые MA-боксами, одинаковы для всех раундов. Входные данные для них получаются следующим образом:
(Y9(i), Y10(i), Y11(i), Y12(i)) = (Y1(i)  Y5(i), Y2(i)  Y6(i), Y3(i)  Y7(i), Y4(i)  Y8(i))

МА-вычисления описываются следующими формулами:
Y13(i) = Y9(i)  Z9(i),     Y14(i) = Y13(i)  Y10(i),
Y15(i) = Y14(i)  Y11(i),     Y16(i) = Y15(i)  Y12(i),
Y17(i) = Y16(i)  Z10(i),     Y18(i) = Y15(i)  Y17(i),
Y19(i) = Y14(i)  Y18(i),     Y20(i) = Y13(i)  Y19(i),
Y21(i) = Y20(i)  Z11(i),     Y22(i) = Y19(i)  Y21(i),
Y23(i) = Y18(i)  Y22(i),     Y24(i) = Y17(i)  Y23(i),
Y25(i) = Y24(i)  Z12(i),     Y26(i) = Y23(i)  Y25(i),
Y27(i) = Y22(i)  Y26(i),     Y28(i) = Y21(i)  Y27(i).

Используя результаты, полученные MA-боксами, находим входные данные для следующего раунда:
X(i+1) = (Y1(i)  Y25(i), Y5(i)  Y25(i), Y6(i)  Y26(i), Y7(i)  Y27(i), Y2(i)  Y26(i), Y3(i)  Y27(i), Y4(i)  Y28(i), Y8(i)  Y28(i))

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

Генерация ключей[править]

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

Вычисление подключей происходит следующим образом[13]:
Zi+1(1) = Ki  ci, 0  i  11
Zj mod 12 + 1(2) = Kj  cj, 12  j  15
Zl(i)(h(i)) = (((((Zl(i16)(h(i16))  Zl(i13)(h(i13)))  Zl(i12)(h(i12)))  Zl(i8)(h(i8)))  Zl(i2)(h(i2)))  Zl(i1)(h(i1)))  11  ci,
где 16  i  151, h(i) = i div 12 + 1, l(i) = i mod 12 + 1.

Расшифровка[править]

Для расшифровки MESH, как и IDEA, использует уже существующую схему, но с измененными раундовыми подключами. Обозначим подключи, использовавшиеся при шифровании, следующим образом:
(Z1(r), ..., Z12(r)), 1  r  12 — подключи полных раундов;
(Z1(13), ..., Z8(13)) — подключи выходных преобразований.

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

  • ((Z1(13))1, Z2(13), (Z3(13))1, Z4(13), Z5(13), (Z6(13))1, Z7(13), (Z8(13))1, Z9(12), Z10(12), Z11(12), Z12(12)), - первый раунд расшифровки;
  • (Z1(14r), (Z5(14r))1, Z6(14r), (Z7(14r))1, (Z2(14r))1, Z3(14r), (Z4(14r))1, Z8(14r), Z9(13r), Z10(13r), Z11(13r), Z12(13r)), - rчётный раунд, r  {2, 4, 6, 8, 10, 12};
  • ((Z1(13r))1, Z5(13r), (Z6(13r))1, Z7(13r), Z2(13r), (Z3(13r))1, Z4(13r), (Z8(13r))1, Z9(12r), Z10(12r), Z11(12r), Z12(12r)), - rнечётный раунд, r  {3, 5, 7, 9, 11};
  • ((Z1(1))1, Z2(1), (Z3(1))1, Z4(1), Z5(1), (Z6(1))1, Z7(1), (Z8(1))1), — выходные преобразования.

Криптоанализ[править]

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

Таблица 1. Обобщение сложностей криптоатак на IDEA и MESH[17]
Шифр Криптоанализ Раундов Данные Память Время
IDEA
(8,5 раундов)
Интегральный 2.5 23 23 264
Усеченный дифф. 3.5 256 232 267
Невозможный дифф. 3.5 238.5 237 253
Невозможный дифф. 4 238.5 237 270
MESH-64
(8,5 раундов)
Интегральный 2.5 250.5 216 276
Усеченный дифф. 3.5 264 232 278
Невозможный дифф. 3.5 239.5 261 264
Невозможный дифф. 4 239.5 261 2112
MESH-96
(10,5 раундов)
Интегральный 2.5 250 216 296
Усеченный дифф. 3.5 296 264 2109
Невозможный дифф. 3.5 256 293 296
Невозможный дифф. 4 256 293 2144
MESH-128
(12,5 раундов)
Интегральный 2.5 250 216 2128
Усеченный дифф. 3.5 2128 264 2142
Невозможный дифф. 3.5 265 2157 2128
Невозможный дифф. 4 265 2157 2192

Примечания[править]

Литература[править]