Атаки переключеня біта у CBC

Згенеруйте випадковий ключ AES.

Поєднайте ваш код доповнення та код CBC, щоб написати дві функції.

The first function should take an arbitrary input string, prepend the string: Перша функція повинна прийняти довільний вхідний рядок, додати наступний рядок перед вхідним:

"comment1=cooking%20MCs;userdata="

.. і додайте рядок:

";comment2=%20like%20a%20pound%20of%20bacon"

Функція повинна робити ескейпінг для символів “;” і “=”.

Потім функція повинна доповнити вхідні дані до 16-байтового блоку AES і зашифрувати його під випадковим ключем AES.

Друга функція має розшифрувати рядок і шукати символи “;admin=true;” (або, що еквівалентно, розшифруйте, розділіть рядок на “;”, перетворите кожен результуючий рядок у 2-кортежі та знайдіть кортеж “admin”).

Повертає true або false залежно від того, чи існує рядок.

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

Натомість змініть зашифрований текст (не знаючи ключа AES), щоб досягти цього. Instead, modify the ciphertext (without knowledge of the AES key) to accomplish this.

Ви покладаєтеся на те, що в режимі CBC 1-бітна помилка в блоці зашифрованого тексту:

  • Повністю скремблить блок, у якому сталася помилка
  • Видає ідентичну 1-бітну помилку (/редагування) у наступному блоці зашифрованого тексту.

Зупиниться і трішки подумайте.

Перш ніж реалізувати цю атаку, дайте відповідь на запитання: чому режим CBC має таку властивість?