JAVA卡技術概述
文章出處:http://5052h112.com
作者:SUN中國有限公司策略發展部經理 邵正強
人氣:
發表時間:2011年09月07日
[文章內容簡介]:JAVA卡技術概述
關鍵字: JAVA |
爪哇卡(JavaCard)技術可使以爪哇語言所寫成的程序,在智能卡和其它資源受限裝置上執行。本文將讓您一覽爪哇卡技術,包括該系統的結構和組件。本概述的目的在讓您對爪哇卡技術有一個整體性了解,并介紹有關爪哇卡系統的重點和基本概念,以利程序開發者設計程序之用。 一、爪哇卡技術之組件 爪哇卡技術包括下列部分: *精簡后之爪哇程序語言以及適合智能卡應用的虛擬機(JavaCardVirtualMachine,JCVM)定義 *核心之爪哇卡應用程序接口(ApplicationProgrammingInterface,API)及其延伸部分 *爪哇卡之執行時期環境(JavaCardRuntimeEnvironment,JCRE) 爪哇卡應用程序接口和執行時期環境是以智能卡工業標準ISO7816為模型而設計,因此,爪哇卡平臺可輕易支持跟ISO7816第一到第六部分兼容的智能卡系統和應用。 爪哇卡應用程序被稱為applets。爪哇卡平臺可支持多重應用(multiapplication)環境。爪哇卡應用程序則是在爪哇之執行時期環境內處理和執行。 二、精簡之爪哇卡語言 若智能卡的程序可使用爪哇程序語言的所有功能寫成當然最好,不過對智能卡和其它資源受限裝置來說,由于運算資源有限,要完全支持爪哇程序語言是不可能也不切實際的事。一般智能卡是以1K的隨機存取內存(RAM),以及16K的非揮發性內存(EEPROM或RAM)和24K的只讀存儲器(ROM)規格出現,因此,爪哇卡平臺僅能支持經小心選取且已規格化而有精簡功能的爪哇語言。此精簡爪哇語言包含之功能,適于設計智能卡以及其它小型裝置的程序,同時還能保留爪哇程序語言以對象為導向(object-oriented)的能力。說明爪哇程序語言所不支持的功能,可能要比說明其可支持的功能容易許多。爪哇卡平臺不支持: *大型基本數據類型:長整數、雙倍浮點、浮點 *字符和字符串 *多元數組 *動態類別加載 *安全管理者 *垃圾收集及終結 *穿線 *對象復制 這些不受支持功能的關鍵詞自然會自爪哇語言中省略。部分進階爪哇智能卡可提供垃圾收集機能,以激活爪哇卡應用程序刪除功能。遭刪除的應用程序空間可能可以,也可能無法再被使用,不過此乃視在該智能卡上所使用的垃圾收集者之功能范圍而定。一般而言,如果某項語言功能未清楚指明為不受支持的話,它就屬于受支持的精簡功能。 三、爪哇卡平臺結構 爪哇程序語言原本是為運算資源相當豐富的系統而設計。盡管爪哇卡平臺支持一規格化之精簡爪哇程序語言,但是將整個爪哇卡平臺安裝在有限內存和處理能力的智能卡上,是不適合的事。即使做得到,但是如此一來,類別庫(classlibraries)或應用程序將無空間可用。爪哇卡平臺的一項重要特色是其為一分布式系統。事實上,它是在空間和時間上分散于智能卡和桌上計算機間的系統。
許多不受執行時期限制的處理工作,例如類別加載(classloading)、驗證(verification)、決議(resolution)和連結(linking),以及位碼最佳化(bytecodeoptimization)等主要是在卡外(offcard)之個人計算機環境中執行的系統組件上運作。通常在個人計算機中資源不是考量的重點。駐在卡上的系統組件較緊密,也適于智能卡內存模型。爪哇卡執行時期環境(JCRE)即由這些組件組成。JCRE負責應用程序的執行,并且驅使卡內(oncard)系統和應用程序安全的執行。圖一列出爪哇卡平臺卡內系統的結構。 JCRE位于智能卡硬件和基礎操作系統常規之上。JCRE包含爪哇卡虛擬機(位碼解譯器)、爪哇卡應用架構類別(APIs)、特定工業延伸、以及JCRE系統服務。API和JCRE系統服務是以ISO7816智能卡標準為模型,同時可協助應用程序和ISO7816兼容。 JCRE將爪哇卡應用程序自智能卡商的專屬技術中分隔出來,同時也提供標準系統和API接口給應用程序。因此應用程序較小、也較容易編寫,同時也可轉置于不同的智能卡架構上。 JCRE的底層含有爪哇卡虛擬機(JCVM)。JCVM會執行位碼,并且確定爪哇語言安全。上圖中的JCVM只有虛擬機的位碼解譯器(bytecodeinterpreter)的部分。JCVM的另一部分嵌于一個稱為轉換器 (converter)的組件內。轉換器是在卡外執行,下文將進一步說明此轉換器。 系統類別(systemclasses)為JCRE之執行者,他們負責管理對象的持續和暫時行為,支持細部作業和交易,并管理主機和爪哇卡應用程序之間的通訊,控制應用程序的建立、選取和取消選取。為了完成任務,系統類別通常會激活本地的方法(nativemethod)服務。 爪哇卡應用程序架構(framework)界定出應用程序設計接口。此架構包含四種API包裹的中心和延伸部分。API類別相當緊密,同時其規格是為開發智能卡應用程序而定出。此架構之最大優點為,它極易建立一個爪哇卡應用程序。程序開發者可將大部份的精力放在應用程序上,而不是在智能卡系統的基礎建構上。爪哇卡應用程序乃透過API類別取得JCRE服務。 特定的產業或企業可用附加的應用數據庫,提供額外的服務或改善安全和系統模型。例如,威士忌開放平臺(VisaOpenPlatform)延伸JCRE服務,以符合威士忌的特定安全需要。這些附加功能強化了發卡者對所發出信用卡的控制,同時也可明訂信用卡個人化的一套標準指令。 爪哇卡應用程序可以下載(downloadable)。他們可在爪哇智能卡已生產之后再附加到卡上。安裝器(installer)要負責爪哇卡應用程序的加載和安裝。通常安裝器會利用卡外安裝程序的協助,兩者一起完成安裝應用程序的任務。由于JCRE不是必需支持動態應用程序安裝,所以安裝器只是JCRE的一項選擇性組件。如果沒有安裝器的話,應用程序必須在智能卡生產制造時,就放置到卡片上,完成生產制造之后的卡片上就無法再附加任何的應用程序。 爪哇卡應用程序當然是以爪哇程序語言編寫的。應用程序是由JCRE所控制管理。爪哇卡執行時期環境包含駐在卡上的爪哇卡系統組件。爪哇卡轉換器和卡外安裝程序則組成爪哇卡平臺的其它部分。這個部分是在個人計算機環境中執行。轉換器預先處理組成爪哇包裹之類別檔(classfile),并建立緊密的二元檔案(binaryfile),稱為CAP檔。CAP文件為可下載的組件。卡外安裝程序取得CAP文件并將它傳送給卡內安裝器。 四、爪哇卡虛擬機 爪哇卡虛擬機(JCVM)和爪哇虛擬機(JVM)之間主要的不同在于JCVM被建構為兩個不同的部分,如圖二所示。 JCVM的卡內部分包括爪哇卡位元碼解譯器。爪哇卡轉換器是在個人計算機或工作站上執行。該轉換器是JCVM的卡外部分。他們兩者結合可以支持虛擬機功能,其中包括加載爪哇類別檔,并且以特別的語法執行這些檔案。轉換器會預先處理類別檔,同時會執行驗證、決議、準備、和位碼最佳化等工作,這些工作在爪哇虛擬機是在類別加載時期執行的。轉換器的輸出是一個CAP檔案。此CAP檔接著被放置到爪哇智能卡上,并由解譯器執行。
1.爪哇卡轉換器 不像爪哇虛擬機一次只能處理一個類別,爪哇卡轉換器的加載和轉換單位是一個包裹。轉換器會預先處理組成爪哇包裹的類別檔,并且將該包裹轉換成一個CAPn。在轉換的過程中,轉換器會執行下列步驟: *驗證和精簡爪哇語言檢查:確認類別的加載形象(image)妥善形成,同時檢查爪哇卡精簡語言是否有任何違規情況。 *連結和決議:將類別、方法、和區域的符號型參考(symbolicreferences),分解成較緊密的形式,使之可在卡上更有效的處理。 *位碼最佳化:利用在類別加載和連結時期取得的信息,優化其位碼。 *準備和初始化:為不同類別安排儲存空間,并建立VM數據結構;同時初始化靜態變量。 轉換器的輸入不僅包括將被轉換的類別檔,同時還包括了一個或一個以上的輸出檔(exportfiles)。輸出檔內含經由被轉換的類別所輸入的包裹內容的名稱和連結信息。除了產生一個CAP檔之外,轉換器還會為被轉換的包裹產生一個輸出檔。 2.CAP檔和輸出檔 CAP是被轉換的應用程序(convertedapplet)的縮寫。一個CAP檔通常是指定義一個或多個爪哇卡應用程序的包裹。不過,包裹未必定義一個應用程序。在該情況下,CAP文件可代表一個數據庫包裹,提供由應用程序所共享的一般類別和服務。例如,爪哇卡架構API包裹全都是數據庫包裹。 爪哇程序的一但編寫隨處執行(writeoncerunanywhere)或許是爪哇平臺最重要的特色。在爪哇技術中,類別文件是爪哇結構的中心部分。其定義出爪哇平臺二元碼兼容性(binarycompatibility)的標準。由于爪哇卡虛擬機結構的分散特性,CAP檔可為爪哇平臺執行碼兼容性設定標準檔案格式。CAP文件格式是一種特別形式,軟件可以此種形式載在執行爪哇卡執行時期環境的智能卡上。 輸出檔并非載在智能卡上,因此爪哇卡解譯器并不直接使用之。相反的,輸出檔是轉換器因連結目的而產生和使用的。輸出文件可被認為C語言中的起頭文件(headerfile)。輸出文件包含整個類別包裹的公共API信息(類別的名稱和連結信息、接口、方法、和包裹中的區域),程序開發者可以自由的將輸出文件送到該應用程序的潛在使用者處。 3.爪哇卡解譯器 爪哇卡解譯器本身不加載或操控CAP檔。它只執行在CAP檔中所發現的爪哇卡應用程序,CAP文件是由安裝器所加載。爪哇卡解譯器和安裝器之間的功能劃分,使得解譯器既小巧,同時還使安裝器的實作極有彈性。 爪哇卡解譯器在實施執行時期安全上扮演重要的角色。例如解譯器經由應用程序之防火墻機能,控制了對JCRE服務和應用程序內部通訊的存取。 到目前為止,本文一直說明爪哇卡虛擬機是包含轉換器和解譯器在內。不過,傳統上爪哇卡虛擬機是被定義為虛擬機的卡上部分。虛擬機在我們目前的定義中是解譯器。在早期許多刊物中,這種傳統說法已經不可動搖。因此,在本文剩余部分,爪哇卡解譯器和爪哇卡虛擬機也以此定義為主,除非文章中有特別聲明。 五、爪哇卡執行時期環境 在個人計算機或工作站中,爪哇虛擬機是如操作系統過程一樣執行。當COS過程終結時,爪哇應用程序和其對象就會被自動摧毀。 相反的,爪哇卡虛擬機是在爪哇卡執行時期環境中執行。JCRE是在卡片初始化時期被初始化。在卡片的整個生命期中,JCRE初始化只會被執行一次。在此過程中,JCRE會初始化虛擬機,并且建立對象,以提供JCRE服務并管理應用程序。一旦應用程序被安裝后,JCRE會建立應用程序實體(appletinstances),同時應用程序也會建立對象來儲存資料。 大部分儲存在卡片上的信息,即使在卡片沒電時,也必須獲得保存。非揮發性內存技術(像是EEPROM)就可使智能卡在沒有獲得供電時也能儲存信息。由于JCRE和卡片上所建立的對象常被用來代表持續的應用程序信息,所以JCRE的壽命和卡片的壽命是一樣的。當電力供應中斷時,JCRE可被視為在一個無限長的時頻周期(clockcycle)中運作。 在卡片下一次得到能量時,JCRE就會醒過來,并且開始虛擬機的執行。不過這里有一點值得注意的是,JCRE到時不會回到虛擬機在失去電力時的運作。虛擬機到時會重新設定(reset),并且自main循環一開始的地方開始執行。JCRE重新設定和初始化是不同的,因為它可保存卡片上所建立的應用程序和對象。在重新設定的過程中,如果有交易動作先前未完成,JCRE會執行任何必須的清理動作,以將JCRE帶入前后一致的狀態。 六、爪哇卡API 爪哇卡API是由一組特別規劃的類別所組成,用以設計依據ISO7816模型為基礎的智能卡應用程序。類別的中心和其延伸部分比爪哇平臺上的類別要緊密簡潔,同時能提供基本服務給爪哇卡應用程序。 爪哇卡API包含三個核心包裹和一個延伸包裹。這三個核心包裹分別是java.lang,javacard.framework和javacard.security。延伸包裹為javacardx.crypto。除了在java.lang包裹中的類別之外,熟悉爪哇平臺的程序開發者不一定認識大部分爪哇卡的類別。這是因為許多爪哇類別是支持GUI接口和網絡,以及桌上型檔案系統IO。智能卡并沒有顯示器,同時他們是使用不同的網絡協議和檔案系統結構。 1.java.lang包裹 一般來說,在爪哇卡API中不支持任何爪哇API類別。不過有些來自java.lang包裹的類別,可提供基本的爪哇語言支持。這種類別是Object、Throwable以及一些與VM相關的exception類別。Object類別定義出爪哇卡類別階層的根基,而Throwable類別則提供所有exception一個共同之前導者(ancestor)。在因爪哇語言有違規情況而發生錯誤時,被支持的exception類別可確保爪哇語言的語意正確。例如,爪哇虛擬機和爪哇卡虛擬機在存取到一個空置參考(null-reference)時,都會出一個NullPointerException。在爪哇卡平臺上所支持的類別列于表1。 表1 爪哇卡java.lang包裹 Object Throwable Exception Runtime Exception Arithmetic Excep-tion Array Index out Of Bounds Exception Array Stor Exception Class Cast Excep-tion Index Out Of Bounds Exception NullPointerException SecurityException NegativeArraySizeException 爪哇卡java.lang包裹是在爪哇平臺上與其對等的java.lang的精簡版。由于java.lang包裹中所支持的類別,爪哇卡applet是向上兼容的。在類別通路中所需的爪哇卡類別在可用時,爪哇卡applet即可在桌上型爪哇環境中執行。 2.javacard.framework包裹 javacard.framework是一種基本包裹。它為爪哇卡應用程序的核心功能提供架構類別和接口。最重 要的是,它定義出一個和爪哇應用程序類別具有相同角色的基礎應用程序類別。基礎類別“applet”在 應用程序的生命周期中,為應用程序之執行提供架構,同時也提供和JCRE的交互作用。一個使用者應 用程序類別必須延伸自基礎“applet類別,并且會改寫“applet類別中的方法,以實施應用程序的功能。 在javacard.framework包裹中另一個重要的類別是APDU類別。APDU為applicationprotocoldataunits之縮寫,是在智能卡應用程序和主機應用程序之間交換的資料包裹。每個APDU包含一個主機下給智能卡應用程序的指令,或應用程序回給主機的響應。應用程序開發者可以使用在APDU類別中所提供的方法,而更輕易的處理APDU指令。 java.lang.System類別是不被支持的。爪哇卡平臺會提供接口給系統行為的javacard.framework.JCSystem類別。JCSystem類別包括一組方法,來控制應用程序的執行、資源管理、交易管理、以及在爪哇卡平臺上應用程序和應用程序之間的對象分享。 其它在javacard.framework包裹中所支持的類別是個人識別碼(PIN)、工具(utility)、和exceptions類別。 3.javacard.security包裹 javacard.security包裹提供架構給爪哇卡平臺上所支持的密碼學(cryptographic)功能。其設計是以java.security包裹為基礎。 javacard.security包裹定義出一個關鍵的類別keyBuilder和各種接口。這些接口代表在對稱(DES)或非對稱(DSA和RSA)演算中所使用的密碼金鑰。此外它還支持抽象基礎類別RandomData,Signature,和MessageDigest。這些類別是用來產生隨機資料,并計算訊息摘要(digests)和簽章(signatures)。 4.javacardx.crypto包裹 javacardx.crypto包裹是一延伸(extension)包裹。其包含密碼學類別和輸出所控制的功能接口。javacardx.crypto包裹定義出支持編碼和譯碼功能的抽象基礎類別Cipher。 javacard.security和javacardx.crypto包裹定義出應用程序呼叫密碼學服務的API接口。不過,它們并不提供任何實作。JCRE提供者需要供應可執行關鍵接口的類別,和自抽象類別RandomData,Signature,MessageDigest,和Cipher所延伸出的類別。通常在智能卡上會存有一個獨立的密碼輔助處理器,來執行密碼學計算。 七、爪哇卡應用程序 爪哇卡應用程序被稱為applet。它就像其它計算機操作系統環境中的應用程序處理或使用者空間一樣。 您不該只因為它們名稱中都有應用程序,而將爪哇卡應用程序和爪哇應用程序給搞混了。爪哇卡應用程序是一種依附一組規范的爪哇程序,因此能在爪哇卡執行時期環境內執行。爪哇卡應用程序并不預期在瀏覽器環境中執行。 選擇應用程序來命名爪哇卡應用程序的理由,是爪哇卡應用程序在卡片被生產之后可加載爪哇卡執行時期環境內。也就是說,不像許多嵌入系統,應用程序得要嵌入ROM。相反的,它們可在稍后被動態的下載到卡片上。 爪哇卡執行時期環境支持一個多重應用環境。每個應用程序都由一個AID獨一認定。一個應用程序也可以多重實例。例如,您可為了支持美金,建立一個電子錢包(wallet)應用程序實例,另外為英鎊建立一個電子錢包應用程序實例。 應用程序類別必須延伸自javacard.framework.Applet類別。基礎applet類別是所有駐在爪哇卡上的應用程序的超級類別。其定義出應用程序必須支持的一般方法,以便在應用程序的生命周期內和JCRE交互作用。 八、應用程序開發過程 爪哇卡應用程序開發的開始和其它任何爪哇程序一樣,也就是程序開發者編寫一個或一個以上的爪哇類別,并以爪哇編碼器來編輯來源碼,并如圖三所示,產生一個或一個以上的類別檔。一個應用程序會被組織成一個包裹或一組包裹。最小的應用程序是具有一個自 javacard.framework.Applet類別所得來的單一類別的包裹。 首先,應用程序在個人計算機或工作站的爪哇環境中被執行、測試、并進行除蟲動作。此過程乃利用現存的爪哇開發工具來測試應用程序的功能。不過,在此步驟中,爪哇卡平臺的部分特點無法被測試,例如應用程序防火墻、和對象的暫時性以及持續性行為就無法被測試。 接下來,應用程序是在一個仿真環境中進行測試。仿真器會在個人計算機或工作站上仿真爪哇卡執行時期環境。應用程序在仿真器執行的行為應該和它在一個真正卡片中執行的行為一樣。在此開發階段,不但應用程序會被進一步測試,應用程序的執行時期行為也會被測試。
通常,仿真器和除蟲器是一起的。除蟲器可讓您設定一個分隔點(breakpoint),或將程序變成單一步驟,并且看到仿真爪哇執行時期環境中應用程序變化的執行狀態。 最后當應用程序準備被下載進一個真正的卡片內時,組成應用程序的類別文件會利用爪哇卡轉換器而轉換成CAP檔案。應用程序的轉換過程列于圖四。轉換器的輸入不僅包括將被轉換的類別檔,同時還包括了一個或一個以上的輸出檔。當應用程序包裹在轉換時,轉換器也同時產生該包裹的一個輸出檔。一個CAP檔或一個輸出檔代表一個爪哇包裹。在進行轉換之后,由一個或數個CAP文件所代表的應用程序,會被加載并安裝在爪哇智能卡上。
|