ApplePay之Visa MSD交易指令详解
移动支付网 池玉博2014/10/29 19:20:05

借了一台绑好Visa外卡的iPhone6+,用非接读卡器跑了一下脚本。以下是对交易流程的解读,仅供参考。

指纹验证

iPhone6靠近非接读卡器后,立刻会亮屏并弹出指纹验证界面。而从读卡器的角度来看,并没有检测到非接卡片,因此也不会发送交易指令。这说明此时NFC刷卡功能是关闭的(大胆推测CLFeSE之间的通道是关闭的)。CLF检测到RF信号后,会激活指纹验证功能,指纹验证成功后,手机会暂时打开NFC刷卡功能(开启CLFeSE的通道),这时候屏幕会提示用户,可以刷卡了。 

   

因此ApplePay的支付动作实际上是2次拍卡动作。第一次拍卡用来激活指纹验证,打开NFC通道,第二次拍卡才是真正的支付交易。  所以以下2种刷卡动作都是可行的:

1) 将手机靠近POS,完成指纹验证和刷卡

2) 手机先靠近POS,拿开,完成指纹验证,然后再靠近一次,完成刷卡支付。

这一点跟目前安卓机的做法是不同的,安卓机上CLFeSE之间的通道是一直打开的,只要把手机靠近读卡器,读卡器就能检测到卡片,并执行交易指令。

交易流程

第一次拍卡完成指纹验证后,第二次拍卡就是一个标准的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

20203

服务代码

201

标识卡片为芯片卡

PVKI

0

 

PIN校验数据

0000

 

自定义数据

50900025F5F2002202

 

 

3个数字为dCVV=509, 用来替换静态卡片验证码,每次交易时使用卡片密钥计算得来,一次一密,是后台用来判断卡片真伪的关键数据。

 

之后4个数字为交易计数器ATC=0002,参与dCVV的运算。

填充位

F

 

 

Visa MSD的交易流程可以看出:

 

-  MSD交易独立于前面的指纹验证是,换句话说,MSD交易根本不知道前面曾经验证过指纹。也从另一方面说明了,指纹就是用来保护NFC刷卡功能的。

- Visa采用了token技术,使用DAN替换PAN。二磁道数据上送到Visa服务器时,由VisadCVV进行验证(Visa拥有DAN相关的卡片密钥),验证成功后,通过Visa token serviceDAN替换成原始PAN,向发卡行进行交易授权请求。

    总结

1)NFC刷卡功能的开启是由指纹验证来保护的

2)Visa卡走的是标准的VCPS MSD规范,应用处理过程与前面的指纹验证没有关联

    推荐微信公众号,NFC日报:nfcdaily 移动支付网:mpaypass


展开全文
相关阅读
资讯查询取消