??? 摘? 要: 對基于Java卡(嵌入了Java卡虛擬機的智能卡)技術的移動平臺的安全機制及其實現(xiàn)方法作了分析,給出了ARM9平臺與智能卡硬件的互聯(lián)方法和軟件通信機制,重點闡述了利用Java技術在嵌入式平臺上使用智能卡進行數(shù)字證書申請、簽名及驗證操作的邏輯和實現(xiàn)方法。?
??? 關鍵詞: Java卡; SATSA; 公鑰基礎設施; 移動平臺;智能卡
?
??? 隨著科學技術的迅猛發(fā)展,智能移動平臺已成為新的發(fā)展亮點,但移動平臺上的安全問題卻相對薄弱。當利用移動智能平臺進行電子商務、移動辦公時,如何與從未謀面的合作伙伴、機構等建立信任關系、彼此驗證身份是一個非常現(xiàn)實的問題?,F(xiàn)有的方法大多是以網(wǎng)絡服務商或銀行系統(tǒng)等作為安全服務的認證中心,但這些認證服務都各自獨立,存在很大局限性。建立一套統(tǒng)一的認證系統(tǒng)是我國信用體系的發(fā)展方向,國內(nèi)一些大城市已經(jīng)陸續(xù)建立CA中心。本文介紹利用Java卡技術在嵌入式平臺上實現(xiàn)的一種客戶端原型系統(tǒng)。?
1 Java卡介紹 ?
??? Java卡是智能卡的一種,它通常由8位處理器和有限的RAM及非易失性存儲器(EEPROM或Flash)組成。高端的Java卡還帶有RSA加解密專用芯片以及32位處理器,可以把Java卡看成是一種安裝了Java虛擬機的智能卡。在虛擬機上可以運行各種Java小程序,這種小程序叫做Applet。每個Applet之間被內(nèi)部防火墻隔開,這使得Java卡可以支持一卡多用。?
??? Java卡框架集成的服務能對外提供基本的密鑰生成、簽名驗證等服務,同時它還能夠存儲各種數(shù)字證書、密鑰對(key pairs)、電子錢包數(shù)據(jù)等。由于采用特有的硬件安全措施,且對私鑰的各種操作都在卡內(nèi)完成,不允許復制與傳出,避免了密鑰被泄露的風險。Java卡也因具有很高的安全性而成為PKI技術最理想的選擇。?
2 硬件設計?
??? 本實驗平臺為AT91SAM9260芯片的嵌入式平臺,此芯片是基于ARM9內(nèi)核并帶有Java硬件加速模塊的芯片。軟件平臺為Linux 2.6.19 OS并移植了基于CDC的JVM嵌入式虛擬機。圖1為嵌入式平臺與智能卡相連接的電路圖。?
?

?
??? 圖中AT9260的TCLK0、TIOA1與智能卡時鐘信號端CLK相連,為智能卡內(nèi)部的CUP和數(shù)據(jù)傳輸提供3.7 MHz外部時鐘脈沖。TIOB0與智能卡的I/O口相連,提供半雙工異步串行通信。TIOB1與智能卡的RST端相連,為智能卡提供復位信號。?
3 Java卡與移動終端之間的通信?
??? Java卡與移動平臺之間的通信有兩種通信協(xié)議。一種是基于程序協(xié)議數(shù)據(jù)單元(APDU)的消息傳送協(xié)議,它符合ISO/IEC 7816-3、7816-4國際標準。另一種是基于遠程方法調(diào)用(JCRMI)協(xié)議,它是分布式對象模型的一個子集。這時Java卡小應用程序(Applet)相當于一個服務器,而讀卡器端的程序相當于客戶端[1]。?
??? 在JSR-177規(guī)范中定義了安全與信任服務API(SATSA:Security and Trust Services API),它提供了嵌入式平臺與Java卡的通信功能。SATSA屬于可選包之一,在移植JVM時必須安裝。當J2ME應用程序與Java卡通過APDU協(xié)議進行連接時,需要調(diào)用javax.microedition.io.Connector.open()方法來建立連接,并使用exchangeAPDU()方法向Java卡發(fā)送命令。操作完成后使用javax.microedition.io.Connection.close( )方法斷開連接。?
4 數(shù)字證書的申請?
4.1 根證書申請?
??? 瀏覽器軟件中一般都存儲了一個自簽名證書列表(self-signed certificate list)也叫Root CA根證書列表,它是各CA中心給自己的身份信息及其公鑰的一個自簽名證書組成的列表,這個列表是在瀏覽器軟件制作的過程中加入的。如果用戶準備注冊的CA中心的根證書不在這個列表中,可以先到CA中心填寫申請信息,這時CA中心的審核授權部門(Registry Authority)會審核申請,申請通過,會發(fā)給用戶一個參照號 Ref.number 及 Auth.code號。有了這兩個號碼,申請人可通過瀏覽器下載安全根證書。根證書列表是各CA中心簽署所有證書的信任基礎。?
4.2 數(shù)字證書的申請?
??? 當用戶登錄到CA中心進行證書申請時,會要求下載一個CA中心簽名的安全插件,這時瀏覽器會在根證書列表中查找相應的公鑰并對插件的簽名進行驗證。安全插件安裝后會調(diào)用Java卡內(nèi)部的服務生成簽名密鑰對,并把密鑰對添加到內(nèi)部的安全存儲區(qū)中,同時在卡內(nèi)部對注冊信息進行簽名,然后發(fā)送到CA中心注冊。CA中心的簽名服務器反饋數(shù)字證書給移動終端,終端保存數(shù)字證書到Java卡中。基本過程如圖2所示。?
?

?
??? 數(shù)字證書申請通過調(diào)用generateCSR(java.lang.String nameInfo,? java.lang.Stringalgorithm, intkeyLen, intkeyUsage, java.lang.StringsecurityElementID, java.lang.Stringsecurity?ElementPrompt, booleanforceKeyGen)方法實現(xiàn)。該函數(shù)首先會讀取智能卡中的密鑰和證書,如果有多對密鑰和證書,則會進一步提示選擇哪一個密鑰用于申請數(shù)字證書。如果沒有找到密鑰,這時設置forceKeyGen標志位,申請產(chǎn)生新密鑰。選擇完后會把有關信息簽名后發(fā)送到CA中心的注冊服務器。服務器返回數(shù)字證書。這時再調(diào)用addCredential(java.lang.String certDisplayName, byte[]pkiPath, java.lang.Stringuri)方法將證書存儲到智能卡中。?
5 數(shù)字簽名與證書驗證過程?
5.1 數(shù)字簽名過程?
??? 簽名時使用sign(java.lang.String stringToSign, intoptions, java.lang.String[]caNames, java.lang.StringsecurityElementPrompt)方法。其中參數(shù)stringToSign就是待簽名的字符串,它必須符合UTF-8標準,簽名產(chǎn)生的加密摘要符合RFC2630標準。參數(shù)caNames指定簽名密鑰。在簽名過程,sign()方法會通過APDU協(xié)議調(diào)用卡上的簽名服務。它首先使用摘要算法產(chǎn)生一個16 B的摘要,然后使用非對稱加密算法用私鑰對摘要加密?;具^程如圖3 所示。?
?

?
5.2 簽名驗證過程?
??? 在數(shù)字證書中記錄了摘要版本號和生成摘要的算法信息。待驗證信息首先拆分成原始信息和摘要密文兩部分,原始信息通過證書中提供的摘要版本號選擇對應的摘要算法對原始信息進行摘要計算,接著使用對方的簽名公鑰對加密摘要進行解密。解密后的摘要值與先前計算出的摘要值進行對比,如果一致,說明這份信息真實可靠,沒有被他人截獲偽造。在驗證過程中驗證用戶還需要發(fā)送消息到證書庫查明簽名用戶證書的狀態(tài)和有效性。簽名驗證使用authenticate(byte[] byteArray ToAuthenticate, intoptions, java.lang.String[] caNames, java.lang.StringsecurityElementPr-ompt )方法。其中byteArrayToAuthenticate參數(shù)為待驗證的信息,caNames指定驗證使用的密鑰對。當調(diào)用驗證函數(shù)后,函數(shù)會把待驗證信息發(fā)送到卡中進行簽名驗證并返回驗證結果。驗證邏輯如圖4所示。?
?

?
6 實驗及結果?
??? 實驗中對字符串“基于Java卡技術的移動平臺安全研究與實現(xiàn)”用私鑰進行了簽名。其中簽名私鑰為0123456789,摘要算法采用 SHA1,加密算法選用1024位RSA。通過客服端調(diào)用Java卡中的簽名服務,返回結果如下:?
??? 基于Java卡技術的移動平臺安全研究與實現(xiàn)iQCVAw?UBSG5Go7C6kfBHes8iAQKy4gP/Vil3eIqv/YOewJETaD3Qpc?WtxZnP4woiLCU1D+oitJ4NFycM+JUToJ3DMXUf57T5OZKft8wohMA6fPlqmhAC48ovVbJX6RCC7XUcveTZuIgaWPQtE/svw?
X6IdeVojg/idOL2NCdL5yFhO40w54Jhf5OipKTI3bKncWncUijw?NgU==EWFm?
??? 在驗證過程中,當把上面的字符串發(fā)送到卡中,最后運算結果返回“true”,表白驗證成功。?
??? 本文重點闡述嵌入式系統(tǒng)與Java卡交互的工作機制和數(shù)字簽名在客戶端的實現(xiàn)方法。利用Java技術,有效降低了智能卡程序開發(fā)的難度。使得Java開發(fā)人員無需深入了解復雜的智能卡硬件和智能卡專用技術就能進行開發(fā)。同時在不同的Java卡上的應用也可以很方便地移植。?
參考文獻?
[1] Sun Microsystems Inc. Java card platform specification?2.2.2.[S].?
[2] Sun Microsystems Inc. IncSecurity and trust services?API (SATSA) for Java 2 platform[S], Micro Edition?Version 1.0, 2004.?
[3] Fabio Martinelli, Paolo Mori. Enhancing Java security?with history based access control[C]. FOSAD 2006/2007, LNCS4677, 2007.?
[4] 劉春,熊璋. Java卡平臺安全性研究與應用.計算機工程與設計[J], 2004(10).?
[5] 馬多賀. Java智能卡開發(fā)及應用技術研究[D]. 哈爾濱工業(yè)大學學報, 2006(6).?
[6] 謝冬青,冷鍵.PKI原理與技術.北京:清華大學出版社[M], 2004(1).
