【问题标题】:Extract Key from a tr31 key block (exporting from HSM Thales 9000)从 tr31 密钥块中提取密钥(从 HSM Thales 9000 导出)
【发布时间】:2016-05-18 11:43:38
【问题描述】:

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

【问题讨论】:

    标签: hsm


    【解决方案1】:

    看看 TR31 标准(在法律上不能免费获得,因为 ANSI 想让你的生活变得悲惨)。

    • R 似乎不是 TR31 区块的一部分,我只能假设是泰雷兹特有的
    • A 是密钥块版本 ID(标头的第一个字段),描述了正在使用的密钥绑定方法。 A 已弃用,并使用密钥变体绑定方法。
    • 0072 是整个 TR31 密钥块的十进制数字的长度,如果我们忽略前导 R,它恰好适合
    • B1 是密钥用法,是 Initial DUKPT Key
    • T是密钥的算法,即Triple-DES(或TR31表示法中的Triple-DEA)
    • X是使用方式,即“Key used to derived other key(s)”
    • 00 是密钥版本号,这意味着此密钥没有使用密钥版本控制
    • S 是密钥的可导出性,即“敏感”
    • 00 是十进制可选块的数量。
    • 00 保留供将来使用,并且始终必须是两个 ASCII 零。由于没有可选块,因此该字段是标头的最后一个字段。
    • 73C35FF96F7A8C7D35D440CCBDA06FFED3AC7017F27B0A0E 是十六进制编码的加密密钥(标题后面的所有内容,除了最后 8 个字符)。它有 24 字节长,适合 16 字节长的密钥(2 字节密钥长度、16 字节密钥、6 字节填充以达到完整的 8 字节块大小)。
    • 8896FFC9 是 MAC(最后 8 个字符(对于密钥块版本 id A)是 Triple-DES CBC-MAC 的最左边 32 位)

    要更进一步(解密加密密钥),我需要密钥块保护密钥(可能是 TMK?)。

    【讨论】:

    • 对不起,你能把这句话解释得更好吗? “它是 24 字节长,适合 16 字节长的密钥(2 字节密钥长度,16 字节密钥,6 字节填充以达到完整的 8 字节块大小)。”
    • (Triple-)DES 是 64 位分组密码,因此只能处理 8 字节大小的分组。加密任意长度密钥的 TR31 填充方法如下:获取密钥的长度,将其编码为两个字节,并将其添加到密钥前面。然后获取结果并附加随机字节,直到总字节长度是块大小(8 字节)的倍数。
    【解决方案2】:

    'R'是Thales使用的方案标志,表示密钥的格式是TR-31。这通常不会包含在发送给对等设备的任何消息中,因为它不是 TR-31 格式的一部分。

    【讨论】:

      猜你喜欢
      • 2022-10-01
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 2012-07-13
      • 2022-08-24
      • 1970-01-01
      相关资源
      最近更新 更多