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