HSM KitHSM 工具箱
中文

TR-31 密钥块格式详解

密钥管理# TR-31# 密钥块# ANSI X9.143# HSM
最后更新: 2026年4月3日4 分钟阅读By HSM Kit Team
现在需要计算吗?
使用我们免费的在线 TR-31 密钥块工具 工具。

TR-31(也称为 ANSI X9.143)是安全封装和传输加密密钥的行业标准格式。本指南提供该格式的全面概述。

什么是 TR-31?

TR-31 是一种密钥块规范,提供:

  • 密钥加密:在传输过程中保护密钥
  • 密钥绑定:将密钥属性与密钥材料密码学绑定
  • 完整性保护:检测篡改
  • 密钥用途控制:定义密钥的使用方式

TR-31 旨在替代不安全的做法——将密钥作为纯密文传输(在 KEK 下加密,但不绑定任何属性)。它现在是 PCI PIN 的要求,并被 Thales、Futurex 和 Atalla 等 HSM 厂商 广泛采用。

密钥块结构

TR-31 密钥块由以下几部分组成:

[版本][块长度][密钥用途][算法][模式][密钥版本][可导出性][可选块][密钥数据][MAC]

头部字段

字段长度描述
版本 ID1'A'(TDES)、'B'(TDES-KD)、'C'(TDES-V)、'D'(AES)
块长度4总块长度(十六进制字节数)
密钥用途2密钥用途(P0、K0、B0 等)
算法1密钥算法(T=TDES,A=AES)
使用模式1密钥使用方式(E=仅加密等)
密钥版本2版本号
可导出性1导出限制(E、N、S)
可选块数2可选块数量

密钥用途代码

常见密钥用途代码:

代码描述
P0PIN 加密密钥——用于加密 PIN 块
B0BDK 基础派生密钥——用于 DUKPT
K0密钥加密/封装密钥
M0ISO 9797-1 MAC(算法 1)
M3ISO 9797-1 MAC(算法 3)——参见 MAC 指南
D0数据加密对称密钥
V0PIN 验证密钥(VISA PVV)

使用模式

代码描述
B加密和解密均可
C计算(仅 MAC 生成)
D仅解密
E仅加密
G生成密钥
N无特殊限制
S仅签名
V验证(仅 MAC 验证)
X密钥派生

可导出性

代码描述
E可导出(在受信任密钥块中)
N不可导出
S敏感(仅可导出到不可导出目标)

版本差异

版本 A(原始 TDES)

  • 使用 TDES 密钥封装
  • 16 字节 MAC
  • 基本安全性

版本 B(TDES 密钥派生)

  • 封装前使用密钥派生
  • 改进的密码学绑定
  • 16 字节 MAC

版本 C(TDES 变体)

  • 使用 CMAC 替代 X9.19 MAC——参见 CMAC 工具
  • 更好的完整性保护

版本 D(AES)

  • 使用 AES 进行密钥封装(AES-256 KBPK)
  • CMAC 用于认证
  • 最强安全性
  • 新实现推荐使用

关于 AES 与 TDES 安全性的背景,参见 AES 指南DES/3DES 指南

TR-31 与 Thales 密钥块

Thales HSM 也有专有的"Thales 密钥块"格式。TR-31 是开放标准,而 Thales 密钥块专用于 Thales payShield HSM。使用 Thales 密钥块工具 处理 Thales 专有格式,使用 TR-31 工具 处理标准格式。

安全最佳实践

  1. 使用版本 D:基于 AES 的保护最强
  2. 强 KBPK:使用 256 位 AES KBPK
  3. 使用前验证:解密前始终验证 MAC
  4. 遵守限制:尊重可导出性和模式标志
  5. 密钥轮换:定期轮换 KBPK

关于将 KBPK 加载到 HSM 的密钥分片,参见 密钥分片与 KCV 指南

常见问题

"MAC 验证失败"

  • KBPK 不匹配
  • 密钥块损坏
  • 版本解码错误

"无效密钥长度"

  • 算法不匹配
  • 填充问题

"未知密钥用途"

  • 不支持或厂商特定代码

亲自尝试

使用 TR-31 密钥块工具

  • 将密钥编码为 TR-31 格式
  • 解码和验证现有密钥块
  • 查看所有头部字段和属性
  • 支持所有版本(A、B、C、D)

所有处理在您的浏览器本地完成,确保最大安全性。

相关工具
TR-31 密钥块工具