CPU卡發(fā)卡過(guò)程中應當注意的問(wèn)題
文章出處:http://psychicreadingswithdeb.com 作者: 人氣: 發(fā)表時(shí)間:2012年02月21日
1摘要
構建IC卡應用系統過(guò)程中,如何定義卡中的數據信息(相對邏輯加密卡)或卡中的應用類(lèi)型及其數據信息(相對CPU卡)及將數據信息寫(xiě)入卡中,以便應用于系統中進(jìn)行交易是一個(gè)重要環(huán)節。這一環(huán)節在業(yè)界通常稱(chēng)為卡片個(gè)人化??ㄆ瑐€(gè)人化既可以在專(zhuān)門(mén)的設備機器上進(jìn)行,以便于對大批量的CPU卡進(jìn)行個(gè)人化;也可以在PC機上通過(guò)連接IC卡讀寫(xiě)器進(jìn)行,以便于對小批量的卡片進(jìn)行個(gè)化。不管硬件設備如何,都必須設計一套程序軟件來(lái)進(jìn)行個(gè)人化。這個(gè)程序軟件通常稱(chēng)為發(fā)卡程序。本文討論CPU卡發(fā)卡程序設計過(guò)程中將會(huì )遇到的關(guān)鍵技術(shù)問(wèn)題及其解決方法?! ?/p>
CPU卡發(fā)卡大體可分為三個(gè)組成部分:(1)卡結構建立;(2)密鑰寫(xiě)入;(3)個(gè)人化數據寫(xiě)入。當然,為確保正確發(fā)卡,程序設計過(guò)程中最好是采用一邊建立卡結構,一邊寫(xiě)入密鑰和個(gè)人化數據。
2發(fā)卡前的準備工作
一般地,CPU卡供應商提供CPU卡時(shí),已經(jīng)對CPU卡進(jìn)行過(guò)初始化(主要用于對CPU卡進(jìn)行測試),亦即CPU卡上已經(jīng)建立了主文件(MF)及主密鑰文件(MF下的Keyfile文件),主密鑰文件中也已寫(xiě)入了初始CPU卡主控密鑰?! ?/p>
在對CPU卡建立特定的卡結構及寫(xiě)入密鑰和數據之前,程序設計中的第一步應該對CPU卡進(jìn)行外部認證。外部認證所使用的密鑰正是初始CPU卡主控密鑰?! ?/p>
當完成外部認證后,接下來(lái)最好是擦除CPU卡上已有的CPU卡結構,然后再開(kāi)始重新建立CPU卡結構。
許多發(fā)卡程序在設計過(guò)程中,沒(méi)有考慮到擦除CPU卡上已有的CPU卡結構,而是在完成外部認證后直接改寫(xiě)原有CPU卡的主密鑰文件的CPU卡主控密鑰。常見(jiàn)問(wèn)題是由于原有主密鑰文件創(chuàng )建時(shí)的空間大小不夠,而發(fā)卡程序試圖寫(xiě)入除CPU卡主控密鑰外還想寫(xiě)入CPU卡維護密鑰時(shí),勢必造成寫(xiě)入空間不夠而導致寫(xiě)入不成功。
3密鑰文件的建立與密鑰值的寫(xiě)入
為了獨立地管理一張卡上不同應用之間的安全問(wèn)題,CPU卡中的每一個(gè)應用放在一個(gè)單獨的ADF中。各個(gè)ADF及其下屬各文件數據的訪(fǎng)問(wèn)(包括改寫(xiě)、讀?。┲荒軕迷揂DF下的密鑰文件中的密鑰數值。為討論方便,此處假設只有一個(gè)ADF?! ?/p>
用戶(hù)卡結構中主要存在以下兩個(gè)密鑰文件及相應的幾個(gè)密鑰:
(1)MF下的密鑰文件(簡(jiǎn)稱(chēng)KMF),其裝載的密鑰是CPU卡主控密鑰(簡(jiǎn)稱(chēng)CCK,以下同);
(2)ADF下的密鑰文件(簡(jiǎn)稱(chēng)KADF),其裝載的密鑰有應用主控密鑰(簡(jiǎn)稱(chēng)ACK,以下同),應用維護密鑰(簡(jiǎn)稱(chēng)AMK),及其它應用密鑰;
(3)其它密鑰,如口令密鑰PIN,口令解鎖密鑰,DES運算密鑰等等?! ?/p>
3.1密鑰文件的創(chuàng )建
各密鑰文件在建立時(shí)必須慎重考慮以下兩個(gè)要素:
(1)文件大小的分配;
(2)有關(guān)權限和密鑰使用后的后續狀態(tài)值的規定。
密鑰文件的大小分配取決于要裝載的密鑰個(gè)數。每個(gè)密鑰均為一條可變長(cháng)的記錄,每條記錄的長(cháng)度為密鑰數據長(cháng)度加7。以此可以計算密鑰文件的大小。在發(fā)卡程序設計過(guò)程中,常常會(huì )出現因為密鑰文件的大小分配不夠而造成后面的密鑰無(wú)法寫(xiě)入。
密鑰文件建立過(guò)程中的有關(guān)權限和密鑰使用后的后續狀態(tài)值的規定一方面起到對密鑰文件本身的安全維護作用,另一方面也將決定對CPU卡操作的流程。顯然這個(gè)要素至關(guān)重要。
3.2各密鑰值的寫(xiě)入
關(guān)于密鑰值的寫(xiě)入,關(guān)鍵問(wèn)題是要弄清楚該密鑰要求以何種形式寫(xiě)入。通常有以下幾種形式:
(1)以明文形式寫(xiě)入(常見(jiàn)的如口令密鑰PIN的寫(xiě)入);
(2)以帶線(xiàn)路保護的形式寫(xiě)入(要求計算MAC);
(3)以對密鑰值進(jìn)行加密后的密文形式寫(xiě)入(要求計算DES或3DES);
(4)以對密鑰值進(jìn)行加密并帶線(xiàn)路保護的形式寫(xiě)入(要求計算DES&MAC)。
如果密鑰值的寫(xiě)入要求加密并帶線(xiàn)路保護,則密鑰值寫(xiě)入時(shí)須對該密鑰值進(jìn)行DES&MAC計算后以密文形式寫(xiě)入(當然CPU卡操作系統內部會(huì )自動(dòng)將其解釋成明文),帶線(xiàn)路保護的目的是防止密鑰值在寫(xiě)入的過(guò)程中被劫取。如果不要求帶線(xiàn)路保護寫(xiě)入,可直接以明文方式寫(xiě)入。
在發(fā)卡程序設計過(guò)程中,尤其要注意CPU卡主控密鑰、應用主控密鑰、應用維護密鑰及其它密鑰之間的關(guān)系及其寫(xiě)入要求?! ?/p>
3.2.1CPU卡主控密鑰與應用主控密鑰
CPU卡主控密鑰是對整個(gè)CPU卡的訪(fǎng)問(wèn)起控制作用的密鑰,由CPU卡生產(chǎn)商寫(xiě)入,由發(fā)卡方替換為發(fā)卡方的CPU卡主控密鑰。發(fā)卡程序設計過(guò)程中,在對CPU卡進(jìn)行任何操作之前,必須使用CPU卡主控密鑰作外部認證,
應用主控密鑰是應用的控制密鑰,在CPU卡主控密鑰控制下寫(xiě)入。一般地,發(fā)卡方替換CPU卡的主控密鑰之后,為驗證替換工作正確,再用新的CPU卡主控密鑰作一次外部認證。