構建IC卡應用系統過程當中,如何定義卡中的數據信息(相對邏輯加密卡)或卡中的應用類型及其數據信息(相對CPU卡)及將數據信息寫入卡中,以便應用於系統中進行交易是一 個重要環節。這一環節在業界一般稱爲卡片我的化。卡片我的化既能夠在專門的設備機器上進行,以便於對大批量的卡片進行我的化;也能夠在PC機上經過鏈接 IC卡讀寫器進行,以便於對小批量的卡片進行個化。無論硬件設備如何,都必須設計一套程序軟件來進行我的化。這個程序軟件一般稱爲髮卡程序。本文討論 CPU卡髮卡程序設計過程當中將會遇到的關鍵技術問題及其解決方法。
CPU卡髮卡大致可分爲三個組成部分:(1)卡結構創建;(2)密鑰寫入;(3)我的化數據寫入。固然,爲確保正確髮卡,程序設計過程當中最好是採用一邊創建卡結構,一邊寫入密鑰和我的化數據。
安全
2髮卡前的準備工做
通常地,卡片供應商提供卡片時,已經對卡片進行過初始化(主要用於對卡片進行測試),亦即卡片上已經創建了主文件(MF)及主密鑰文件(MF下的Keyfile文件),主密鑰文件中也已寫入了初始卡片主控密鑰。
在對CPU卡創建特定的卡結構及寫入密鑰和數據以前,程序設計中的第一步應該對卡片進行外部認證。外部認證所使用的密鑰正是初始卡片主控密鑰。
當完成外部認證後,接下來最好是擦除卡片上已有的卡片結構,而後再開始從新創建卡片結構。
許多髮卡程序在設計過程當中,沒有考慮到擦除卡片上已有的卡片結構,而是在完成外部認證後直接改寫原有卡片的主密鑰文件的卡片主控密鑰。常見問題是因爲原有主密鑰文件建立時的空間大小不夠,而髮卡程序試圖寫入除卡片主控密鑰外還想寫入卡片維護密鑰時,勢必形成寫入空間不夠而致使寫入不成功。
3密鑰文件的創建與密鑰值的寫入
爲了獨立地管理一張卡上不一樣應用之間的安全問題,CPU卡中的每個應用放在一個單獨的ADF中。各個ADF及其下屬各文件數據的訪問(包括改寫、讀取)只能應用該ADF下的密鑰文件中的密鑰數值。爲討論方便,此處假設只有一個ADF。
用戶卡結構中主要存在如下兩個密鑰文件及相應的幾個密鑰:
(1)MF下的密鑰文件(簡稱KMF),其裝載的密鑰是卡片主控密鑰(簡稱CCK,如下同);
(2)ADF下的密鑰文件(簡稱KADF),其裝載的密鑰有應用主控密鑰(簡稱ACK,如下同),應用維護密鑰(簡稱AMK),及其它應用密鑰;
(3)其它密鑰,如口令密鑰PIN,口令解鎖密鑰,DES運算密鑰等等。
3.1密鑰文件的建立
各密鑰文件在創建時必須慎重考慮如下兩個要素:
(1)文件大小的分配;
(2)有關權限和密鑰使用後的後續狀態值的規定。
密鑰文件的大小分配取決於要裝載的密鑰個數。每一個密鑰均爲一條可變長的記錄,每條記錄的長度爲密鑰數據長度加7。以此能夠計算密鑰文件的大小。在髮卡程序設計過程當中,經常會出現由於密鑰文件的大小分配不夠而形成後面的密鑰沒法寫入。
密鑰文件創建過程當中的有關權限和密鑰使用後的後續狀態值的規定一方面起到對密鑰文件自己的安全維護做用,另外一方面也將決定對卡片操做的流程。顯然這個要素相當重要。
3.2各密鑰值的寫入
關於密鑰值的寫入,關鍵問題是要弄清楚該密鑰要求以何種形式寫入。一般有如下幾種形式:
(1)以明文形式寫入(常見的如口令密鑰PIN的寫入);
(2)以帶線路保護的形式寫入(要求計算MAC);
(3)以對密鑰值進行加密後的密文形式寫入(要求計算DES或3DES);
(4)以對密鑰值進行加密並帶線路保護的形式寫入(要求計算DES&MAC)。
若是密鑰值的寫入要求加密並帶線路保護,則密鑰值寫入時須對該密鑰值進行DES&MAC計算後以密文形式寫入(固然卡片操做系統內部會自動將其解釋成明文),帶線路保護的目的是防止密鑰值在寫入的過程當中被劫取。若是不要求帶線路保護寫入,可直接以明文方式寫入。
在髮卡程序設計過程當中,尤爲要注意卡片主控密鑰、應用主控密鑰、應用維護密鑰及其它密鑰之間的關係及其寫入要求。
3.2.1卡片主控密鑰與應用主控密鑰
卡片主控密鑰是對整個卡片的訪問起控制做用的密鑰,由卡片生產商寫入,由髮卡方替換爲髮卡方的卡片主控密鑰。髮卡程序設計過程當中,在對卡片進行任何操做以前,必須使用卡片主控密鑰做外部認證,
應用主控密鑰是應用的控制密鑰,在卡片主控密鑰控制下寫入。通常地,髮卡方替換卡片的主控密鑰以後,爲驗證替換工做正確,再用新的卡片主控密鑰做一次外部認證。測試