Thales(前身为 nCipher 和 SafeNet)是支付 HSM 市场的领导者,其 payShield 系列广泛使用。Thales LMK(本地主密钥)系统是这些设备密钥管理的基础。本指南解释 Thales LMK 加密的工作原理、密钥方案和基于变体的密钥保护。
什么是 Thales LMK?
本地主密钥(LMK)是存储在 Thales HSM 内部的根密钥。它是保护系统中所有其他密钥的主密钥。
主要特性
- 存储在防篡改硬件中
- 永远不会以明文形式离开 HSM
- 在密钥仪式期间分成多个组件
- 用于加密/解密所有工作密钥
- 不同密钥类型使用不同变体
LMK 变体系统
Thales 使用基于变体的加密系统,将不同的 XOR 掩码应用于 LMK,为不同密钥类型创建不同的加密上下文。
变体工作原理
有效密钥 = LMK XOR 变体掩码
加密密钥 = E(有效密钥, 明文密钥)
这确保不同类型的密钥在密码学上相互隔离。
标准变体掩码
| 密钥类型 | 变体代码 | XOR 掩码 |
|---|---|---|
| ZMK | 00 | LMK XOR 00000000 00000000 00000000 00000000 |
| ZMK(变体) | 01 | LMK XOR 00000000 00000000 00000000 000000FF |
| ZPK | 02 | LMK XOR 00000000 00000000 00000000 0000FF00 |
| TPK | 03 | LMK XOR 00000000 00000000 00000000 00FF0000 |
| TMK | 04 | LMK XOR 00000000 00000000 00000000 FF000000 |
| PVK | 05 | LMK XOR 00000000 00000000 000000FF 00000000 |
| CVK | 06 | LMK XOR 00000000 00000000 0000FF00 00000000 |
| DEK | 07 | LMK XOR 00000000 00000000 00FF0000 00000000 |
密钥方案格式
Thales 使用特定格式表示加密密钥,称为密钥方案。
ZMK 方案
区域主密钥方案用于 HSM 之间的密钥交换:
ZMK 方案:[变体] [加密密钥] [KCV]
示例:
U 1A2B3C4D5E6F7890 ABCD12
其中:
U= 双长度密钥1A2B3C4D5E6F7890= LMK 加密的 ZMKABCD12= 密钥校验值
ZPK 方案
区域 PIN 密钥方案保护 PIN 加密密钥:
ZPK 方案:[变体] [加密密钥] [KCV]
TMK/TPK 方案
终端密钥使用类似格式:
TMK 方案:[变体] [加密密钥] [KCV]
密钥类型详解
区域主密钥(ZMK)
- 用于在 HSM 之间建立安全通道
- 手动或通过安全协议交换
- 加密其他密钥以进行传输
- 也称为密钥交换密钥(KEK)
区域 PIN 密钥(ZPK)
- 在 ATM 和 POS 终端加密 PIN
- 用于区域之间的 PIN 翻译
- 在 LMK 变体下保护
终端主密钥(TMK)
- 特定终端的主密钥
- 在终端初始化期间加载
- 保护终端特定密钥
终端 PIN 密钥(TPK)
- 终端用于 PIN 加密
- 从 TMK 派生或受 TMK 保护
- 每个终端专用
PIN 验证密钥(PVK)
- 用于离线验证 PIN
- 生成 PVV(PIN 验证值)
- 两端必须相同
卡验证密钥(CVK)
- 生成 CVV/CVC/CID 值
- 印在卡磁条或芯片上
- 用于无卡交易验证
数据加密密钥(DEK)
- 加密持卡人数据
- 用于 PAN 加密
- PCI DSS 要求
密钥校验值(KCV)
KCV 验证对所有 Thales 密钥操作至关重要。
标准 KCV 计算
KCV = E(Key, 0000000000000000) 的前 3 字节
密钥交换中的 KCV
交换密钥时:
- 从源 HSM 导出密钥并附带 KCV
- 将密钥导入目标 HSM
- 目标 HSM 计算 KCV
- 比较 KCV——必须完全匹配
- 如果不匹配,密钥在传输过程中损坏
密钥导入和导出
导入密钥
将密钥导入 Thales HSM:
- 接收在 ZMK 加密下的密钥
- HSM 使用 LMK 变体解密 ZMK
- HSM 使用 ZMK 解密密钥
- HSM 在适当的 LMK 变体下重新加密密钥
- 存储密钥并附带 KCV
导出密钥
从 Thales HSM 导出密钥:
- 从 LMK 变体中解密密钥
- 在目标 ZMK 下加密密钥
- 计算 KCV
- 返回加密密钥和 KCV
实际应用场景
银行之间的密钥交换
当银行 A 向银行 B 发送 ZPK 时:
- 银行 A 在 HSM 中生成 ZPK
- 银行 A 在 ZMK 加密下导出 ZPK
- ZMK 之前已交换(手动或自动)
- 银行 B 将 ZPK 导入他们的 HSM
- 双方验证 KCV 匹配
ATM 密钥加载
向 ATM 加载密钥:
- 在 HSM 中生成 TMK
- 在 ZMK 加密下导出 TMK
- 通过主密钥加载将 TMK 加载到 ATM
- 为 ATM 生成 TPK
- 在 TMK 加密下导出 TPK
- 将 TPK 加载到 ATM
常见问题
变体不匹配
使用错误变体是常见问题:
- 操作前验证密钥类型
- 检查变体掩码文档
- 先用已知密钥测试
KCV 不匹配
如果交换后 KCV 不匹配:
- 验证 ZMK 是否正确加载
- 检查传输错误
- 确保双方使用相同的密钥类型
- 确认变体代码匹配
密钥长度混淆
Thales 支持单长度、双长度和三长度密钥:
- 单长度:8 字节(16 个十六进制字符)
- 双长度:16 字节(32 个十六进制字符)
- 三长度:24 字节(48 个十六进制字符)
确保方案中的长度指示符正确。
在线体验
使用我们的 Thales 密钥工具:
- 在 LMK 变体下加密和解密密钥
- 为任何密钥计算 KCV
- 了解密钥方案格式
- 练习密钥导入/导出场景
该工具完全在浏览器中运行——数据不会离开您的设备。