使用HSM命令A0(生成密钥),我收到以下响应。
HEADA100U7D4213E0422F4E08E9455D9837E09FDDRA0072B1TX00S000073C35FF96F7A8C7D35D440CCBDA06FFED3AC7017F27B0A0E8896FFC971F0B9
HEAD (Message Header)
A1 (Response Code)
00 (Error Code)
U7D4213E0422F4E08E9455D9837E09FDD (Key under LMK)
RA0072B1TX00S000073C35FF96F7A8C7D35D440CCBDA06FFED3AC7017F27B0A0E8896FFC9 (Key under TMK - export tr31 key block)
71F0B9 (Key Check Value)
我的问题是:
如何从tr31密钥块中提取密钥(在tmk下)?
有谁知道如何解码tr31密钥块?
答案 0 :(得分:0)
看看TR31标准(由于ANSI希望使您的生活痛苦不堪,因此该法律免费提供)。
R
似乎不是TR31区块的一部分,我只能假定是Thales特有的东西A
是密钥块版本ID(标头的第一个字段),描述了所使用的密钥绑定方法。 A
已过时,并使用密钥变体绑定方法。0072
是整个TR31密钥块的长度(以十进制数字表示),如果我们忽略了开头的R
B1
是密钥用法,它是初始DUKPT密钥T
是密钥的算法,它是Triple-DES(或TR31表示法的Triple-DEA)X
是一种使用方式,即“用于导出其他密钥的密钥” 00
是密钥版本号,这意味着此密钥不使用任何密钥版本控制。S
是密钥的可导出性,即“敏感” 00
是十进制的可选块数。00
保留供将来使用,并且必须始终为两个ASCII零。由于没有可选块,因此该字段是标头的最后一个字段。73C35FF96F7A8C7D35D440CCBDA06FFED3AC7017F27B0A0E
是十六进制编码的加密密钥(头后面的所有字符,除了最后8个字符)。它是24字节长,适合16字节长的密钥(2字节密钥长度,16字节密钥,6字节填充以达到完整的8字节块大小)。8896FFC9
是MAC(最后8个字符(对于密钥块版本A
)是Triple-DES CBC-MAC的最左32位)要进一步(解密加密的密钥),我需要密钥块保护密钥(可能是TMK?)。
答案 1 :(得分:0)
'R'是Thales使用的方案标志,表示密钥的格式为TR-31。由于它不是TR-31格式的一部分,因此通常不会包含在与对等设备的任何消息传递中。