1. 程式人生 > >PBOC/EMV-交易流程詳解--POS與卡片的資料互動進行分析

PBOC/EMV-交易流程詳解--POS與卡片的資料互動進行分析

符號說明:

RFU:預留使用

近期在除錯pboc的交易,就萌生了把所有資料互動進行分析的想法,目的是拋磚引玉,希望有高手指正本文錯誤,或者理解不透徹的地方。

事不宜遲,下面是pboc交易的開始:


檢測插片,檢測卡片存在後:
(1):選擇支付環境pse:1PAY.SYS.DDF01
選擇(SSELECT)報文,00 A4 xx(通過命令選擇) xx(第一個或僅有一個)
a4############################################
[IC LEN : 20]
[00] [a4] [04] [00] 
[0e] [31] [50] [41] [59] [2e] [53] [59] [53] [2e] [44] [44] [46] [30] [31] [00]

SELECT SEND END dd
qwe#######################################################


#######################################################
[GET LEN : 40]
[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] SELECT GET END dd
#######################################################
對PSE支付環境的響應 
6F:FCI模板 
84:DF名稱 
A5:FCI專用模板
88:目錄基本檔案的SFI (高三位為0,後面補100,進行讀取檔案資料)
5F2D:首選語言
9F11:髮卡行程式碼表索引
BF0C:髮卡行自定義資料--(該卡沒有帶此資料)


FCI(檔案控制資訊)包含FCI(短檔案識別符號),目錄中的每個應用列出一個應用。




--至此,PSE選擇完成。如果卡片對選擇支付環境的響應不是 90 00,POS需要嘗試逐個選擇AID



(2): 選擇與PSE相關聯的一個基本檔案,該檔案會列出所支援的支付應用。
(讀記錄)READ RECORD 00 b2 xx(記錄號) xx(表明讀記錄號)
b2############################################
[IC LEN : 5]
[00] [b2] [01] [0c] [00] SELECT SEND END dd
#######################################################


asd#######################################################
[GET LEN : 49]
[70] [2d] 
[61] [2b] 
[4f] [07] [a0] [00] [00] [03] [33] [01] [01] 
[50] [0b] [50] [42] [4f] [43] [20] [43] [72] [65] [64] [69] [74] 
[87] [01] [01] 
[9f] [12] [0f] [43] [41] [52] [44] [20] [49] [4d] [41] [47] [45] [20] [30] [30] [30] [31] 
[90] [00] SELECT GET END dd
#######################################################
卡片的響應: 70 xx(長度) xx(記錄模板)
70:基本資料模板
61:應用模板,有pse才會存在,包含應用目錄入口相關的資料物件
4F:應用識別符號 = RID + PIX (應用提供商和專用應用識別符號)
50:應用標籤,EMV規定為必備資料,用於應用選擇,與AID相關的便於記憶的資料 此處為PBOC Credit
87:應用優先指示器,如果卡片有多個應用,指出同一目錄中應用的優先順序。
    bit8=》1:沒有持卡人確認應用不能選擇;0:沒有持卡人確認可以選擇應用
    bit7-bit5:RFU
    bit4-bit10000:不指定優先順序。:xxxx:1-15,1優先順序最高
9f12:應用首選名稱 此處是:CARD IMAGE 0001


獲得一個AID後,應該選入AID列表


繼續讀取檔案的下一個記錄
b2############################################
[IC LEN : 5]
[00] [b2] [02] [0c] [00] SELECT SEND END dd
#######################################################


asd#######################################################
[GET LEN : 2]
[6a] [83] SELECT GET END dd
#######################################################
直到沒有任何記錄可讀取


(3):根據讀取的記錄的應用識別符號加入AID列表,然後根據使用者按鍵進行選擇應用或者根據優先順序選擇應用。
a4############################################
[IC LEN : 13]
[00] [a4] [04] [00] [07] [a0] [00] [00] [03] [33] [01] [01] [00] SELECT SEND END dd
qwe#######################################################


#######################################################
[GET LEN : 48]
[6f] [2c] 
[84] [07] [a0] [00] [00] [03] [33] [01] [01] [a5] [21] [87] [01] [01] 


[9f] [38] [0c] 
[9f] [1a] [02] 
[9f] [7a] [01] 
[9f] [02] [06] 
[5f] [2a] [02] 


[5f] [2d] [08] [7a] [68] [65] [6e] [66] [72] [64] [65] 
[9f] [11] [01] [01] 
[90] [00] SELECT GET END dd
#######################################################
--選擇ADF的響應報文
6F: FCI模板
84: DF名稱
9F38: PDOL的資料(9F1A:終端國家程式碼;9F7A: 電子現金指示器,9F02:授權金額,5F2A:交易貨幣程式碼)
5F2D:首選語言
9F11: 髮卡行程式碼表索引


進行最終選擇,要求使用者輸入金額,判斷POS是否能走電子現金交易路徑,表示電子現金指示器。


(4):獲取處理選項(GPO) 通知卡片交易開始。根據PDOL選項進行組包。
GPO指令的傳送 80 a8 00 00 xx(長度) 83(PDOL標籤)xx(PDOL長度)xx xx(資料)
a8############################################
[IC LEN : 19]
[80] [a8] [00] [00] [0d] 
[83] [0b] 


[01] [56] 
[01] 
[00] [00] [00] [00] [00] [09]
[01] [56] 
[00] SELECT SEND END ss
#######################################################


#######################################################
[GET LEN : 18]
[80] [0e] 
[58] [00] 
[08] [01] [01] [00] 
[10] [01] [04] [01] 
[18] [01] [03] [00] 
[90] [00] SELECT GET END ss
#######################################################
GPO的響應格式包括: 80 xx(長度) xx(應用互動特徵) xx(AFL)
如上,應用互動特徵為: 58 00 
解析:
bit8:RFU; 
bit7:1=支援SDA; 
bit6:1=支援DDA;
bit5:1=支援持卡人認證
bit4:執行終端風險管理
bit3:支援髮卡行認證
bit2:RFU
bit1:1=支援CDA
位元組2:RFU


AFL(應用檔案定位器),每個AFL包括4個位元組
位元組1:bit8-bit4:SFI(短檔案識別符號)
       bit3-bit1:000
位元組2:檔案中要讀的第1個記錄的記錄號(不能為0)
位元組3:檔案中要讀的最後一個記錄的記錄號(大於或等於位元組2)
位元組4:從位元組2的記錄好開始,用於靜態資料記錄的個數(從0開始,不大於(位元組3)-(位元組2)+1)


根據GPO返回的AFL,讀檔案。讀檔案號格式為:SFI左移3位,右邊補100。
比如上面的08 十六進位制就是 0000 1000 bit8-bit4才是SFI,所以真實的是:0000 0001 ,讀取檔案的時候,右補0100(表明讀取指定記錄) ,得到0000 1100,就是0x0c。同理,02檔案就是:0x14
b2############################################
[IC LEN : 5]
[00] [b2] [01] [0c] [00] SELECT SEND END dd
#######################################################


asd#######################################################
[GET LEN : 66]
[70] [3e] 
[5f] [20] [0f] [46] [55] [4c] [4c] [20] [46] [55] [4e] [43] [54] [49] [4f] [4e] [41] [4c] 
[57] [11] [62] [28] [00] [01] [00] [00] [11] [17] [d1] [01] [22] [01] [01] [23] [45] [67] [89] [9f] [1f] [16] [30] [31] [30] [32] [30] [33] [30] [34] [30] [35] [30] [36] [30] [37] [30] [38] [30] [39] [30] [41] [30] [42] 
[90] [00] 
SELECT GET END dd
#######################################################
70:模板
5f20:持卡人姓名:FULL FUNCTIONAL
57: 二磁軌等價資料(包括主賬戶 分隔符 失效日期 服務碼 PIN驗證域 自定義資料 如果不是偶數,補充F)
9F1F: 磁軌一自定義資料


b2############################################
[IC LEN : 5]
[00] [b2] [01] [14] [00] SELECT SEND END dd
#######################################################


asd#######################################################
[GET LEN : 18]
[70] [0e] 
[5a] [08] [62] [28] [00] [01] [00] [00] [11] [17] 
[5f] [34] [01] [01] 
[90] [00] 
SELECT GET END dd
#######################################################
5a:應用主賬號(PAN)
5F34: 應用主賬號(應用PAN的序列號)


b2############################################
[IC LEN : 5]
[00] [b2] [02] [14] [00] SELECT SEND END dd
#######################################################


asd#######################################################
[GET LEN : 89]
[70] [55] 
[8c] [1d] [9f] [34] [03] [9f] [02] [06] [9f] [03] [06] [9f] [1a] [02] [95] [05] [9b] [02] [5f] [2a] [02] [9a] [03] [9f] [21] [03] [9c] [01] [9f] [37] [04] 
[8d] [1c] [8a] [02] [9f] [02] [06] [9f] [03] [06] [9f] [1a] [02] [95] [05] [9b] [02] [5f] [2a] [02] [9a] [03] [9f] [21] [03] [9c] [01] [9f] [37] [04] 
[9f] [0e] [05] [00] [00] [00] [00] [00] 
[9f] [0f] [05] [00] [00] [00] [00] [00] 
[9f] [0d] [05] [00] [00] [00] [00] [00] 
[90] [00] SELECT GET END dd
#######################################################
8C: 卡片風險管理資料物件列表1 CDOL1
8d: 卡片風險管理資料物件列表2 CDOL2
9F0E: 髮卡行行為程式碼-拒絕
9F0F: 髮卡行行為程式碼-聯機
9F0D: 髮卡行行為程式碼-預設


b2############################################
[IC LEN : 5]
[00] [b2] [03] [14] [00] SELECT SEND END dd
#######################################################


asd#######################################################
[GET LEN : 53]
[70] [31] 
[5f] [25] [03] [95] [07] [01] 
[5f] [24] [03] [10] [12] [31] 
[5f] [28] [02] [01] [56] 
[9f] [07] [02] [ff] [c0] 
[9f] [08] [02] [00] [8c] 
[8e] [0a] [00] [00] [00] [00] [00] [00] [00] [00] [1f] [00] 
[5f] [30] [02] [02] [01] 
[9f] [42] [02] [01] [56] 
[90] [00] SELECT GET END dd
#######################################################
5F25: 應用生效日期
5F24: 應用失效日期
5F28: 髮卡行國家程式碼
9F07: 應用用途控制
9f08:應用版本號
8e:持卡人驗證方法
5F30: 服務碼
9F42:應用貨幣程式碼


b2############################################
[IC LEN : 5]
[00] [b2] [04] [14] [00] SELECT SEND END dd
#######################################################


asd#######################################################
[GET LEN : 13]
[70] [09] 
[9f] [74] [06] [45] [43] [43] [31] [31] [31] 
[90] [00] SELECT GET END dd
#######################################################
9F74:電子現金髮卡行授權碼 (如果沒有9F74 不能進行電子現金交易)


b2############################################
[IC LEN : 5]
[00] [b2] [01] [1c] [00] SELECT SEND END dd
#######################################################


asd#######################################################
[GET LEN : 139]
[70] [81] 
[86] 
[8f] [01] [80] 
[90] [81] 
[80] [22] [91] [03] [a5] [e3] [12] [0f] [2d] [28] [62] [09] [11] [76] [aa] [2b] [d4] [e2] [4d] [69] [e7] [ee] [f7] [b9] [19] [5c] [91] [ea] [00] [88] [ae] [cf] [f4] [7e] [df] [a0] [be] [ef] [7c] [39] [1d] [f3] [b0] [5f] [71] [7d] [cc] [06] [ff] [c8] [ee] [ff] [90] [ba] [14] [21] [2b] [8a] [52] [ad] [48] [b3] [32] [77] [b2] [e2] [30] [d4] [0b] [3e] [76] [dc] [59] [77] [89] [26] [f1] [d8] [73] [9e] [10] [6c] [d7] [41] [de] [06] [a7] [42] [3d] [fb] [a2] [5e] [02] [f1] [2e] [54] [3d] [13] [d1] [b4] [71] [80] [65] [26] [02] [49] [81] [b7] [d2] [6b] [4b] [f6] [e5] [55] [86] [04] [cc] [c2] [89] [f5] [9e] [8a] [80] [2f] [45] [fb] [3d] [9e] [67] 
[90] [00] SELECT GET END dd
#######################################################
8F: 公鑰索引
90:髮卡行公鑰證書--用於離線資料認證


b2############################################
[IC LEN : 5]
[00] [b2] [02] [1c] [00] SELECT SEND END dd
#######################################################


asd#######################################################
[GET LEN : 46]
[70] [2a] 
[9f] [32] [01] [03] 
[92] [24] [8b] [64] [3d] [1e] [af] [2e] [a7] [84] [ac] [20] [53] [03] [c9] [0e] [74] [5e] [a2] [ef] [a5] [cb] [f0] [2c] [c4] [7d] [47] [83] [3b] [b7] [b2] [7e] [cc] [69] [62] [38] [5a] [4b]
[90] [00] SELECT GET END dd
#######################################################
9F32: 髮卡行公鑰指數
92:髮卡行公鑰餘數


b2############################################
[IC LEN : 5]
[00] [b2] [03] [1c] [00] SELECT SEND END dd
#######################################################


asd#######################################################
[GET LEN : 136]
[70] [81] 
[83] 
[93] [81] 
[80] [33] [5d] [0c] [c2] [4c] [19] [70] [a2] [69] [bc] [a7] [9b] [d9] [2c] [ad] [12] [68] [35] [9d] [10] [5f] [af] [a1] [d0] [c5] [29] [46] [f3] [64] [5f] [bc] [d4] [6a] [45] [e6] [23] [a4] [37] [f6] [1e] [d7] [b4] [5d] [8f] [32] [42] [76] [7e] [69] [53] [4d] [ee] [7b] [a0] [35] [cd] [c0] [64] [9e] [14] [95] [cf] [7a] [13] [89] [03] [ae] [4f] [28] [05] [e5] [18] [b1] [12] [31] [88] [ed] [cc] [74] [52] [42] [e5] [f4] [c5] [2e] [e9] [34] [d9] [57] [df] [0d] [79] [e1] [4c] [c6] [12] [62] [7c] [ab] [bd] [f5] [fd] [1b] [a1] [a5] [dd] [23] [4e] [0e] [54] [0b] [59] [74] [91] [dd] [b5] [cb] [77] [50] [85] [61] [0d] [75] [83] [77] [a7] [fe] [c3] 
[90] [00] SELECT GET END dd
#######################################################
93: 簽名的靜態應用資料-SDA


檔案中的記錄已經讀取完畢


POS已經檢查可以做電子現金交易,讀取可用餘額值:9F79
9F4F############################################
[IC LEN : 5]
[80] [ca] [9f] [79] [00] SELECT SEND END EE
#######################################################
#######################################################
[GET LEN : 11]
[9f] [79] [06] [00] [00] [00] [01] [00] [00] [90] [00] SELECT GET END EE
#######################################################


POS已經檢查可以做電子現金交易,讀取重置閥值:9F6D
9F4F############################################
[IC LEN : 5]
[80] [ca] [9f] [6d] [00] SELECT SEND END EE
#######################################################
#######################################################
[GET LEN : 11]
[9f] [6d] [06] [00] [00] [00] [00] [15] [00] [90] [00] SELECT GET END EE
#######################################################
如果可用餘額減去授權金額,小於重置閥值,POS將強制聯機,需要使用者輸入後臺賬戶。


至此,獲取隨機數,進行離線資料認證(SDA/DDA),獲取卡號資訊,進行使用控制,失效日期檢查,生效日期檢查,執行CVM,進行終端風險管理,卡片行為分析,以及各種牛逼檢查。


(5):Generate AC(獲取應用密文)80 AE xx(控制引數) 00 
AE############################################
[IC LEN : 43]
[80] [ae] [40] [00] 
[25] 
[3f] [00] [01] 
[00] [00] [00] [00] [00] [09] 
[00] [00] [00] [00] [00] [00] 
[01] [56] 
[00] [00] [80] [00] [00] [c0] [00] 
[01] [56] 
[10] [04] [10] [20] [19] [02] [00] 
[b8] [4f] [ba] [07] 
[00] 
SELECT SEND END oo
#######################################################
控制引數 40: bit8,bit7 :00=AAC--拒絕
                           01=TC--離線
                           10=ARQC--聯機
                           11=RFU
生成密文的資料來源:第五部分附錄D: 授權金額
#######################################################
[GET LEN : 34]
[80] [1e] 
[40] 
[00] [01] 
[df] [db] [ca] [78] [4f] [f1] [54] [66] 
[07] --長度
[01] --分散金鑰索引
[01] --密文版本號
[03] [94] [00] [00] --卡片驗證結果CVR
[01] --演算法標識
[0a] [01] [00] [00] [00] [08] [00] [11] [22] [33] [44] --自定義資料
[90] [00] 
SELECT GETOUT OF PAPER. END oo
#######################################OUT OF PAPER.################
80: 模板
此模板的響應資料為: 密文資訊資料(L:1) + 應用交易計數器(L:2) + 應用密文(L:8) + 髮卡行應用資料


交易結束