HSM KitHSM Kit
中文

Thales 密钥块格式:头部、TLV 与 TR-31 对比

Key Management# Thales# 密钥块# TLV# TR-31
Last Updated: 2026年5月21日6 min readBy HSM Kit Team
Need to calculate this now?
Use our free online Thales 密钥块工具 tool.

Thales 密钥块是 Thales payShield HSM 用于安全存储和传输密码密钥的专有格式。虽然 TR-31 是行业标准,但 Thales 密钥块仍被广泛使用。本指南介绍格式结构、头部布局以及与 TR-31 的区别。

什么是 Thales 密钥块?

Thales 密钥块是一个结构化容器,将密码密钥与元数据、完整性检查和加密包装在一起。它提供:

  • 在 LMK 变体下加密密钥
  • 密钥类型标识
  • 完整性验证
  • 格式版本控制

Thales 密钥块的应用场景

  • Thales payShield 10K 及旧型号
  • 支付处理网络
  • ATM 密钥管理
  • 银行间密钥交换
  • 传统支付基础设施

Thales 密钥块结构

Thales 密钥块有特定的布局:

+------------------+
| 头部             |  2字节:版本 + 密钥类型
+------------------+
| 密钥长度         |  2字节:加密密钥的长度
+------------------+
| 加密密钥         |  可变长度:LMK 变体下的密钥
+------------------+
| KCV              |  3字节:密钥校验值
+------------------+
| 填充             |  可选:用于对齐
+------------------+

头部格式

头部标识密钥块格式和密钥类型:

字段长度描述
版本1字节格式版本标识符
密钥类型1字节密钥用途
密钥长度2字节加密密钥数据的长度

密钥类型代码

代码密钥类型描述
00ZMK区域主密钥
01ZPK区域 PIN 密钥
02TPK终端 PIN 密钥
03TMK终端主密钥
04PVKPIN 验证密钥
05CVK卡验证密钥
06DEK数据加密密钥
07BDK基础派生密钥(DUKPT)
08IKK初始密钥(DUKPT)

头部详解

版本字节

版本字节表示格式版本:

版本备注
0x00版本 0原始格式
0x01版本 1包含额外标志
0x02版本 2扩展属性

密钥长度编码

密钥长度编码为 2 字节,大端序:

0x0010 = 16字节(双长度密钥)
0x0018 = 24字节(三长度密钥)

加密密钥部分

加密密钥是密钥块的核心。

LMK 变体加密

密钥在 LMK 变体下加密:

加密密钥 = E(LMK XOR 变体, 明文密钥)

不同密钥类型使用不同变体(参见 Thales LMK 指南)。

密钥填充

密钥可能被填充以满足对齐要求:

  • DES 密钥:8 字节对齐
  • AES 密钥:16 字节对齐

密钥校验值(KCV)

密钥块末尾的 KCV 用作完整性检查。

KCV 计算

标准方法:

KCV = E(Key, 0000000000000000) 的前 3 字节

KCV 用途

  • 导入后验证密钥完整性
  • 交换期间确认密钥匹配
  • 检测传输过程中的损坏

TLV 结构

一些 Thales 密钥块使用标签-长度-值(TLV)结构来存储扩展属性。

TLV 格式

标签(1-2字节)| 长度(1-2字节)| 值(可变长度)

常见标签

标签描述
0x01密钥类型
0x02密钥长度
0x03密钥用途
0x04可导出性
0x05算法

Thales 密钥块与 TR-31 对比

了解差异对于迁移和互操作性很重要。

格式对比

特性Thales 密钥块TR-31
标准专有ANSI X9.143
厂商仅 Thales厂商中立
头部固定 4 字节可变长度
密钥绑定基本密码学绑定
属性有限全面
版本控制简单详细

属性对比

属性ThalesTR-31
密钥用途类型代码A-Z 代码
算法隐含显式
可导出性标志多种模式
有效性不包含可选

迁移考虑

从 Thales 迁移到 TR-31 时:

  1. 将密钥类型代码映射到 TR-31 用途代码
  2. 添加算法属性
  3. 设置可导出性标志
  4. 以 TR-31 格式重新生成密钥块
  5. 转换后验证 KCV

实际应用场景

密钥导入

导入 Thales 密钥块:

  1. 解析头部获取密钥类型
  2. 提取加密密钥
  3. 在适当的 LMK 变体下解密
  4. 重新加密以存储
  5. 验证 KCV

密钥导出

将密钥导出为 Thales 密钥块:

  1. 从请求获取密钥类型
  2. 从存储中解密密钥
  3. 在目标 LMK 变体下加密
  4. 使用密钥类型构建头部
  5. 计算 KCV
  6. 组装密钥块

密钥交换

在 HSM 之间交换 Thales 密钥块:

  1. 从源 HSM 导出密钥块
  2. 传输密钥块(安全通道)
  3. 导入目标 HSM
  4. 目标验证 KCV
  5. 双方现在拥有相同的密钥

常见问题

版本不匹配

如果导入失败:

  • 检查版本字节兼容性
  • 确保 HSM 支持该版本
  • 可能需要降级格式

密钥类型混淆

错误的密钥类型会导致:

  • 解密失败(错误的变体)
  • KCV 不匹配
  • 操作错误

长度错误

常见长度问题:

  • 字节序错误
  • 包含/排除填充
  • 头部长度计算错误

最佳实践

  1. 始终验证 KCV,密钥导入后
  2. 记录使用的密钥类型,在您的系统中
  3. 使用一致的格式,跨 HSM
  4. 计划迁移到 TR-31,以面向未来
  5. 测试密钥交换,在生产前

在线体验

使用我们的 Thales 密钥块工具

  • 解析 Thales 密钥块头部
  • 提取密钥类型和长度
  • 了解 TLV 结构
  • 与 TR-31 格式对比

该工具完全在浏览器中运行——数据不会离开您的设备。

Related Tool
Thales 密钥块工具