Блокнот на два раза
Задание 1Введение
Цель: Почему одноразовый блокнот нельзя использовать дважды.
Два сообщения зашифрованы XOR с одним и тем же случайным ключом (одноразовый блокнот, использованный дважды). Первое сообщение — открытое объявление, его текст известен.
Задание 2Теория и инструменты
Одноразовый блокнот абсолютно стоек, только если ключ случаен, не короче сообщения и используется один раз.
Если ключ k использован дважды: c1 ⊕ c2 = m1 ⊕ m2. Ключ исчезает! Зная m1, сразу получаем m2.
Инструменты
- Python:
bytes.fromhex,zip, XOR
Больше теории — в разделе «Обучение: Криптография».
Задание 3Практика: найдите флаг
m1 = ATTENTION ALL STAFF: THE SERVER ROOM WILL BE CLOSED ON FRIDAY. c1 = 2641dfa48ed4dc9d35810b118c378d90042541c4eb14bffe6258a7d5689fd792ddac9423c267079eebdef9ebd13670d34be7beb5e996be47a9ecb1b20929 c2 = 2441cd9aaeb3e3e109fe386eb564ed9b713c3790f81f838a2f38bdf70abef8
Пошаговый план — открывайте по одному шагу
- 1Переведите c1 и c2 из hex в байты.
- 2Вычислите
c1 ⊕ c2побайтно (по длине c2). - 3XOR-ните результат с известным m1.
- 4Получится m2 — флаг.
Подсказки — каждая до решения стоит −50 очков
Задание 4Как защититься
Никогда не переиспользуйте ключ или nonce. В AES-GCM и ChaCha20 повтор nonce с тем же ключом даёт ровно эту уязвимость.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.