EMV技术学习和研究(十一)QPBOC

转载请注明出处

作者:小旭

Q在选择完应用之后,是有一步交易预处理,交易预处理是对交易限额的处理,在交易开始之前首先对交易金额做出计算和判断。有点类似于借贷记交易中终端风险管理中所完成的步骤。关于交易限额,后面再写一篇专门讨论。

之前在GPO和读记录一篇中已经讨论过QPBOC对于GPO的处理,但是QPBOC的GPO有很多信息量,所以再把GPO的内容拿出来讨论讨论。读记录之后QPBOC的处理也有很大变化,所以现在专门讨论一下QPBOC的处理,凡是我能想到的地方,都会和借贷记的对比,主要也是为了加深印象。

现在还是把之前那个GPO的例子拿出来。

send:41
80 A8 00 00 23 83 21 B6 00 00 00 00 00 00 00 10 
00 00 00 00 00 00 00 01 56 00 00 00 00 00 01 56 
11 03 30 00 E5 19 21 7B 00 

rec:82
77 4E 82 02 7C 00 94 0C 10 05 08 01 18 01 02 00 
48 01 01 00 9F 36 02 06 A1 9F 26 08 C9 67 B7 1D 
1C EA 1F FD 9F 10 0F 07 02 01 03 90 00 00 01 06 
01 00 00 02 00 00 57 13 62 17 99 55 10 00 00 11 
29 5D 49 12 22 04 41 06 00 00 0F 9F 6C 02 20 00 
90 00 

GPO对于PDOL的要求是必须含有9F66(借贷记的GPO是可以支持没有PDOL的,终端在GPO只要发送8300就行),如果没有,终端直接拒绝交易。这个东西,我觉得终端没必要做判断,当然优化程序的话,终端也可以做判断。

返回数据位77开头的模板,是TLV格式数据,需要对数据域做解析,这个GPO数据比较多,我就附带把每个tag都解析一下了。


其中如果GPO未返回82,9F36,9F26,9F10、57,这几个数据中的任何一个不存在或者缺失,则认为QPBOC处理失败,提示持卡人采用其他方式处理。

如果AFL不存在的话,终端只能进行联机交易,不允许执行脱机交易。

其中9F10发卡行应用数据的4 5 6 7四个字节为CVR,是卡片验证结果,和终端的TVR如出一辙。这个CVR非常关键。

我顺便也把CVR也解析一下方便说明(03 90 00 00)

90   ---   1 0 0 1 0 0 0 0 
//----bit 7 - 6 =  1 0 不请求第二个GENERATE AC
//----bit 5 - 4 =  0 1 第一个GENERATE AC返回TC
//----bit     3 =  0   1=发卡行认证执行但失败
//----bit     2 =  0   1=脱机PIN执行
//----bit     1 =  0   1=脱机PIN认证失败
//----bit     0 =  0   1=不能联机
所以这个90表明,当前不需要第二次GAC,并且这一次返回的应用密文就是TC,也就是说9F26应用密文是TC。

和借贷记一下,GPO之后就是读记录,读记录部分之前也介绍过了。

读记录之后是持卡人认证,QPBOC的持卡人认证和借贷记电子现金不同,QPBOC的持卡人认证结果只有三种情况:签名,联机。

持卡人验证主要基于两个数据:





通过对这两个数据域的位进行判断,进而决定最终采用持卡人验证的方式。比如,终端支持联机或者签名,再判断卡片是要求联机或者签名,最终选择联机或者签名。

QPBOC的持卡人验证,真的是非常easy了。

然后就是进行处理限制,QPBOC的处理限制只做一件事,就是判断卡有效期,相当于借贷记流程中的一个小步骤。

然后就是脱机数据认证,因为卡片不会再和终端有指令交互,所以数据认证使用的QPBOC自己定义的一种FDDA。FDDA的执行同样需要根据AIP的情况作出判断。FDDA签名的动态数据通过9F4B在读记录时返回,借贷记是通过内部认证获取到的。这个动态数据的获得,也是区分FDDA版本为01还是00.所以缺少了DDA的内部认证指令,所以叫做FDDA。而用来参于组织签名数据的是通过一个固定数据域组织的,借贷记是通过DDOL获取的。

特别说明:PB0C3.新增了一个9F69的标签,需要在版本01的FDDA中加入到签名数据域。

完成上面的步骤后,一个脱机的Q就完成了,联机Q和借贷记联机交易类似,除了上送55域有些TAG值不一样,其他的原理都是一样的。而且Q的联机交易,应该是没有后续脚本处理和第二次GAC的。联机交易发起后,卡片是可以拿开的。

通过上面也可以看得出,Q在读记录之后再也没有和卡片做任何指令交互,那这就存在一个问题。读记录以后,卡片操作已经结束,那读记录之后,卡片的余额已经修改了,但是如果终端的FDDA失败呢?这就会存在一个扣钱不打单的情况,这种情况也经常遇到,这就是PBOC2.0的一个bug。

银联也提出了针对Q的闪卡方案,该方案主要也是针对在交易过程中卡片拿走时交易并未完成,再将卡放回来交易流程可以继续进行。

后续再写一篇针对Q和电子现金等几个限额的描述,Q在终端的部分应该就算是讨论完了。

但是如果想对Q有深入研究的,还要理解一下卡片在Q过程中的的风险管理,这个步骤是卡片来完成的,终端不参与,但是对交易的影响还是比较大的。

阅读更多

更多精彩内容