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

问题描述

我已使用名为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中的“ 密钥备份功能教程”一章。

不幸的是,该文档尚未更新为该方案的最新版本,该方案使用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(使用带有CKM_SHA512_HMAC_GENERAL的MAC密钥)

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


您可能想使用 PKCS#11记录程序库(请参阅《 PTK-C编程指南》 ),并在密钥还原期间记录KMU实用程序的活动以验证是否正常。算法的详细信息。

祝您项目顺利!


EDIT>文件的整体结构(根据您的示例数据):

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

有关用于对已编码有效载荷内部的单个导出密钥数据(#1 ..#n)进行编码的格式,请参见CKM_WRAPKEY_AES_CBCCKM_WRAPKEY_DES3_CBC

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...