1. DUPKT 定义
DUKPT(Derived Unique Key Per Transaction)是被ANSI定义的一套密钥管理体系和算法(ANSIx9.24)。
2. 应用场景
用于解决金融支付领域的信息安全传输中的密钥管理问题。
再金融支付领域,一般的数据传递情况是这样的:
(金融机具)POS <---> (收单)Acquirer <---> (卡组织)EMV <---> (发卡行)Issuer
那么在这些节点中便涉及到了密钥交互的问题,于是便有了DUPKT
3. DUPKT的流程
在DUPKT体系中的3个重要的术语
BDK(Base Derivation Key):DUKPT密钥体系的根密钥,一般是一个双倍长或三倍长的T-DES密钥;
KSN(Key Serial Number):一串80bit的(20 hexadecimal digits)序号,由59bit的IKSN(Initial Key Serial Number)和21bit的EC(Encryption Counter)组成。
PEK(PIN Encryption Key):由BDK按照DUPKT的算法离散出来的密钥
DUPKT流程:
===== BDK::
Derivation Key: 0123456789ABCDEFFEDCBA9876543210
===== KSN::
Initially Loaded Key Serial Number (KSN): FFFF9876543210E00000 -> 11111111111111111001100001110110010101000011001000010000111000000000000000000000
1) lease than 10 bytes,pading FF -> FFFF9876543210E00000
2) set-bits : -> FFFF9876543210E00000
3) 初始PEK左部分:
0123456789ABCDEFFEDCBA9876543210 DES-enc FFFF9876543210E0 -> 6AC292FAA1315B4D
4) 初始PEK右部分:
C0C0C0C000000000C0C0C0C000000000 XOR 0123456789ABCDEFFEDCBA9876543210
-> C1E385A789ABCDEF3E1C7A5876543210
C1E385A789ABCDEF3E1C7A5876543210 DES-enc FFFF9876543210E0 -> 858AB3A3D7D5933A
->
Initially Loaded PIN Entry Device Key: 6AC292FAA1315B4D 858AB3A3D7D5933A
Assumed PIN: 1234
Assumed Primary Account Number: 4012345678909
Formatted PIN 041234FFFFFFFFFF
Clear ANSI PIN Block: 041274EDCBA9876F
MAC and Data Encryption Input (ASCII) 4012345678909D987
MAC and Data Encryption Input
(padded hex)
3430313233343536.3738393039443938.3700000000000000
========================
KSN: FFFF9876543210E00001 ->
INIT PEK: 6AC292FAA1315B4D 858AB3A3D7D5933A
left INIT PEK right INIT PEK
1) set bits :
0000000000000001 or 9876543210E00001 -> 9876543210E00001
2) right Current PEK :
初始PEK左部分 异或 KSN -> 密文1
858AB3A3D7D5933A XOR 9876543210E00001 -> 1DFCE791C735933B
初始PEK左部分 DES—ECB加密 密文1 -> 密文2
6AC292FAA1315B4D DES-enc 1DFCE791C735933B -> ED54258B07ECE8F3
初始PEK左部分 异或 密文2 -> 当前PEK右部分
ED54258B07ECE8F3 XOR 858AB3A3D7D5933A -> 68DE9628D0397BC9
3) left Current PEK :
初始PEK 异或 PEK向量
6AC292FAA1315B4D 858AB3A3D7D5933A XOR C0C0C0C000000000C0C0C0C000000000
-> 初始PEK分量
AA02523AA1315B4D 454A7363D7D5933A
初始PEK分量右部分 异或 KSN -> 密文1
454A7363D7D5933A XOR 9876543210E00001 -> DD3C2751C735933B
初始PEK分量左部分 DES加密 密文1 -> 密文2
AA02523AA1315B4D DES-enc DD3C2751C735933B -> 416C15D746515C99
初始PEK分量右部分 异或 密文2 -> 当前PEK左部分
416C15D746515C99 XOR 454A7363D7D5933A -> 042666B49184CFA3
========
042666B49184CFA3 68DE9628D0397BC9