TR-31(也称为 ANSI X9.143)是安全包装和传输加密密钥的行业标准格式。本指南提供该格式的全面概述。
什么是 TR-31?
TR-31 是一种密钥块规范,提供:
- 密钥加密:在传输过程中保护密钥
- 密钥绑定:将密钥属性与密钥材料绑定
- 完整性保护:检测篡改
- 密钥用途控制:定义密钥的使用方式
密钥块结构
TR-31 密钥块由几个部分组成:
[版本][块长度][密钥用途][算法][模式][密钥版本][可导出性][可选块][密钥数据][MAC]
头部字段
| 字段 | 长度 | 描述 |
|---|---|---|
| 版本 ID | 1 | '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 | 可选块的数量 |
密钥用途代码
常见密钥用途代码:
| 代码 | 描述 |
|---|---|
| P0 | PIN 加密密钥 |
| B0 | BDK 基础派生密钥 |
| K0 | 密钥加密/包装密钥 |
| M0 | ISO 9797-1 MAC(算法 1) |
| M3 | ISO 9797-1 MAC(算法 3) |
| D0 | 数据加密对称密钥 |
| V0 | PIN 验证密钥 (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
- 更好的完整性保护
版本 D(AES)
- 使用 AES 进行密钥包装(AES-256 KBPK)
- CMAC 用于认证
- 最强安全性
- 推荐用于新实现
编码示例
让我们编码一个 PIN 加密密钥 (P0):
输入:
- 密钥:
0123456789ABCDEFFEDCBA9876543210 - KBPK:
00112233445566778899AABBCCDDEEFF - 用途:P0(PIN 加密)
- 算法:T(TDES)
- 模式:B(双向)
- 可导出性:E
结果:
D0112P0TB00E0000...
解码密钥块
当您收到 TR-31 密钥块时:
- 验证头部:检查版本、用途、算法
- 验证 MAC:使用您的 KBPK
- 解密密钥:使用派生的加密密钥
- 应用密钥:根据用途和模式
安全最佳实践
- 使用版本 D:基于 AES 的保护最强
- 强 KBPK:使用 256 位 AES KBPK
- 使用前验证:在解密前始终验证 MAC
- 遵守限制:尊重可导出性和模式标志
- 密钥轮换:定期轮换 KBPK
常见问题
"MAC 验证失败"
- KBPK 不匹配
- 密钥块损坏
- 错误的版本解码
"无效的密钥长度"
- 算法不匹配
- 填充问题
"未知密钥用途"
- 不支持或供应商特定的代码
亲自尝试
使用我们的 TR-31 密钥块工具:
- 将密钥编码为 TR-31 格式
- 解码和验证现有密钥块
- 查看所有头部字段和属性
- 支持所有版本(A、B、C、D)
所有处理都在您的浏览器本地进行,以确保最大安全性。