Основная проблема расшифровки AES

1136
Bennett Yeates

Я работаю над книгой « Криптографическая инженерия», и текущая проблема выглядит примерно так:

Используя существующую библиотеку криптографии, расшифруйте следующий зашифрованный текст (в шестнадцатеричной форме):

539b333b39706d149028cfe1d9d4a407

со следующим 256-битным ключом (также в шестнадцатеричном виде):

8000000000000000000000000000000000000000000000000000000000000001

используя AES.

Я немного озадачен здесь. Я использую OpenSSL, но при использовании -aes256параметра запрашивается IV, который явно не указан в этой проблеме. Ввод всех нулей для IV дает плохую расшифровку. Попытки использовать некоторые другие методы шифрования AES не дали мне намного большего. Я могу быть здесь над головой, но просто пытаюсь понять, как все это работает для удовольствия. Я программист видеоигр, так что для меня это все ново. Любая помощь с этой проблемой учебника будет принята с благодарностью!

Примечание. Я провел исчерпывающее переполнение стеков и поиск в Google, но примерно через час ничего не добился.

1

1 ответ на вопрос

3
Ilmari Karonen

Поскольку режим работы не указан, а длина зашифрованного текста равна размеру одного блока шифрования AES (128 бит = 32 шестнадцатеричных числа = 16 байтов), вполне вероятно, что ожидается использование необработанного блочного шифра (он же) Режим ЕЦБ ").

Фактически, вы можете сделать это, используя openssl enc . Вам понадобятся следующие опции: -aes-256-ecbвыбрать шифр AES-256 в режиме ECB и -nopadотключить заполнение сообщений . *

Конечно, вам также нужно сначала преобразовать зашифрованный текст из шестнадцатеричного кода в необработанные байты. (Вы можете использовать -Kопцию для предоставления ключа непосредственно в шестнадцатеричном виде.) Выходной открытый текст не будет печататься в формате ASCII, но преобразование его обратно в шестнадцатеричный код должно выявить четкий шаблон.

*) На самом деле, ваш открытый текст действительно случится конец действительного PKCS # 7 обивка, так OpenSSL будет счастливо расшифровать его даже без -nopad. Тем не менее, я предполагаю, что это просто совпадение.

Интересно! Я попробовал метод ecb (хотя я забыл упомянуть об этом), но вывод казался обманчивым. Казалось бы, я пропустил этот шаг преобразования его обратно в гекс. Каков предпочтительный способ сделать это? Bennett Yeates 8 лет назад 0
Любой инструмент, который вы использовали для преобразования шестнадцатеричного кода в необработанные байты, по-видимому, должен быть в состоянии сделать и обратное. Или вы можете запустить выходной файл с помощью инструмента [hex dump] (https://en.wikipedia.org/wiki/Hex_dump), например [xxd] (http://linux.die.net/man/1/xxd). , Ilmari Karonen 8 лет назад 1
Казалось бы, я тоже пропустил этот шаг. Спасибо за информацию! Bennett Yeates 8 лет назад 0
Интересно, если я все еще делаю это неправильно. Это моя команда: openssl.exe enc -d -aes-256-ecb -K 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 -in ../Excersizes/AES-decrypt-256bitkey/output.bin -out ../Excersizes/AES-decrypinte56 .bin -nopad Без nopad я получаю "плохую расшифровку" Bennett Yeates 8 лет назад 0
Эта команда выглядит хорошо для меня. Сколько байт вашего файла зашифрованного текста? И если вы делаете шестнадцатеричный дамп, выглядит ли содержимое как шестнадцатеричная строка в упражнении? Ilmari Karonen 8 лет назад 1
Хороший вопрос, похоже, мой текстовый файл, содержащий шестнадцатеричную строку, необходимо преобразовать в шестнадцатеричный дамп? Команда xxd, которую я запустил в текстовом файле, создала файл output.bin размером 0 байт. Bennett Yeates 8 лет назад 0
Хорошо, все еще есть плохая расшифровка, но у меня есть некоторый читаемый гекс в открытом тексте. Я получил: 00000000: 372c e188 d0e4 c58d a352 1629 fee6 4f49 7, ....... R.) .. OI 00000010: 9cdb 878c 6d0e 30de 2402 4b6c 4711 384b .... m.0. $. Кг. 8K Вы видели что-то подобное? Bennett Yeates 8 лет назад 0
Похоже, ваш файл зашифрованного текста все еще не так. Если вы работаете в Linux (или [имеете xxd для Windows] (http://superuser.com/questions/497953/convert-hex-dump-of-file-to-binaryprogram-file-on-windows)), попробуйте команды `echo 539b333b39706d149028cfe1d9d4a407> cipher.hex` и` xxd -r -p <cipher.hex> cipher.bin`. Результирующий файл `cipher.bin` должен иметь длину ровно 16 байтов. Ilmari Karonen 8 лет назад 0
Это исправило это. Странно, я предполагаю, что использование xxd для создания шестнадцатеричного дампа вызвало эту проблему? Видя открытый текст как 80706050403020100807060504030201 Bennett Yeates 8 лет назад 0
Я не уверен, как вы вообще «использовали xxd для создания шестнадцатеричного дампа», видя, как у вас была шестнадцатеричная строка для начала. Возможно, вы случайно зашифровали зашифрованный текст дважды? В любом случае, рад видеть, что вам удалось решить это сейчас. Ilmari Karonen 8 лет назад 0
Да, именно это я и сделал. Первоначально я пытался преобразовать его в двоичный файл, но поскольку двоичные файлы имели размер 0 байт, я попытался создать шестнадцатеричный дамп с помощью xxd, используя зашифрованный текст. Bennett Yeates 8 лет назад 0

Похожие вопросы