原文这里:http://blog.sina.com.cn/s/blog_4df8400a0100xoof.html
qPBOC的规范让人看的有些头晕,做开发的人也不知道究竟这个规范该怎么运用到实际需求中。好在目前有很多qPBOC的项目已经在实施了,可以让我们从中分析一些实际的案例,在此仅以中国移动与上海浦东发展银行联名发行的挂件卡来做一次实际数据的案例分析。
一、挂件卡概述
挂件卡大约比普通信用卡尺寸的四分之一略大,内置天线,厚度约2毫米左右。其中包含了非接PBOC借贷记应用和qPBOC应用,不支持磁条数据MSD交易。支持PSE和PPSE的选择,通过选择PSE可以得到的目录文件SFI入口,利用读记录可以获得非接PBOC借贷记的AID,而选择PPSE后直接给出了优先选则应用的AID,二者是一致的均为:A0 00 00 03 33 01 01 02。无论通过PSE还是PPSE选择该应用,其返回的FCI均包含Tag为9F66的终端交易属性数据请求。根据GPO中给出的9F66数据,卡片会决定走qPBOC还是标准PBOC借贷记流程。
二、非接PBOC应用
在GPO命令中送入的终端交易属性如果是60 00 00 00(表示支持qPBOC与非接触PBOC借贷记),则卡片直接返回的是标准借贷记的GPO响应。其中AIP = 7C 00(卡片支持SDA,DDA,持卡人验证,终端风险管理和发卡行认证;不支持CDA以及MSD。另外有AFL(08 01 02 00
从卡中可以读出9F14和9F23这两个来自卡片的终端风险管理参数均配置为0,也就是连续脱机交易上限和下限都是0,说明对于有联机能力的终端,不允许进行脱机交易。
同样9F58,9F59,9F54,9F5C也都为0,说明发卡行已经把卡片配置成不可用作脱机交易了。
卡片的启用日期和失效日期分别为:110906和160928。
现在读出的9F13数据显示上次联机交易计数器ATC数据为0020。
接下来我们可以读一下交易记录数据,共计四条记录:
记录1:
FF FF FF FF FF FF 00 00 00 02 36 00 FF FF FF FF FF FF FF FF 01 56 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 08
记录2:
FF FF FF FF FF FF 00 00 00 00 05 00 FF FF FF FF FF FF FF FF 01 56 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 04
记录3:
11 09 29 13 47 26 00 00 00 10 00 00 00 00 00 00 00 00 01 56 01 56 B9 F1 C3 E6 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 60 00 03
记录4:
11 09 29 13 26 58 00 00 00 00 00 00 00 00 00 00 00 00 01 56 01 56 B9 F1 C3 E6 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 99 00 02
可以看出卡片是在9月29日13点多开户的,做了两笔柜面联机交易且充值1000元,另外还有两笔分别为5元和236元的脱机消费交易。这里有一点小问题,就是从上次联机交易计数器标签9F13中读出的数据是0020,和记录3中指出的0003不相符。这是因为在测试的时候尝试发送了导致必须联机的GPO所致。
再看看持卡人认证方式CVM列表标签8E的数据结构,8E 0E 00 00 00 00 00 00 00 00 42 03 5E 03 1F 00,第一个入口4203是联机加密PIN验证,且如果此验证失败应用下一个CVM验证,应用条件是如果终端支持;第二个入口5E03是纸上签名,且如果此验证失败应用下一个CVM验证,应用条件是如果终端支持;第三个入口是无需CVM,应用条件为“总是”。
总之,该卡的非接触标准PBOC借贷记应用只允许联机交易,不支持脱机。
三、qPBOC应用
如果送入的终端交易属性为20000000,则直接返回脱机qPBOC交易的GPO应答数据。
先看一下脱机交易GPO应答数据:
77 81 D4 82 02 7C 00 94 08 18 01 04 01 20 01 02 00 9F 36 02 00 29 9F 26 08 18 92 2B F2 0A 14 FC F3 9F 10 08 07 02 17 03 90 00 00 01 57 13 62 59 71 00 01 52 11 28 D1 60 92 06 00 00 05 10 00 00 1F 5F 34 01 00 9F 4B 81 80 A1 15 8D 4E 41 71 29 15 81 3F B6 20 BB B9 2B AB 10 20 6F
由82标签指出的AIP和标准借贷记的一致都是7C00,标签94给出了AFL:18 01 04 01 20 01 02 00,同时还包含有以下的数据标签:交易计数器9F36,应用密文9F26,发卡行应用数据9F10,第二磁道等价数据57,PAN序列号5F34,签名的动态应用数据9F4B,卡片交易属性9F6C和可用脱机消费余额9F5D。
读出卡片附加处理数据标签9F68的值为:91003000,说明:该卡片仅支持小额检查,不支持脱机可用余额的检查,也就是说该卡走的是qPBOC的小额交易流程。
另外通过读取9F77和9F78两个数据可知,该卡单笔交易金额最多为1000元,充值的上限也是1000元。目前该卡的余额是759元(GPO应答中给出的可用余额是758.99元,那是因为在发送GPO命令的时候送入的授权金额是1分钱),加上之前消费的5元和236元正好等于充值的1000元,而且电子现金重置阈值9F6D的数据是0。
如果在GPO命令中送入的终端交易属性为:20800000,则卡片返回联机GPO应答:
77 58 82 02 7C 00 9F 36 02 00 35 57 13 62 59 71 00 01 52 11 28 D1 60 92 06 00 00 05 10 00 00 1F 9F 10 13 07 02 17 03 A0 00 00 01 0A 01 00 00 07 59 00 55 97 C3 52 9F 26 08 68 D5 7B 51 35 53 B6 78 5F 34 01 00 9F 6C 02 20 00 9F 5D 06 00 00 00 07 58 99 5F 20 04 XX XX XX XX
四、其他
(一)
挂件卡本身尺寸较小,用两款通用读卡器(HID Omnikey5321和SCM SDI010)测试小卡的读写距离低于普通卡,并且只有当小卡全部进入读卡器的感应范围后才会正常读写。相比普通大卡而言,只要部分进入到读卡器的感应范围就能够正常读写。所以如果终端设备的感应范围较小的话,会出现寻找小卡困难的问题,对大卡则问题不明显。
建议CUP对于小卡同样制定相应的规范标准,并且加强小卡与机具的兼容性测试,以便于确保将来卡片和终端之间不会出现操作困难(据悉该卡在实际应用中已经出现类似问题,必须要对准某型号终端的某个固定位置才能勉强实现交易)。
(二)
安全的问题不仅包括数据保密和防止伪造篡改等方面,还有很重要的一点就是可用性。
为此特意通过普通读卡器发送命令用该卡做了1分钱的脱机消费交易,读取新增的交易记录可以看出脱机消费成功:FF FF FF FF FF FF 00 00 00 00 00 01 FF FF FF FF FF FF FF FF 01 56 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 37。同时新的余额也变成了758.99元,交易计数器变为0037。
其实如果保护好自己的卡片,这些问题是可以避免的。
现实的问题是卡片在合法的终端上进行交易后,因为终端的原因造成终端认证失败从而误判上笔交易不成功,但是这时卡上的钱已经被扣掉了,由此就会引起争议。
所以在目前的规范下要仔细了解发卡行在出现争议交易时的处理条款,可惜的是目前很多发卡行对于该风险了解不多,随着qPBOC卡片发行数量的增加,类似的争议交易会逐渐涌现。目前只能依靠卡片、终端、后台多方协作来仲裁争议交易,没有严格的规范约定。