EMV内核使用中的常见问题
EMV内核在使用上会由于调用不当引起的许多问题,本文旨在基于内核LOG(也就是与IC卡交互的指令LOG)的基础上,对一些常见问题作初步的分析与解答,方便不熟悉EMV规范的同学参考。
本文的前提是你已经得到了一份与IC卡交互的指令LOG,比如
发送:00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00
接收:6F 24 84 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31
A5 12 88 01 01 5F 2D 08 7A 68 65 6E 66 72 64 65 9F 11 01 01 90 00
发送:00 B2 01 0C 00
接收:6A 83
一、
下载AID、公钥、黑名单参数
AID与公钥一般是POS机第一次与后台签到的时候自动下发的,数量会比较多,如果中途出现失败,十之八九是通讯异常,比如modem、gprs通讯断了等原因,与EMV内核没什么关系。
二、
选择PSE
根据规范,现在终端都要支持目录选择方法。如果给IC卡发送第一条的指令不是选择PSE,也就是
发送:00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30
31 00
那么就是终端参数没设置好。
三、 建立候选应用列表
如果找不到GPO指令,也就是
发送:80 A8 00 00 …….(以80 A8开头的)
那么就是终端没有AID参数,或者终端没有这张IC卡的AID。
那么如何知道这张IC卡的AID呢?如果IC卡是支持选择PSE的话,是可以知道的,如果不支持就无法知道。比如
发送:00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30
31 00
接收:6F 24 84 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31
A5 12 88 01 01 5F 2D 08 7A 68 65 6E 66 72 64 65 9F 11 01 01 90 00
发送:00 B2 01 0C 00
接收:70 2A 61 28 4F 07 A0 00 00 03 33 01 01 50 0B 50 42 4F 43 20 43
72 65 64 69 74 9F 12 0F 43 41 52 44 20 49 4D 41 47 45 20 30 30 33 35 90 00
查找4F标签,它的值就是IC卡支持的AID,可能会有多个。
四、 初始化应用
如果能找到GPO指令,也就是
发送:80 A8 00 00 …….(以80 A8开头的)
那么表示应用已经初始化了,但是GPO命令会把一些数据发给IC卡,比如交易金额、货币代码等等,要确保这些数据与发往服务器的55域数据一致。
那么如何解析GPO指令里的数据呢?先得看它的前一条指令:选择AID
发送:00 A4 04 00 08 A0 00 00 03 33 01 01 02 00
接收:6F 58 84 08 A0 00 00 03 33 01 01 02 A5 4C 50 0B 50 42
4F 43 20 43 72 65 64 69 74 87 01 01 5F 2D 04 7A 68 65 6E 9F 11 01 01 9F 12 0D
49 43 42 43 20 50 62 6F 63 43 61 72 64 9F 38 0C 9F 7A 01 9F 02 06 5F 2A 02 DF 69 01 BF 0C
0F D1 02 31 32 C2 04 49 43 42 43 9F 4D 02 0B 0A 90 00
查找9F38标签,它的值叫PDOL,根据PDOL才能组出GPO的数据。
假如GPO指令是这样的
发送:80 A8 00 00 0C 83 0A 00 00 00 00 25 89 63 01 56 00 00
那么从第8个字节开始就是根据PDOL组出来的数据,解析如下:
|
TAG |
名称 |
长度 |
值 |
|
9F7A |
电子现金终端支持指示器 |
01 |
00 |
|
9F02 |
授权金额(数值型) |
06 |
00 00 00 25 89 63 |
|
5F2A |
交易货币代码 |
02 |
01 56 |
|
DF69 |
SM2算法支持指示器 |
01 |
00 |
常用的判断规则是:
标签9F7A,如果是电子现金消费,则必须为01
标签9F02,必须与用户输入的交易金额一致
标签5F2A,国内都是01 56
标签DF69,支持国密就为01
五、 读记录应用
读记录步骤在GPO命令之后,就是一大堆的00
B2开头的指令,从中查找标签8C,它的值叫CDOL1,后面判断的时候要用到
假设CDOL1的值为9F 02 06 9F 03 06 9F 1A 02 95 05 5F
2A 02 9A 03 9C 01 9F 37 04 9F 21 03 9F 4E 14
六、 生成第一次应用密文GENERATR
AC
查找第一条80 AE开头的指令,比如
发送:80 AE 80 00 34 00 00 00
25 89 63 00 00 00 00 00 00 01 56 00 80 04 00 00 01 56 13 07 03 00 59 4F 0D E3
19 15 27 53 75 6E 79 61 72 64 20 45 4D 56 20 54 65 73 74 20 6D 65 72 00
注意第3个字节,如果是电子现金消费则是40,如果是标准借贷记则是80,如果是其它值就说明有错误。
从第6个字节开始就是根据CDOL1组出来的数据,解析如下:
|
TAG |
名称 |
长度 |
值 |
|
9F02 |
授权金额(数值型) |
06 |
00 00 00 25 89 |
|
9F03 |
其他金额(数值型) |
06 |
00 00 00 00 00 |
|
9F1A |
终端国家代码 |
02 |
01 56 |
|
95 |
终端验证结果TVR |
05 |
00 80 04 00 00 |
|
5F2A |
交易货币代码 |
02 |
01 56 |
|
9A |
交易日期 |
03 |
13 07 03 |
|
9C |
交易类型 |
01 |
00 |
|
9F37 |
不可预知数 |
04 |
59 4F 0D E3 |
|
9F21 |
交易时间 |
03 |
19 15 27 |
|
9F4E |
商户名称 |
14 |
53 75 6E 79 61 |
常用的判断规则是:
标签9F02,必须与用户输入的交易金额一致,必须与GPO命令一致
标签9F03,国内都是6字节00
标签9F1A,国内都是01 56,否则是奇怪的值就是终端参数没设置好
标签95,每个bit位的说明如下
字节1 bit8 未进行脱机数据认证(标签9F33错误,终端参数没设置好)
字节1 bit7 脱机静态数据认证SDA失败(没有公钥)
字节1 bit6 IC卡数据缺失
字节1 bit5 卡片出现在终端异常文件中(黑名单)
字节1 bit4 脱机动态数据认证DDA失败(没有公钥)
字节1 bit3 复合动态数据认证CDA/应用密文生成失败
字节1 bit2 执行了脱机静态数据认证SDA(没有公钥)
字节2 bit8 IC卡和终端应用版本不一致(AID参数不对)
字节2 bit7 应用已过期(查看终端日期)
字节2 bit6 应用尚未生效(查看终端日期)
字节2 bit5 卡片不允许所请求的服务
字节2 bit4 新卡
字节3 bit8 持卡人验证失败
字节3 bit7 未知的CVM
字节3 bit6 PIN重试次数超限(IC卡脱机PIN被锁)
字节3 bit5 要求输入PIN,但密码键盘不存在或工作不正常(没有输密码)
字节3 bit4 要求输入PIN,密码键盘存在,但未输入PIN(输入空密码)
字节3 bit3 输入联机PIN
字节4 bit8 交易超过最低限额
字节4 bit7 超过连续脱机交易下限
字节4 bit6 超过连续脱机交易上限
字节4 bit5 交易被随机选择联机处理
字节4 bit4 商户要求联机交易
字节5 bit8 使用缺省TDOL
字节5 bit7 发卡行认证失败
字节5 bit6 最后一次 GENERATE AC 命令之前脚本处理失败
字节5 bit5 最后一次 GENERATE AC 命令之后脚本处理失败
括号里是可能的错误原因,根据实际95的值比对着查找原因。
标签5F2A,国内都是01 56
标签DF69,支持国密就为01
标签9A,格式必须正确
标签9F21,格式必须正确
发送的数据检查无误后,还要检查55域数据是否与上述数据一致,这步至关重要,如果数据不一致后台就会报作弊卡。
七、 QPBOC相关
如果最后一条命令是GPO命令(就是80 A8开头的),那么一般是IC卡余额不足而转联机了。
如果最后一条命令是读记录(就是00 B2开头的),而IC卡的钱被扣了而终端提示交易失败,基本是没有公钥导致的。
EMV内核使用中的常见问题的更多相关文章
- Qt的安装和使用中的常见问题(简略版)
对于喜欢研究细节的朋友,可参考Qt的安装和使用中的常见问题(详细版). 目录 1.引入 2.Qt简介 3.Qt版本 3.1 查看安装的Qt版本 3.2 查看当前项目使用的Qt版本 3.3 查看当前项目 ...
- Qt的安装和使用中的常见问题(详细版)
对于太长不看的朋友,可参考Qt的安装和使用中的常见问题(简略版). 目录 1.引入 2.Qt简介 3.Qt版本 3.1 查看安装的Qt版本 3.2 查看当前项目使用的Qt版本 3.3 查看当前项目使用 ...
- W5100使用中的常见问题
来自:成都浩然 越来越多的嵌入式网络系统project师喜欢上了W5100,它集TCP/IP协议栈.以太网的MAC和PHY一体,不仅使系统性能得到非常大的提升,也给产品开发工作带来极大的方便.随着W5 ...
- (转)sqlite3使用中的常见问题
1. 创建数据如果不往数据库里面添加任何的表,这个数据库等于没有建立,不会在硬盘上产生任何文件,如果数据库已经存在,则会打开这个数据库. 2. 如何通过sqlite3.dll与sqlite3.def生 ...
- 关于IScroll使用中的常见问题与解决方案
1.在iscroll4的滚动容器范围内,点击input框.select等表单元素时没有响应这个问题原因在于iscroll需要一直监听用户的touch操作,以便灵敏的做出对应效果,所以它把其余的默认事件 ...
- Maven使用中的常见问题整理
1.更新eclipse的classpath加入新依赖 1.在dependencyManagement里面加入包括版本在内的依赖信息,如: <dependency> <groupId ...
- pomelo使用中的常见问题
1.端口被占用, 有进程没杀干净. 用 pomelo kill --force 命令清一下进程.
- 使用multiprocessing中的常见问题
在python的解释器中,CPython是应用范围最广的一种,其具有丰富的扩展包,方便了开发者的使用.当然CPython也不是完美的,由于全局解释锁(GIL)的存在,python的多线程可以近似看作单 ...
- python(二):使用multiprocessing中的常见问题
简介在python的解释器中,CPython是应用范围最广的一种,其具有丰富的扩展包,方便了开发者的使用.当然CPython也不是完美的,由于全局解释锁(GIL)的存在,python的多线程可以近似看 ...
随机推荐
- 记录git多人协作开发常用的流程,供新手参考
声明:博主写的博客都是经过自己总结或者亲测成功的实例,绝不乱转载.读者可放心看,有不足之处请私信我,或者给我发邮件:pangchao620@163.com. 写作目的: 记录一下我看完廖学锋老师的gi ...
- .NET/ASP.NET 4.5 Bundle组件(捆绑、缩小静态文件)
阅读目录: 1.开篇介绍 2.System.Web.Optimization 组件 3.System.Web.Optimization 组件基本原理 4.扩展自定义类型静态文件 1]开篇介绍 这篇文章 ...
- [原]openstack-kilo--issue(六):Authorization Failed: The resource could not be found. (HTTP 404)
=======1.问题点:====== 在安装调试openstack-kilo版本的时候,使用keystone endpoint-list的时候出现了问题. 如下: [root@controller ...
- Java api 入门教程 之 JAVA的IO处理
IO是输入和输出的简称,在实际的使用时,输入和输出是有方向的.就像现实中两个人之间借钱一样,例如A借钱给B,相对于A来说是借出,而相对于B来说则是借入.所以在程序中提到输入和输出时,也需要区分清楚是相 ...
- Linux 开机自启动脚本详解
以kibana为例 以下为skibana名称的脚本内容 #!/bin/bash #chkconfig: 2345 80 90 #description:kibana kibana=" ...
- proteus 查找 仿真元件 中英文对照 [持续更新]
CRYSTAL 晶振 CAP 电容 RES 电阻 LED 灯 DIODE 二极管 POWER 电源 GND 接地 SPEAKER 扬声器 AT89C51 51 CPU芯片 三极管 PNP N ...
- 树莓派2 安装 win10Iot 和 Ubuntu mate
注册博客账号已经2年多了.一直没写博文现在抽空写写. 写这篇博文是因为我之前在网上找了蛮多有关教程写的都不是很清晰.安装没成功.所以我写一下我根据网上找到的整理一下分享出来. 非专业只是业余玩玩.好了 ...
- 带有天气预报的高大上web报表制作分享
我用FineReport开发了挺多报表,但集成天气预报这样提高交互和人性化的还是第一次,所以跟大家分享下. 这个报表是综合的门店销售管理分析面板,可以查询业绩分析.店员销售分析,店铺排行分析(可以看出 ...
- FineReport报表系统实例方案之医院院长查询分析系统
医院院长查询系统 目前,大中型医院的信息处理正从传统手工方式飞速向电脑信息化建设方案转变,一个大中型医院担负着繁重的医疗和科研任务,以及繁杂的事务性工作,院长必须时刻与各科室保持密切的连续,以便随时了 ...
- Java Web之Filter
Filter被称为过滤器或者拦截器,基本功能就是对调用servler过程的拦截,在servlet进行响应和处理前后实现一些特殊功能.其实,Filter过滤器就是一个实现了javax.servlet.F ...