EMV內核使用中的常見問題

  EMV內核在使用上會因爲調用不當引發的許多問題,本文旨在基於內核LOG(也就是與IC卡交互的指令LOG)的基礎上,對一些常見問題做初步的分析與解答,方便不熟悉EMV規範的同窗參考。算法

本文的前提是你已經獲得了一份與IC卡交互的指令LOG,好比服務器

發送:00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00
接收: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 00spa

發送:00 B2 01 0C 00
接收:6A 83ci

1、      下載AID、公鑰、黑名單參數

  AID與公鑰通常是POS機第一次與後臺簽到的時候自動下發的,數量會比較多,若是中途出現失敗,十之八九是通信異常,好比modem、gprs通信斷了等緣由,與EMV內核沒什麼關係。it

2、      選擇PSE

  根據規範,如今終端都要支持目錄選擇方法。若是給IC卡發送第一條的指令不是選擇PSE,也就是table

發送:00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00後臺

       那麼就是終端參數沒設置好。基礎

3、      創建候選應用列表

  若是找不到GPO指令,也就是終端

發送:80 A8 00 00 …….(以80 A8開頭的)下載

       那麼就是終端沒有AID參數,或者終端沒有這張IC卡的AID。

      

  那麼如何知道這張IC卡的AID呢?若是IC卡是支持選擇PSE的話,是能夠知道的,若是不支持就沒法知道。好比

發送:00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00
接收: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

發送:00 B2 01 0C 00
接收:70 2A 61 28 4F 07 A0 00 00 03 33 01 01 50 0B 50 42 4F 43 20 43 72 65 64 69 74 9F 12 0F 43 41 52 44 20 49 4D 41 47 45 20 30 30 33 35 90 00

  查找4F標籤,它的值就是IC卡支持的AID,可能會有多個。

4、      初始化應用

  若是能找到GPO指令,也就是

發送:80 A8 00 00 …….(以80 A8開頭的)

       那麼表示應用已經初始化了,可是GPO命令會把一些數據發給IC卡,好比交易金額、貨幣代碼等等,要確保這些數據與發往服務器的55域數據一致。

       那麼如何解析GPO指令裏的數據呢?先得看它的前一條指令:選擇AID

發送:00 A4 04 00 08 A0 00 00 03 33 01 01 02 00
接收:6F 58 84 08 A0 00 00 03 33 01 01 02 A5 4C 50 0B 50 42 4F 43 20 43 72 65 64 69 74 87 01 01 5F 2D 04 7A 68 65 6E 9F 11 01 01 9F 12 0D 49 43 42 43 20 50 62 6F 63 43 61 72 64 9F 38 0C 9F 7A 01 9F 02 06 5F 2A 02 DF 69 01 BF 0C 0F D1 02 31 32 C2 04 49 43 42 43 9F 4D 02 0B 0A 90 00

       查找9F38標籤,它的值叫PDOL,根據PDOL才能組出GPO的數據。

       假如GPO指令是這樣的

發送:80 A8 00 00 0C 83 0A 00 00 00 00 25 89 63 01 56 00 00

       那麼從第8個字節開始就是根據PDOL組出來的數據,解析以下:

TAG

名稱

長度

9F7A

電子現金終端支持指示器

01

00

9F02

受權金額(數值型)

06

00 00 00 25 89 63

5F2A

交易貨幣代碼

02

01 56

DF69

SM2算法支持指示器

01

00

經常使用的判斷規則是:

標籤9F7A,若是是電子現金消費,則必須爲01

標籤9F02,必須與用戶輸入的交易金額一致

標籤5F2A,國內都是01 56

標籤DF69,支持國密就爲01

5、      讀記錄應用

讀記錄步驟在GPO命令以後,就是一大堆的00 B2開頭的指令,從中查找標籤8C,它的值叫CDOL1,後面判斷的時候要用到

假設CDOL1的值爲9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 9F 21 03 9F 4E 14

6、      生成第一次應用密文GENERATR AC

  查找第一條80 AE開頭的指令,好比

發送:80 AE 80 00 34 00 00 00 25 89 63 00 00 00 00 00 00 01 56 00 80 04 00 00 01 56 13 07 03 00 59 4F 0D E3 19 15 27 53 75 6E 79 61 72 64 20 45 4D 56 20 54 65 73 74 20 6D 65 72 00

       注意第3個字節,若是是電子現金消費則是40,若是是標準借貸記則是80,若是是其它值就說明有錯誤。

       從第6個字節開始就是根據CDOL1組出來的數據,解析以下:

TAG

名稱

長度

9F02

受權金額(數值型)

06

00 00 00 25 89 63

9F03

其餘金額(數值型)

06

00 00 00 00 00 00

9F1A

終端國家代碼

02

01 56

95

終端驗證結果TVR

05

00 80 04 00 00

5F2A

交易貨幣代碼

02

01 56

9A

交易日期

03

13 07 03

9C

交易類型

01

00

9F37

不可預知數

04

59 4F 0D E3

9F21

交易時間

03

19 15 27

9F4E

商戶名稱

14

53 75 6E 79 61 72 64 20 45 4D 56 20 54 65 73 74 20 6D 65 72
Sunyard EMV Test mer

經常使用的判斷規則是:

標籤9F02,必須與用戶輸入的交易金額一致,必須與GPO命令一致

標籤9F03,國內都是6字節00

標籤9F1A,國內都是01 56,不然是奇怪的值就是終端參數沒設置好

標籤95,每一個bit位的說明以下

字節1 bit8 未進行脫機數據認證(標籤9F33錯誤,終端參數沒設置好)
字節1 bit7 脫機靜態數據認證SDA失敗(沒有公鑰)
字節1 bit6 IC卡數據缺失
字節1 bit5 卡片出如今終端異常文件中(黑名單)
字節1 bit4 脫機動態數據認證DDA失敗(沒有公鑰)
字節1 bit3 複合動態數據認證CDA/應用密文生成失敗
字節1 bit2 執行了脫機靜態數據認證SDA(沒有公鑰)
字節2 bit8 IC卡和終端應用版本不一致(AID參數不對)
字節2 bit7 應用已過時(查看終端日期)
字節2 bit6 應用還沒有生效(查看終端日期)
字節2 bit5 卡片不容許所請求的服務
字節2 bit4 新卡
字節3 bit8 持卡人驗證失敗
字節3 bit7 未知的CVM
字節3 bit6 PIN重試次數超限(IC卡脫機PIN被鎖)
字節3 bit5 要求輸入PIN,但密碼鍵盤不存在工做不正常(沒有輸密碼)
字節3 bit4 要求輸入PIN,密碼鍵盤存在,但未輸入PIN(輸入空密碼)
字節3 bit3 輸入聯機PIN
字節4 bit8 交易超過最低限額
字節4 bit7 超過連續脫機交易下限
字節4 bit6 超過連續脫機交易上限
字節4 bit5 交易被隨機選擇聯機處理
字節4 bit4 商戶要求聯機交易
字節5 bit8 使用缺省TDOL
字節5 bit7 髮卡行認證失敗
字節5 bit6 最後一次 GENERATE AC 命令以前腳本處理失敗
字節5 bit5 最後一次 GENERATE AC 命令以後腳本處理失敗
括號裏是可能的錯誤緣由,根據實際95的值比對着查找緣由。

標籤5F2A,國內都是01 56

標籤DF69,支持國密就爲01

標籤9A,格式必須正確

標籤9F21,格式必須正確

 

發送的數據檢查無誤後,還要檢查55域數據是否與上述數據一致,這步相當重要,若是數據不一致後臺就會報做弊卡。

7、      QPBOC相關

若是最後一條命令是GPO命令(就是80 A8開頭的),那麼通常是IC卡餘額不足而轉聯機了。

若是最後一條命令是讀記錄(就是00 B2開頭的),而IC卡的錢被扣了而終端提示交易失敗,基本是沒有公鑰致使的。

相關文章
相關標籤/搜索