轉載請註明出處
作者:小馬
儘管PBOC基本是中文版的EMV, 但還是需要根據國情做一些適當的差異化處理. 這一點在持卡人認證方面有很明顯的體現.EMV支援離線密文PIN,PBOC不支援. 但PBOC支援身份證件驗證,EMV不支援. 身份證件驗證是根據國情增加的,誰讓咱們國家證多呀.
持卡人認證並不是必備的EMV流程, 終端是否應該執行持卡人認證, 決定因素在兩點. 一是AIP表明是否支援, 二是在讀資料階段,卡片是否返回CVM list.
PBOC 支援的CVM如下:
離線明文PIN驗證; 聯機PIN驗證; 簽名; CVM失敗; 無需CVM; 簽名與離線明文PIN驗證組合; 身份證件驗證。
EMV 支援的CVM如下:
離線明文PIN驗證; 聯機PIN驗證; 簽名; CVM失敗; 無需CVM; 簽名與離線明文PIN驗證組合; 離線密文PIN驗證。
持卡人認證在EMV中叫CVM(cardholder verification method), 在一筆交易中,CVM可以有多個, 所以就有了CVM List的概念.
一個CVM包括以下幾項內容:
金額X
金額Y
CVM 代碼 指出如果這個CVM 失敗,是執行下一CVM 還是認為CVM 失敗
CVM 類型 (就是上面列出的那些方法)
CVM 條件 表示在什麼條件是才用該方法,有以下幾個:
0 總是執行1 如果是現金或返現交易2 如果不是現金或返現交易3 如果終端支援此CVM4 如果交易金額小於金額X5 如果交易金額大於金額X6 如果交易金額小於金額Y7 如果交易金額大於金額Y
說著太抽象,舉個例子:
* Tag 8E Cardholder Verification Method (CVM) List*- Len 0A*- Value 00 00 00 00 00 00 00 00 04 00
CVM list的tag是8E, 長度是10個位元組. 前四個位元組是金額X, 再往後四個位元組是金額Y,
04 同時表示如果此CVM失敗,則持卡人驗證失敗,而且驗證方法為離線加密PIN.
最後一個位元組00表示”總是”,即這個方法是總是要執行的.
當然CVM list的長度並不局限於10個位元組, 它的長度準備的應該表示為8+2*n(n為正整數). 終端應該按照順序讀取CVM list,並使用滿足條件的第一個方法,如果某個方法不可用,應繼續遍曆其它方法, 如果所有方法都不可用,則持卡人驗證失敗.
在所有的持卡人驗證方法中, 離線加密PIN應該是最複雜的一個, 這裡詳細介紹一下它的原理及流程.
離線加密PIN,簡單來說, 原理如下:
終端從卡片中擷取PIN加密密鑰憑證(可在read data階段讀取),從認證中恢複PIN加密公開金鑰. 當使用者輸完PIN時, 終端用此公開金鑰加密該PIN,然後能過指令把加密資料傳給卡片,卡片收到資料後,先用存在自身的PIN加密私密金鑰解密,然後再驗證該PIN的正確性.
詳細的步驟如下:
1 終端把使用者輸入的明文PIN按照一定的格式補位對齊, 然後用get challenge命令從卡片中取一個8位元組的隨機數.2 終端自己產生一組長度為N-17的隨機數(N為PIN加密公開金鑰的長度), 然後把補位後的PIN,卡片中取的隨機數以及終端產生的隨機數拼接在一起, 與PIN加密公開金鑰做RSA運算. 3 把上一步運算的結果通過verify命令發給IC卡.4 卡片用PIN加密私密金鑰解密資料, 首先檢查解出來的8位元組隨機數是否與自己產生的一致,然後卡片檢查恢複的資料頭位元組是否有效, 最後一步是驗證PIN是否合法. 只有所有的條件都滿足,離線加密PIN才算成功.