«Как бы интересно стало жить, если бы можно было отбросить заботу о счастье» — так думали наши предки до того, как роботы заменили людей почти во всех отраслях промышленности.
Чем меньше у людей стало работы, тем больше появилось развлечений. А что ещё делать, когда человечество живёт в эпоху пика развития технологий?
Один из таких праздников — Карнавал криптографии. Но вы отправитесь туда не за развлечением.
Вам предстоит посмотреть на всё многообразие шифров и выявить среди них самый безопасный.
nc host 44323
Сервис реализует четыре "шифра": AES
, RSA
, HMAC
и Blowfish
. Мы можем зашифровать любое сообщение любым шифром, но не можем ничего расшифровать. Есть возможность уже зашифрованное сообщение "перешифровать" другим шифром. Изначально в сервисе зашифрован флаг.
Из четырёх шифров нас интересуют только два:
RSA
, с использованием дополнения по схеме OAEPAES
, с использованием режима сцепки PCBC
Как известно, RSA OAEP уязвим к атаке Мэнгера, которую мы и реализуем.
Для реализации атаки нам нужен сторонний канал при расшифровке, который показывает равенство старшего байта полученного открытого текста нулю. Другими словами, нужно уметь отвечать на вопрос bytes(decrypt(ct))[0] =?= 0
.
У нас нет прямого доступа к функции расшифровки, зато есть перевод шифртекста в AES. Тогда мы можем использовать длину шифртекста AES как сторонний канал, поскольку мы можем её получать. Нужно подобрать такой размер модуля RSA, чтобы при наличии нулевого старшего байта длина AES-шифртекста была равна N
блоков, а при наличии ненулевого — N+1
блоков.
После этого нам останется просто применить атаку Мэнгера и расшифровать флаг.
Cup{w31cOm3_t0_th3_c4RN1v4L_0f_cRyp70}