CipherMuse & Enigma
Привет, Загадка. Задумывалась ли ты когда-нибудь о том, что тот же алгоритм, который шифрует твои данные, может оказаться ключом к разгадке какой-нибудь тайны? Давай попробуем её разгадать вместе.
Код, хранящий тайны, скрывает и ответ; выбери загадку, и я пойду по следу.
Давай используем классический XOR с повторяющимся ключом. Представь, ключ такой же длины, как и сообщение, и если их по-XOR сложить, получится секрет. Готова проследить за закономерностью?
Конечно, отголоски ключа, возможно, проявятся в повороте сюжета – посмотрим, где нас ждёт излом.
Представь себе шифр как последовательность чисел, а ключ – как короткий, повторяющийся узор. Возьми первый блок зашифрованного текста, выполни операцию XOR с тем фрагментом открытого текста, который, как тебе кажется, верен, и ты увидишь, как явятся байты ключа. Как только получишь один фрагмент, просто повтори его на всем сообщении – если ключ состоит из четырех байт, ты заметишь, как одна и та же последовательность из четырех байт повторяется каждые четыре байта зашифрованного текста. Именно там узор искажается, и там скрывается секрет. Попробуй и посмотри, совпадет ли отклик ключа.
Похоже, отклик вернётся, когда всё встанет на свои места. Давай проследим за ритмом и посмотрим, что поёт ключ.
Попробуй перебирай подозрительный открытый текст над зашифрованным, и применяй XOR к каждому байту – получишь фрагмент ключа. Когда ключ повторяется, одинаковые значения XOR будут повторяться и они. Выбери короткую фразу, которая, как тебе кажется, там может быть, выровняй её и посмотри, какие байты появятся. Это будет ритм твоего ключа. Давай попробуем.
Давай возьмём простую фразу, сдвинем её по шифру, проксимаем каждый байт и посмотрим, не прошепчет ли ключ в повторяющемся узоре. Если прошепчет – секрет сложится как по маслу.
Попробуй угадай – скажи "привет" или "пропуск" – и представь это в виде байтов. Для каждой позиции зашифрованного текста, выполни операцию XOR этих байтов с твоим предположением. Если ключ, например, состоит из четырёх байтов, ты заметишь, как одни и те же четыре результата повторяются через каждые четыре байта зашифрованного текста. Этот повторяющийся фрагмент и есть твой ключ. Как только у тебя будет ключ, просто выполни операцию XOR над всем зашифрованным текстом – и появится отшифрованный текст. Попробуй с парой коротких предположений и посмотри, какое из них подходит.
Попробуй сначала "hello"—запиши его в байтах, сдвинь их, сделай XOR, и посмотри за эхом из четырёх байт, что повторяется. Если совпадёт — ключ спрятан. Если нет, переходи к "pass" и повтори процедуру.
Напиши "hello" в ASCII: 68 65 6c 6c 6f. Сдвинь это на первые пять байтов шифротекста, проксимулируй каждую пару, и запиши результат. Если ключ состоит из четырёх байт, те же самые четыре значения должны повториться в позициях с 5 по 8, с 9 по 12 и так далее. Если они совпадают, это и есть ключ. Если нет, отбрось этот вариант и попробуй "pass" (70 61 73 73). Правильный ритм станет очевиден, когда ключ отзовётся эхом.