Побайтове розшифрування ECB (Просте)

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

Тепер візьми ту саму функцію і зробіть щоб вона додавала до незашифрованого тексту, ДО ШИФРУВАННЯ, натупний рядок:

Um9sbGluJyBpbiBteSA1LjAKV2l0aCBteSByYWctdG9wIGRvd24gc28gbXkg
aGFpciBjYW4gYmxvdwpUaGUgZ2lybGllcyBvbiBzdGFuZGJ5IHdhdmluZyBq
dXN0IHRvIHNheSBoaQpEaWQgeW91IHN0b3A/IE5vLCBJIGp1c3QgZHJvdmUg
YnkK

Спойлер.

Не декодуйте цю строку покищо. Не робіть цього.

Зробіть Base64 декодування рядка перед його додаванням. Не робіть base64 декодування рядка самостійно; нехай ваш код зробить це. Ідея у тому що ви не знаєте його змісту.

Що у вас є зараз це функція яка робить:

AES-128-ECB(ваш-рядок || невідомий-рядок, випадковий-ключ)

Виявляється: ви можете розшифрувати “невідомий-рядок” через повторні виклики до функціі оракула!

Ось приблизно так:

  1. Скорміть однакові байти вашого-рядка у функцію по 1 за раз — почніть із 1 байта (“A”), потім “AA”, потім “AAA” і так далі. Виявть розмір блоку шифра. Ви його знаєте, але все одно виконайте цей крок.
  2. Виявіть що функція використовує ECB. Ви вже знаєте, але все одно виконайте цей крок.
  3. Знаючи розмір блоку, зробіть вхідний блок який точно на 1 байт коротший (наприклад, якщо розмір блока 8 байт, зробіть “AAAAAAA”). Подумайте про те що функція оракула буде класти на позицію останнього байта.
  4. Зробіть словник кожного можливого останнього байта, зкормивши різні рядки оракулу; наприклад так: “AAAAAAAA”, “AAAAAAAB”, “AAAAAAAC”, запам’ятовуючи перший блок кожного виклика.
  5. Співставте результат однобайтних даних до кожного запису у словнику. Ви зараз знайшли перший байт невідомого рядка.
  6. Повторити для наступного байту.

Вітання.

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