借了一台绑好Visa外卡的iPhone6+,用非接读卡器跑了一下脚本。以下是对交易流程的解读,仅供参考。
指纹验证
将iPhone6靠近非接读卡器后,立刻会亮屏并弹出指纹验证界面。而从读卡器的角度来看,并没有检测到非接卡片,因此也不会发送交易指令。这说明此时NFC刷卡功能是关闭的(大胆推测CLF和eSE之间的通道是关闭的)。CLF检测到RF信号后,会激活指纹验证功能,指纹验证成功后,手机会暂时打开NFC刷卡功能(开启CLF和eSE的通道),这时候屏幕会提示用户,可以刷卡了。
因此ApplePay的支付动作实际上是2次拍卡动作。第一次拍卡用来激活指纹验证,打开NFC通道,第二次拍卡才是真正的支付交易。 所以以下2种刷卡动作都是可行的:
1) 将手机靠近POS,完成指纹验证和刷卡
2) 手机先靠近POS,拿开,完成指纹验证,然后再靠近一次,完成刷卡支付。
这一点跟目前安卓机的做法是不同的,安卓机上CLF和eSE之间的通道是一直打开的,只要把手机靠近读卡器,读卡器就能检测到卡片,并执行交易指令。
交易流程
第一次拍卡完成指纹验证后,第二次拍卡就是一个标准的Visa VCPS MSD流程了。 交互APDU指令流如下:
(1) SELECT PPSE
Command |
: 00 A4 04 00 0E |
|
: 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 |
Output Data |
: 6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 : 30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 03 : 10 10 87 01 01 |
Status |
: 90 00 |
响应数据中返回了Visa应用的AID=A0000000031010
(2) SELECT AID
选择Visa应用,
Command |
: 00 A4 04 00 07 |
|
: A0 00 00 00 03 10 10 |
Output Data |
: 6F 39 84 07 A0 00 00 00 03 10 10 A5 2E 9F 38 1B : 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A : 02 9A 03 9C 01 9F 37 04 9F 4E 14 BF 0C 0D 9F 4D : 02 14 01 9F 5A 05 11 08 40 08 40 |
Status |
: 90 00 |
响应数据中包含的部分TAG如下表:
TAG |
Value |
说明 |
9F38 |
9F66 04 终端交易属性 9F02 06 授权金额 9F03 06 金额其它 9F1A 02 终端国家代码 95 05 终端验证结果 5F2A 02 交易货币代码 9A 03 交易日期 9C 交易类型 9F37 04 不可预知数 9F4E 14 商户名称 |
PDOL, 卡片请求终端发送的数据列表
|
(3) GET PROCESSING OPTIONS
Command |
: 80 A8 00 00 37 |
|
: 83 35 86 00 00 80 00 00 00 00 00 01 00 00 00 00 : 00 00 04 80 00 00 00 00 00 04 80 14 08 18 01 4A : 94 57 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 |
Output Data |
: 80 06 00 80 08 01 01 00 |
Status |
: 90 00 |
输入数据的格式由上一条指令获得的PDOL格式为准。
响应数据中包含:
AIP=0080, 其中byte2 bit 8=1b表明卡片支持MSD
AFL=08010100, 表明卡片中存在一个记录文件SFI=01,记录号为01,下面就可以读取该记录文件
(4) READ RECORD
读取记录文件SFI=1, 记录号=01
Command |
: 00 B2 01 0C 00 |
|
: 83 35 86 00 00 80 00 00 00 00 00 01 00 00 00 00 : 00 00 04 80 00 00 00 00 00 04 80 14 08 18 01 4A : 94 57 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 |
Output Data |
: 70 1A 57 13 40 71 23 13 ** ** ** ** D2 00 32 01 : 00 00 05 09 00 02 5F 5F 20 02 20 2F |
Status |
: 90 00 |
该记录中只包含一个TAG 57, 二磁道等效数据
571340712313********D20032010000050900025F5F2002202F (虽然DAN已经不是用户的原始卡号,这里还是用*来代表后面几位数字)
格式如下:
字段 |
值 |
说明 |
DAN |
571340712313******** |
由于采用了Token技术,这里的卡号不是PAN,而是DAN。 |
分隔符 |
D |
|
有效期 |
2003 |
2020年3月 |
服务代码 |
201 |
标识卡片为芯片卡 |
PVKI |
0 |
|
PIN校验数据 |
0000 |
|
自定义数据 |
50900025F5F2002202
|
前3个数字为dCVV=509, 用来替换静态卡片验证码,每次交易时使用卡片密钥计算得来,一次一密,是后台用来判断卡片真伪的关键数据。
之后4个数字为交易计数器ATC=0002,参与dCVV的运算。 |
填充位 |
F |
|
从Visa MSD的交易流程可以看出:
- MSD交易独立于前面的指纹验证是,换句话说,MSD交易根本不知道前面曾经验证过指纹。也从另一方面说明了,指纹就是用来保护NFC刷卡功能的。
- Visa采用了token技术,使用DAN替换PAN。二磁道数据上送到Visa服务器时,由Visa对dCVV进行验证(Visa拥有DAN相关的卡片密钥),验证成功后,通过Visa token service把DAN替换成原始PAN,向发卡行进行交易授权请求。
总结
1)NFC刷卡功能的开启是由指纹验证来保护的
2)Visa卡走的是标准的VCPS MSD规范,应用处理过程与前面的指纹验证没有关联
推荐微信公众号,NFC日报:nfcdaily 移动支付网:mpaypass
展开全文
- 创业邦 | 2015/7/8 9:07:25
- 移动支付网 | 2022/8/31 11:54:15
- 移动支付网 | 2022/8/30 9:03:27
- 移动支付网 | 2022/8/26 18:19:13
- 移动支付网 | 2022/8/23 10:04:03
- 人民日报 | 2022/8/22 11:15:49
- 移动支付网 | 2022/8/19 12:00:48
- 移动支付网 | 2022/8/18 11:04:46
- 移动支付网 | 2022/8/15 15:38:37
- 移动支付网 | 2022/8/11 9:17:53
- 移动支付网 | 2022/8/10 11:08:57
- 移动支付网 | 2022/8/5 9:25:10
- 移动支付网 | 2022/7/25 14:49:37
- 人民银行合肥中心支行 | 2022/7/22 9:38:27
- 移动支付网 | 2022/7/22 9:35:48