1.PSAM卡中一个ADF下消费密钥区分
装载不同的消费密钥根据密钥版本号来区分,CPU卡中消费密钥密钥版本要和PSAM卡中密钥版本相同
还有算法标识
00-3DES
01-DES
02-255保留
注意:消费密钥的密钥版本是在消费过程中标识密钥版本,其他的密钥的密钥版本作为密钥标识使用。
2.PSAM卡中密钥用途设置
高3位是分散密级,低5位是密钥类型
一级分散是0x01<<5 =0x20 消费密钥是0x02 ,所以密钥用途应该是
0x20|0x02 = 0x22
二级分散消费密钥的密钥用途应该是 0x40|0x02 = 0x42
三级分散消费密钥的密钥用途应该是0x60|0x20 = 0x62
注意:1.消费时PSAM卡中至少要进行一次密钥分散,我一直想一次不分散没成功…..
2.消费密钥的密级应该和获取MAC1命令中的LC相对应:
密级=1, Lc=0x14 + 1*8
密级=2, Lc=0x14 + 2*8
密级=3, Lc=0x14 + 3*8
当然获取MAC1命令中数据域也要按顺序加入相应的分散因子
3.PSAM卡中的消费密钥装载
PSAM卡中的消费密钥装载时应该用当前应用下的主控密钥对消费密钥进行加密和计算MAC
Eg:
84 D4 0000 1C
CLA INS P1 P2 Lc
Lc后面的数据全部进行DES加密,然后把加密数据和命令拼接
把拼接好的命令进行MAC计算,其中Lc长度为加密之后的数据长度+4
DATA域数据:22 00 0000112233445566778899aabbccddeeff
用3DES对DATA加密,在加密之前先稍微对其进行处理,添加明文长度,分块不足8字节补80 00 …
命令线路加密保护计算:
3DES-ECB模式
处理数据:
13 22 0000 00112233445566778899aabbccddeeff 80 00 00 00
0x13 是62-FF的明文要加密的数据长度 19个
80 00 00 00 是对要加密数据的补充,因为分块之后不足8字节
22 是密钥用途,6是分散级数,2是密钥类型-消费
00 00 是密钥版本和算法标识
00112233445566778899aabbccddeeff 要添加的密钥明文
密钥:00112233445566778899aabbccddeeff (当前应用下的主控密钥)
结果:DCC0BB5793ABFCA2CA8C1624822F6E01A86A0B5CBED191DD(数据域加密之后的数据)
MAC-CBC模式-DES
初始向量:5d 72 b3 fd 000000000 (5d 72 b3 fd从卡片获取的4字节随机数)
处理数据:84D400001CDCC0BB5793ABFCA2CA8C1624822F6E01A86A0B5CBED191DD
密钥:00112233445566778899aabbccddeeff (当前应用下的主控密钥)
结果:8A9D4ADB
完整命令
84D400001CDCC0BB5793ABFCA2CA8C1624822F6E01A86A0B5CBED191DD8A9D4ADB
4.CPU卡中的密钥
此时CPU卡中的密钥应该是分散之后的密钥
密钥分散算法:
注意:PSAM卡中装载的密钥对分散因子进行一级一级分散,具体分散几次根据PSAM卡中密钥装载时的分散级数确定
1.密钥(PSAM卡中装载的密钥或者是上次分散之后的密钥)对8字节分散因子做3DES加密得到的8字节作为新分散密钥的左8字节
2. 密钥(PSAM卡中装载的密钥或者是上次分散之后的密钥)对8字节分散因子取反之后的数据 做3DES加密得到的8字节作为新分散密钥的右8字节
3.把上面两步骤获取的左右各8字节拼接起来就是新的16字节分散密钥
4.如果还有下一级分散,把新获取的分散密钥作为对分散因子加密的密钥
重复上述三个步骤。
Eg:
目的:将PSAM卡中装载消费密钥,消费时对用户卡序列号进行一级分散
能够与装载相应密钥的CPU卡进行消费
PSAM卡中消费密钥是:00112233445566778899aabbccddeeff
分散因子:8字节卡应用序列号 122334455667788
DPK左半部分
卡应用序列号:1122334455667788
密钥:00112233445566778899aabbccddeeff
结果:496BD7A351364453
DPK右半部分
卡应用序列号求反:eeddccbbaa998877
密钥:00112233445566778899aabbccddeeff
结果:3100B54E71196528
最终结果:496BD7A3513644533100B54E71196528
装载命令:80D40000153EF0F20000496BD7A3513644533100B54E71196528
注意:密钥装载之前是否做其他验证看密钥文件建立时的增加权限
此时
PSAM卡中消费密钥是:00112233445566778899aabbccddeeff
CPU卡中消费密钥是:496BD7A3513644533100B54E71196528