PBOCIC讀芯片卡流程

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

PBOCIC讀芯片卡流程,參考上面的博客,整理了一下PBOCIC卡讀流程。spa

上面博客內容估計也是參考別人的,因此好幾處錯誤跟網上其餘的地方同樣,我將其中錯誤改正了一下,同時增長了更加詳細的說明.net

PBOCIC卡過程開始

(一)應用選擇       

一張銀聯IC卡里面可能有多個應用,所謂應用就是卡片和終端(如讀卡器)之間的應用協議和相關的數據集,讀卡器和卡的交互其實就是和應用的交互,卡的交易其實就是選擇某個應用作交易。orm

目前卡商所生產的卡基本上都是一個應用,即使如此,但根據銀聯的規範,應用選擇這個步驟也是必不可少的。對象

1)首先是選擇PSE支付環境文件1PAY.SYS.DDF01

使用的命令是select命令,這個命令的詳解在《中國金融集成電路(IC)卡借記貸記卡片規範(V0.8-20080325)的附錄B中有詳細的介紹。blog

此處請求命令報文以下:索引

命令格式:選擇(Select)報文 00 A4 XXci

命令參數:00 A4 04 00 博客

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

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整個過程結束。

相關文章
相關標籤/搜索