最近在使用金属键盘, 需要对数据进行 MAC运算和PIN运算. 为帮助记忆特在此总结如下:
A) 3DES 的 MasterKey 加载单倍 DES 的 MacKey和PinKey
example:
LocalMasterKey: 303132333435363738393A3B3C3D3E3F
MasterKey: 38373635343332313041424344454647
MacKey: 6162636465666768
CryptData: 4A4B4C4D4E4F5051
1` 使用 LocalMasterKey(即前端主密钥) 当密钥解密MasterKey(需拆分为前后两部分), 使用三倍 DES 算法:
3837363534333231 (LocalMasterKey && 3DES 解密) -> C03DCFDCF69B7641
3041424344454647 (LocalMasterKey && 3DES 解密) -> 8B1AAF7D56D3934A
2` 拼接步骤1中得到的两段解密结果: C03DCFDCF69B76418B1AAF7D56D3934A ;
3` 使用拼接结果作为密钥解密 MacKey:
6162636465666768 (C03DCFDCF69B76418B1AAF7D56D3934A && 3DES 解密) -> B9020C9B5F2509E3
4` 使用步骤3的解密结果对 CryptData 做 MAC 运算:
4A4B4C4D4E4F5051 (B9020C9B5F2509E3 && DES 算法) -> 007102BE137E1804
B) 生成 PinBlock
example:
主密钥: 31313131313131313131313131313131
密文工作密钥: 3E1A500F23992F9349C498C96D41585D
卡号: 0000010005114072 (去掉卡号最后一位校验位,截取后12位)
密码: 06123456FFFFFFFF
1` 用主密钥对密文工作密钥进行3DES解密(分为前后半段进行)
得到明文工作密钥 1234567812345678ABCDEFABCDEF1234
2` 卡号和密码进行亦或:
0000010005114072 (XOR) 06123456FFFFFFFF -> 06123556FAEEBF8D
3` 使用明文工作密钥对步骤2亦或结果进行加密得到 PinBlock
06123556FAEEBF8D (明文工作密钥 && 3DES) -> 429AB0C20660D795
=============================================
接B) 密钥,做MAC 报文计算
CryptData: 444444444444444415151515111111112222222215151515
CBC算法( x9.9):
14444444444444444 (明文工作密钥 && 3DES 加密) -> 918DF1A20CFF2BE7
918DF1A20CFF2BE7 (XOR) 1515151511111111 -> 8498E4B71DEE3AF6
2
38498E4B71DEE3AF6 (明文工作密钥 && 3DES 加密) -> BF2BC49521BA0028
BF2BC49521BA0028 (XOR) 2222222215151515 -> 9D09E6B734AF153D
4
5` 9D09E6B734AF153D (明文工作密钥 && 3DES MAC) -> 1B54179F998C4471
算法2:
14444444444444444 (XOR) 1515151511111111 -> 5151515155555555
5151515155555555 (XOR) 2222222215151515 -> 7373737340404040
2
3` 7373737340404040 (明文工作密钥 && 3DES MAC) -> 7E118D29BE2DF933
出于安全性考虑, 更多使用 CBC算法
首次接触, 了解个大概, 记在这里帮助记忆, 有新理解后续补充.
2016-04-14 10:44:32