DUKPT(每次交易派生唯一密钥)是一种密钥管理方案,为每笔交易生成唯一的加密密钥。本教程解释完整的派生过程。
什么是 DUKPT?
DUKPT 提供的方法可以:
- 从单个基础密钥派生唯一的交易密钥
- 确保即使一个交易密钥泄露也不会暴露其他密钥
- 支持数百万笔交易而不会耗尽密钥
关键组件
基础派生密钥 (BDK)
由收单方/处理机构持有的主密钥。永远不会离开安全的密钥管理系统。
初始 PIN 加密密钥 (IPEK)
从 BDK 和初始 KSN 派生。注入到 PIN 输入设备中。
密钥序列号 (KSN)
包含以下内容的唯一标识符:
- 密钥集 ID (KSI):标识 BDK
- 设备 ID:每个设备唯一
- 交易计数器:每次交易递增
格式:KKKKKKKKKKTTTTTTTTTT(80 位)
- K:密钥集 ID + 设备 ID
- T:交易计数器(21 位)
当前交易密钥
使用 KSN 的计数器部分从 IPEK 派生。
派生过程
步骤 1:计算 IPEK
IPEK = TDES_Encrypt(BDK, 计数器归零的 KSN)
|| TDES_Encrypt(BDK XOR C0C0..., 计数器归零的 KSN)
步骤 2:未来密钥派生
对于每笔交易:
- 从 IPEK(或当前密钥寄存器)开始
- 对于计数器中的每个置位位(从左到右):
- 应用"黑盒"函数
- XOR 和加密以派生中间密钥
- 最终结果是当前密钥
步骤 3:工作密钥派生
从当前密钥派生特定的工作密钥:
- PIN 加密密钥 (PEK):与掩码
0x00000000000000FF00000000000000FF进行 XOR - MAC 密钥:与掩码
0x000000000000FF00000000000000FF00进行 XOR - 数据加密密钥:与掩码
0x0000000000FF00000000000000FF0000进行 XOR
实际示例
给定:
- BDK:
0123456789ABCDEFFEDCBA9876543210 - KSN:
FFFF9876543210E00001
步骤 1:提取初始 KSN(计数器归零)
初始 KSN:FFFF9876543210E00000
步骤 2:计算 IPEK
IPEK:6AC292FAA1315B4D858AB3A3D7D5933A
步骤 3:为计数器 1 派生
当前密钥:042666B49184CFA368DE9628D0397BC9
步骤 4:派生 PEK
PEK:042666B49184CF5C68DE962BD0397B36
安全考虑
- 计数器耗尽:在 2^21(约 200 万)笔交易后,设备需要重新注入
- 未来密钥保密:即使当前密钥泄露,也无法派生未来密钥
- BDK 保护:BDK 绝不能暴露;所有安全性都依赖于它
AES DUKPT
现代实现使用 AES 而非 TDES:
- 128/192/256 位密钥大小
- 增强的安全性
- 更大的计数器空间
- 不同的派生算法(NIST SP 800-108)
自己动手试试
使用我们的 DUKPT 工具:
- 从 BDK 和 KSN 计算 IPEK
- 逐步派生交易密钥
- 生成 PIN、MAC 和数据加密密钥
- 可视化整个派生树