я сгенерировал пару ключей RSA на смарт-карте с помощью инструментов OpenSC и извлек ее как обернутый ключевой blob, зашифрованный ключом DKEK:
sc-hsm-tool --create-dkek-share dkek/dkek-share-1.pbe
sc-hsm-tool --create-dkek-share dkek/dkek-share-2.pbe
sc-hsm-tool --initialize --dkek-shares 2
sc-hsm-tool --import-dkek-share dkek/dkek-share-1.pbe
sc-hsm-tool --import-dkek-share dkek/dkek-share-2.pbe
pkcs11-tool -l --pin 123456 --keypairgen --key-type rsa:2048 --id 11 --usage-sign
sc-hsm-tool --wrap-key wrap-key.bin --key-reference 1
я пропустил вывод команд, так как все прошло, как ожидалось.
теперь у меня зашифрованный ключ в wrap-key.bin
file и оба dkek-shares и связанные пароли.
Я нашел много учебников, как я могу загрузить этот ключ на новую смарт-карту (очевидный пример: https://github.com/OpenSC/OpenSC/wiki/SmartCardHSM), но я не имею одно и мне все еще нужно использовать ключ.
как я могу получить его? Поскольку DKEK является 256-битным ключом AES, и у меня есть все ключевые компоненты, это должно быть возможно, но я не знаю, как это сделать. Я предполагаю, что сначала мне нужно восстановить ключ AES из общих папок, а затем получить ключевые данные из wrap-key.bin
file (некоторые части файла находятся в обычном тексте, поэтому я считаю, что не весь файл зашифрован), но я не мог найти любая информация о нем где угодно.
EDIT:wrap-key.bin
кодируется в ASN.Формат 1. Я подозреваю, что зашифрованная часть является Октетной строкой в начале, однако я не могу проверить ее без ключа.
EDIT2: части DKEK отформатированы в соответствии с форматом соленый OpenSSLhttp://justsolve.archiveteam.org/wiki/OpenSSL_salted_format но я не смог расшифровать их, просто предоставив пароль. Возможно, какая-то форма взаимодействия с картой требуется, но я сомневаюсь в этом. Если бы это было так, как это позволило бы загружать ключи на совершенно новую карту, не имея никакого отношения к старой?