李阿芳
摘要: Java智能卡是一種能運(yùn)行Java語(yǔ)言程序的智能卡?,F(xiàn)在Java智能卡已普遍使用,其安全性也越來(lái)越重要。針對(duì)此問(wèn)題,對(duì)Java語(yǔ)言、Java智能卡平臺(tái)的安全性及其安全機(jī)制進(jìn)行了研究,討論了Java智能卡的安全性。
關(guān)鍵詞: Java智能卡;安全性;防火墻
中圖分類號(hào):TP393.08文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)22-0000-00
智能卡(Smart Card)也稱為CPU卡,是將集成電路芯片封裝在一個(gè)塑料基片上,通過(guò)芯片內(nèi)的通信模塊,智能卡可以和外部設(shè)備通信,完成數(shù)據(jù)傳輸、存儲(chǔ)和處理,實(shí)現(xiàn)各種業(yè)務(wù)。早期的智能卡實(shí)際上并不是嚴(yán)格意義下的智能卡,只是一種存儲(chǔ)卡。因?yàn)樗鼪](méi)有片上微處理器,而只有少量的存儲(chǔ)單元和固化的邏輯電路。隨著技術(shù)的發(fā)展,出現(xiàn)了微處理器卡,能夠提供更高的安全性和更多的功能。這種卡不能直接和外部交換數(shù)據(jù),而是通過(guò)外部設(shè)備對(duì)微處理器發(fā)送一組指令,再由微處理器執(zhí)行相關(guān)的操作,并把數(shù)據(jù)返回給外部設(shè)備。
由于Java語(yǔ)言的平臺(tái)無(wú)關(guān)性、高安全性和易開(kāi)發(fā)性,在智能卡應(yīng)用中有相當(dāng)?shù)膬?yōu)勢(shì)。Java智能卡(Java Smart Card)是能運(yùn)行Java語(yǔ)言的智能卡, 它將智能卡技術(shù)和Java語(yǔ)言的開(kāi)發(fā)和應(yīng)用技術(shù)很好地結(jié)合起來(lái),定義了標(biāo)準(zhǔn)的應(yīng)用編程接口和運(yùn)行環(huán)境。由于Java語(yǔ)言特有的平臺(tái)無(wú)關(guān)性,可以在同一張卡上保存不同開(kāi)發(fā)商提供的應(yīng)用程序,使得Java卡的應(yīng)用范圍越來(lái)越廣泛:打IC電話的IC卡,手機(jī)里的SIM卡,銀行里的IC銀行卡和無(wú)線網(wǎng)絡(luò)的安全模塊卡等,Java智能卡的應(yīng)用可以說(shuō)已涉及到各個(gè)領(lǐng)域。
1 Java智能卡概述
Java智能卡通常由8位處理器和有限的RAM及非易失性存儲(chǔ)器(EEPROM或Flash)組成。高端的Java卡還帶有RSA加解密專用芯片以及32位處理器,可以把Java卡看成是一種安裝了Java虛擬機(jī)的智能卡。由于Java智能卡芯片的運(yùn)行速度以及卡上內(nèi)存大小的限制,所以Java智能卡虛擬機(jī)并不支持普通Java語(yǔ)言的一些數(shù)據(jù)類型和功能,如基本數(shù)據(jù)類型中的float、double、long和char類型以及多維數(shù)組、安全管理器、安全管理器、多線程、垃圾回收等等功能。
Java 智能卡解決方案是用只支持具有Java語(yǔ)言特征的子集和分開(kāi)的模型來(lái)實(shí)現(xiàn)Java智能卡虛擬機(jī)。因此Java 智能卡技術(shù)基本上定義的是一個(gè)平臺(tái)。Java智能卡平臺(tái)分為虛擬機(jī)(JCVM)和API兩部分,這兩部分合起來(lái)定義了所謂的Java卡運(yùn)行環(huán)境(JCRE),JCRE應(yīng)用提供接口。任何按照標(biāo)準(zhǔn)JCRE開(kāi)發(fā)的應(yīng)用可以在任意的Java卡平臺(tái)上運(yùn)行。為 Java 卡平臺(tái)編寫的應(yīng)用程序稱為Applet。
2 Java智能卡的安全性研究
Java智能卡同傳統(tǒng)的智能IC卡相比有許多優(yōu)點(diǎn),其中,作為新一代智能卡,Java智能卡平臺(tái)提供了比傳統(tǒng)的智能卡更為完善的安全機(jī)制。由于智能卡的廣泛使用,其安全性已經(jīng)成了非常重要的一個(gè)因素。Java智能卡安全性應(yīng)從整個(gè)系統(tǒng)全局進(jìn)行考慮。
2.1 Java語(yǔ)言的安全性
Java語(yǔ)言是一種強(qiáng)安全性語(yǔ)言,Java語(yǔ)言有很多固有的安全特性可以保障Java卡平臺(tái)的安全性。如:Java語(yǔ)言是一種面向?qū)ο笳Z(yǔ)言;Java語(yǔ)言提供了類型和程序的名字空間管理;Java語(yǔ)言是強(qiáng)類型語(yǔ)言,而且不支持指針:Java語(yǔ)言支持透明的內(nèi)存分配,等等。但是,由于智能卡資源有限,因此Java卡平臺(tái)僅僅支持Java語(yǔ)言的一個(gè)子集。這個(gè)子集能夠很好地與智能卡以及其它一些微型設(shè)備編程相匹配,同時(shí)對(duì)Java卡平臺(tái)的安全性也產(chǎn)生了一定的影響。
Java語(yǔ)言安全性面對(duì)的一個(gè)很大難題是如何保護(hù)類型安全同時(shí)又允許動(dòng)態(tài)類加載。在Java卡平臺(tái)中不支持動(dòng)態(tài)類加載,這可以加強(qiáng)類型安全性。因此在這個(gè)問(wèn)題上Java卡平臺(tái)就要比完整的Java語(yǔ)言有更好的安全性。另外,線程的使用和實(shí)現(xiàn)都很困難,而且線程還會(huì)大大增加虛擬機(jī)的開(kāi)銷,影響虛擬機(jī)的性能。不支持線程使應(yīng)用程序代碼的安全性分析變得更加容易。當(dāng)然,舍去一部分Java語(yǔ)言特性也會(huì)給Java卡平臺(tái)安全性帶來(lái)一些風(fēng)險(xiǎn),比如多應(yīng)用安全性問(wèn)題等。Java卡平臺(tái)也提供更多的安全機(jī)制來(lái)保證它的安全性。
2.2 Java智能卡平臺(tái)的安全性
在Java平臺(tái)運(yùn)行時(shí)間,安全以沙盒模型思想中心,一個(gè)Applet可以圍繞著它的沙盒運(yùn)行但不能超出它。沙盒模型是由Applet防火墻來(lái)補(bǔ)充的,JCRE為每個(gè)運(yùn)行Applet分配一個(gè)上下文(context),對(duì)一個(gè)對(duì)象的訪問(wèn)是由Java卡解釋器控制的,它的控制基于被訪問(wèn)對(duì)象的類型和當(dāng)前活動(dòng)的context是否是該對(duì)象的context。除此而外,Java卡運(yùn)行時(shí)間規(guī)則指定了一組JCRE執(zhí)行要求以保證運(yùn)行時(shí)間安全。
Java卡平臺(tái)的安全性由Java語(yǔ)言的安全性和定義在Java卡平臺(tái)之上的附加安全保護(hù)機(jī)制組成。由于智能卡有許多的安全考慮,發(fā)行者期望智能卡有一個(gè)能夠滿足特定要求的安全計(jì)算平臺(tái), Java卡平臺(tái)上的附加安全特性有:臨時(shí)和永久對(duì)象;原子體和事務(wù);Applet防火墻;對(duì)象共享;Applet中固有方法。
2.3 Java智能卡平臺(tái)的安全機(jī)制
項(xiàng)目對(duì)有關(guān)Java卡平臺(tái)安全機(jī)制的設(shè)計(jì)要求如下:
1)由于卡在實(shí)際應(yīng)用中會(huì)出現(xiàn)誤操作或讀卡機(jī)斷電等異常情況需要保證出現(xiàn)這種情況后卡上數(shù)據(jù)不會(huì)丟失。
2)因?yàn)镴ava卡可以動(dòng)態(tài)下載Applet,要求能有效防止一些惡意的Applet 竊取或修改卡上原有Applet 的重要數(shù)據(jù)。
下面將分別給出這兩個(gè)問(wèn)題的解決方案。
2.3.1 原子性和事務(wù)處理
在Java卡平臺(tái)中數(shù)據(jù)被存儲(chǔ)在實(shí)例中,由于在對(duì)數(shù)據(jù)的操作中可能會(huì)出現(xiàn)操作失敗或斷電,為保持這種情況下的操作前后的數(shù)據(jù)一致性,因此對(duì)Java卡的數(shù)據(jù)操作規(guī)定了安全保障。
Java卡平臺(tái)必須保證一個(gè)域的更新是原子性操作,也就是說(shuō),當(dāng)更新出現(xiàn)錯(cuò)誤或讀卡機(jī)突然斷電時(shí),平臺(tái)能保證域中的內(nèi)容在下次啟動(dòng)時(shí)恢復(fù)為更改前的值。
對(duì)一些數(shù)據(jù)塊的更新也必須是原子性操作,這就是事務(wù)處理的含義。 要么數(shù)據(jù)塊的所有值都更新,要么所有數(shù)據(jù)值都恢復(fù)到原先的值。 它與原子性的含義一樣,只是處理的數(shù)據(jù)塊范圍更廣,可以是一個(gè)字節(jié),也可以是一個(gè)Java對(duì)象實(shí)例的所有數(shù)據(jù)。
之所以將原子性及事務(wù)處理操作的具體實(shí)現(xiàn)放在虛擬機(jī)中完成,而將控制權(quán)交給虛擬機(jī)上層的系統(tǒng)類庫(kù),這是因?yàn)镴ava卡虛擬機(jī)只是解釋運(yùn)行Java 語(yǔ)言,并不知道應(yīng)該對(duì)哪些數(shù)據(jù)進(jìn)行原子性或事務(wù)處理操作,那些需要進(jìn)行原子性或事務(wù)操作的數(shù)據(jù)可以通過(guò)在編寫時(shí)調(diào)用系統(tǒng)類庫(kù)的方法來(lái)指定。
2.3.2 Java應(yīng)用防火墻
Java卡平臺(tái)通過(guò)防火墻機(jī)制為卡上的多個(gè)應(yīng)用提供安全的運(yùn)行環(huán)境,多個(gè)不同的Applet能夠共存在一張單獨(dú)的卡上,所以為了保證一個(gè)Java智能卡應(yīng)用程序(Applet)中的賬戶密碼等信息不被別的Applet隨意訪問(wèn),需要在Applet之間設(shè)置防火墻來(lái)隔離非法訪問(wèn)。防火墻機(jī)制是Java智能卡運(yùn)行環(huán)境的一個(gè)安全特性,它提供的對(duì)含有共享執(zhí)行的對(duì)象中存貯數(shù)據(jù)使用的詳細(xì)控制。防火墻機(jī)制在內(nèi)存中為每個(gè)應(yīng)用提供一塊私有空間。因此,即使某個(gè)應(yīng)用出現(xiàn)錯(cuò)誤或者有敵意應(yīng)用都不能影響其它應(yīng)用。
在開(kāi)發(fā)過(guò)程中由于開(kāi)發(fā)者的錯(cuò)誤或者設(shè)計(jì)上的漏洞所引起的一個(gè)應(yīng)用程序的敏感數(shù)據(jù)可以被其它應(yīng)用程序訪問(wèn),Java卡防火墻可有效地防止了經(jīng)常出現(xiàn)的這種安全性問(wèn)題。防火墻的本質(zhì)是將Java卡平臺(tái)的對(duì)象系統(tǒng)劃分為互相獨(dú)立被保護(hù)的對(duì)象空間,這些對(duì)象空間被稱為上下文。所有的在同一個(gè)Java包中的應(yīng)用實(shí)例共享一個(gè)上下文。這些應(yīng)用實(shí)例之間都有防火墻,因此任意一個(gè)應(yīng)用實(shí)例可以自由地訪問(wèn)處于同一個(gè)Java包中的其它應(yīng)用實(shí)例。JCRE有它自己的上下文,這個(gè)上下文與其它的應(yīng)用實(shí)例的上下文不同,它有特殊的系統(tǒng)權(quán)限,以至于它可以執(zhí)行應(yīng)用實(shí)例的上下文所不能執(zhí)行的操作。
3 結(jié)論
在智能卡的使用中,安全性總是最重要的方面。Java語(yǔ)言由于其良好的安全性能,自然成為了對(duì)安全性、保密性和可靠性等要求嚴(yán)格的智能卡應(yīng)用的首選。 通過(guò)在Java卡虛擬機(jī)中實(shí)現(xiàn)事務(wù)處理機(jī)制,在應(yīng)用中可以保證卡的數(shù)據(jù)不會(huì)因誤操作或讀卡器的不正常中斷而受到破壞。 而且Java卡中的防火墻技術(shù)保證了Applet能在一個(gè)高安全模式下建立、安裝和運(yùn)行,防止了有惡意的程序?qū)ο到y(tǒng)其他部分的破壞,同時(shí)Java卡平臺(tái)也保證發(fā)行者可以通過(guò)擴(kuò)展加密算法類庫(kù),來(lái)定義進(jìn)一步的安全性要求和策略以滿足它們特定產(chǎn)業(yè)的要求。正因?yàn)镴ava卡平臺(tái)能提供這些多方面的安全性能,所以它的應(yīng)用范圍也越來(lái)越廣泛。
參考文獻(xiàn):
[1] 陳華,李大興. 智能卡的安全性[J]. 通信保密,2000,83(3):26-29.
[2] Wolfgang Rankl,Wolfgang Effing. 智能卡大全----智能卡的結(jié)構(gòu)功能應(yīng)用(第3版)[M].北京:電子工業(yè)出版社,2005.
[3] 劉慧. Java智能卡的安全性分析與研究[碩士學(xué)位論文][D]. 濟(jì)南:山東大學(xué),2008
[4] 王愛(ài)英.智能卡技術(shù)[M].北京:清華大學(xué)出版社,1996.
[5] 劉嵩巖. 毛志剛. 葉以正. Java 卡的研究與實(shí)現(xiàn)[J]. 微電子學(xué),2000,1(6).
[6] 馬多賀. Java智能卡開(kāi)發(fā)及應(yīng)用技術(shù)研究[D]. 哈爾濱工業(yè)大學(xué)學(xué)報(bào), 2006,6.