如何解密 safeNet 包装的导出密钥?

How to decrypt safeNet wrapped exported keys?

我使用名为 KMU 的工具将 3DES 密钥从我的 SafeNet HSM 导出到一个文件。此工具在使用另一个 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'。行号、空格和换行也是我添加的,使内容更易读!

请参阅文档Key Management Utility User (KMU) Reference中的“Key Backup Feature Tutorial”一章以获取总体方案说明。

遗憾的是,此文档尚未更新为使用 AES tK 和 HMAC 的方案的最新版本 M_mK.

据我所知,可以通过 -3 命令行选项告诉 KMU 使用旧的 DES3 方案。


我有一个有效的实现,但遗憾的是无法提供代码。

关键恢复步骤总结:

  • 检查整体文件结构(魔法 0x000001f4 | varLen 编码有效负载 | 4 字节 MAC | varLen 包装 MAC 密钥 | varLen 包装传输密钥)

  • 解包 AES 传输密钥(使用包装密钥及其密钥类型特定算法,例如 CKM_RSA_PKCS

  • 展开通用秘密 MAC 密钥(使用 AES 传输密钥和 CKM_AES_ECB。长度为 32)

  • 验证编码负载的 MAC(使用 MAC 密钥和 CKM_SHA512_HMAC_GENERAL

  • 从有效负载中解包所有 backed-up 密钥(使用具有 CKM_WRAPKEY_AES_CBC 和零 IV 的 AES 传输密钥)


您可能想要使用 PKCS#11 记录器库(请参阅PTK-C 编程指南)并记录 activity 在密钥恢复期间使用 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 and CKM_WRAPKEY_DES3_CBC 以了解用于对已编码有效负载内的单个导出密钥数据 (#1..#n) 进行编码的格式。