MESH (шифр)

Матеріал з testwiki
Версія від 20:44, 10 листопада 2023, створена imported>Alessot (Заміна прямого міжмовного посилання на {{iw}})
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Шаблон:Картка блочного шифру

В криптографії, MESH — блочний шифр, що є модифікацією IDEA. Розроблений Жоржем Накахара, Вінсентом Рейменом, Бартом Пренелем і Джусом Вандевалле в 2002 році. На відміну від IDEA, MESH має більш складну раундову структуру. Інший алгоритм генерації ключів дозволяє MESH уникати проблеми слабких ключів Шаблон:Sfn.

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

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

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

Як і в IDEA, MESH використовує такі операції:

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

MESH описується в трьох варіаціях за розмірами блоку: 64, 96, 128 біт. Розмір ключа при цьому береться вдвічі більший Шаблон:Sfn.

MESH-64

У даній варіації розмір блоку становить 64 біт, ключ — 128 біт. Шифрування проходить в 8.5 раундів. Половина раунду відноситься до вихідних перетворень Шаблон:Sfn.

Раундові перетворення

Позначимо вхідну інформацію для 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)  boxplus Z1(i), X2(i)  odot Z2(i), X3(i)  odot Z3(i), X4(i)  boxplus 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)Шаблон:Sfn

Генерація ключів

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

Обчислення підключів відбувається наступним чином: Шаблон:Sfn:
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  leqslant r  leqslant 8 — підключі повних раундів;
(Z1(9), ... Z4(9)) — підключі вихідних перетворень.

Тоді підключі розшифровки задаються наступним чином Шаблон:Sfn: Шаблон:Sfn:

  • ((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 раундів. Половина раунду відноситься до вихідних перетворень Шаблон:Sfn.

Раундові перетворення

Позначимо вхідну інформацію для 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) Шаблон:Sfn

Генерація ключів

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

Обчислення подключів відбувається наступним чином: Шаблон:Sfn:
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  leqslant r  leqslant 10 — підключі повних раундів;
(Z1(11), ... Z6(11)) — підключі вихідних перетворень.

Тоді підключі розшифровки задаються наступним чином Шаблон:Sfn:

  • ((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 раундів. Половина раунду відноситься до вихідних перетворень Шаблон:Sfn.

Ранундові перетворення

Позначимо вхідну інформацію для 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) Шаблон:Sfn

Генерація ключів

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

Обчислення подключів відбувається наступним чином: Шаблон:Sfn:
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  leqslant r  leqslant 12 — підключі повних раундів;
(Z1(13), ... Z8(13)) — підключі вихідних перетворень.

Шаблон:Sfn:

  • ((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, на якому він базується Шаблон:Sfn Шаблон:Sfn.

Таблиця 1. Узагальнення складнощів криптоатак на IDEA і MESHШаблон:Sfn
Шифр Криптоаналіз #Раундів Дані Пам'ять Час
IDEA
(8.5 раундів)
Інтегральний 2.5 23 23 264
Шаблон:Iw 3.5 256 232 267
Шаблон:Iw 3.5 238.5 237 253
Шаблон:Iw 4 238.5 237 270
MESH-64
(8.5 раундів)
Інтегральний 2.5 250.5 216 276
Шаблон:Iw 3.5 264 232 278
Шаблон:Iw 3.5 239.5 261 264
Шаблон:Iw 4 239.5 261 2112
MESH-96
(10.5 раундів)
Інтегральний 2.5 250 216 296
Шаблон:Iw 3.5 296 264 2109
Шаблон:Iw 3.5 256 293 296
Шаблон:Iw 4 256 293 2144
MESH-128
(12.5 раундів)
Інтегральний 2.5 250 216 2128
Шаблон:Iw 3.5 2128 264 2142
Шаблон:Iw 3.5 265 2157 2128
Шаблон:Iw 4 265 2157 2192

Примітки

Шаблон:Reflist

Література


Шаблон:Блочні алгоритми шифрування