引言
Java 智能卡是一種能運行Java 語言程序的智能卡,它在資源有限的智能卡環境中支持Java 語言的一個子集,是Java 嵌入到智能卡中的一種新的應用[1]。由于Java 智能卡具有一卡多應用的特性,而且Java 程序“一次編寫,到處運行”,使得近幾年來Java 智能卡市場蓬勃發展起來。Java 智能卡產品已經在全世界得到了廣泛的應用,包括無線通信、醫療/健康保險、金融銀行、政府機構、身份認證、電子商務、系統安全等領域。
Java 智能卡可以同時運行幾個不同的程序,而且無論發卡前,還是發卡后,都卡允許用戶自由的下載,安裝和刪除程序。這就需要卡片具有很高的安全行。而現在的Java 智能卡一般通過簡單的防火墻和接口共享機制來保障其安全性,這無疑存在著安全隱患。該方案將把可信計算技術引入到Java 智能卡的設計與實現中,以可信計算在安全認證方面的優勢來解決智能卡的安全問題。
2 硬件平臺的選擇
本文經過研究發現:可信計算和 Java 智能卡技術對硬件的需求基本相同。兩者都需要易失存儲器,非易失存儲器,對稱/非對稱密碼處理器,隨機數處理器,雜湊運算單元,執行單元和隨機數產生器。當然,兩中技術對硬件的要求有細微的差異:例如可信密碼模塊需要監測電源,而智能卡不需要;可信模塊的RSA 引擎需要達到2048 位強度,而智能卡并沒有明確的規定;可信模塊的I/O 是總線形式的,而智能卡需要射頻、USB 或者其它形式的通訊模塊。
由以上分析可以看出,智能卡和可信模塊對硬件的需求雖然有所異同,但并不矛盾,這些差異是兩者對安全性的不同要求造成的。為了將可信計算技術引入到智能卡的設計與實現中,可以挑選一款規格合適的智能卡芯片作為硬件平臺。經過對比,該方案中,最終選擇了中興集成電路設計有限公司的芯片Z32H256D32SU。該芯片是中興在國產32 位RISC 處理器的多功能安全處理平臺基礎上開發出的,具備高處理能力、高安全性、低功耗、低成本等特點。它具有8KBSRAM 存儲器、256KB Flash 存儲器、32KB EEPROM 存儲器,支持DES/3DES、RSA、ECC、SHA-1、HMAC 等算法,并帶有隨機數產生器和電源監測等模塊(具體的參數可以參見其手冊)。該芯片完全可以同時滿足智能卡和可信計算的硬件需求,用于構建可信Java 智能卡。
3 可信Java 智能卡的設計與實現
3.1 可信Java 智能卡的架構
可信 Java 智能卡(Trusted Java Card,縮寫為TJC)是在Java 智能卡中引入了可信的理念,用可信技術來增強其安全性。其結構框架如圖1 所示。
最底層是各種硬件資源,它上面硬件驅動層,這一層是底層硬件調用接口的集合,它可以把上層和具體的硬件細節分離,方便以后的硬件的升級,而且可以更方便的實現Java 的平臺無關性。
安全管理組件是一組執行各種操作的組件的集合,例如包的下載,包的度量,Applet的安裝和刪除,密鑰的存儲和讀取,事務的記錄和回滾等,這些功能組件通過運行時環境的調用來執行。其它各模塊的設計下文分別予以說明。
圖 1 可信Java 智能卡的架構
3.1.1 可信Java 智能卡虛擬機
可信 Java 智能卡虛擬機是用于支持字節碼運行的虛擬計算機,它的核心功能是解釋虛指令,使程序按著正常的流程執行。虛擬機有13 類185 條指令需要實現,該方案在實現虛擬指令調用時,設計了一個用于定位指定指令的虛擬指令跳轉表,采用函數指針的方式實現虛擬指令跳轉,其定義如下所示:
BYTE (*bytecodeJumperFun[185])();
執行一條指令的基本步驟如圖2 所示:
1. 首先讀取 PC 指針處的值,得到與該值相對應的方法區中的指令。
2. 判斷其是否需要解析,如果需要,則先解析該指令,得到所訪問對象的物理地址后,再對其解釋執行;如果為簡單指令,則無需解析直接執行即可。
3. 在本指令執行結束后,虛擬機將PC 指針指向當前指令緩沖區中的下一條指令,如果該指令存在,則重復執行步驟一、二;否則在所有指令執行完畢的情況下,退出虛擬機,程序運行結束。
圖 2 解析虛擬指令的基本流程
3.1.2 可信Java 智能卡類庫
可信 Java 智能卡類庫既實現了一般的Java 智能卡應用程序接口,又實現了可信密碼模塊的用戶接口。為了提高執行速度,耗費時間比較多的操作用C 語言實現。在 CAP 文件中,每個方法的頭信息如下所示:
當flags 值為1 時,TJCVM 去調用與該方法對應的C 方法;值為0 時,TJCVM 將定位到該方法的函數體,對字節碼進行解釋。類庫的設計采用了基于 token 的動態鏈接過程。所謂“基于token 的動態鏈接過程”是指為提高Java 智能卡應用程序的獨立性,在解釋執行指令時,虛擬機首先將需要訪問的對象(例如類、方法等)轉化為與訪問對象對應的符號(token),然后再將token 轉化為存儲被訪問對象的物理地址這一過程。動態聯接減小了修改其他類時對本程序代碼的影響。在Java 智能卡應用程序Applet 運行時,如果引用了外包中的方法,解釋器將獲得引用的外包的索引,以類和方法token 值作為索引標記,通過CAP 文件中各組件中具體的包信息、類信息和方法信息,可以準確地完成從token 值跳轉到被引用方法的具體實現。
3.1.3 可信Java 智能卡運行環境
可信 Java 智能卡運行環境扮演著決策者和調度者的角色,它根據Java 智能卡的具體狀態決定在什么時候調用哪個功能模塊,并且為各模塊提供合適的運行環境。下載到卡內的 Applet,由Java 智能卡運行環境控制運行,其運行狀態有以下幾種:
已安裝狀態
此狀態為應用程序安裝并在卡上注冊后的狀態。
被選擇狀態
應用程序只有被選擇后,才能被激活,進入命令處理狀態,與讀寫器間進行交互。
命令處理狀態
在此狀態下,Java 智能卡與讀寫器進行通信,執行應用程序中定義的process 方法。通過在應用程序中重載此方法,即可完成不同的智能卡應用功能。
取消選擇狀態
此狀態為應用程序的非激活狀態,直到該應用程序被重新選擇為止。各狀態之間通過執行不同的指令相互切換,運行環境都會根據Applet 所處的具體狀態,來判斷哪些功能模塊應該執行,哪些模塊不能執行,哪些由系統自動運行,哪些由用戶調用,以及各模塊之間的執行順序。
3.2 可信機制的構建
可信計算的核心理念就是信任鏈的傳遞。TJC 中信任鏈的傳遞如圖3 所示:
圖 3 信任鏈傳遞示意圖
信任鏈建立的前提條件是確定信任原點:三個可信根——可信度量根,可信報告根,可信存儲根。本方案中將BootLoader 作為可信度量根,并在Z32H256D32SU 芯片的EEPROM中開辟兩片獨立的空間分別作為可信存儲根和可信報告根。
BootLoader 在加電后最先被執行,它負責驗證硬件平臺和運行時環境的完整性,初始化一些硬件寄存器,并加載運行時環境。運行時環境的標準值被固化在BootLoader 內,當系統啟動的時候,BootLoader 首先對運行時環境進行度量,然后將度量值與標準值比較,如果相同則將控制權移交給運行時環境;如果不同,則禁止啟動。
運行時環境被加載后將一直占有 CPU 的控制權,它負責度量類庫,解釋器和各種管理組件,并負責調度各種可信服務,如身份認證和密鑰管理等。當Applet 下載后,首先要被運行時環境度量,只有在通過度量的情況下,才被執行。
由 BootLoader 到運行時環境,再到Applet,就建立起了一條可信鏈,這條信任鏈中的每個環境都是自主開發的,這樣就能保證卡內環境的可信。
4 結論
本文探索性的將可信計算和 Java 智能卡技術相結合,設計并實現了一款可信Java 智能卡,在很大程度上提高了卡片的安全性,同時為解決Java 智能卡的安全問題指出了一個新的方向。
-
處理器
+關注
關注
68文章
19293瀏覽量
229941 -
存儲器
+關注
關注
38文章
7493瀏覽量
163873 -
JAVA
+關注
關注
19文章
2969瀏覽量
104783
發布評論請先 登錄
相關推薦
評論