Рейтинг:1

Расшифровать зашифрованный AES-128-CBC частичный ключ RSA

флаг cn

Мне дается закрытый ключ RSA, заголовок которого указывает, что он зашифрован AES-128-CBC. Обратите внимание, что последние десять строк ключа отсутствуют. (Это часть учебного задания.)

-----НАЧАТЬ ЗАКРЫТЫЙ КЛЮЧ RSA-----
Тип процедуры: 4, ЗАШИФРОВАННЫЙ
DEK-информация: AES-128-CBC,8B7CE35DB731727CEABA217FAE404DB8

... 37 с половиной строк по 64 символа в каждой

Задача состоит в том, чтобы узнать парольную фразу ключа (известно, что это четырехзначное число). Я уже достиг общего механизма взлома с помощью John The Ripper и добавил обязательный -----КОНЕЦ ЗАКРЫТОГО КЛЮЧА RSA----- до конца частичного ключа, но пока ключ не может быть расшифрован, что может быть связано с тем, что последние несколько строк ключа отсутствуют (поскольку в CBC задействованы все блоки файла). Я уже пытался сократить длину содержимого ключа до кратного 128 битам и расшифровать его, но это ничего не изменило. Чтобы найти правильный способ расшифровки ключа, мне нужно глубже понять процесс расшифровки.

Как работает процесс расшифровки, и как в этом участвует парольная фраза ключа? Я уже просмотрел некоторые веб-страницы, содержащие википедию о шифровании CBC в целом, но я не смог понять, как происходит фактический процесс дешифрования с использованием ключевой фразы.

Заранее спасибо за все объяснения или подсказки о том, как подойти к этой задаче.

Maarten Bodewes avatar
флаг in
Вы должны найти фактический способ шифрования файла (например, в отношении того, как получен ключ и используется IV). Затем вы должны * base 64 декодировать строки *, которые вам даны, и попытаться расшифровать это, используя AES-CBC напрямую (используя «без заполнения», поскольку распаковка не удастся). Обратите внимание, что заголовок DER закрытого ключа легко отличить от рандомизированного текста.
Maarten Bodewes avatar
флаг in
Интересно, что я не могу найти KDF, используемый для получения ключа. Вероятно, это специфичный для OpenSSL `EVP_BytesToKey`, но я буду опасен, если смогу найти точный метод, необходимый для перехода от PIN-кода к ключу. У вас есть дополнительная информация о PIN-коде/ключе?
BenjyTec avatar
флаг cn
@MaartenBodewes Спасибо за вашу помощь. Нет, к сожалению, нет дополнительной информации о предоставленном PIN-коде или ключе. Единственная дополнительная вещь это зашифрованный файл, который потом будет расшифрован восстановленным ключом, но я думаю это не поможет на данном этапе.
Рейтинг:4
флаг cn

Тип процедуры: 4, ЗАШИФРОВАННЫЙ указывает, что ключ получен из пароля, указанного RFC 1421 §4.6.1.1 сл.. По смыслу ДЭК-Инфо, RFC 1423 старше, чем AES, и я не знаю другой ссылки, кроме исходного кода OpenSSL.

Ключ шифрования получается из пароля с использованием PBKDF1-MD5, как указано ПККС#5. Соль – это вторая часть ДЭК-Инфо заголовок, а количество итераций равно 1. (Да, это смехотворно слабо. Всегда используйте только пароли с высокой энтропией для шифрования PEM, а не настоящие запоминающиеся пароли!) Опять же, единственная известная мне ссылка — это исходный код OpenSSL: pem_bytes_read_bio_flags звонки PEM_do_header который вызывает EVP_BytesToKey.

Нет встроенного механизма проверки правильности пароля при расшифровке. Неверный пароль, скорее всего, приведет к мусору. Если вы передаете усеченный ввод инструменту, который ожидает действительный ключ RSA, он просто будет все время выдавать ошибку. Возможно, вам придется написать свой собственный инструмент.

Чтобы определить, правильно ли расшифрована имеющаяся у вас часть, проверьте, соответствует ли она формату закрытого ключа RSA, найденному внутри такого файла PEM. Этот формат указан в PKCS#1 §A.1.2. Если вы не знакомы с ASN.1, учебник Let's Encrypt ASN.1 должно помочь, и, конечно, вы должны посмотреть на некоторые примеры.Закрытый ключ RSA начинается с 0x30 (индикатор последовательности), затем длина (обычно 0x82 и еще два байта) целого, затем 0x02 0x01 0x00 (кодирование версии как целое число ASN.1), затем (для 2048 -битный показатель, например) 0x02 0x82 0x01 0x01 0x00 и 256 байт значения показателя степени, затем 0x02 0x03 0x01 0x00 0x01 для общедоступного показателя степени 65537 и т. д.

dave_thompson_085 avatar
флаг cn
Обратите внимание, что последние 3 (необязательные или предшествующие 2.1) компоненты в RSAPrivateKey PKCS1 могут быть воссозданы тривиально, а p, q также могут быть воссозданы довольно легко, поэтому OP (заявлено) около 1800 из 2280 байт более чем достаточно, хотя стандартные инструменты не будет работать на нем и должен быть изменен или заменен.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.