Метод зустрічі посередині

У криптоаналізі методом зустрічі посередині або атакою «зустріч посередині» (англ. meet-in-the-middle attack) називається клас атак на криптографічні алгоритми, які асимптотично зменшують час повного перебору за рахунок принципу «розділяй і володарюй», а також збільшення об'єму необхідної пам'яті. Вперше цей метод був запропонований Уітфілдом Діффі і Мартіном Геллманом у 1977 році.[1]

Початкові умови ред.

Існують відкритий (незашифрований) і шифрований тексти. Криптосистема складається із   циклів шифрування. Циклові ключі незалежні й не мають спільних бітів. Ключ  системи являє собою поєднання із   - циклових ключів  . Завдання полягає в знаходженні ключа  .

Розв'язок простого випадку ред.

Простим прикладом є подвійне послідовне шифрування блочним алгоритмом двома різними ключами   і  . Процес шифрування виглядає так:   де   — це відкритий текст,   — шифротекст, а   — операція одноразового шифрування ключем  . Відповідно, зворотна операція — розшифровка — виглядає так:

 

На перший погляд здається, що застосування подвійного шифрування багаторазово збільшує стійкість всієї схеми, оскільки перебирати тепер потрібно два ключі, а не один. У разі алгоритму DES стійкість збільшується з   до  . Однак це не так. Атакуючий може скласти дві таблиці:

  1. Всі значення   для всіх можливих значень  ,
  2. Всі значення   для всіх можливих значень  .

Потім йому достатньо лише знайти збіги у цих таблицях, тобто такі значення   і  , що  . Кожен збіг відповідає набору ключів , який задовольняє умови, оскільки

 

Для даної атаки потрібно   операцій шифрування-розшифрування (лише удвічі більше, ніж для перебору одного ключа) і   пам'яті. Додаткові оптимізації — використання хеш-таблиць, обчислення тільки для половини ключів (для DES повний перебір, насправді, вимагає лише   операцій) — можуть знизити ці вимоги. Головний результат атаки полягає в тому, що послідовне шифрування двома ключами збільшує час перебору лише удвічі.

Розв'язок у загальному вигляді ред.

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

1. Заповнення пам'яті. Перебираються всі значення  , тобто, перші   циклові ключі. На кожному такому ключі   зашифруємо відкритий текст   -   (тобто, проходимо   циклів шифрування замість  ). Будемо вважати   якоюсь адресою пам'яті і за цією адресою запишемо значення  . Необхідно перебрати всі значення  .

2. Визначення ключа.

Перебираються всі можливі  . На отриманих ключах розшифровується шифротекст   . Якщо за адресою   не пусто, то дістаємо звідти ключ   і отримуємо кандидата в ключі  .

Однак, потрібно зауважити, що перший же отриманий кандидат   не обов'язково є справжнім ключем. Так, для даних   і   виконується  , але на інших значеннях відкритого тексту   шифротексту  , отриманого з   на істинному ключі, рівність може порушуватися. Все залежить від конкретних характеристик криптосистеми. Але іноді буває достатньо отримати такий "псевдоеквівалентний" ключ. В іншому ж разі після завершення процедур буде отримана деяка множина ключів  , серед яких знаходиться істинний ключ.

Якщо розглядати конкретне застосування, то шифротекст і відкритий текст можуть бути великого обсягу (наприклад, графічні файли) і являти собою досить велике число блоків для блокового шифру. В такому разі для прискорення процесу можна зашифровувати і розшифровувати не весь текст, а лише його перший блок (що набагато швидше), і потім, отримавши безліч кандидатів, шукати в ньому справжній ключ, перевіряючи його на інших блоках.

Атака з розбиттям ключової послідовності на 3 частини ред.

У деяких випадках буває важко розділити біти послідовності ключів на частини, що належать до різних ключів. В такому разі застосовують алгоритм 3-subset MITM attack[en], запропонований Богдановим і Річбергером в 2011 році на основі звичайного методу зустрічі посередині. Даний алгоритм застосовується в разі відсутності можливості поділу послідовності ключових бітів на дві незалежні частини, як необхідно в звичайному алгоритмі методу зустрічі посередині. Складається з двох фаз: фази виділення і перевірки ключів.[2]

Фаза виділення ключів ред.

На початку даної фази шифр ділиться на 2 підшифра   і   як і в загальному випадку атаки, однак допускаючи можливе використання деяких бітів одного підшифра в іншому. Так, якщо  , то  ; при цьому біти ключа  , що використовуються в   позначимо  , а в   -  . Тоді ключову послідовність можна розділити на 3 частини:

  1.   - перетин множин   і  ,
  2.   - ключові біти, які є тільки в  ,
  3.   - ключові біти, які є тільки в  .

Далі проводиться атака методом зустрічі посередині за наступним алгоритмом:

  • Для кожного елемента із  
  1. Вирахувати проміжне значення  , де   — відкритий текст, а   — деякі ключові біти із   и  , тобто,   — результат проміжного шифрування відкритого тексту на ключі  .
  2. Вирахувати проміжне значення
  3.  , де   — закритий текст, а   — деякі ключові біти із   и  , тобто,.   — результат проміжного шифрування відкритого тексту на ключ    
  4. Порівняти  і  . У разі збігу отримаємо кандидата в ключі

Фаза перевірки ключів ред.

Для перевірки ключів отримані кандидати перевіряють на декількох парах відомих відкритих-/закритих текстів. Зазвичай для перевірки потрібно не дуже велика кількість таких пар текстів.[2]

Приклад ред.

В якості прикладу наведемо атаку на сімейство шифрів KTANTAN[3], яка дозволила зменшити обчислювальну складність отримання ключа з   (атака повним перебором) до  .[1]

Підготовка атаки ред.

Кожен з 254 раундів шифрування з використанням KTANTAN використовує 2 випадкових біта ключа з 80-бітного набору. Це робить складність алгоритму залежною тільки від кількості раундів. Приступаючи до атаки, автори помітили наступні особливості:

  • В раундах з 1 по 111 не були використані наступні біти ключа:  .
  • В раундах з 131 по 254 не були використані наступні біти ключа:  .

Це дозволило розділити біти ключа на наступні групи:

  1.   - загальні біти ключа: ті 68 біт, що не згадані вище.
  2.   - біти, що використовуються тільки в першому блоці раундів (з 1 по 111),
  3.   - біти, які використовуються тільки у другому блоці раундів (з 131 по 254).

Перша фаза: виділення ключів ред.

Виникала проблема обчислення описаних вище значень   і  , так як в розгляді відсутні раунди з 112 по 130, однак тоді було проведено часткове порівняння[en]: автори атаки помітили збіг 8 біт в   і  , перевіривши їх звичайною атакою методом зустрічі посередині на 127 раунді. У зв'язку з цим у даній фазі порівнювалися значення саме цих 8 біт в підшифрах   і  . Це збільшило кількість кандидатів у ключі, але не складність обчислень.

Друга фаза: перевірка ключів ред.

Для перевірки кандидатів в ключі алгоритму KTANTAN32 було потрібно в середньому ще дві пари відкритого-/закритого текстів для виділення ключа.

Результати ред.

  • KTANTAN32: обчислювальна складність підбору ключа скоротилася до   з використанням трьох пар відкритого-/закритого тексту.
  • KTANTAN48: обчислювальна складність підбору ключа скоротилася до   з використанням двох пар відкритого-/закритого тексту.
  • KTANTAN64: обчислювальна складність підбору ключа скоротилася до   з використанням двох пар відкритого-/закритого тексту.

Тим не менш, це не найкраща атака на сімейство шифрів KTANTAN. У 2011 році була здійснена атака[4], яка скорочувала обчислювальну складність алгоритму до   з використанням чотирьох пар відкритого-/закритого тексту.

Багатовимірний алгоритм ред.

Багатовимірний алгоритм методу зустрічі посередині застосовується при використанні великої кількості циклів шифрування різними ключами на блокових шифрах. Замість звичайної «зустріч посередині» в даному алгоритмі використовується поділ криптотексту кількома проміжними точками.[5]

Припускається, що атакується текст, зашифрований деяку кількість разів блоковим шифром:

   

Алгоритм ред.

  • Обчислюється:
   
  зберігається разом з   d  .
   
  зберігається разом з   d  .
  • Для кожного можливого проміжного стану   обчислюється:
   
при кожному збігу   з елементом з   в   зберігаються   і  ..
   
  зберігається разом з   в  .
  • Для кожного можливого проміжного стану   обчислюється:
   
при кажному совпадінні  з елементом із   проверяеться совпадіння з  , пвсля чого в  зберігаються   и  .
   
 зберігається разом з   в  .
  • Для кожного можливого проміжного стану   обчислюється:
    при кажному совпадінні  з елементом із   провіряється совпадіння с  , після чого в  зберігаються   и  .
    и при кажному совпадінні   с  , проверяється совпадіння с  

Далі знайдена послідовність кандидатів тестується на іншій парі відкритого-/закритого тексту для підтвердження істинності ключів. Слід зауважити рекурсивність в алгоритмі: підбір ключів для стану   відбувається на основі результатів для стану  . Це вносить елемент експоненційної складності в даний алгоритм.[5]

Складність ред.

Часова складність даної атаки становить  

Щодо використання пам'яті, легко помітити, що із збільшенням   на кожен   накладається все більше обмежень, що зменшує кількість записуваних в нього кандидатів. Це означає, що   значно менше  .

Верхня межа обсягу використаної пам'яті:

 
де   - загальна довжина ключа.

Складність використання даних залежить від ймовірності "проходження" помилкового ключа. Ця ймовірність дорівнює  , де   - довжина першого проміжного стану, яка найчастіше дорівнює розміру блоку. Враховуючи кількість кандидатів в ключі після першої фази, складність дорівнює  .

В результаті отримуємо  , де   - розмір блоку.

Кожен раз, коли послідовність кандидатів у ключі тестується на новій парі відкритого-/закритого тексту, кількість ключів, які успішно проходять перевірку, множиться на імовірність проходження ключа, яка дорівнює  .

Частина атаки повним перебором (перевірка ключів на нових парах відкритого-/закритого текстів) має часову складність  , в котрій, очевидно, наступні доданки дедалі швидше прагнуть до нуля.

У підсумку, складність даних за аналогічними судженнями обмежена приблизно   парами відкритого-/закритого ключа.[5]

Примітки ред.

  1. а б Diffie, Whitfield; Hellman, Martin E. (June 1977). Exhaustive Cryptanalysis of the NBS Data Encryption Standard. Computer. 10 (6): 74—84. doi:10.1109/C-M.1977.217750. Архів оригіналу за 14 травня 2009. Процитовано 29 липня 2018.
  2. а б Andrey Bogdanov and Christian Rechberger. "A 3-Subset Meet-in-the-Middle Attack: Cryptanalysis of the Lightweight Block Cipher KTANTAN" [Архівовано 7 листопада 2018 у Wayback Machine.]
  3. Christophe De Cannière, Orr Dunkelman, Miroslav Knežević. «KATAN & KTANTAN — A Family of Small and Efficient Hardware-Oriented Block Ciphers» [Архівовано 20 квітня 2018 у Wayback Machine.]
  4. Lei Wei, Christian Rechberger, Jian Guo, Hongjun Wu, Huaxiong Wang, and San Ling. "Improved Meet-in-the-Middle Cryptanalysis of KTANTAN" [Архівовано 7 листопада 2018 у Wayback Machine.]
  5. а б в Zhu, Bo; Guang Gong (2011). MD-MITM Attack and Its Applications to GOST, KTANTAN and Hummingbird-2. eCrypt. Архів оригіналу за 29 липня 2018. Процитовано 29 липня 2018.

Література ред.

  1. Moore, Stephane (16 листопада 2010). Meet-in-the-Middle Attacks (PDF): 2.