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