1. 程式人生 > >EMV技術學習和研究(五)離線資料認證之DDA

EMV技術學習和研究(五)離線資料認證之DDA

轉載請註明出處

作者:小旭

有了前面對SDA的熟悉,接下來再研究DDA就會感覺比較輕鬆一點了。

用於動態資料認證的資料和SDA部分所描述的一樣,也是基於SFI的來組織的。

特別說明一下:之前有一個地方一直是我理解上的一個誤區,特地說明出來和大家分享一下,關於9F4A靜態資料認證標籤列表這個要素,從字面意思看應該是隻有在SDA時才會有用,但是實際情況不是,雖然這個要素起了這麼一個名字,但是在DDA當中也是會存在的,而DDA中主要用這個來做髮卡行公鑰恢復和IC卡公鑰恢復,所以這個標籤的作用主要是用來組建一組靜態資料用於離線資料認證。切不要以為因為它的名字叫做“靜態資料認證標籤列表”而忽略了在DDA中的應用。

DDA和SDA一樣,首先需要恢復出發卡行公鑰,這個和SDA的步驟一樣,就不討論了。

恢復出發卡行公鑰後,DDA中還需要恢復IC卡公鑰,這個步驟中,和恢復髮卡行公鑰類似, 恢復出IC卡公鑰以後也需要利用恢復後得到的資料再加上用於離線資料認證的資料(SFI那邊獲得的)進行HASH值的計算,計算結果與恢復出的結果一致,則恢復出的IC卡公鑰合法可用。

前面的內容SDA和DDA大同小異,沒什麼差別,但是DDA從恢復完IC卡公鑰後和SDA就有很大區別了,下面我們一步一步討論。

第一步,動態簽名的生成

讀記錄的時候,需要一個關鍵資料DDOL(9F49),這個資料是卡片告訴終端(如果卡片沒有返回,終端也需要有預設值,如果都沒有則交易終止;如果DDOL中不含有9F37不可預知數,則交易終止)卡片需要終端的哪些資料來做動態簽名。

終端組織好DDOL的資料之後,通過內部認證命令將資料提供給卡片,卡片會返回簽名後的動態資料。

舉個例子

send:10
00 88 00 00 04 55 7B D7 85 00 

rec:150
80 81 90 4D 68 4E EC 02 08 57 2A FA 62 66 79 
11 9E 79 39 07 87 09 AE D6 C5 B4 21 23 88 5E 93 
B1 BE A8 C0 73 75 35 0C B9 21 78 00 EF 58 5B 25 
D4 E9 56 A8 D4 63 F7 C3 8B C1 4A 62 1E 77 C5 2C 
0B 85 09 B0 FA 46 21 3C C5 A0 BC A6 F1 D7 04 F4 
83 78 27 FF 66 DD 7A AF 56 69 B3 7A 07 89 0E 2A 
AF 4E E2 92 52 D4 26 F6 02 8D DC 10 1C 7B 06 04 
F7 12 02 41 40 FC 0F 2A 48 BF A5 D6 2A 43 AF D6 
3C C0 3B 3E 3B 05 BA F4 E0 2D 65 2F D4 C5 CC E7 
B5 D2 7D D5 90 00 
特別說明:之前有一位入行有幾年的哥們問我一個問題,為什麼卡片返回資料的TLV中T是80,L應該是90,為什麼多了一個81?
其實建議大家瞭解下什麼叫做EMV規範的TLV格式,並不僅僅是一個T+L+V,對於T和L都有一個規範來約束。

這個例項中DDOL只有一個數據不可預知數,所以內部認證指令,只是傳送了四個位元組55 7B D7 85。

卡片返回的資料時簽名後的動態認證資料(tag為80時和tag為77時不一樣的處理,與GPO是返回資料的處理類似),需要終端再利用IC卡公鑰進行還原。還原後的資料中會有HASH。

然後終端利用還原後得到的資料,再加上DDOL構成一個規範要求的資料串,然後在做SHA1運算獲得HASH值,對比

卡片返回的hash值和終端計算的是否一致,如果一致,證明DDA成功,再將HASH值儲存到9F4C,則DDA已經結束了。

從分析來看,DDA其實是包含了SDA的過程,並且有了內部認證的處理,使得其安全性大於SDA,所以現在目前國內發行的卡基本上都是採用DDA作為離線資料認證方式。

外面下大雨,沒心情睡覺,就多寫點閒話了,沒時間的朋友,可以不用往下看了。

其實EMV和PBOC的東西並沒有那麼複雜,很多時候可能很多人並沒有沉下心來去仔細看,我可能比較幸運,有機會從事相關開發,並且之前和現在也有一批優秀的同事,能夠相互交流,互相溝通,所以目前對EMV和PBOC也算是比較熟悉,希望不懂EMV和PBOC的朋友,能夠耐住性子慢慢看,多看幾遍規範,再試著分析每一步的資料,就能夠明白了。

比如恢復髮卡行公鑰這個處理,只要emv核心允許,可以增加更多的除錯資訊,幾乎可以把每一個步驟資料的變化都分析出來,再看看文件就可以對整個流程瞭如指掌。我本來想把之前我積累的一些資料分享給大家,後來考慮到因為保密,所以還是取消了這個想法,畢竟通過資料可以看出程式碼的優劣和流程。後續,有時間我會重新一套EMV核心程式,有機會取到資料可以分享給大家。