从 tr31 密钥块中提取密钥(从 HSM Thales 9000 导出)
Extract Key from a tr31 key block (exporting from HSM Thales 9000)
使用 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 密钥块?
看看 TR31 标准(在法律上不能免费获得,因为 ANSI 想让你的生活变得悲惨)。
R
似乎不是 TR31 区块的一部分,我只能假设是 Thales 特有的东西
A
是密钥块版本 ID(header 的第一个字段),描述了正在使用的密钥绑定方法。 A
已弃用并使用密钥变体绑定方法。
0072
是整个 TR31 密钥块的十进制数字长度,如果我们忽略前导 R
,则恰好适合
B1
是key的用法,是一个Initial DUKPT Key
T
是密钥的算法,即Triple-DES(或TR31表示法中的Triple-DEA)
X
是使用模式,也就是"Key used to derive other key(s)"
00
是key的版本号,表示这个key没有使用key的版本控制
S
是key的exportability,也就是"Sensitive"
00
是可选块的十进制数。
00
保留供将来使用,并且始终必须是两个 ASCII 零。由于没有可选块,此字段是 header. 的最后一个字段
73C35FF96F7A8C7D35D440CCBDA06FFED3AC7017F27B0A0E
是十六进制编码的加密密钥(header 之后的所有内容,最后 8 个字符除外)。它是 24 字节长,适合 16 字节长的密钥(2 字节密钥长度,16 字节密钥,6 字节填充以获得完整的 8 字节块大小)。
8896FFC9
是 MAC(最后 8 个字符(对于密钥块版本 ID A
)是 Triple-DES [=60] 的最左边 32 位=])
要更进一步(解密加密密钥),我需要密钥块保护密钥(可能是 TMK?)。
'R'是Thales使用的scheme flag,表示密钥的格式是TR-31。这通常不会包含在发送给对等设备的任何消息中,因为它不是 TR-31 格式的一部分。
使用 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 密钥块?
看看 TR31 标准(在法律上不能免费获得,因为 ANSI 想让你的生活变得悲惨)。
R
似乎不是 TR31 区块的一部分,我只能假设是 Thales 特有的东西A
是密钥块版本 ID(header 的第一个字段),描述了正在使用的密钥绑定方法。A
已弃用并使用密钥变体绑定方法。0072
是整个 TR31 密钥块的十进制数字长度,如果我们忽略前导R
,则恰好适合
B1
是key的用法,是一个Initial DUKPT KeyT
是密钥的算法,即Triple-DES(或TR31表示法中的Triple-DEA)X
是使用模式,也就是"Key used to derive other key(s)"00
是key的版本号,表示这个key没有使用key的版本控制S
是key的exportability,也就是"Sensitive"00
是可选块的十进制数。00
保留供将来使用,并且始终必须是两个 ASCII 零。由于没有可选块,此字段是 header. 的最后一个字段
73C35FF96F7A8C7D35D440CCBDA06FFED3AC7017F27B0A0E
是十六进制编码的加密密钥(header 之后的所有内容,最后 8 个字符除外)。它是 24 字节长,适合 16 字节长的密钥(2 字节密钥长度,16 字节密钥,6 字节填充以获得完整的 8 字节块大小)。8896FFC9
是 MAC(最后 8 个字符(对于密钥块版本 IDA
)是 Triple-DES [=60] 的最左边 32 位=])
要更进一步(解密加密密钥),我需要密钥块保护密钥(可能是 TMK?)。
'R'是Thales使用的scheme flag,表示密钥的格式是TR-31。这通常不会包含在发送给对等设备的任何消息中,因为它不是 TR-31 格式的一部分。