轉載請註明出處
作者:小馬
看這篇文章之前,建議瞭解非對稱式加密解密的工作原理.
SDA的意思是待用資料認證,首先如何理解這個靜態。參與認證的都是靜態卡片資料,這些資料在卡片個人化後就不會在改變,比如卡號. 它的目的是確認存放在IC卡中的由應用檔案定位器(AFL)和可選的待用資料認證標籤列表所標識的,關鍵的待用資料的合法性,從而保證IC卡中的發卡行資料在個人化以後沒有被非法篡改.
既然是認證,必然涉及演算法,SDA(包括之後的DDA,CDA)用的是RSA演算法,這是一種典型的以非對稱式加密為理論基礎的演算法.
廢話不多講, 詳細的步驟如下:
第一步,
CA(認證中心)公開金鑰+發卡行密鑰憑證+RSA演算法 = 發卡行公開金鑰
CA公開金鑰可以手動下裝到終端,也可以聯機從後台下載. 具體的內容通常包括公開金鑰模,模長度,公開金鑰指數,指數長度以及有效期間等資訊. 這些資訊牽扯到演算法本身的用途,不細說.
發卡行密鑰憑證是簽了名的發卡行公開金鑰,是終端在讀資料階段從卡片中讀出來的, 其實是一串密文資料, 比如下面這樣:
* Tag 90 Issuer Public Key Certificate*- Len 80*- Value AA 7B 0B F4 AA E8 B7 C2 EC C4 85AC FA 57 77 0E * 50BB 92 07 23 3E 42 78 65 47 17 E4 70 69 19 81 * C187 F8 1F FC 3B 90 89 50 63 EF 98 C0 D8 6B 52 * 97B6 55 39 93 09 E6 69 9F EE 22 70 B0 F3 43 1B * 5ABA D7 E5 16 26 19 26 C3 5B F6 BB FE FB 49 36 * 6EBE 96 DC 51 0E 9C BD 91 53 37 E8 18 8D 51 7D * 15DC F9 02 98 C4 02 33 EE EA FD 5A 94 59 F5 D3 * 410E 6B 89 B4 4D F6 E8 18 FA 35 94 EF 93 55 34
CA公開金鑰從發卡行密鑰憑證中恢複發卡行公開金鑰用的演算法是RSA演算法.
第二步,
發卡行公開金鑰+簽名的靜態應用資料+RSA演算法 = 資料A
資料A主要包括兩部分重要的資料, 一部分我把它叫做資料A1, 另外一部分叫雜湊結果A.
第三步,
A1+終端在讀資料階段讀到的需要參與認證的待用資料+Hash演算法 = 雜湊結果B
A1和終端在讀資料階段讀到的需要參與認證的待用資料一起, 調用雜湊演算法,最終計算出一個雜湊結果B. 資料階段讀到的需要參與認證的待用資料,是AFL中的位元組4:該位元組指明從第1 個記錄開始的用於離線資料認證的連續記錄數.
AFL的結構如下:
位元組1:短檔案標識符
位元組2:檔案中要讀取的第1個記錄的記錄號
位元組3:檔案中要讀取的最後一個記錄的記錄號
位元組4:從位元組中的記錄號開始,存放認證用待用資料記錄的個數(值從到位元組-位元組+1的值)
舉例:
* Tag 94 ApplicationFile Locator (AFL)* - Len 0C* - Value 08 01 01 00 10 01 03 01 18 01 04 00
每四位元組為一部分, 10 01 03 01表示在SFI為10的檔案中, 在01到03這些記錄中, 有一個記錄是用於資料認證的.
第四步,
判斷雜湊結果A和雜湊結果B是否相等,如果相等,SDA成功,否則SDA失敗.
上述步驟其實省略了一些資料拼接以及資料起始位元組的合法性判斷等操作,但SDA的核心已非常明確.