離線資料認證的方式有:sda、dda、cda三種。最常用的的就是sda、dda,所以先討論研究這兩個認證方式,cda放到後面。
終端究竟採用什麼方式做離線資料認證,取決於兩個要素aip和終端效能。
讀完記錄結束以後,將會有四個要素伴隨ic卡交易的整個流程,aip、終端效能(接觸式9f33,q是9f66)、tvr、tsi。
aip是gpo時候卡片返回的,之前也提到過,表明卡片的特性。終端效能通常是終端根據交易的特性來設定乙個預設值(目前看到的改變這個值的地方,主要是根據aid引數裡面下發的是否支援聯機pin要素,要改變終端交易效能),tvr表明終端驗證結果,tsi表明交易狀態資訊。
交易過程中,每往下走一步,都要首先分析aip和終端效能的各個位的情況,而交易每執行完一步都要對tvr和tsi進行置位或者清零。
簡單說明一下:應用開發工程師,分析ic卡失敗交易的第一步應該是看tvr和tsi,看看終端做過什麼,終端哪一步失敗了,然後在分析某個步驟失敗的原因。
上面的分析確定了終端離線資料認證的方式(三種方式優先順序不同,但是最終只會選定一種優先順序最高的),下面我們研究一下離線資料認證的資料**、離線資料認證的方式和演算法,以及離線資料認證的一些特性。
一、資料**
文件上對於參與離線資料認證的sfi有明確分類,分為sfi從1-10以及11-30兩類。
1-10的sfi在參與離線資料認證的時候,其檔案標誌「70」和記錄長度不參與離線資料認證,而sfi為11-30的,則70和記錄長度也要參與離線資料認證。
特別說明: 這裡通過afl的sfi所組織獲得的用於簽名的離線資料,將會在後面多個地方用到,比如恢**卡行公鑰,比如恢復ic卡公鑰等等,後面還有別的資料,所以特別描述一下,對這個資料加深印象。
首先插入乙個交易的afl返回值,這塊資料在gpo的時候已經用於舉例,現在單獨把afl的內容提取出來。
上述6行資料就是gpo之後返回的afl,為了方便說,我把afl的解釋也從文件摘出來,我們取一條例項來說明,比如08 01 02 00,這一組讀記錄的結果中,70和記錄長度都不用參與離線資料認證,10 05 06 01 以及 10 08 08 00 也是一樣的。
然後再看除了10 05 06 01之外,其餘的五組最後乙個位元組均為00,對比位元組4我們看,就是表示用於離線資料認證的連續記錄個數為0,也就是說這五組讀記錄的結果中沒有資料是用於離線資料認證的。
經過上述分析應該可以很清楚的看到,用於離線資料認證的資料應該怎麼取了。
二、認證方式
sda和dda資料認證方式不一樣,先看sda如何認證。
sda分為三步,第一步獲取認證中心公鑰,第二部恢**卡行公鑰,第三部進行資料認證。
第二步恢**卡行公鑰,這個步驟比較複雜一點,接下來慢慢看。
首先,讀記錄的時候已經獲取到發卡行90(簽名處理過的發卡行公鑰),92(發卡行公鑰餘項),9f32,所以這個時候就可以使用ca公鑰利用rsa演算法對90資料進行解密。
解密後的資料為乙個比較複雜的資料格式,需要對資料的頭尾,以及中間資料做判斷,其中對後續才做有用的資料是「雜湊值」,執行完這一步,終端已經獲取到了卡片計算出的雜湊值,卡片計算雜湊值的方法和終端一樣,所以這個位置,只要知道這裡獲取到了發卡行公鑰或者發卡行公鑰最左邊的部分以及獲取到了雜湊值就行了。
我們已經獲取到了卡片返回的雜湊值,終端自然也需要再計算乙個雜湊值出來。
計算方法如下,首先需要組織一長串資料,格式為:證書格式 + 發卡行標識(主賬號最左面的3 -8 個數字) +證書失效日期 +證書序列號 +雜湊演算法標識 +發卡行公鑰演算法標識 +發卡行公鑰長度 +發卡行公鑰指數長度 +發卡行公鑰模數的完整資料 128 個位元組+發卡行公鑰指數
特別說明:發卡行公鑰模數的完整資料一部分是在還原發行卡公鑰資料過程中獲取的,還有另外一部分是在卡片讀記錄的時候通過92tag獲取到的。除此之外,其他資料都為卡片返回原始資料,或者是一些固定寫死的值。
組織好資料之後,我們可以進行sha1雜湊值的計算,計算出的雜湊值將和我們在恢**卡行公鑰中獲取到的雜湊值一樣,到此,恢**卡行公鑰的步驟已經完成完成,其中任何一部失敗都會認為是靜態資料認證失敗。
這個地方之所以做乙個雜湊,就是為了判斷卡片提供出來的發卡行公鑰是不是真的由ca簽發的。
特別說明,步驟一和步驟二在dda過程中也是要用到的,一模一樣的。
第三步,驗證簽名資料
第三步的過程其實和第二步很類似的,第二步是用認證中心公鑰來恢**卡行公鑰,第三步自然就是用發卡行公鑰來恢復簽名的靜態資料,恢復出簽名資料中有一部分是需要在終端計算hash值中使用的
(將表5中的第二個到第五個資料元素(即從簽名資料格式直到填充位元組)從左到右連線,再把本規範第三冊的第ii 部分中指明的需認證的靜態資料加在後面。如果靜態資料認證標籤列表存在,並且其包含非『82』的標籤,那麼靜態資料認證失敗…………摘自emv2000 book2)
組織簽名資料首先按照之前描述的sfi的規則獲取離線認證資料,還有個特別的地方,如果存在9f4a的話,需要將aip作為簽名資料,不需要包含tag和l,只要v就可以。最後對組織好的資料,進行sha1運算,獲得hash值,然後和恢復簽名資料時獲取的雜湊值比較,如果相等則sda成功,然後將計算出的hash儲存在9f45的標籤中。sda流程就算是結束了。
其實在整個sda過程中用到了很多資料值,乙個優秀的emv核心應該是在sda之前就選判斷上述所需的資料是否存在,如果不存在的話,則應該直接終止交易,提高終端軟體的效能。
EMV技術學習和研究(一)開篇
在這個行業也3年多了,一直想寫寫關於emv和pboc的內容,但是總覺得自己懂得還不夠,對emv和pboc的理解還不夠深入。但是後來想想,如果還不開始自己寫一點東西的話,可能這個事情也就永遠的擱淺了,所以最後還是決定帶著學習的態度去完成blog。接下來的幾篇blog更多的是描述自己和同事以及朋友對em...
EMV技術學習和研究 持卡人驗證
持卡人認證部分,emv和pboc是有區別的,emv有離線加密pin認證,pboc沒有 pboc有持卡人身份證件驗證,但是emv沒有。持卡人驗證主要基於兩個資料要素,aip和cvm。aip已經討論過很多次,現在主要看一下cvm。乙個cvm含有2個主要要素 1.兩個金額,x金額和y金額。2.持卡人驗證方...
EMV規範學習與研究(四) 讀應用資料
讀 應用資料的目的是為了從卡片中獲取後續交易需要的 資料,用以完成交易中的各種功能。終端使用讀記錄命令 read record 讀出在應用檔案 定位器 afl 中 標記的檔案與記錄,並在讀記錄命令中使用 sfi 來標記檔案。如果乙個錯誤阻止終端從 ic 卡讀資料,交易將被 終止。afl 是標記在交易...