Крипточуваки - 29
Зламайте MAC з ключем SHA-1 за допомогою розширення довжини
MAC-адреси SHA-1 із секретним префіксом легко зламати.
Атака на SHA1 із секретним префіксом базується на тому факті, що ви можете взяти вихідні дані SHA-1 і використати їх як нову відправну точку для SHA-1, таким чином беручи довільний хеш SHA-1 і «передаючи йому більше даних».
Оскільки ключ передує даним у секретному префіксі, будь-які додаткові дані, які ви подаєте в хеш SHA-1 у такий спосіб, виглядатимуть хешованими за допомогою секретного ключа.
Щоб здійснити атаку, вам потрібно врахувати той факт, що SHA-1 «доповнюється» бітовою довжиною повідомлення; ваше підроблене повідомлення має містити цей відступ. Ми називаємо це «склеючоюю прокладкою». Останнє повідомлення, яке ви фактично підробите, буде таким:
SHA1(key || original-message || glue-padding || new-message)
(де мається на увазі остаточне доповнення до всього створеного повідомлення)
Зауважте, що для генерації cклеючуюго доповнення вам потрібно знати початкову бітову довжину повідомлення; саме повідомлення відоме зловмиснику, але секретний ключ – ні, тому вам потрібно його вгадати.
Це звучить складніше, ніж є на практиці.
Щоб здійснити атаку, спочатку напишіть функцію, яка обчислює доповнення MD довільного повідомлення, і переконайтеся, що ви створюєте те саме доповнення, яке використовує ваша реалізація SHA-1. Це займе у вас 5-10 хвилин.
Тепер візьміть MAC секретного префікса SHA-1 повідомлення, яке ви хочете підробити — це просто хеш SHA-1 — і розбийте його на 32-розрядні регістри SHA-1 (SHA-1 називає їх “a”, “b”, “c”, &c).
Змініть реалізацію SHA-1, щоб викликаюча сторона могла передавати нові значення для “a”, “b”, “c” &c (зазвичай вони починаються з магічних чисел). Коли регістри “виправлені”, хешуйте додаткові дані, які ви хочете підробити.
Використовуючи цю атаку, згенеруйте секретний префікс MAC під секретним ключем (виберіть випадкове слово з /usr/share/dict/words або щось таке) рядка:
"comment1=cooking%20MCs;userdata=foo;comment2=%20like%20a%20pound%20of%20bacon"
Підробити варіант цього повідомлення, яке закінчується на “;admin=true”.
Це дуже корисна атака.
Наприклад: Тай Дуонг і Джуліано Ріццо, які дійшли до цієї атаки раніше за нас, використали її, щоб зламати API Flickr.