Расшифровать экспорт кошелька Blockchain.info

Формат зашифрованного кошелька Blockchain.info описывается как:

AES шифрует всю полезную нагрузку JSON с помощью пароля пользователя, который затем кодируется как base64. Для однопроходного шифрования соль не используется. Точные спецификации AES: 10 раундов заполнения PBKDF2, блочный режим CBC ISO10126.

Однако при попытке проверить мой собственный зашифрованный экспорт кажется, что это не вся информация (или верная). Я думаю, что часть проблемы заключается в том, как пароль пользователя расширяется до ключа ввода для шифра AES/Rijndael.

  • Ключ ввода для AES может быть 128, 192 или 256 бит; который используется?
  • AES имеет свое собственное расписание ключей , но кажется, что Blockchain использует что-то отдельное, так как «PBKDF2» — это еще одна функция расширения ключа.
  • PBKDF2 — это методология, которую можно использовать со многими типами хэшей; какой хэш используется?

Ответы (2)

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

  • Входной ключ для расшифровки AES составляет 32 байта (256 бит).
  • Используемый размер блока составляет 16 байт ( MCRYPT_RIJNDAEL_128для функций PHP mcrypt ) .
  • Вектор инициализации (IV) для расшифровки AES — это первые 16 байтов (размер одного блока) зашифрованной строки. Оставшаяся зашифрованная строка является зашифрованным сообщением.
  • Пароль пользователя расширяется за счет использования 10 раундов хеширования PBKDF2, использования хеширования SHA1 и IV в качестве соли (примечание «Соль не используется для однопроходного шифрования», по-видимому, просто означает отсутствие соли для шифрования AES. Для хеширования PBKDF2 , есть соль).

Обратите внимание: если вы используете функции расширения PHP mcrypt(как я пытался), вам нужно использовать mdecrypt_generic()метод, а не mcrypt_decrypt(), поскольку Blockchain использует заполнение ISO10126, а mcryptрасширение будет использовать только «нулевое заполнение». Затем вам нужно распаковать результат отдельно.

Хотя у меня нет прямого ответа на ваши вопросы, я думаю, вы можете найти тех, кто смотрит на исходный код сценария восстановления .

Спасибо, Лохорис; что наставило меня на верный путь! Я обнаружил, что этот конкретный сценарий восстановления устарел (метод шифрования изменился в марте 2012 года). Хотя он указал мне на этот рабочий скрипт и инструмент восстановления, который помог мне разобраться.