Зламайте 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.