PBOC/EMV之持卡人驗證
文章出處:http://www.luckydriving.com 作者: 人氣: 發(fā)表時間:2012年05月27日
盡管PBOC基本是中文版的EMV, 但還是需要根據國情做一些適當的差異化處理. 這一點在持卡人認證方面有很明顯的體現.EMV支持脫機密文PIN,PBOC不支持. 但PBOC支持身份證件驗證,EMV不支持. 身份證件驗證是根據國情增加的,誰讓咱們國家證多呀.
持卡人認證并不是必備的EMV流程, 終端是否應該執(zhí)行持卡人認證, 決定因素在兩點. 一是AIP表明是否支持, 二是在讀數據階段,卡片是否返回CVM list.
PBOC 支持的CVM如下:
[plain]- 脫機明文PIN驗證;
- 聯(lián)機PIN驗證;
- 簽名;
- CVM失?。?
- 無需CVM;
- 簽名與脫機明文PIN驗證組合;
- 身份證件驗證。
EMV 支持的CVM如下:
[plain]- 脫機明文PIN驗證;
- 聯(lián)機PIN驗證;
- 簽名;
- CVM失??;
- 無需CVM;
- 簽名與脫機明文PIN驗證組合;
- 脫機密文PIN驗證。
持卡人認證在EMV中叫CVM(cardholder verification method), 在一筆交易中,CVM可以有多個, 所以就有了CVM List的概念.
一個CVM包括以下幾項內容:
金額X
金額Y
CVM 代碼 指出如果這個CVM 失敗,是執(zhí)行下一CVM 還是認為CVM 失敗
CVM 類型 (就是上面列出的那些方法)
CVM 條件 表示在什么條件是才用該方法,有以下幾個:
[plain]- 0 總是執(zhí)行
- 1 如果是現金或返現交易
- 2 如果不是現金或返現交易
- 3 如果終端支持此CVM
- 4 如果交易金額小于金額X
- 5 如果交易金額大于金額X
- 6 如果交易金額小于金額Y
- 7 如果交易金額大于金額Y
說著太抽象,舉個例子:
[plain]- * 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個字節(jié). 前四個字節(jié)是金額X, 再往后四個字節(jié)是金額Y,
04 同時表示如果此CVM失敗,則持卡人驗證失敗,而且驗證方法為脫機加密PIN.
最后一個字節(jié)00表示”總是”,即這個方法是總是要執(zhí)行的.
當然CVM list的長度并不局限于10個字節(jié), 它的長度準備的應該表示為8+2*n(n為正整數). 終端應該按照順序讀取CVM list,并使用滿足條件的第一個方法,如果某個方法不可用,應繼續(xù)遍歷其它方法, 如果所有方法都不可用,則持卡人驗證失敗.
在所有的持卡人驗證方法中, 脫機加密PIN應該是最復雜的一個, 這里詳細介紹一下它的原理及流程.
脫機加密PIN,簡單來說, 原理如下:
終端從卡片中獲取PIN加密公鑰證書(可在read data階段讀取),從證書中恢復PIN加密公鑰. 當用戶輸完PIN時, 終端用此公鑰加密該PIN,然后能過指令把加密數據傳給卡片,卡片收到數據后,先用存在自身的PIN加密私鑰解密,然后再驗證該PIN的正確性.
詳細的步驟如下:
[plain]- 1 終端把用戶輸入的明文PIN按照一定的格式補位對齊, 然后用get challenge命令從卡片中取一個8字節(jié)的隨機數.
- 2 終端自己產生一組長度為N-17的隨機數(N為PIN加密公鑰的長度), 然后把補位后的PIN,卡片中取的隨機數以及終端產生的隨機數拼接在一起, 與PIN加密公鑰做RSA運算.
- 3 把上一步運算的結果通過verify命令發(fā)給IC卡.
- 4 卡片用PIN加密私鑰解密數據, 首先檢查解出來的8字節(jié)隨機數是否與自己產生的一致,然后卡片檢查恢復的數據頭字節(jié)是否有效, 最后一步是驗證PIN是否合法. 只有所有的條件都滿足,脫機加密PIN才算成功.