PBOCIC读芯片卡流程

https://blog.csdn.net/kxd_ysheng/article/details/21178101?_t=t

PBOCIC读芯片卡流程,参考上面的博客,整理了一下PBOCIC卡读流程。

上面博客内容估计也是参考别人的,所以好几处错误跟网上其他的地方一样,我将其中错误改正了一下,同时增加了更加详细的说明

PBOCIC卡过程开始

(一)应用选择       

一张银联IC卡里面可能有多个应用,所谓应用就是卡片和终端(如读卡器)之间的应用协议和相关的数据集,读卡器和卡的交互其实就是和应用的交互,卡的交易其实就是选择某个应用做交易。

目前卡商所生产的卡基本上都是一个应用,即便如此,但根据银联的规范,应用选择这个步骤也是必不可少的。

1)首先是选择PSE支付环境文件1PAY.SYS.DDF01

使用的命令是select命令,这个命令的详解在《中国金融集成电路(IC)卡借记贷记卡片规范(V0.8-20080325)的附录B中有详细的介绍。

此处请求命令报文如下:

命令格式:选择(Select)报文 00 A4 XX

命令参数:00 A4 04 00 

0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31

00

参数长度:20

卡片返回数据

长度:40

值:6F 1E 

84 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 

A5 0C

5F 2D 02 7A 68 

9F 11 01 01 

88 01 01 

90 00

此处返回的结果是严格按照TLV格式来的,此处解析出来的数据如下:

       6F:  FCI(File Control Information)模板

       84DF名称

       A5FCI专用模板

       88:目录基本文件的SFI (高三位为0,后面补100,进行读取文件数据)

       5F2D:首选语言

       9F11: 发卡行代码表索引

       BF0C:发卡行自定义数据--(该卡没有带此数据)

       FCI(文件控制信息)包含SFI(Short File Identification短文件标识符),目录中的每个应用列出一个应用。

至此,PSE选择完成。

如果卡片对选择支付环境的响应不是90 00,则需要尝试逐个选择AID

2)根据SFI 进行读记录,选择与PSE关联的应用文件

与PSE关联的基本文件,里面列出支持的支付应用。

此处SFI(对应标签是88)01,根据read record的规范,p2的高5位为SFI(01==>0000 0001,低三位为100,故p2的值为0x0C0000 1100)。

B.21读记录(READ RECORD)命令引用控制参数(P2)

b8

B7

b6

b5

b4

b3

b2

b1

意义

x

x

x

x

x

SFI

1

0

0

读P1指定记录

此处请求命令报文为:

命令格式:读记录(Read Record)报文 00 B2 P1 P2 00

命令参数:00 B2 01 0C 00

参数长度:5

卡片返回数据

长度:49

值:

70 28 

61 26 

4F 08 A0 00 00 03 33 01 01 01 

50 0A 50 42 4F 43 20 44 45 42 49 54

9F 12 0A 50 42 4F 43 20 44 45 42 49 54 

87 01 01

90 00

此处的返回结果也是按照TLV格式来编码的,解析后为:

70:基本数据模板

61:应用模板。有PSE才存在,含应用目录入口相关参数

4F:应用标识符(AID)=RID+PID(应用提供商和专用应用标识符),Len=08Value=A000000333010101        

50:应用标签,EMV规定为必备数据,用于应用选择,与AID相关便于记忆的数据,Len=0AValue=50424F43204445424954    

9F12 : 应用首选名称,Len=0AValue=50424F43204445424954  

87 : 应用优先指示器01   

获得一个AID后,应该选入AID列表。

3加入列表后继续读取文件的下一个记录,直到没有任何记录可读取

此处请求命令报文为:

命令格式:读记录(Read Record)报文 00 B2 P1 P2 00

命令参数:00 B2 02 0C 00

参数长度:5

卡片返回数据:

长度:2

值:6A 83         

4选择应用

根据读取的记录的应用标识符加入AID列表,然后根据用户按键进行选择应用或者根据优先级选择应用。

此处请求命令的报文为:

命令格式:选择(Select)报文 00 A4 P1 P2 Lc Data 00

命令参数:00 A4 04 00 07 A0 00 00 03 33 01 01 00

参数长度:13

卡片返回:

长度:45

值:

6F 45 

84 08 A0 00 00 03 33 01 01 01 A5 39 50 0A 50 42 4F 43 20 44 45 42 49 54 87 01 01

9F 38 09 9F 7A 01 9F 02 06 5F 2A 02 

5F 2D 02 7A 68

9F 11 01 01

9F 12 0A 50 42 4F 43 20 44 45 42 49 54 

BF 0C 05 9F 4D 02 0B 0A 

90 00

6F: FCI模板

84: DF名称

9F38: PDOL的数据(9F1A:终端国家代码;9F7A: 电子现金指示器,9F02:授权金额,5F2A:交易货币代码)

5F2D:首选语言

9F11: 发卡行代码表索引

进行最终选择,要求用户输入金额,判断POS是否能走电子现金交易路径,表示电子现金指示器。

(二)应用初始化

5)获取处理选项(GPO--GET PROCESSING OPTIONS)通知卡片交易开始。

该命令报文的组合需要第4步返回的PDOL数据(9F38)根据PDOL选项进行组包

请求命令报文:

B.12 获取处理选项(GET PROCESSING OPTIONS)命令报文

编码

CLA

‘80’

INS

‘A8’

P1 P2

‘00’

Lc

‘00’

数据域

PDOL相关数据(如果存在)或8300

Le

‘00’

命令格式:GPO报文 80 A8 00 00 XX(长度) 83(PDOL标签) XX(PDOL长度) PDOL 00

命令参数:80 A8 00 00 0B 

83 09 

9F 02 06 5F 2A 02 00

参数长度:14

卡片返回:

80 16 

7C 00 

08 01 01 00  

10 01 01 01 

10 03 06 00 

18 01 01 00 

20 01 01 00 

90 00

GPO响应格式:80 XX(长度) XX(应用交互特征) XX(AFL)

所以,应用交互特征是7C 000111 1100),AFL08 01 01 00 10 01 01 01 10 03 06 00 18 01 01 00 20 01 01 00

此处返回的报文不是TLV格式

7C00为应用交互特征,解析:

bit8:保留(RFU);

bit7:1=支持SDA; 静态数据认证

bit61=支持DDA; 动态数据认证

bit51=支持持卡人认证

bit4:执行终端风险管理

bit3:支持发卡行认证

bit2:保留

bit1:1=支持CDA

字节2:保留(RFU)

0801010010010101100306001801010020010100AFL(共5AFL(应用文件定位器),每个AFL包括4个字节

字节1bit8-bit4SFI(短文件标识符)

        bit3-bit1:000

字节2:文件中要读的第1个记录的记录号(不能为0

字节3:文件中要读的最后一个记录的记录号(大于或等于字节2

字节4:从字节2的记录开始,用于静态数据记录的个数(从0开始,不大于(字节3-(字节2+1

根据GPO返回的AFL,读文件。

读文件号格式(P2)为:SFI(AFL第一个字节)左移3位,右边补100READ RECORD命令算P2一样)。

比如上面的08 二进制就是 0000 1000 ,因为bit8-bit4才是SFI,所以真实的是:0000 0001

读取文件的时候,左移3右补0100(表明读取指定记录) ,得到0000 1100,就是0x0c。同理算P2如下

第一个文件:08 01 01 00 字节1二进制为0000 1000 左移右补后0000 1100 0x0C

第二个文件:10 01 01 01 字节1二进制为0001 0000 左移右补后0001 0100 0x14

第三个文件:10 03 06 00 字节1二进制为0001 0000 左移右补后0001 0100 0x14

第四个文件:18 01 01 00 字节1二进制为0001 1000 左移右补后0001 1100 0x1C

第五个文件:10 01 01 00 字节1二进制为0001 0000 左移右补后0001 0100 0x14

jl-1.0  分析上面返回的AFL

n个文件

第一个字节

第二个字节(开始记录号)

第三个字节(结束记录号)

第三个字节

备注

1

0C

01

01

00

开始到结束1个记录

2

14

01

01

01

1个记录

3

14

03

06

00

4个记录

4

1C

01

01

00

1个记录

5

14

01

01

00

1个记录

(三)读应用数据

根据5步的AFL解析结果,可以组合出读应用数据的报文。

B.20 读记录(READ RECORD)命令报文

编码

CLA

‘00’

INS

‘B2’

P1

记录号

P2

引用控制参数,见表B-21

Lc

不存在

数据域

不存在

Le

‘00’

表B.21定义了命令报文的引用控制参数。

B.21读记录(READ RECORD)命令引用控制参数

b8

B7

b6

b5

b4

b3

b2

b1

意义

x

x

x

x

x

SFI

1

0

0

读P1指定记录

发送

命令格式:READ RECORD(读记录)报文 00 B2 P1 P2 00

命令长度:5

命令参数:00 B2 01 0C 00 【根据表jl-1.0”第一个文件】

接受

长度:

值:

70 74 

57 13 6214830100237436D22112201464200755165F 

9F 0B 2D 4C 49 20 58 49 4E 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 

9F 61 28 31 34 32 34 32 39 31 39 38 32 30 35 31 34 34 34 31 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 

9F 62 01 00

90 00

70模板

5F20持卡人姓名

57二磁道等价数据(主账户、分隔符、失效日期、服务吗、PIN验证域、自定义数据非偶数补充F

9F0B:持卡人姓名

9F61:持卡人证件号

9F62:证件类型,00-身份证

发送:

00 B2 01 14 00 【根据表jl-1.0第二个文件】

接受:

70 4A 

5F 24 03 22 11 30 

5F 25 03 12 11 21 

5A 08 62 14 83 01 00 23 74 36 

5F 34 01 00 

9F 07 02 FF 00 

8E 0C 00 00 00 00 00 00 00 00 42 03 1E 03 

9F 0D 05 D8 60 9C A8 00

9F 0E 05 00 10 00 00 00 

9F0F05D8689CF800

5F28020156

9000

9F0E : 发卡行行为代码(IAC-拒绝

9F0D : 发卡行行为代码(IAC-缺省

5F28:发卡行国家代码

5F34:应用主账号序列号

5F25:应用生效日期

5A :二磁道

发送:

00 B2 03 14 00 【根据表jl-1.0,第三个文件,第一个记录】

接受:

7081B3

9081B0A33373F56850C06B1DE59D93F4F2A362CEA2A57C37D5DC78E3BF84914B608A43ACD22539B6C0491E88652244D2A199E6516D0C6F3C632F65202561106420FA406F530AE8D39CAF6EA5730E4A5AB15763FB42EAFA0AEE69A9E69640642E29CA15D5449B7AB74411A50EF811ACDEF4D8F93004C423E77E55AC263DA89308FCC05E3E0AA599565590C83CCE7FF6B17602F1BD7DB22C48A5A039FB97C48A8FA16083CC56DD6FEC3C6E7E81F37DCA25A949EC9000

90:发卡行公钥证书--用于脱机数据认证

发送:

00 B2 04 14 00 【根据表jl-1.0,第三个文件,第二个记录】

接受:

7048

8F0103

920433DFA015

9F320103

9F470103

9F482A737DBBA0A11741BD57FEDF1BE60C551A88A24A82B5EB3182642F217AFA986E04DB7AC2F38057FCE8AC01

9F49039F3704

9F4A0182

9000

8FCA公钥索引(PKI

9F32:发卡行公钥指数

9F4A:静态数据认证标签列表

92:发卡行公钥余数

9F47:IC卡公钥指数

9F48: IC卡公钥余数

9F49:动态数据认证数据对象列表(DDOL

发送:

00 B2 05 14 00 【根据表jl-1.0,第三个文件,第三个记录】

接受:

708193

93819088E48EC5AC68FD509E73786839978F465F4BDB905EF38B9FBD17147FE810EAB68EB5E86C4A23BA2E897A54892D1DAD75EE339C21603CB172C66CE312AA9B585D5F24A3827342D504AF9EC2E95407AA72CE527DC1C0BA4D051B8BA6282AEDEEE1D3725EC8CA91EC515903D7E100576B837F96ABCB789C10434AFEC23E30D33B509FBBFB40ACDB15DF282372B8F3FBC99D9000

93: 签名的静态应用数据-SDA

发送:

00 B2 06 14 00 【根据表jl-1.0”,第三个文件,第四个记录】

接受:

708194

9F468190810A5485E3B940508DDFF1E6AC2BF5B8990742BC1E11146C8BFC46D8C3C425ABA2C264CE2F478C320D198FF03E090EA61ECA3CCCF493AA886EDAC940C2F0CDC248768204DF4DEC26758B18F67E9CC7AB84C7DA55F00BDF0127CAF12B09E93C1830120E5F700BAB5D9124F209037FC3BE5BC44D34153760CB5E79890B C5D00491681ECDD1C9844874D9B0DFFF81236C899000

9F46:IC卡公钥证书

发送

00 B2 01 1C 00【第四个文件,第一个记录】

接受:

7048

8C1B9F02069F03069F1A0295055F2A029A039C019F37049F21039F4E14

8D1A8A029F02069F03069F1A0295055F2A029A039C019F37049F2103

5F30020220

9F42020156

9F08020020

9000

5F30 : 0220                        服务码

8C:卡片风险管理数据对象列表1CDOL1

8D:卡片风险管理数据对象列表2 CDOL2

9F08:应用版本号

9F42:应用货币代码

发送:

00 B2 01 24 00 【第五个文件,第一个记录】

接受:

7008

9F140100

9F230100

9000

9F14:连续脱机交易下限

9F23:连续脱机交易上限

(四)生成应用密文

根据上面读取的“卡片风险管理数据对象列表1CDOL1)”生成该命令。

请求命令报文:

80AE40002E00000000000900000000000001560000800000015610041000B84FBA072019024C4E00000000000000000000000000000000000000

卡片返回:

801E800012E70CB84C238601F207010103A020000100000000007B168F919000

返回的数据解析:密文信息数据(L:1+ 应用交易计数器(L:2+ 应用密文(L:8+ 发卡行应用数据

 PBOCIC整个过程结束。

原文地址:https://www.cnblogs.com/jieliujas/p/9135149.html