应用密文生成的方法是以一个唯一的16字节的IC卡应用密文(AC)子密钥MKAC以及按6.1.1条的描述选择的数据作为输入,然后按以下的两步计算8字节的应用密文:
1.第一步从IC卡应用密文(AC)子密钥MKAC和两字节的IC卡应用交易计数器作为输入,分散得到16字节的应用密文过程密钥SKAC,使用11.1.3条中指明的过程密钥产生函数。
前提:
(1)获得IC卡AC子密钥,或者获得发卡行AC主密钥
本例:
MDKAC = C4D689158AD9FB9D23105B91CE046D0E
(2)得到IC卡卡号及卡序列号
本例:
PAN = 6210220110002707355
PAN ser = 01
(3)取IC卡AC子密钥
如果已经获得了IC卡AC子密钥则略过此步。用发卡行主密钥分散出IC卡AC子密钥。方法为使用发卡行主密钥,对PAN的后14位(如果PAN不足14位前面补0)加PAN序列号(共8B)并对此取反连接得到的16字节数据,做3DES加密就得到IC卡AC子密钥。
本例:
2011000270735501 取反 得到 8字节数据 DFEEFFFD8F8CAAFE连接得到16字节数据2011000270735501DFEEFFFD8F8CAAFE
用MDKAC对2011000270735501DFEEFFFD8F8CAAFE 做3DES加密得
B8A15DA5F7043C317D9FD8F8DFE2BD75即UDK,IC卡AC子密钥
(4)得过程密钥
用IC卡AC子密钥,对交易计数器ATC做3DES加密:
a.在ATC前补6字节0x00,对ATC取反并连接
ATC = 03D3
b.对ATC取反得
~ ATC = FC2C
c.并在ATC及~ ATC 前各补6字节0x00,得:
00000000000003D30
00000000000FC2C
d.最后将其连接得
00000000000003D3000000000000FC2C
f.用IC卡AC子密钥对如上数据做3DES加密得过程密钥:
SKAC=4A43440B2D932ACDC4E2776ED562EE43 (过程密钥)
2.第二步使用上一步分散得到的16字节的应用密文过程密钥并将11.1.2条中指明的MAC算法应用到经选择的数据来生成8字节的应用密文。
IC卡返回的55域数据为:
待校验的密文: 81 A9 DC 93 10F888 56
授权金额: 000000000000 9F0206
其它金额: 000000000000 9F0306
国家代码: 0156 9F1A02
终端验证: 0000000000 9505
货币代码: 0156 5F2A02
交易日期: 000000 9A03
交易类型: 00 9C01
随机数: 00000444 9F3704
AIP: 7C00 8202
ATC: 03D3 9F3602
CVR: 0380A800 9F1013
连接如上数据得:
00000000000000000000000001560000000000015600000000000004447C0003D30380A800
用过程密钥对如上数据做MAC运算得到了AAC、TC或ARQC:
AAC、TC或ARQC = 81A9DC9310F88856
与IC返回的密文比较相等,校验成功!
3.发卡行认证
生成8字节的授权响应密文ARPC的方法是将16字节的应用密文过程密钥SKAC(见6.1条)按照12.1条中指明的对称加密算法对8字节长的由IC卡按6.1条描述的方法生成的ARQC和2字节的授权响应码ARC进行加密:
1)在2字节的ARC的后面补上6个‘00’字节来获得一个8字节的数
ARC=3030
ARQC=81A9DC9310F88856
X:=(ARC||‘00’||‘00’||‘00’||‘00’||‘00’||‘00’)。
2)计算Y:=ARQC⊕X。
3)计算ARPC
使用过程密钥对异或结果做3DES加密运算就得到ARPC
ARPC=84DD63A221F915CA
外部认证命令:
00 82 00 00 0A +ARPC(8B)+ARC(2B)