Крипточуваки - 12
Побайтове розшифрування ECB (Просте)
Скопіюйте вашу функцію оракула у нову функцію яка шифрує буфери у ECB режимі використовуючи постійний але невідомий ключ (наприклад, призначте єдиний випадковий ключ, одноразово, до глобальної змінної).
Тепер візьми ту саму функцію і зробіть щоб вона додавала до незашифрованого тексту, ДО ШИФРУВАННЯ, натупний рядок:
Um9sbGluJyBpbiBteSA1LjAKV2l0aCBteSByYWctdG9wIGRvd24gc28gbXkg
aGFpciBjYW4gYmxvdwpUaGUgZ2lybGllcyBvbiBzdGFuZGJ5IHdhdmluZyBq
dXN0IHRvIHNheSBoaQpEaWQgeW91IHN0b3A/IE5vLCBJIGp1c3QgZHJvdmUg
YnkK
Спойлер.
Не декодуйте цю строку покищо. Не робіть цього.
Зробіть Base64 декодування рядка перед його додаванням. Не робіть base64 декодування рядка самостійно; нехай ваш код зробить це. Ідея у тому що ви не знаєте його змісту.
Що у вас є зараз це функція яка робить:
AES-128-ECB(ваш-рядок || невідомий-рядок, випадковий-ключ)
Виявляється: ви можете розшифрувати “невідомий-рядок” через повторні виклики до функціі оракула!
Ось приблизно так:
- Скорміть однакові байти вашого-рядка у функцію по 1 за раз — почніть із 1 байта (“A”), потім “AA”, потім “AAA” і так далі. Виявть розмір блоку шифра. Ви його знаєте, але все одно виконайте цей крок.
- Виявіть що функція використовує ECB. Ви вже знаєте, але все одно виконайте цей крок.
- Знаючи розмір блоку, зробіть вхідний блок який точно на 1 байт коротший (наприклад, якщо розмір блока 8 байт, зробіть “AAAAAAA”). Подумайте про те що функція оракула буде класти на позицію останнього байта.
- Зробіть словник кожного можливого останнього байта, зкормивши різні рядки оракулу; наприклад так: “AAAAAAAA”, “AAAAAAAB”, “AAAAAAAC”, запам’ятовуючи перший блок кожного виклика.
- Співставте результат однобайтних даних до кожного запису у словнику. Ви зараз знайшли перший байт невідомого рядка.
- Повторити для наступного байту.
Вітання.
Це перший виклик у якому ми дали вам рішення як зламати кріпто із реального світу. Багато хто знає що якщо ви зашифруєте щось у ECB то ви зможете побачити пінгвінів скрізь зашифровані дані. Не так багато із них можуть розшифрувати зміст цих шифрів, і тепер ви можете. Якщо наш досвід буде рекомендацією, ця атака дасть вам виклик коду у тестах безпеки десь раз на рік.