Как расшифровать экспортированные ключи, обернутые safeNet?
Я экспортировал ключ 3DES из SafeNet HSM в файл с помощью инструмента под названием KMU. Этот инструмент оборачивает ключ перед извлечением с помощью другого ключа 3DES. У меня есть доступ к текстовому значению второго ключа.
Возникает вопрос: "Как я могу расшифровать обернутый файл, чтобы получить текстовое значение обернутого ключа?"
Обновить:
К вашему сведению: окончательный экспортированный файл выглядит так:
L1: 000001f4 000001a800000001000001a0
L2: 00000020 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
L3: 00000140 0000001b0000010300000001010100000162000000010101800001290000000101010000016500000001010000000164000000010100000000010000000101010000000200000001010100000170000000010101000000030000000f014949494949494949494949494949490000010c000000010101000001040000000101010000010a000000010101000001060000000101010000010500000001010100000108000000010101000001070000000101018000012b000000010100000001610000000401000000100000000000000004010000000400000100000000040100000014800001030000000000000001020000000000000001100000000000000001110000000000800001280000000101000000016300000001010080000102000000100132303131313232383136323032313030000000000000000000000000
L4: 00000010 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
L5: 00000020 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxx
L6: 00000020 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
L7: 00000020 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Части, обозначенные "x", представляют собой данные, которые в исходном файле выглядят зашифрованными, поэтому я заменил их на "x". Номера строк, пробелы и новые строки также добавлены мной, чтобы сделать контент более читабельным!
1 ответ
См. Главу "Учебное пособие по функции резервного копирования ключей" в документе Справочник пользователя служебной программы управления ключами (KMU) для полного описания схемы.
К сожалению, этот документ не был обновлен до последней версии схемы, которая использует AES tK и HMAC для M_mK.
Насколько я помню, можно сказать KMU использовать старую схему DES3 с -3
параметр командной строки.
У меня есть работающая реализация, но, к сожалению, я не могу предоставить код.
Сводка основных этапов восстановления:
Проверить общую структуру файла (magic 0x000001f4 | полезная нагрузка в кодировке varLen | 4-байтовый MAC | ключ MAC в оболочке varLen | транспортный ключ в оболочке varLen)
развернуть транспортный ключ AES (с помощью ключа переноса и алгоритма, зависящего от типа ключа, например
CKM_RSA_PKCS
)развернуть общий секретный MAC-ключ (используя транспортный ключ AES и
CKM_AES_ECB
. Длина 32)проверить MAC закодированной полезной нагрузки (используя MAC-ключ с
CKM_SHA512_HMAC_GENERAL
)развернуть все резервные копии ключей из полезной нагрузки (используя транспортный ключ AES с
CKM_WRAPKEY_AES_CBC
и ноль IV)
Возможно, вы захотите использовать библиотеку регистратора PKCS#11 (см. Руководство по программированию PTK-C) и записать активность утилиты KMU во время восстановления ключа, чтобы проверить точные детали алгоритма.
Удачи тебе с твоим проектом!
РЕДАКТИРОВАТЬ> Общая структура файла (с учетом данных вашего примера):
000001f4 // Magic
000001a8 // Length of encoded payload
00000001 // Number of keys
000001a0 // Wrapped key #1 length
xxxx...xxxx // Wrapped key #1 data for CKM_WRAPKEY_AES_CBC
xxxxxxxx // Payload MAC
00000020 // Wrapped MAC key cryptogram length
xxxx...xxxx // Wrapped MAC key cryptogram
00000020 // Wrapped transport key cryptogram length
xxxx...xxxx // // Wrapped transport key cryptogram
См. CKM_WRAPKEY_AES_CBC и CKM_WRAPKEY_DES3_CBC для формата, используемого для кодирования отдельных экспортируемых данных ключа (#1..#n) внутри закодированной полезной нагрузки.