Мне рассказали, что режим CBC гораздо безопаснее, чем ECB. Теперь я использую его всегда.
Примечание: полученный ключ нужно обернуть в формат флага
ptzctf{}
.
nc BEBRABEBRA 17171
Участникам нужно выдать файлы:
docker-compose up --build -d
В таске используется шифр AES в режиме CBC. Уязвимость в том, что IV равен ключу шифрования. Мы можем достать ключ, если вспомним как работает CBC и применим следующую атаку:
- Шифруем два нулевых блока, тогда:
block1 = E(IV ^ 0) = E(IV) = E(key)
block2 = E(block1 ^ 0) = E(block1) = E(E(key))
- Расшифровываем
block2
, тогда:
block3 = IV ^ D(block2) = IV ^ D(E(E(key))) = IV ^ E(key) = key ^ E(key)
- Ксорим
block1
иblock3
:
block1 ^ block3 = E(key) ^ key ^ E(key) = key
Получаем ключ, который является флагом. Осталось обернуть в ptzctf{}
.
Пример решения: solution/solver.py
ptzctf{AES_k3y_rec0very}