从tr31密钥块中提取密钥(从HSM Thales 9000导出)

时间:2016-05-18 11:43:38

标签: hsm

使用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密钥块?

2 个答案:

答案 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格式的一部分,因此通常不会包含在与对等设备的任何消息传递中。