1

我使用名为 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”。我还添加了行号、空格和换行符,以使内容更具可读性!

4

1 回答 1

2

整体方案说明请参见文档密钥管理实用程序用户 (KMU) 参考中的“密钥备份功能教程”一章。

不幸的是,本文档尚未更新为使用 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

  • 从有效负载中解包所有备份密钥(使用带有CKM_WRAPKEY_AES_CBC和零 IV 的 AES 传输密钥)


您可能希望使用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_CBCCKM_WRAPKEY_DES3_CBC以了解用于在编码的有效负载中对​​单个导出的密钥数据 (#1..#n) 进行编码的格式。

于 2020-08-24T18:50:55.637 回答