引言
智能卡具有使用方便、安全、易于實現(xiàn)信息的數(shù)字化管理的特點(diǎn)。在各個領(lǐng)域得到了廣泛的應(yīng)用。由于社??ǖ膽?yīng)用范圍比較廣,涉及到一個城市乃至全國參加養(yǎng)老保險、醫(yī)療保險的人員,而且使用過程中還具有帳戶金額劃入、醫(yī)療消費(fèi)等功能。所以社保卡系統(tǒng)的安全可靠性尤為重要。為了保證社??ǖ姆纻涡?、操作的安全性以及數(shù)據(jù)的保密完整性,在社??–OS開發(fā)過程中,需要采取一系列的安全措施來保證卡片應(yīng)用的安全性。
1 密鑰管理體系
密鑰控制著卡內(nèi)所有文件的訪問,與各種運(yùn)算密切相關(guān),是保證社??ǖ陌矀阈缘年P(guān)鍵要素。社??▋?nèi)使用的密鑰有幾十個。按功能可以劃分為應(yīng)用維護(hù)、鎖定控制、應(yīng)用數(shù)據(jù)更新、交易和應(yīng)用數(shù)據(jù)讀取等類型。對卡片的很多操作都需要對密鑰進(jìn)行認(rèn)證,取得相應(yīng)權(quán)限后才能進(jìn)行。
每個卡片所使用的卡內(nèi)密鑰。都是通過三級分散來確定的,這樣既保證了密鑰的相對獨(dú)立性,又為卡片的安全應(yīng)用提供了疆有力的保障。根據(jù)發(fā)卡過程的要求.卡片在發(fā)行中需要實行主管機(jī)構(gòu)與卡片發(fā)行中心兩級密鑰管理體制.對密鑰進(jìn)行三級分散。社??ǖ闹鞴軝C(jī)構(gòu)作為社保卡的密鑰管理中心.它產(chǎn)生發(fā)行單位的根密鑰(包括發(fā)卡授權(quán)密鑰等),把根密鑰傳遞給二級密鑰管理中心,即社??ǖ陌l(fā)行中心,由發(fā)行中心進(jìn)行下一步的工作。卡發(fā)行中心從主管機(jī)構(gòu)得到根密鑰后,進(jìn)行二次分散.得到各種密鑰的母密鑰,然后把相應(yīng)的母密鑰裝載到SAM(Secure Access Module.安全存取模塊)卡及發(fā)卡母卡上。在卡片發(fā)行的時候,由發(fā)卡母卡上的各個母密鑰根據(jù)每個社??ǖ目ㄌ?。分散出每個社??ㄉ纤褂玫淖用荑€。
每個社??ǖ挠杳荑€是用卡片ATR(Answer To Reset,復(fù)位應(yīng)答)的T8-TD字節(jié)(卡號)。加上‘00 00’作為分散因子,對母密鑰分散得到的。為了增強(qiáng)與應(yīng)用終端的認(rèn)證程度和增加數(shù)據(jù)加密的安全性,社保卡要求在報文的安全傳送和交易的過程中使用過程密鑰。過程密鑰是使用對應(yīng)的子密鑰進(jìn)行DES或3DES(原密鑰長度為16字節(jié)時)加密運(yùn)算產(chǎn)生的。
在報文的安全傳送過程中,無論是對MAC(Message Authentication Code,報文鑒別代碼)的計算還是數(shù)據(jù)的加密,都使用了過程密鑰。在這里使用的過程密鑰是通過以下方法產(chǎn)生的:通過IC卡獲取8字節(jié)的隨機(jī)數(shù)作為輸入數(shù)據(jù),與原密鑰進(jìn)行加密運(yùn)算,得到8字節(jié)的過程密鑰。
2 操作權(quán)限的控制機(jī)制
在對社??ㄟM(jìn)行操作之前.應(yīng)用終端必須對卡片進(jìn)行有效性檢查,檢查卡片是否有效或者說確認(rèn)卡片是否可以在社保應(yīng)用環(huán)境中使用。這個檢測過程通過進(jìn)行內(nèi)部認(rèn)證來實現(xiàn)。內(nèi)部認(rèn)證是社??–OS系統(tǒng)的一個命令,其具體實現(xiàn)過程如下:
2.1終端產(chǎn)生每組為8字節(jié)的兩組隨機(jī)數(shù)。隨機(jī)數(shù)可以通過軟件生成,也可以通過SAM卡或社保卡的取隨機(jī)數(shù)功能來獲得;
2.2終端對卡片發(fā)出內(nèi)部認(rèn)證命令,兩組隨機(jī)數(shù)放在數(shù)據(jù)域中發(fā)給卡片:
2.3卡片接收到內(nèi)部認(rèn)證命令后。通過命令中的密鑰標(biāo)識符找到相應(yīng)的密鑰,與第一組隨機(jī)數(shù)產(chǎn)生過程密鑰,然后對第二組隨機(jī)數(shù)進(jìn)行加密運(yùn)算,把結(jié)果作為鑒別信息回送給終端;
2.4終端在發(fā)出命令后,進(jìn)行與卡片同樣的運(yùn)算過程,在接收返回信息后,對鑒別信息進(jìn)行比較驗證。
只有在內(nèi)部認(rèn)證通過的情況下,終端才會對卡片進(jìn)行后續(xù)操作。驗證通過后,終端可以讀取片片的相關(guān)信息,檢查卡片的有效性。內(nèi)部認(rèn)證町以實現(xiàn)終端對社??ǖ蔫b別。而IC卡中的應(yīng)用驗證終端的有效性以及讓終端獲得某種操作的權(quán)限,則需要通過外部認(rèn)證來實現(xiàn)。
當(dāng)驗證通過后.卡片記住該密鑰成功鑒別的結(jié)果,直到斷電或選擇別的應(yīng)用。終端則通過對密鑰的外部認(rèn)證獲得J,該密鑰所控制的權(quán)限,可以進(jìn)行相應(yīng)的操作。
3 加密傳輸重要報文
在卡片與應(yīng)用終端進(jìn)行信息交換過程中.有持卡人的PIN、保險金額等重要的信息。這些信息如果被竊取或篡改,后果是相當(dāng)嚴(yán)重的。社??ú扇◎炞CMAC來保證報文的完整性.通過對交換信息的加密來保證信息的安全保密性。
當(dāng)命令數(shù)據(jù)采用安全報文傳送時.要求對方進(jìn)行MAC認(rèn)證或加密傳送。MAC要進(jìn)行驗證的數(shù)據(jù)是COS的命令頭和命令數(shù)據(jù)域中的數(shù)據(jù)元。MAC認(rèn)證碼是通過過程密鑰對數(shù)據(jù)進(jìn)行DES運(yùn)算得到的長度為4個字節(jié)的數(shù)據(jù)元.它在通信過程中附加在命令數(shù)據(jù)域的最后,發(fā)送到對方。當(dāng)接收方接收完命令的所有數(shù)據(jù)后,需要對數(shù)據(jù)進(jìn)行相應(yīng)的運(yùn)算.也計算出一個MAC碼,與發(fā)送方的MAC碼比較,進(jìn)行比較后二者相同時才認(rèn)為接收的命令是完整的、正確的。
計算MAC認(rèn)證碼的過程如下:
4 防止操作的異常中斷
保持所操作數(shù)據(jù)的完整性是社??ò踩囊粋€重要部分。在某個操作(特別是交易)過程中.可能會由于掉電等原岡造成操作的異常中斷。這時。對卡片操作的結(jié)果是不可預(yù)料的,對卡內(nèi)數(shù)據(jù)的更改可能完成了。也可能只完成了。一部分。如果只完成了一部分,就會造成卡內(nèi)數(shù)據(jù)不正確、不完整。
社保卡通過檢驗交易認(rèn)證碼來檢驗交易是否完成。社??ㄔ谕瓿山灰赘陆痤~之前,必須計算與當(dāng)前交易數(shù)據(jù)密切相關(guān)的MAC和TAC(Transaction Authorization Code。交易驗證碼)碼(帳戶劃入交易只有TAC碼),并保存下來。當(dāng)交易數(shù)據(jù)更新成功后,必須保證通過“取交易認(rèn)證碼”命令可以獲得與交易相應(yīng)的MAC和TAC碼。如果在交易操作結(jié)束后未能收到響應(yīng),卡片就被拔出,終端可以通過。取交易認(rèn)證碼”來檢查卡內(nèi)數(shù)據(jù)是否已經(jīng)被更新。
防拔機(jī)制的引入是為了防止在操作過程中只更新了卡內(nèi)數(shù)據(jù)的一部分。如果操作突然中斷了,卡片有可能正在執(zhí)行一個命令,這樣會導(dǎo)致命令沒有執(zhí)行完.而命令中需更新的數(shù)據(jù)也只更新了一部分。要防止這種情況的出現(xiàn),就需要在每次更新數(shù)據(jù)前對原數(shù)據(jù)進(jìn)行備份,以備在異常情況出現(xiàn)后進(jìn)行數(shù)據(jù)恢復(fù)使用。
在確認(rèn)命令處理過程正確完成,并且需要更新的數(shù)據(jù)已經(jīng)寫到相應(yīng)的位置,卡片丟棄備份數(shù)據(jù)。如果出現(xiàn)異常情況,則在卡片重新上電后,卡片檢測更新數(shù)據(jù)的標(biāo)志位,如果數(shù)據(jù)更新沒有完成,則需要把執(zhí)行命令前的原數(shù)據(jù)恢復(fù)到相應(yīng)的位置.以保證數(shù)據(jù)的完整性和正確性。
5 結(jié)束語
在越來越重視信息化管理的今天,方便、安全的社保卡將會得到更廣泛的應(yīng)用。社保卡所采取的一系列安全保障措施。是社??ǖ靡栽诟蠓秶鷥?nèi)推廣應(yīng)用的堅強(qiáng)基石。如果這些安全手段與接口終端以及應(yīng)用系統(tǒng)的安全措施相結(jié)合,就能更好地防范對卡片的非法操作。更好地保護(hù)社保數(shù)據(jù)的安全。