终端行为分析/卡片行为分析
(一)文档说明
终端行为分析
具体说明可以查看文档规范
卡片行为分析使用的终端数据
(二)资料解析
当卡片收到终端的应用密文请求时,卡片就执行卡风险管理检查,来决定是否要 改变终端设定的交易处理。IC卡可以决定后继交易的处理方式:
- ● 同意脱机完成
- ● 联机授权
- ● 拒绝交易
- ● 拒绝交易
GAC返回格式1(CDA比较复杂暂不讨论)对象连接而成,各数据对象之间没有分隔符(标签和长度)
值 存在性
密文信息数据 必备
应用交易计数器(ATC) 必备
应用密文(AC) 必备
发卡行应用数据 可选
举例:
send:根据8C得到CDOL1 9F0206 9F0306 9F1A02 9505 5F2A02 9A03 9C01 9F3704 9F2103 9F4E14
组包数据如下:
000000000002
000000000000
0156
000004E000
0156
160601
00
719B5D0B
095214
0000000000000000000000000000000000000000
得到发送: 80AE8000340000000000020000000000000156000004E000015616060100719B5D0B095214000000000000000000000000000000000000000000
得到返回: 801E 80 18D7 A013030A566F8FAF 070D0103A02002010A010000000000B53DAF03 9000
80 : 9F27 (1字节定长)
18D7 : 9F36 (2字节定长)
A013030A566F8FAF : 9F26 (8字节定长)
070D0103A02002010A010000000000B53DAF03 : 9F10 (变长)
接下来我们就要按照报文组织55域数据上送进行交易了
(三)源码片段分析
终端行为分析–终端比较IAC和TAC中与终端验证结果(TVR)对应的位
static GenAC check_tvr(uchar * auth_code)
{
extern uchar * g_tvr;
int i;
uchar iac_default[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
uchar iac_decline[] = {0x00, 0x00, 0x00, 0x00, 0x00}; /* default value */
uchar * ptmp;
if (auth_code == NULL) /* use AAR to indicate an error */
{
return GAC_AAR;
}
if ((ptmp = emvget_appdata(0x9F0E, NULL)) == NULL) /* IAC-Decline */
{
ptmp = iac_decline;
}
for (i = 0; i < 5; i ++)
{
if ((*(ptmp + i) & *(g_tvr + i)) || (g_emvconfig._tac_denial[i] & *(g_tvr + i)))
{
auth_code[0] = 'Z';
auth_code[1] = '1';
return GAC_AAC;
}
}
....省略
}
(四)常见问题及分析
1.这个步骤比较多异常,不过可以查看一下TVR(95),以及比较下IAC-拒绝的条件,便可查出来原因.
2.如果只考虑脱机数据认证为SDA/DDA的情况下,这里已经交易成功(脱机),或者去联机交易(已经得到ARQC)
3.后续相关处理
联机处理 如果卡片返回ARQC,终端则向主机发送联机报文,报文中包括ARQC。 交易结束
如果要求联机处理,但终端无法联机发送报文,则执行附加的终端和卡片处理。
终端用发卡行行为码IAC-缺省和终端行为码TAC-缺省来执行附加分析(类似终端行为分析)以决定在第2个GENERATE AC命令中要求的密文类型(AAC或TC)。
这个时候首先又需要检查IAC-缺省和TAC缺省执行终端行为分析(这部分在之前终端行为分析中有表详细的描述),并且根绝结果发送第二次GAC指令。
如果第二次GAC指令能够成功返回TC,那么脱机交易批准,如果返回ACC,则交易拒绝,,这个时候不可能再返回ARQC了
如果脱机成功则响应码为Y3,但是,如果终端在第一次GAC就获取TC批准脱机交易的话,响应码是Y1,所以通过Y1和Y3就可以知道是哪一种脱机批准。
扫描关注我
(转载本站文章请注明作者和出处 Undefined)