EMV 接触卡规范学习

初入支付行业,现在也差不多四个多月时间了,在这四个多月内,首先是熟悉公司接口,封装的各种API,去写测试案例熟悉这些接口(虽说现在好像又忘得差不多了,不过需要用时查一查就好了)

然后就是去阅读EMV接触卡的四本规范,读完以后,对该支付标准有一定的了解后去阅读该规范开发的内核代码,在阅读这些代码以后再去移植这些代码到平台上,最后进行EMV测试,跑两千多个案例,看有没有代码逻辑错误导致出错的地方。

一 EMV规范总结

有一个TVR和TSI这两个数据会伴随整个交易流程,这两个数据很有用,IC卡和发卡行,终端都会根据这个来决定交易的走向(例如联网交易,拒绝交易,中止交易,不接受交易等)

先从总体流程来讲(这个在BOOK3中也是按顺序讲解的),在EMV接触卡上,完整的流程

1 先通过PSE办法或者AID选择列表法,选择出终端支持的AID列表,假如没有的话,此次流程(即交易)就失败了,然后获选的AID会有优先级的,有一个指示位专门表示这个。数字越小优先级越大,但是0是优先级最小的。然后链表形成以后通过用户选择或者自动选择(优先选择优先级最大的),选择完以后,会发送一个选择命令,会获得该AID的一个DDOL,通过这个可以发送GPO命令,进而获得AFl和AIP,通过这个AFL来发送阅读记录命令,卡会返回该AID所有的各种信息数据,包括后面需要用到的动态签名啊,CDOL啊等,基本上后面大部分的数据都是从这一步获得。

2数据认证,这一步是用来检测交易是否合法的,数据认证在规范里面有四种办法,但我所使用的内核里面还不支持XDA,这一步会有CDA,DDA,SDA这几种数据认证方式,优先级最高为CDA(支持XDA,这个权限最高),终端和IC卡要使用所支持的最高级的数据认证方式。CDA稍微有些麻烦。因为他要完成还需要后面终端行为分析后GAC命令的协作。这几种办法都需要有公钥密钥的参与,这几种密钥的恢复办法以及这几种验证方式是如何进行的,参考规范即可,有详细的讲解,基本上都是先把密钥这些恢复,然后再验证数据签名,通过检验数据格式这些是否正确来判断,但是CDA中动态签名验证会有一个CID,这个是要和后面环节GAC命令产生的应用码(AAC,TC,ARQC)进行对比的,总之有用,CDA的数据签名验证也是再第一次GAC后,才能完成,另外两种可以直接完成。

3 持卡人验证,这个是需要输入PIN(或者跳过)或者用生物信息来进行验证的,再使用的内核中不支持生物验证。也可能需要涉及密钥来进行加密,总之有多种验证方式,还有使用发票签名验证的方式,这个需要看终端能力和IC卡返回的CVM(验证支持条件及办法)来进行选择使用哪种验证方式,可能有多种验证方式,其中一种验证过了就行

4 终端风险管理(支持的话), 这个是用来保障交易安全这些的,具体有三个,

限额管理,一个AID账号会有多次交易,或者一次交易超过了最高限额,假如超过了吗,就会在TVR上表明超额了

随机联网交易,就是终端这边会有一个阈值和最高限额(阈值小于最高额度)以及一个目标百分比随机数和最大随机数,终端会产生一个随机数,根据你交易的金额和阈值判断,假如你的交易金额小于阈值且产生的随机数小于目标百分比,,或者大于阈值且随机数小于最大百分比和目标百分比一个线性函数产生的百分比后,就会在TVR上表明此次交易联网处理,这个TVR后面会发给卡片,发卡行,有用的

频度检查,就是检查一个AID交易了多少次脱机交易,速度检查的目的是允许发卡方请求,在一定数量的连续离线交易之后(即“Lower Consecutive Offline Limit”),要求将交易转为在线完成。然而,如果终端无法进行在线交易,交易仍然可以离线完成,直到达到第二个限制(即“Upper Consecutive Offline Limit”)。在达到上限之后,发卡方的建议可能是拒绝任何无法在线完成的交易。一旦通过成功的发卡方身份验证完成了在线交易,计数就会重新开始,这样交易就可以在再次达到下限之前进行离线处理。是否超过连续脱机交易次数,通过GETDATA从卡片取出当前ATC计数器和上次联机时ATC,两个ATC相减得到连续脱机次数,并与下、上限比较。TVR中有相应比特位表明这个 并且终端还将检查Last Online ATC Register是否为零。如果为零,则终端将设置TVR中的“New card"位为1·。

5 处理限制 这个是用来决定终端和ICC卡上的应用的兼容性,根据情况做一些必要调整甚至可以拒绝交易,具体有应用版本号,应用控制(就像这个应用在终端所在的地区能否使用),应用有效过期时间检查等,假如IC卡上有应用使用控制数据(AUS)以及发卡行国家码,终端就要按照规范一个表来检查。

6 终端行为分析 

根据TAC和IAC以及TVR,终端进行判断,先使用denial数据来比较,只要TVR和TAC或者IAC中任何一个相同比特位都设置为1,就拒绝交易,即后面GAC命令要求IC卡返回AAC,假如这个没有,有联网能力的终端就可以用online(TAC-online、IAC-online)数据来比较,也是假如只要TVR和TAC或者IAC中任何一个相同比特位都设置为1,就要联网交易,否则就脱机交易,GAC要求返回ARQC/TC,GAC要求返回ARQC或者TC,这个最终由卡片决定返回的是ARQC或者TC(即卡片行为分析),然后决定是否联网交易,假如联网失败,就用default数据比较,也是有任何比特位都设置为1的话会要求第二次GAC返回AAC,假如都没有,就要求返回TC表示脱机交易成功。联网交易成功也会根据发卡行发过来的授权码等来判断是接受交易还是拒绝交易,即第二次GAC会要求返回AAC或者TC。这里还有一个点要注意就是GAC命令可能会附带上面所讲的CDA脱机数据验证,这个在GAC命令一个数据位表示,假如有这个CDA,就有很多地方需要区分了,因为这个CDA签名验证会影响是否要产生第二次GAC,或者是否需要联网交易。详细讲一下

首先 第一次GAC后会返回三种命令码 AAC /TC/ ARQC

在没有CDA的时候,很简单,该拒绝脱机交易,接受脱机交易,联网交易都是指定的,只不过联网交易会产生第二次GAC来响应发卡行的批准交易或者拒绝交易

有CDA的话 ,会去检查恢复的动态应用签名里面的CID,因为规范中优先使用这份CID来表明返回的AC,没有这个才会用GAC命令返回的明文CID表明的AC,但是CID不同会导致CDA失败,而在GAC命令同时CDA失败的话会有不同的处理,通过GAC返回的明文CID会有下面这三种AC码

AAC  由于立马脱机拒绝 ,不回去检查CDA,所以不认为CDA失败,但是也会设置TSI中的CDA已经执行位为1

TC 脱机接受,会检查这个CDA的动态签名情况,假如动态签名检查(book2中讲的)有错误,就会认为CDA失败,不会产生第二次GAC,会让脱机交易失败,但是假如失败是因为CID表明的AC与GAC表明的AC不同,如果CID表示的是ARQC,则会产生第二次GAC,要求脱机拒绝交易

ARQC 联网交易 ,同样检查CDA签名情况,假如也是动态签名检查(book2中讲的)有错误,就会认为CDA失败,同时立马产生第二次GAC要求返回AAC(第二次GAC不会再要求产生CDA动态签名),假如是CID不同导致的失败,CID表示的是AAC或者TC,会立马让脱机交易失败,不会产生第二次GAC,也不会去联网在进行交易。

如果第二次GAC命令中CDA失败,终端要拒绝交易。

在GAC命令过后其实就结束了,但是还有一些东西需要注意

联网交易往发卡行后台发送的数据不是乱发的,是有依据的,在book4中也有表示,同时使用的是DOL组成数据的规则,不是TLV格式,发送给后台。

发卡行可能会给卡片发送脚本命令,终端不需要去解析这些命令,但是需要保证能原原本本的把这些脚本发送给卡片,这些数据是TLV格式的,不需要改变。

这些脚本在我测试的时候是与联网处理后台直接一起发送回终端的,然后这个脚本有两种71和72开头的,71在最后一次GAC前发送,72在GAC后,但是这个联网处理我看到的都是第一次GAC后要求联网处理后,第二次GAC命令前后发送这个数据。

在规范中还有很多细节没有概括到,后面想起来再补充。

  • 36
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值