Крипточуваки - 17
Оракул доповнення CBC
Це найвідоміша атака на сучасну криптографію з блоковим шифром.
Поєднайте свій код доповнення та код CBC, щоб написати дві функції.
Перша функція повинна вибрати випадковим чином один із наступних 10 рядків:
MDAwMDAwTm93IHRoYXQgdGhlIHBhcnR5IGlzIGp1bXBpbmc=
MDAwMDAxV2l0aCB0aGUgYmFzcyBraWNrZWQgaW4gYW5kIHRoZSBWZWdhJ3MgYXJlIHB1bXBpbic=
MDAwMDAyUXVpY2sgdG8gdGhlIHBvaW50LCB0byB0aGUgcG9pbnQsIG5vIGZha2luZw==
MDAwMDAzQ29va2luZyBNQydzIGxpa2UgYSBwb3VuZCBvZiBiYWNvbg==
MDAwMDA0QnVybmluZyAnZW0sIGlmIHlvdSBhaW4ndCBxdWljayBhbmQgbmltYmxl
MDAwMDA1SSBnbyBjcmF6eSB3aGVuIEkgaGVhciBhIGN5bWJhbA==
MDAwMDA2QW5kIGEgaGlnaCBoYXQgd2l0aCBhIHNvdXBlZCB1cCB0ZW1wbw==
MDAwMDA3SSdtIG9uIGEgcm9sbCwgaXQncyB0aW1lIHRvIGdvIHNvbG8=
MDAwMDA4b2xsaW4nIGluIG15IGZpdmUgcG9pbnQgb2g=
MDAwMDA5aXRoIG15IHJhZy10b3AgZG93biBzbyBteSBoYWlyIGNhbiBibG93
… згенерувати випадковий ключ AES (яку вона має зберегти для всіх майбутніх шифрувань), доповнити рядок до 16-байтного розміру блоку AES і зашифрувати його під цим ключем, надаючи абоненту зашифрований текст і IV.
Друга функція повинна використовувати зашифрований текст, створений першою функцією, розшифровувати його, перевіряти його доповнення та повертати true або false залежно від того, чи дійсне доповнення.
Що ви робите тут.
Ця пара функцій наближає шифрування AES-CBC до шифрування розгорнутого на боці сервера у веб-додатках; друга функція моделює використання сервером зашифрованого токена сеансу, ніби це файл cookie.
Виявляється, можна розшифрувати зашифровані тексти, надані першою функцією.
Дешифрування тут залежить від витоку із побічного каналу у функції дешифрування. Витік — це повідомлення про помилку про те, що доповнення дійсне чи ні.
Ви можете знайти 100 веб-сторінок про те, як працює ця атака, тому я не буду пояснювати це знову. Я скажу ось що:
Фундаментальне розуміння цієї атаки полягає в тому, що байт 01h є дійсним заповненням і зустрічається в 1/256 спробах “рандомізованих” відкритих текстів, створених шляхом дешифрування підробленого зашифрованого тексту.
02h в ізоляції недійсне доповнення.
02h 02h є дійсним доповненням, але набагато менш імовірно, що воно буде траплятися випадковим чином, ніж 01h.
03h 03h 03h ще менш ймовірно.
Тож ви можете припустити, що якщо ви пошкодили дешифрування І воно мало дійсне доповнення, ви знаєте, що це за байт доповнення.
Легко спотикатися об те, що відкриті тексти CBC є “доповненими”. Оракули доповнення не мають нічого спільного з фактичним доповненням у відкритому тексті CBC. Це атака, спрямована на певний біт коду, який обробляє дешифрування. Ви можете встановити додатковий оракул на будь-якому блоці CBC, незалежно від того, є він доповненим чи ні.