2022-11-10 18:04:20
Шифрование AES в квестеВ уже далеком 2018 участвовал в квесте от нашего брата @archakovblog , одно из последних заданий заключалось в том, что нужно было получить данные, которые были зашифрованы шифром AES. Кстати, этот же алгоритм шифрования используется тут, в Telegram.
Сам квест – https://null21.herokuapp.com/
Не читайте дальше, если сами собираетесь пройти квест.
Немного теорииAES (стандарт шифрования в США) это блочный алгоритм шифрования с секретным ключом. Т.е. он делит ваши данные на блоки по 128 бит (16 байт) и на каждом таком блоке запускаются некоторые преобразования с использованием ключа. Из этого вытекают разные вопросы или проблемы:
– что делать с последним кусочком данных, если они меньше 128 бит?
– отдельно шифровать каждый блок или как-то сцеплять их?
– по какому правилу выбрать стартовое значение для состояния шифра?
Упомянул эту часть теории, чтобы показать, что знание секретного ключа может быть недостаточным, нужно еще знать, как именно применили AES.
Задание в квестеСобственно, в упомянутом задании с квеста нужно было догадаться какой шифр был использован и расшифровать некую строку. Сообразив, что нужно использовать AES, набросал код и быстренько попробовал расшифровать, однако на выходе получались нечитаемые символы, т.е. я что-то делал не так.
Пробовал дополнительно вставлять ключ в вектор инициализации, выравнивать по разным схемам, получать байты ключа интерпретируя его как HEX/ascii/UTF-8, использовать разные режимы сцепления блоков, на всякий случай даже попробовал другие алгоритмы, типа BlowFish, но ничего не помогло.
Все же было любопытно, в чем же фишка и я написал автору квеста. Оказалось, я все делал правильно, но для расшифровки нужно было использовать онлайн сервис aesencryption.net. Тут я осознал, что, скорее всего, у разработчиков сайта какой-то свой вектор инициализации (стартовое состояние шифра) используется, было любопытно, написал им на почту. Довольно быстро ответили, что они используют строку “12345678b0z2345n” в качестве вектора инициализации. Т.е. для расшифровки нужно было использовать именно этот сайт, никак иначе.
Иметь рандомный вектор инициалиции очень полезно. Это позволяет получать совершенно разные зашифрованные данные для одних и тех же входных данных. Т.е. если вы в переписке напишете "Ас-саляму 1алейкум" дважды, каждый раз результат шифрования будет разным (хоть и шифруем одно и то же), что усложняет жизнь атакующему.
115 viewsedited 15:04