1. 程式人生 > >EMV技術學習和研究(九)終端行為分析

EMV技術學習和研究(九)終端行為分析

轉載請註明出處

作者:小旭

這一塊的內容,我覺得文件上講的比較清晰,而且舉例也很好,所以大部分都是拷貝文件的內容過來,一邊看一邊分析文件的含義。

這一部分用到2類比較重要的資料,分別是

髮卡行行為程式碼(IAC ) 髮卡行行為程式碼,來自讀記錄檔案卡片返回

髮卡行行為程式碼有三個資料元,即髮卡行行為程式碼-拒絕、髮卡行行為程式碼-聯機、髮卡行行為程式碼-預設。每個髮卡行行為程式碼由一組與終端驗證結果(TVR)中的位相對應的位

組成

IAC -拒絕位設定為“1”反映了交易被離線拒絕的終端驗證結果條件

IAC -聯機位設定為“1”代表需要聯機授權條件

IAC -預設位設定為“1”是當聯機處理不可行時離線拒絕所需的條件

終端行為程式碼(TAC)  TAC 有三個資料元,它們都是由一系列的位組成的,這些位對應於 TVR 中的資料位。終端行為程式碼來自emv引數下載交易。

TAC-拒絕  收單行設定的能夠導致交易離線拒絕的TVR 條件位

TAC-聯機  收單行設定的能夠導致交易聯機的TVR 條件位

TAC-預設 收單行設定的在交易聯機無法進行的情況下能夠導致離線拒絕的TVR 條件位

這6個程式碼的檢視方法和TVR檢視方式一樣,使用時也是配合TVR進行使用。

檢查過程完全由終端利用先前從卡片獲取的IAC資料和終端儲存的TAC資料進行,無需與其它裝置進行互動處理。
在處理過程中,終端比較IAC和TAC中與終端驗證結果(TVR)對應的位。如果TVR和IAC或TAC中相應的位都被設定為“1”,則採納對應的IAC或TAC。示例如下:

 
終端的處理步驟如下:
步驟 1:終端比較 IAC-拒絕和 TVR。如果不存在 IAC-拒絕,則採用預設值‘0000000000’。如果IAC-拒絕和 TVR 的任何對應位同時設為‘1 ’,終端必須:
——   把授權響應碼置為‘Z1’(離線拒絕);
——   把 GENERATE AC(產生應用密文)命令的 P1 引數設為請求應用認證密文(AAC);
——   進行請求應用密文步驟。
步驟 2:終端對 TAC-拒絕和 TVR 進行類似的比較。如果不存在 TAC-拒絕,則採用預設值‘0000000000’。如果 TAC-拒絕和 TVR 的任何對應位同時設為‘1 ’,終端必須採取與 IAC-拒絕相同的處理。

步驟 3:如果終端具有聯機處理能力(僅聯機的終端除外),則它應該使用 IAC-聯機和TAC-聯機與TVR 比較。如果 IAC-聯機不存在,則使用預設值‘FFFFFFFFFF’,如果 TAC-聯機不存在,則使用預設值‘0000000000’。如果 IAC-聯機和 TVR 的任何對應位同時置為‘1’,則終端:
——  把產生應用密文(GENERATE AC)命令的 P1 引數設為授權請求密文(ARQC),以進行聯機授權請求;
——  進行生成應用密文步驟。
對於僅聯機的終端,如果在步驟 1 和步驟 2 中未決定離線拒絕,則終端不必進行 IAC-聯機和 TAC-聯機與 TVR 的比較,而直接按照 IAC-聯機或 TAC-聯機和 TVR 的任何對應位同時置為‘1’的情況來處理,通過請求聯機來繼續進行交易。
步驟 4:如果終端是僅離線終端或者當有聯機處理能力的終端出於某種原因不能聯機時,則使用 IAC——預設和 TAC——預設與 TVR 比較。如果沒有 IAC-預設,則使用預設值‘FFFFFFFFFF’,如果 TAC——預設不存在,則使用預設值‘0000000000’。如果比較結果的任何對應位同時為‘1’,則終端:
——  把授權響應碼置為‘Z3’(不能聯機,離線拒絕),僅離線終端授權響應碼置為‘Z1’;
——  把產生應用密文(GENERATE AC)命令的的 P1 引數設定為請求 AAC;
——  進行生成應用密文步驟。

對於僅聯機的終端,當無法進行聯機時,它可以選擇正常的處理TAC/IAC-預設,也可以選擇跳過TAC/IAC——預設的處理。對於跳過TAC/IAC——預設處理的終端應該直接按照TAC/IAC——預設與TVR匹配進行處理,並且在第2個GENERATE AC請求AAC。對於正常處理TAC/IAC——預設的終端,應該根據TAC/IAC——預設與TVR匹配的結果生成應用密文,這時僅聯機的終端可能離線完成交易。
步驟 5:如果在以上的比較中沒有出現對應位同時為‘1 ’的情況,則終端:
——  把授權響應碼置為‘Y1’(離線批准);
——  把 GENERATE AC(請求應用密文)命令的 P1 引數設定為請求交易證書(TC);
——  進行請求應用密文步驟。

這裡的GENERATE AC就是我們所說的第一次GAC,如果離線批准了,獲取到的TC值需要在上送交易明細時上送到後臺。如果卡片返回ARQC,那麼在聯機交易結束後,還需要再做第二次GAC,這個內容後續再討論。

上述5個步驟,文件描述也是很清晰了,不需要再做什麼多餘的解釋了。

再列舉一個GAC1指令的例子來看看

GAC1時候指令的資料來源主要是利用卡片返回的CDOL1來組織資料

sned:58
80 AE 40 00 34 00 00 00 00 01 00 00 00 00 00 00 
00 01 56 00 80 00 00 00 01 56 20 11 01 00 55 7B 
D7 85 19 39 29 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 

rec:35
80 1E 40 01 41 D1 F6 B3 7D 6A CA F8 E2 07 02 
01 03 90 00 02 01 0A 01 00 00 09 00 93 3C 7F 1B 
FF 90 00 

接受返回的資料總共是30個,返回資料採用80作為模板(77時需要解析TLV),而是將資料域第一個位元組是9F27,應用密文資訊bit8-bit7,bit6到bit1還需要終端做判斷,終端要根據bit6到bit1對交易的執行做出分析和判斷。當前為40(0100 0000),即當前密文為TC(ARQC的情況和ACC就再看文件了,這裡不描述了)

後面兩個位元組ATC 0140 ,再後面8個位元組為應用密文,即TC值。再後面的是髮卡行應用資料。

處理完GAC1的資料後,終端行為分析就結束了。

如果GAC1過程中,卡片能夠成功返回TC,則離線消費已經成功(目前只考慮了離線資料認證方式為SDA和DDA的情況,CDA的情況比較複雜,後面專門寫一篇作討論),終端後續就要進入報文處理流程。

如果每次離線交易能走完這一步都很開心,因為只要走到這一步,終端就要開始打單了…………