摘要: 本文簡(jiǎn)述了SLE4428的性能、分析SLE4428的設(shè)計(jì)原則及流程,并對(duì)使用SLE4428提出注意事項(xiàng)。
關(guān)鍵詞: SLE4428;加密卡;密鑰
1.SLE4428性能描述
1.1 SLE4428容量大小為1K字節(jié),地址為0-1023。
2.2 所有數(shù)據(jù)除密碼外,在任意情況下均可被讀出,密碼在核對(duì)正確后可以被讀出。
3.3 所有數(shù)據(jù)包括密碼本身在核對(duì)密碼正確后可以寫(xiě)入或更改。
4.4 所有數(shù)據(jù)都可以按字節(jié)進(jìn)行寫(xiě)保護(hù),寫(xiě)保護(hù)后數(shù)據(jù)固化,任意情況下不可更改。
5.5 有一個(gè)密碼出錯(cuò)計(jì)數(shù)器。地址是1021。初始值為8,密碼核對(duì)出錯(cuò)一次,便減1。若計(jì)數(shù)器值為0,則整張卡的數(shù)據(jù)被鎖死,只可讀出,不可更改或?qū)懭肭覠o(wú)法繼續(xù)核對(duì)密碼;若不為0,則只需要一次核對(duì)正確,計(jì)數(shù)器將恢復(fù)為初始值8。
6.6 密碼長(zhǎng)度為2字節(jié),地址是1022,1023。共有2種組合,在密碼核對(duì)正確之前,讀這兩地址的結(jié)果是“00”,也無(wú)法寫(xiě)入和更改;在密碼核對(duì)正確后可以讀出密碼和更改密碼,密碼會(huì)一直有效至卡掉電為止。
7.7 地址0-7,21-26出廠前由廠家固化,不可更改,其中地址21-26是卡的用戶代碼,由制造卡的廠家向SIEMENS公司申請(qǐng)注冊(cè)的全球唯一的用戶代碼。
2.設(shè)計(jì)原則
針對(duì)SLE4428安全性的局限性,必須采用以下原則發(fā)行和使用SLE4428邏輯加密卡:
2.1生成密鑰文件。該文件為二進(jìn)制加密文件,由用戶方提供的算法種子經(jīng)過(guò)加密算法,生成用戶卡密鑰所需要的算法種子(以下簡(jiǎn)稱(chēng)密鑰種子)和加密用戶卡數(shù)據(jù)所需要的加密種子。
2.2用密文方式存儲(chǔ)用戶卡重要數(shù)據(jù),使其它系統(tǒng)無(wú)法讀出卡上內(nèi)容,從而保護(hù)用戶
的隱私。
2.3用戶卡的改寫(xiě)必須經(jīng)過(guò)以下操作:調(diào)用密鑰文件中的密鑰種子,通過(guò)加密算法校驗(yàn)
用戶卡密鑰,如果正確就可以進(jìn)行改寫(xiě),如果不正確,SLE4428將記數(shù),超過(guò)8次不正確,SLE4428將自動(dòng)鎖死,從而避免用窮盡法破譯用戶卡密鑰。
3.設(shè)計(jì)流程
3.1發(fā)行用戶新卡
3.1.1 建立用戶對(duì)象u_maker 和定義SLE4428的驅(qū)動(dòng)程序hnic32.dllu_maker主要
由以下密鑰函數(shù)組成(函數(shù)源程序略)。
3.1.2 定義用戶對(duì)象u_maker,生成用戶卡密碼,讀密鑰文件并將第一套兩條密鑰分別
存于ls_key[1]和ls_key[2]中,程序如下:(為減少篇幅,程序只列出主要部分)
u_maker u_maker1//定義OBJECT
u_maker1 = create u_maker
li_aret=u_maker1.uf_getkey()//讀密鑰文件
int li_min,li_sec,li_mul
char ls_pas[]
string ls_random,ls_pin_new
li_sec=integer(mid(string(now()),7,2))//產(chǎn)生隨機(jī)數(shù)
if li_sec=0 then
li_sec=rand(99)
Endif
li_min=integer(mid(string(now()),4,2))
if li_min=0 then
li_min=rand(99)
End if
li_mul=li_sec*li_min
ls_random = left(string(li_mul),2)
ls_pas = u_maker1.uf_encrypt(ls_random,u_maker1.ls_key[1])//生成用戶卡密碼
ls_pin_new = u_maker1.uf_asctostr(ls_pas)
3.1.3 從數(shù)據(jù)庫(kù)文件中讀取需要的數(shù)據(jù)并寫(xiě)入結(jié)構(gòu)變量istr_info1中,具體如下:
istr_info1.grzhbh,istr_info1.FXSDM,str_info1.ICKH,istr_info1.BXH,istr_info1.XM,istr_info1.XB,istr_info1.CSRQ1,istr_info1.SFZHM,istr_info1.CBRYLBDM,istr_info1.BNYBMZLJ,istr_info1.YBMZLJ,istr_info1.YYBM,istr_info1.YYMC,istr_info1.BNZYCS,istr_info1.IN_HOS_MON,istr_info1.IN_HOS_SUM,istr_info1.ICHRCS,istr_info1.LAST_DATE,istr_info1.GRZfZF,str_info1.GRZfHR,istr_info1.LAST_BALAN,istr_info1.LAST_USE
3.1.4 核對(duì)用戶卡密碼,寫(xiě)ic卡,寫(xiě)卡完畢后更改用戶卡密碼。
3.2 改寫(xiě)用戶卡
3.2.1 建立用戶對(duì)象n_cc_ic和u_maker,同時(shí)定義SLE4428的驅(qū)動(dòng)程序hnic32.dll
n_cc_ic 主要由ic卡讀寫(xiě)函數(shù)組成,限于篇幅,略去。建立u_maker讀取密鑰文件
3.2.2 從數(shù)據(jù)庫(kù)文件中讀取修改好的數(shù)據(jù)并寫(xiě)入結(jié)構(gòu)變量istr_info中,同上
3.2.3 從用戶卡中讀出隨機(jī)數(shù)生成用戶卡密碼,并核對(duì)密碼
3.2.4 開(kāi)始寫(xiě)卡,同上
4.注意事項(xiàng)
4.1SLE4428的安全機(jī)制:唯一代碼是由制造卡的廠家向SIEMENS公司申請(qǐng)注冊(cè)的全球唯一的用戶代碼??煞乐蛊渌鼜S家的卡進(jìn)入系統(tǒng),同時(shí)也決定了用戶卡只能來(lái)源于該廠家;固化寫(xiě)入對(duì)于需要不斷改卡的用戶也不適用;只有建立安全的用戶密碼才是最有效的手段。
4.2SLE4428無(wú)須密碼便可讀出除密碼外的整張卡的數(shù)據(jù),密碼一經(jīng)核對(duì)便可向任一地址寫(xiě)入或修改數(shù)據(jù),因此設(shè)計(jì)時(shí)要注意適當(dāng)固化數(shù)據(jù)和將數(shù)據(jù)內(nèi)容加密,以防止無(wú)意破壞數(shù)據(jù)或非法修改數(shù)據(jù)。
4.3密碼核對(duì)正確后便可讀出,因此設(shè)計(jì)程序時(shí)要能防止破壞者采用非法中斷程序運(yùn)行,直接去讀取密碼的方法來(lái)竊取密碼。由于實(shí)現(xiàn)一卡一密,所以即使竊取一張或幾張用戶卡的密碼,也無(wú)法破譯一批用戶卡的密碼。
參考文獻(xiàn):
〔1〕張立松,劉鴻雁:SLE4442邏輯加密IC卡在52單片機(jī)中的應(yīng)用[J].信息技術(shù),2004,(08).
〔2〕王新、呂鋒:IC卡讀寫(xiě)接口的設(shè)計(jì)和實(shí)現(xiàn)[J].武漢理工大學(xué)學(xué)報(bào)(信息與管理工程版)2005,(05).