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

转载请注明出处

作者:小旭

这一块的内容,我觉得文档上讲的比较清晰,而且举例也很好,所以大部分都是拷贝文档的内容过来,一边看一边分析文档的含义。

这一部分用到2类比较重要的数据,分别是

发卡行行为代码(IAC ) 发卡行行为代码,来自读记录文件卡片返回

发卡行行为代码有三个数据元,即发卡行行为代码-拒绝、发卡行行为代码-联机、发卡行行为代码-缺省。每个发卡行行为代码由一组与终端验证结果(TVR)中的位相对应的位

组成

IAC -拒绝位设置为“1”反映了交易被脱机拒绝的终端验证结果条件

IAC -联机位设置为“1”代表需要联机授权条件

IAC -缺省位设置为“1”是当联机处理不可行时脱机拒绝所需的条件

终端行为代码(TAC)  TAC 有三个数据元,它们都是由一系列的位组成的,这些位对应于 TVR 中的数据位。终端行为代码来自emv参数下载交易。

TAC-拒绝  收单行设置的能够导致交易脱机拒绝的TVR 条件位

TAC-联机  收单行设置的能够导致交易联机的TVR 条件位

TAC-缺省 收单行设置的在交易联机无法进行的情况下能够导致脱机拒绝的TVR 条件位

这6个代码的查看方法和TVR查看方式一样,使用时也是配合TVR进行使用。

检查过程完全由终端利用先前从卡片获取的IAC数据和终端保存的TAC数据进行,无需与其它设备进行交互处理。
在处理过程中,终端比较IAC和TAC中与终端验证结果(TVR)对应的位。如果TVR和IAC或TAC中相应的位都被设置为“1”,则采纳对应的IAC或TAC。示例如下:

 
终端的处理步骤如下:
步骤 1:终端比较 IAC-拒绝和 TVR。如果不存在 IAC-拒绝,则采用缺省值‘0000000000’。如果IAC-拒绝和 TVR 的任何对应位同时设为‘1 ’,终端必须:
——   把授权响应码置为‘Z1’(脱机拒绝);
——   把 GENERATE AC(产生应用密文)命令的 P1 参数设为请求应用认证密文(AAC);
——   进行请求应用密文步骤。
步骤 2:终端对 TAC-拒绝和 TVR 进行类似的比较。如果不存在 TAC-拒绝,则采用缺省值‘0000000000’。如果 TAC-拒绝和 TVR 的任何对应位同时设为‘1 ’,终端必须采取与 IAC-拒绝相同的处理。

步骤 3:如果终端具有联机处理能力(仅联机的终端除外),则它应该使用 IAC-联机和TAC-联机与TVR 比较。如果 IAC-联机不存在,则使用缺省值‘FFFFFFFFFF’,如果 TAC-联机不存在,则使用缺省值‘0000000000’。如果 IAC-联机和 TVR 的任何对应位同时置为‘1’,则终端:
——  把产生应用密文(GENERATE AC)命令的 P1 参数设为授权请求密文(ARQC),以进行联机授权请求;
——  进行生成应用密文步骤。
对于仅联机的终端,如果在步骤 1 和步骤 2 中未决定脱机拒绝,则终端不必进行 IAC-联机和 TAC-联机与 TVR 的比较,而直接按照 IAC-联机或 TAC-联机和 TVR 的任何对应位同时置为‘1’的情况来处理,通过请求联机来继续进行交易。
步骤 4:如果终端是仅脱机终端或者当有联机处理能力的终端出于某种原因不能联机时,则使用 IAC——缺省和 TAC——缺省与 TVR 比较。如果没有 IAC-缺省,则使用缺省值‘FFFFFFFFFF’,如果 TAC——缺省不存在,则使用缺省值‘0000000000’。如果比较结果的任何对应位同时为‘1’,则终端:
——  把授权响应码置为‘Z3’(不能联机,脱机拒绝),仅脱机终端授权响应码置为‘Z1’;
——  把产生应用密文(GENERATE AC)命令的的 P1 参数设置为请求 AAC;
——  进行生成应用密文步骤。

对于仅联机的终端,当无法进行联机时,它可以选择正常的处理TAC/IAC-缺省,也可以选择跳过TAC/IAC——缺省的处理。对于跳过TAC/IAC——缺省处理的终端应该直接按照TAC/IAC——缺省与TVR匹配进行处理,并且在第2个GENERATE AC请求AAC。对于正常处理TAC/IAC——缺省的终端,应该根据TAC/IAC——缺省与TVR匹配的结果生成应用密文,这时仅联机的终端可能脱机完成交易。
步骤 5:如果在以上的比较中没有出现对应位同时为‘1 ’的情况,则终端:
——  把授权响应码置为‘Y1’(脱机批准);
——  把 GENERATE AC(请求应用密文)命令的 P1 参数设置为请求交易证书(TC);
——  进行请求应用密文步骤。

这里的GENERATE AC就是我们所说的第一次GAC,如果脱机批准了,获取到的TC值需要在上送交易明细时上送到后台。如果卡片返回ARQC,那么在联机交易结束后,还需要再做第二次GAC,这个内容后续再讨论。

上述5个步骤,文档描述也是很清晰了,不需要再做什么多余的解释了。

再列举一个GAC1指令的例子来看看

GAC1时候指令的数据源主要是利用卡片返回的CDOL1来组织数据

sned:58
80 AE 40 00 34 00 00 00 00 01 00 00 00 00 00 00 
00 01 56 00 80 00 00 00 01 56 20 11 01 00 55 7B 
D7 85 19 39 29 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 

rec:35
80 1E 40 01 41 D1 F6 B3 7D 6A CA F8 E2 07 02 
01 03 90 00 02 01 0A 01 00 00 09 00 93 3C 7F 1B 
FF 90 00 

接受返回的数据总共是30个,返回数据采用80作为模板(77时需要解析TLV),而是将数据域第一个字节是9F27,应用密文信息bit8-bit7,bit6到bit1还需要终端做判断,终端要根据bit6到bit1对交易的执行做出分析和判断。当前为40(0100 0000),即当前密文为TC(ARQC的情况和ACC就再看文档了,这里不描述了)

后面两个字节ATC 0140 ,再后面8个字节为应用密文,即TC值。再后面的是发卡行应用数据。

处理完GAC1的数据后,终端行为分析就结束了。

如果GAC1过程中,卡片能够成功返回TC,则脱机消费已经成功(目前只考虑了脱机数据认证方式为SDA和DDA的情况,CDA的情况比较复杂,后面专门写一篇作讨论),终端后续就要进入报文处理流程。

如果每次脱机交易能走完这一步都很开心,因为只要走到这一步,终端就要开始打单了…………
阅读更多

更多精彩内容