转载请注明出处

作者:小旭

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过程中的的风险管理,这个步骤是卡片来完成的,终端不参与,但是对交易的影响还是比较大的。

EMV技术学习和研究(十一)QPBOC相关推荐

  1. EMV技术学习和研究

    今天在工作中碰到一些问题,就找到了这篇文章,个人感觉很好,保存下来,以供随时学习. 转载地址:EMV技术学习和研究 作者:小旭 目的: 应用选择主要目的就是在卡片插入终端的时候,由终端来选择哪些应用是 ...

  2. EMV技术学习和研究(一)开篇

    在这个行业也3年多了,一直想写写关于EMV和PBOC的内容,但是总觉得自己懂得还不够,对EMV和PBOC的理解还不够深入. 但是后来想想,如果还不开始自己写一点东西的话,可能这个事情也就永远的搁浅了, ...

  3. EMV技术学习和研究(三)应用初始化读应用数据

    转载请注明出处 作者:小旭 借贷记和Qpboc在应用初始化和读应用数据方面的流程还是比较相似. 先看借贷记和电子现金的处理流程 应用选择完成后,终端获取到了PDOL数据(特别说明:这个不是必须的,卡片 ...

  4. EMV技术学习和研究(五)脱机数据认证之DDA

    转载请注明出处 作者:小旭 有了前面对SDA的熟悉,接下来再研究DDA就会感觉比较轻松一点了. 用于动态数据认证的数据和SDA部分所描述的一样,也是基于SFI的来组织的. 特别说明一下:之前有一个地方 ...

  5. EMV技术学习和研究(十二)交易限额

    转载请注明出处 作者:小旭 EMV参数里面有几个限额,但是感觉这几个限额都比较容易混淆和模糊,下面一个一个的来讨论一下. 终端最低限额(9F1B).终端电子现金交易限额(9F7B).非解最低限额(DF ...

  6. EMV技术学习和研究(二)应用选择

    转载请注明出处 作者:小旭 目的: 应用选择主要目的就是在卡片插入终端的时候,由终端来选择哪些应用是由终端和卡片共同支持的.终端的AID列表是通过AID下载交易从服务端获取,卡片的AID是在做卡片个人 ...

  7. EMV技术学习和研究(七)持卡人验证

    转载请注明出处 作者:小旭 持卡人认证部分,EMV和PBOC是有区别的,EMV有脱机加密PIN认证,PBOC没有:PBOC有持卡人身份证件验证,但是EMV没有. 持卡人验证主要基于两个数据要素,AIP ...

  8. EMV技术学习和研究(九)终端行为分析

    转载请注明出处 作者:小旭 这一块的内容,我觉得文档上讲的比较清晰,而且举例也很好,所以大部分都是拷贝文档的内容过来,一边看一边分析文档的含义. 这一部分用到2类比较重要的数据,分别是 发卡行行为代码 ...

  9. EMV规范学习与研究(三)——应用初始化

    应用初始化目的: ①通知卡片新交易开始: ②将交易所需的数据发送给卡片: ③从卡片上返回AIP和AFL: ④决定交易是否被允许执行: 应用初始化步骤:(GPO命令的格式) 设置TVR和TSI中所有位为 ...

最新文章

  1. Linux目录结构和文件基本操作
  2. java语法定制混淆,由撇号混淆的textpad语法高亮显示
  3. android nfc 跳转,android – 通过NFC发送URL,由浏览器打开
  4. phpstudy运行PHP项目出现404怎么办?
  5. gradle打包web jar_Gradle构建SpringBoot并打包可运行的jar配置
  6. 惠普企业(HPE)是否免不了最终被关停的命?
  7. UNIX 环境高级编程(八)—— fork 函数
  8. Ubuntu18.04之微信中文乱码解决
  9. 清华大学计算机考研资料汇总
  10. 快解析助力服装企业实现ERP远程外网访问
  11. 全文来了!任正非:全球经济长期衰退,华为要把活下来作为主要纲领
  12. Excel 2010 SQL应用117 分组统计之GROUP BY 与First
  13. Oracle Net Services 配置失败。退出代码是1 参数responsefile = Oracle Net Configuration Assistant 在给定位置找不到响应文件。
  14. putty下载上传文件
  15. 【云周刊】第130期:阿里研究院发布新网商五大预测,2020年将诞生第一个机器人网商?
  16. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 491: invalid continuation byte
  17. 一个 npm 包的坎坷“续命”之生
  18. 烽火通信C语言笔试题:牛市区间问题
  19. ES6 ~ ES11整理
  20. 抽象类可用于创建对象吗_芦竹,见过吗?清热泻火。可用于热病烦渴,风火牙痛...

热门文章

  1. Zotero翻译插件Zotero PDF Translate无法正常翻译,百度、彩云、腾讯翻译api接入
  2. CreateFontIndirect
  3. Ubuntu下Android开发——配置环境,刷机,push
  4. xff_referer知识
  5. 单点登录 Ucenter 分析
  6. 微信小程序开发(三)入门之创建打卡活动
  7. 概要设计说明书(实例)
  8. 采用AT89C2051的智能时钟
  9. Ubuntu 10.04 下载(官方地址)
  10. 用dRING设置特定日期提醒