亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

采用文本屏障在小型注腳設(shè)備上實(shí)施安全的技術(shù)的制作方法

文檔序號(hào):6400595閱讀:172來(lái)源:國(guó)知局

專利名稱::采用文本屏障在小型注腳設(shè)備上實(shí)施安全的技術(shù)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及計(jì)算機(jī)安全性,特別涉及用于在一個(gè)小型注腳設(shè)備(smallfootprintdevices)如智能卡上實(shí)現(xiàn)安全性的技術(shù)。
背景技術(shù)
:在本
技術(shù)領(lǐng)域
中具有多個(gè)公知的面向?qū)ο蟮木幊陶Z(yǔ)言。其中的例子包括C++語(yǔ)言和Smalltalk語(yǔ)言。另一種面向?qū)ο蟮木幊陶Z(yǔ)言是JAVATM語(yǔ)言。在由JamesGosling等人編寫(xiě)、Addison-Wesley出版的手冊(cè)《JavaTM語(yǔ)言說(shuō)明書(shū)》(JavaTMLanguageSpecification)中對(duì)該語(yǔ)言進(jìn)行了說(shuō)明。在此通過(guò)參考該手冊(cè)而將其作為本申請(qǐng)的一部分。JAVATM語(yǔ)言特別適合于在一個(gè)JavaTM虛擬機(jī)上運(yùn)行。在由TimLindholm和FrankYellin編寫(xiě)、Addison-Wesley出版的手冊(cè)《JavaTM虛擬機(jī)說(shuō)明書(shū)》(JavaTMVirtualMachineSpecification)中對(duì)該虛擬機(jī)進(jìn)行了說(shuō)明,在此通過(guò)參考該手冊(cè)而將其作為本申請(qǐng)的一部分。在本
技術(shù)領(lǐng)域
中也具有多個(gè)公知的小型注腳設(shè)備。它們包括智能卡、移動(dòng)電話以及各種其它小型或微型設(shè)備。智能卡在尺寸和形狀上與信用卡相似,但典型地包含在卡內(nèi)數(shù)據(jù)處理的能力(例如一個(gè)處理器或邏輯執(zhí)行處理功能)和一組觸點(diǎn),通過(guò)該觸點(diǎn)可以實(shí)現(xiàn)與智能卡進(jìn)行程序、數(shù)據(jù)和其它通信。典型的,觸點(diǎn)組包括一個(gè)電源連接和一個(gè)回路(return)以及一個(gè)時(shí)鐘輸入、一個(gè)復(fù)位輸入和一個(gè)數(shù)據(jù)端口,通過(guò)該數(shù)據(jù)端口可以進(jìn)行數(shù)據(jù)通信。利用一個(gè)智能識(shí)別卡設(shè)備可將信息寫(xiě)入一個(gè)智能卡中以及從一個(gè)智能卡中檢索到該信息。一個(gè)智能識(shí)別卡設(shè)備典型的為附著在一個(gè)主計(jì)算機(jī)上的一個(gè)外圍設(shè)備并包含一個(gè)卡端口,如一個(gè)槽,一個(gè)智能卡可以插入到上述卡端口中。一旦將智能卡插入其中,來(lái)自一個(gè)連接器的接觸或輕觸施加到智能卡的連接區(qū)域從而能接通電源并允許與典型的在一個(gè)智能卡上找到的處理器和存儲(chǔ)器進(jìn)行通信。智能卡和智能識(shí)別卡設(shè)備(cardacceptancedevices,即CADs)是擴(kuò)展的標(biāo)準(zhǔn)計(jì)劃如ISO7816的研究對(duì)象。在網(wǎng)絡(luò)環(huán)境中利用防火墻來(lái)將授權(quán)用戶和非法用戶分開(kāi)是公知的方法。例如在美國(guó)專利申請(qǐng)第09/203,719號(hào)中披露了一種防火墻,該申請(qǐng)的申請(qǐng)日為1998年12月1日,標(biāo)題為“鑒別的防火墻貫穿框架(AUTHENTICATEDFIREWALLTUNNELLINGFRAMEWORK)”,發(fā)明人為DavidBrownell(案卷第50435-023/P2789/TJC),在此通過(guò)參考該申請(qǐng)而將其作為本申請(qǐng)的一部分?,F(xiàn)已對(duì)全JAVATM平臺(tái)容量的一個(gè)子集進(jìn)行了定義并將其應(yīng)用到小型注腳設(shè)備如智能卡上。該子集被稱為JavaCardTM平臺(tái)。在下列的公開(kāi)出版物中對(duì)JavaCardTM平臺(tái)進(jìn)行了描述。JAVACARDTM2.0-語(yǔ)言子集和虛擬機(jī)說(shuō)明書(shū)(LANGUAGESUBSETANDVIRTUALMACHINESPECIFICATION);JAVACARDTM2.1-應(yīng)用程序接口(APPLICATIONPROGRAMMINGINTERFACES);JAVACARDTM2.0-程序設(shè)計(jì)概念(PROGRAMMINGCONCEPTS);JAVACARDTMAPPLET(APPLET為JAVA的程序)開(kāi)發(fā)指南(APPLETDEVELOPER’SGUIDE)。在此通過(guò)參考這些出版物而將其作為本申請(qǐng)的一部分。ISO7816的一個(gè)工作草案—第11部分為了征求意見(jiàn)已經(jīng)被傳播出去。該草案詳細(xì)說(shuō)明了用于允許分離執(zhí)行文本而在一個(gè)智能卡上運(yùn)行的標(biāo)準(zhǔn)。在此通過(guò)參考該草案的副本而將其作為本申請(qǐng)的一部分。在計(jì)算機(jī)科學(xué)領(lǐng)域一個(gè)執(zhí)行文本的概念是公知的。一般而言,在一個(gè)計(jì)算環(huán)境中使用多個(gè)執(zhí)行文本可以提供一種相互間分離或隔離不同程序模塊或處理的方式,這樣每一個(gè)都可獨(dú)立運(yùn)行而不受來(lái)自其他的干擾。在不同文本之間的相互作用應(yīng)比較謹(jǐn)慎,并對(duì)其進(jìn)行仔細(xì)地控制以便保持每一個(gè)文本的完整性。在較大硬件設(shè)備例如大型機(jī)中可以看到多個(gè)文本的一個(gè)例子,其中可形成多個(gè)虛擬機(jī),每一個(gè)虛擬機(jī)都具有其自己的執(zhí)行文本。在發(fā)明人為DeJong的美國(guó)專利第5802519號(hào)中可以看到另一個(gè)例子,其描述了在一個(gè)智能卡上多個(gè)執(zhí)行文本的使用。本領(lǐng)域技術(shù)人員容易理解的是提供多個(gè)執(zhí)行文本的一個(gè)計(jì)算環(huán)境也需要提供一個(gè)機(jī)構(gòu)從而將任何給定的執(zhí)行代碼與其對(duì)應(yīng)的文本相聯(lián)系。一個(gè)當(dāng)前文本(context)的概念也是公知的。支持多文本的某一個(gè)計(jì)算環(huán)境在任何給定的時(shí)刻會(huì)將一個(gè)文本特別的視為一個(gè)計(jì)算激活焦點(diǎn)(activefocus)。該文本被稱為“當(dāng)前文本”。當(dāng)當(dāng)前文本改變時(shí),一些其它文本會(huì)變成當(dāng)前文本,就發(fā)生了“文本轉(zhuǎn)換”。本領(lǐng)域技術(shù)人員容易理解的是這些計(jì)算環(huán)境提供了用于記錄哪一個(gè)文本是當(dāng)前文本并便于文本轉(zhuǎn)換的機(jī)構(gòu)。在現(xiàn)有技術(shù)的小型注腳設(shè)備領(lǐng)域中(world),特別是在智能卡的領(lǐng)域(world)中,運(yùn)行在小型注腳設(shè)備上的文本之間沒(méi)有相互的操作。每一個(gè)文本都是完全獨(dú)立的運(yùn)行并在其文本空間中運(yùn)行或出錯(cuò),而不影響其它應(yīng)用程序或在另一個(gè)不同的文本中進(jìn)行處理。JavaTM平臺(tái)使用的安全保護(hù)的一個(gè)層通常指的是一個(gè)沙箱模型(sandboxmodel)。非置信的代碼被放置在一個(gè)“沙箱”中,該代碼在“沙箱”中可以安全的“運(yùn)行”而不會(huì)對(duì)“現(xiàn)實(shí)世界”或全JavaTM環(huán)境造成任何危害。在這樣的一個(gè)環(huán)境中,JavaTMapplets程序不進(jìn)行通信,而每一個(gè)都有其自己的名稱空間。一些智能卡操作系統(tǒng)不允許執(zhí)行文本進(jìn)行直接通信,而允許通過(guò)一個(gè)操作系統(tǒng)或一個(gè)服務(wù)器進(jìn)行通信。存在的問(wèn)題當(dāng)試圖將計(jì)算機(jī)程序和其它信息置于在一個(gè)小型注腳設(shè)備上時(shí)會(huì)產(chǎn)生許多問(wèn)題。令人關(guān)注的問(wèn)題中的一個(gè)是非常有限的存儲(chǔ)空間的存在。這就經(jīng)常需要特別的努力來(lái)提供在存儲(chǔ)空間中所需的功能。與小型注腳設(shè)備相聯(lián)系的第二個(gè)問(wèn)題是不同的小型注腳設(shè)備制造商使用不同的操作系統(tǒng)。結(jié)果為一種操作系統(tǒng)開(kāi)發(fā)的應(yīng)用程序與由一不同制造商生產(chǎn)的生產(chǎn)的小型注腳設(shè)備是不兼容的(necessarilyportable)。如果來(lái)自多個(gè)程序源(制造商和銷售商)的程序被應(yīng)用到一個(gè)單個(gè)小型注腳設(shè)備中,當(dāng)一個(gè)新程序被加載到小型注腳設(shè)備中并試圖避免對(duì)現(xiàn)存的程序和數(shù)據(jù)進(jìn)行訛誤時(shí),安全性能會(huì)變?yōu)橐粋€(gè)重要因素。當(dāng)希望阻止一個(gè)黑客或有敵意的人訪問(wèn)程序和數(shù)據(jù)時(shí),也會(huì)存在相同的問(wèn)題。很明顯小型注腳設(shè)備如智能卡不具有執(zhí)行分離虛擬機(jī)的資源。然而卻希望在分離的執(zhí)行文本之間保持嚴(yán)格的安全性能。在過(guò)去,僅通過(guò)將來(lái)自相同的源頭或一個(gè)公知的置信源的應(yīng)用程序加載到一個(gè)智能卡或其他小型注腳設(shè)備上來(lái)保障安全。因此,希望在選擇的執(zhí)行文本之間僅以安全的方式允許面向?qū)ο蟮南嗷ゲ僮?,該安全方式是通過(guò)高效率的對(duì)等式通信,其不會(huì)將不適當(dāng)?shù)呢?fù)擔(dān)壓在程序員身上,但卻便于動(dòng)態(tài)的調(diào)入由非置信源在不同時(shí)間寫(xiě)成的applets程序。
發(fā)明內(nèi)容本發(fā)明提供一種文本屏障(有時(shí)也指一種防火墻),該文本屏障可將一個(gè)文本從另一個(gè)中分離和隔離出來(lái),并且當(dāng)需要時(shí)可以提供通過(guò)文本屏障的控制訪問(wèn)。本發(fā)明提供了一種操作具有一處理機(jī)(410)的小型注腳設(shè)備(400)的方法,其中程序模塊在該處理機(jī)上執(zhí)行,該方法包括在各自的文本(420,620;760,770,780;1000,1010,1020)中執(zhí)行包括一個(gè)或多個(gè)程序模塊的組,一程序模塊的多個(gè)對(duì)象與一特定的文本相關(guān)聯(lián);以及提供一個(gè)文本屏障(600;600’),用于分隔并隔離所述文本,并用于控制在一個(gè)文本中執(zhí)行的一程序模塊對(duì)于在另一個(gè)文本中信息和/或運(yùn)行的一程序模塊進(jìn)行面向?qū)ο蟮拇嫒?,所述提供一個(gè)文本屏障的步驟進(jìn)一步包括如果所述存取未被授權(quán),禁止所述存?。灰约岸绻龃嫒∫驯皇跈?quán),則允許所述存取。本發(fā)明還提供了一種虛擬機(jī)(720),該虛擬機(jī)配置為執(zhí)行根據(jù)權(quán)利要求1至6其中之一所述的方法操作一小型注腳設(shè)備(400)的程序指令,所述虛擬機(jī)(720)包括一個(gè)解釋裝置,該解釋裝置提供對(duì)于一個(gè)運(yùn)行時(shí)系統(tǒng)(740)的訪問(wèn),所述運(yùn)行時(shí)系統(tǒng)(740)包括一個(gè)用于管理所述多個(gè)對(duì)象的對(duì)象系統(tǒng)。本發(fā)明還提供了一種具有一處理機(jī)(410)的小型注腳設(shè)備(400),其中程序模塊在該處理機(jī)上執(zhí)行,該小型注腳設(shè)備包括處理器(300),用于在各自的文本(420,620;760,770,780;1000,1010,1020)中執(zhí)行包括一個(gè)或多個(gè)程序模塊的組;與一個(gè)特定文本相關(guān)聯(lián)的一個(gè)程序模塊的多個(gè)對(duì)象;以及一個(gè)文本屏障(600;600’),用于分隔并隔離所述文本,并用于控制在一個(gè)文本中執(zhí)行的一程序模塊對(duì)于在另一個(gè)文本中信息和/或運(yùn)行的一程序模塊進(jìn)行面向?qū)ο蟮拇嫒。鑫谋酒琳系倪M(jìn)一步配置為如果所述存取未被授權(quán),禁止所述存取,以及而如果所述存取已被授權(quán),則允許所述存取。本發(fā)明還提供了一種利用配備智能識(shí)別卡設(shè)備(CAD)的設(shè)備通過(guò)網(wǎng)絡(luò)在一通信鏈路上將來(lái)自一服務(wù)器(210)的代碼傳輸至一個(gè)智能卡的方法,所述方法包括接收包括用于根據(jù)權(quán)利要求1至6其中之一所述的方法操作一小型注腳設(shè)備(400)的指令的代碼;以及利用所述配備CAD的設(shè)備通過(guò)所述通信鏈路,從所述服務(wù)器(210)將所述代碼傳輸至所述智能卡。根據(jù)本發(fā)明,在相同的邏輯(即虛擬或物理)計(jì)算機(jī)中運(yùn)行、相互之間進(jìn)行保護(hù)的兩個(gè)執(zhí)行文本,例如每一個(gè)包含一個(gè)或多個(gè)applets程序,可以利用語(yǔ)言機(jī)構(gòu)如面向?qū)ο蟮恼Z(yǔ)言機(jī)構(gòu)以一種控制的、安全方式共享信息。例如安全性能可為逐個(gè)對(duì)象的進(jìn)行(objectbyobject)。這樣在一個(gè)第一執(zhí)行文本中的方法可訪問(wèn)在一個(gè)第二執(zhí)行文本中的一個(gè)第一對(duì)象A,而不能訪問(wèn)在一個(gè)選擇性基礎(chǔ)上的第二執(zhí)行文本中的一個(gè)第二對(duì)象B。根據(jù)本發(fā)明的一個(gè)示范性實(shí)施例,一個(gè)增強(qiáng)型Java虛擬機(jī)(VM)提供了某個(gè)運(yùn)行期間的檢查,可對(duì)在VM中試圖通過(guò)執(zhí)行文本的訪問(wèn)進(jìn)行檢查。可由VM自動(dòng)進(jìn)行檢查或者由具有來(lái)自VM支持的程序編輯器對(duì)檢查進(jìn)行編碼。可使用語(yǔ)言級(jí)通信機(jī)構(gòu)來(lái)完成此工作。在此方面,可以穿過(guò)執(zhí)行文本完成對(duì)象訪問(wèn)而利用語(yǔ)言也可以以相同的方式完成其它對(duì)象訪問(wèn)。這些運(yùn)行時(shí)檢查提供了防護(hù)/安全的一個(gè)第二維(dimension),其超出了JavaTM語(yǔ)言和平臺(tái)已經(jīng)提供的防護(hù)/安全性能。這些機(jī)構(gòu)提供了防止例如因程序錯(cuò)誤(例如當(dāng)一個(gè)數(shù)據(jù)不能被所有文本訪問(wèn)時(shí)而指定其為“公共”(全局)的,)引起的安全漏洞的保護(hù)措施。它們也允許對(duì)共享進(jìn)行精細(xì)的控制(例如選擇對(duì)象進(jìn)行共享或者選擇applet進(jìn)行共享)。本發(fā)明也涉及與本發(fā)明的其它部分相關(guān)的計(jì)算機(jī)程序產(chǎn)品和載波。在參考了附圖以及下面對(duì)本發(fā)明的詳細(xì)描述后,本發(fā)明的前述及其它特點(diǎn)、各個(gè)方面和優(yōu)點(diǎn)會(huì)變得更加清楚。本發(fā)明的特性和優(yōu)點(diǎn)通過(guò)下面的描述中會(huì)變得更加清楚圖1為配備一個(gè)智能識(shí)別卡設(shè)備的一個(gè)計(jì)算機(jī)和與智能識(shí)別卡設(shè)備一起使用的一個(gè)智能卡的示意圖;圖2為配備了一智能識(shí)別卡設(shè)備并與一個(gè)網(wǎng)絡(luò)相連接的一個(gè)計(jì)算機(jī)的示意圖;圖2為配備了一個(gè)智能識(shí)別卡設(shè)備并與一個(gè)網(wǎng)絡(luò)相連接的一個(gè)計(jì)算機(jī)的示意圖;圖3是現(xiàn)有技術(shù)中一個(gè)小型注腳設(shè)備如一個(gè)智能卡的一個(gè)示范性硬件結(jié)構(gòu);圖4顯示了在現(xiàn)有技術(shù)中完成的正在被主體訪問(wèn)的對(duì)象;圖5是一個(gè)示范性安全模型,它可用來(lái)對(duì)本發(fā)明的各個(gè)實(shí)施例進(jìn)行解釋;圖6為根據(jù)本發(fā)明的一個(gè)方面展示了通過(guò)一個(gè)防火墻或文本屏障分離執(zhí)行文本的方框圖;圖7表示用于實(shí)現(xiàn)本發(fā)明的一個(gè)軟件結(jié)構(gòu);圖8為根據(jù)本發(fā)明的一個(gè)方面實(shí)施一個(gè)防火墻的一個(gè)安全實(shí)施過(guò)程的流程圖;圖9為根據(jù)本發(fā)明的一個(gè)方面展示了通過(guò)一個(gè)防火墻訪問(wèn)對(duì)象的一個(gè)方框圖;圖10展示了通過(guò)一個(gè)防火墻訪問(wèn)串聯(lián)對(duì)象的方框圖;圖11為在一個(gè)文本中的一個(gè)主體(principal)允許穿過(guò)一個(gè)防火墻進(jìn)入另一個(gè)文本進(jìn)行訪問(wèn)的過(guò)程的流程圖;圖12展示了使用一個(gè)進(jìn)入點(diǎn)對(duì)象允許穿過(guò)一個(gè)防火墻進(jìn)行訪問(wèn)的方框圖;圖13展示了使用一個(gè)全局?jǐn)?shù)據(jù)結(jié)構(gòu)如一個(gè)陣列穿過(guò)一個(gè)防火墻進(jìn)行訪問(wèn)的方框圖;圖14展示了使用一個(gè)超級(jí)文本(supercontext)允許經(jīng)一個(gè)防火墻進(jìn)行訪問(wèn)的方框圖;圖15展示了使用共享接口對(duì)象允許經(jīng)一個(gè)防火墻進(jìn)行訪問(wèn)的方框圖;圖16為一個(gè)允許經(jīng)一個(gè)防火墻進(jìn)行訪問(wèn)的一個(gè)安全實(shí)施過(guò)程的流程圖;圖17為展示圖16中塊1620具體細(xì)節(jié)的流程圖;圖18展示了一個(gè)示范性執(zhí)行(implementation)圖17中塊1629的流程圖。符號(hào)及命名下面依據(jù)在一個(gè)計(jì)算機(jī)或計(jì)算機(jī)網(wǎng)絡(luò)上執(zhí)行的程序步驟而進(jìn)行詳細(xì)的描述。這些過(guò)程的描述和說(shuō)明是本領(lǐng)域技術(shù)人員使用的、將其工作的實(shí)質(zhì)最有效地傳達(dá)給本領(lǐng)域其他技術(shù)人員的手段。在此的程序通常被構(gòu)思成導(dǎo)致一個(gè)期望的結(jié)果的一個(gè)獨(dú)立順序的步驟。這些步驟需要物理量的物理操作。通常,雖然不是必需的,這些物理量以能夠被存儲(chǔ)、傳送、合并、比較以及其它操作的電或磁信號(hào)的形式出現(xiàn)。為了通常使用的原因,將這些信號(hào)稱為比特、值、元件、符號(hào)、字母、術(shù)語(yǔ)、數(shù)字或其它有時(shí)證明是很方便的。然后應(yīng)注意的是所有這些和相似的術(shù)語(yǔ)都是與適當(dāng)?shù)奈锢砹肯嗦?lián)系并且僅僅是應(yīng)用到這些物理量上的方便標(biāo)記。進(jìn)一步而言,執(zhí)行的操作通常指的是如加或者比較,其通常與一個(gè)操作員進(jìn)行的智力活動(dòng)是相聯(lián)系的。在大多數(shù)情況下,在此描述的構(gòu)成本發(fā)明的部分的任何運(yùn)算中,一個(gè)操作員的能力是不必需的或者不需要的;該運(yùn)算是機(jī)器運(yùn)算。用于執(zhí)行本發(fā)明的運(yùn)算的有用的機(jī)器包括通用的數(shù)字計(jì)算機(jī)或者其它計(jì)算設(shè)備。本發(fā)明也涉及執(zhí)行這些運(yùn)算的設(shè)備??蓪iT(mén)地制造出這些設(shè)備從而能滿足所要求的目的或者其包括一個(gè)通用的計(jì)算機(jī),該計(jì)算機(jī)可被存儲(chǔ)在計(jì)算機(jī)中的一個(gè)計(jì)算機(jī)程序有選擇地激活或者重新配置。在此出現(xiàn)的程序過(guò)程不是固定的與一個(gè)特定的計(jì)算機(jī)或者其它設(shè)備相聯(lián)系。可以將各種通用的機(jī)器與根據(jù)在此的教導(dǎo)而編成的程序一起使用,或者能證明更為便利的制造一個(gè)更為專門(mén)的設(shè)備來(lái)執(zhí)行所需的方法步驟。這樣的各種機(jī)器所需的結(jié)構(gòu)將在下文的描述中出現(xiàn)。具體實(shí)施例方式附加在本說(shuō)明書(shū)之后的附錄是一個(gè)標(biāo)題為《JAVACARD運(yùn)行時(shí)環(huán)境2.1說(shuō)明書(shū)》的文件的一個(gè)未出版的草稿。該草稿文件提供了對(duì)本發(fā)明實(shí)施例的進(jìn)一步詳細(xì)描述并通過(guò)參考該草稿文件而將其作為本說(shuō)明書(shū)的一個(gè)主要部分。雖然在下文中描述的創(chuàng)造性技術(shù)是以智能卡的文本為例子的,但是該例子僅僅是為了展示,而不能用來(lái)限制本發(fā)明的范圍。圖l展示了一個(gè)計(jì)算機(jī)120和一個(gè)智能卡100,該計(jì)算機(jī)120配備一個(gè)智能識(shí)別卡設(shè)備110,該智能卡與智能識(shí)別卡設(shè)備110一起使用。在操作中,智能卡100被插入到智能識(shí)別卡設(shè)備110中,通過(guò)在智能卡100表面上可訪問(wèn)的一組觸點(diǎn)105提供了電源及數(shù)據(jù)連接。當(dāng)將智能卡插入時(shí),智能識(shí)別卡設(shè)備110的配合接觸會(huì)與表面除點(diǎn)105相互連接從而使智能卡上電并允許與設(shè)備上的處理器和存儲(chǔ)器進(jìn)行通信。圖2展示了配備一個(gè)智能識(shí)別卡設(shè)備的一個(gè)計(jì)算機(jī)如圖1中的120與一個(gè)網(wǎng)絡(luò)200相連接。與一個(gè)網(wǎng)絡(luò)相連接的是多個(gè)其它計(jì)算設(shè)備,如服務(wù)器210。有可能在使用智能卡裝備設(shè)備120在網(wǎng)絡(luò)200上將數(shù)據(jù)和軟件加載到一個(gè)智能卡中。該類型(nature)的下載包括被加載到一個(gè)智能卡以及數(shù)字現(xiàn)鈔上的applet程序或其它程序和根據(jù)電子商務(wù)及其它應(yīng)用而使用的其它信息。用于控制智能識(shí)別卡設(shè)備和智能卡的處理部件的指令和數(shù)據(jù)可被存儲(chǔ)在易失存儲(chǔ)器或非易失存儲(chǔ)器中,或可在通信線路如包含指令和/或數(shù)據(jù)的一個(gè)載波上被直接接收。進(jìn)一步而言,網(wǎng)絡(luò)例如可以是一個(gè)LAN或者WAN,諸如互聯(lián)網(wǎng)和其它網(wǎng)絡(luò)。圖3是現(xiàn)有技術(shù)中一個(gè)小型注腳設(shè)備如一個(gè)智能卡的一個(gè)示范性硬件結(jié)構(gòu)。如圖3所示,一個(gè)處理器300與主存儲(chǔ)器310互連,該主存儲(chǔ)器300可包括只讀存儲(chǔ)器315和/或隨機(jī)存取存儲(chǔ)器316。處理器也與一個(gè)第二存儲(chǔ)器320如EEPROM和一個(gè)輸入/輸出330如一個(gè)串口相連接。可以看到該類型(nature)的小型注腳設(shè)備非常簡(jiǎn)單。圖4展示了在現(xiàn)有技術(shù)中完成的被主體(principal)正訪問(wèn)的對(duì)象。如圖4所示,物理設(shè)備400如小型注腳設(shè)備可在其內(nèi)包含一個(gè)或多個(gè)處理機(jī)(虛擬或物理),該處理機(jī)在一個(gè)執(zhí)行文本420上運(yùn)行。執(zhí)行文本例如可為與一個(gè)特定的applet程序相聯(lián)系的一個(gè)文本。在執(zhí)行文本中的一個(gè)或多個(gè)主體(principal)430(例如applets或應(yīng)用程序)可在執(zhí)行文本之內(nèi)搜索訪問(wèn)其它對(duì)象。只要在執(zhí)行文本之內(nèi)發(fā)生訪問(wèn),該訪問(wèn)將被允許并且一切都正常運(yùn)行。圖5是一個(gè)示范性安全模型,它可用來(lái)對(duì)本發(fā)明的各個(gè)實(shí)施例進(jìn)行解釋。它僅是可被利用的許多模型中的一個(gè)并且是用于該目的的一個(gè)常規(guī)模型。在該模型中,一個(gè)主體(principal)500(有時(shí)也稱為實(shí)體)試圖在一個(gè)對(duì)象例如對(duì)象520上實(shí)施一個(gè)操作(action)510??蓪?duì)主體(principal)、對(duì)象和/或試圖實(shí)施的一個(gè)操作進(jìn)行安全檢查。在圖5中展示了兩種類型的對(duì)象,主體(principal)可對(duì)該兩種類型的對(duì)象產(chǎn)生操作。這些包括數(shù)據(jù)對(duì)象(如數(shù)據(jù)1和數(shù)據(jù)2(520,520′))和實(shí)體530。一個(gè)主體(principal)可對(duì)任何這些對(duì)象進(jìn)行操作或試圖進(jìn)行操作。實(shí)體530是主動(dòng)的,而數(shù)據(jù)是被動(dòng)的。從主體(principal)到一個(gè)主動(dòng)實(shí)體的圖表線也被標(biāo)記為“操作”,但與一個(gè)數(shù)據(jù)對(duì)象上的操作相比,這是一個(gè)更為復(fù)雜和隨機(jī)的綜合操作,例如作一個(gè)函數(shù)調(diào)用或者程序(method)調(diào)用或者傳送一個(gè)信息。與利用數(shù)據(jù)的情況一樣,由操作系統(tǒng)實(shí)施的一個(gè)安全檢查可使用主體(principal)本身、實(shí)體本身和/或操作類型。進(jìn)一步而言,被激活的主體可實(shí)施其自己額外的安全檢查。這些可為人們所希望的復(fù)雜并且可以使用主體(principal)本身、實(shí)體的本身、操作和/或其他任何有用的信息。在一個(gè)面向?qū)ο笙到y(tǒng)(例如JavaCardTM平臺(tái))中,“實(shí)體”典型的是數(shù)據(jù)和實(shí)體的一個(gè)聯(lián)合體。當(dāng)一個(gè)主體(principal)試圖訪問(wèn)一個(gè)對(duì)象的域(field)時(shí),這是一個(gè)數(shù)據(jù)訪問(wèn)一由一個(gè)相當(dāng)簡(jiǎn)單安全檢查保護(hù)的一個(gè)相當(dāng)簡(jiǎn)單的操作。當(dāng)一個(gè)主體(principal)試圖訪問(wèn)一個(gè)對(duì)象的程序(method)時(shí),這是一個(gè)實(shí)體訪問(wèn),該實(shí)體訪問(wèn)在操作及安全檢查中可以是隨機(jī)的綜合。圖6為根據(jù)本發(fā)明的一個(gè)方面展示通過(guò)一個(gè)防火墻或文本屏障分離執(zhí)行文本的方框圖。物理設(shè)備400和計(jì)算機(jī)410與圖4中相同的項(xiàng)目相一致。一個(gè)執(zhí)行文本420展示了在文本之內(nèi)一個(gè)試圖訪問(wèn)對(duì)象440的主體(principal)430。該訪問(wèn)通常都會(huì)成功。然而執(zhí)行文本420也展示了一個(gè)試圖穿過(guò)一個(gè)文本屏障600訪問(wèn)執(zhí)行文本620的主體(principal)630。通常如操作635穿過(guò)文本屏障600處的X636標(biāo)記,那樣將禁止該訪問(wèn)。圖7表示用于實(shí)現(xiàn)本發(fā)明的一個(gè)軟件結(jié)構(gòu)。該軟件結(jié)構(gòu)是一個(gè)運(yùn)行時(shí)(runtime)環(huán)境700。通常使用一個(gè)用于小型注腳設(shè)備的操作系統(tǒng)710。在本發(fā)明的一個(gè)示范性實(shí)施例中,一個(gè)虛擬機(jī)720在操作系統(tǒng)之上運(yùn)行。虛擬機(jī)可以是一個(gè)JavaCardTM虛擬機(jī)或者其它虛擬機(jī)。一個(gè)標(biāo)準(zhǔn)虛擬機(jī)的容量可以被擴(kuò)展從而能提供此處所描述的附加功能或者提供分離模塊功能。虛擬機(jī)720可包括一個(gè)能提供訪問(wèn)一個(gè)運(yùn)行時(shí)系統(tǒng)740訪問(wèn)通道的解釋程序或本地執(zhí)行塊730。運(yùn)行時(shí)系統(tǒng)包括用于管理一個(gè)面向?qū)ο髮?shí)施的對(duì)象的對(duì)象系統(tǒng)750。圖中還展示了三個(gè)文本760、770、780。每一個(gè)文本通過(guò)執(zhí)行文本之間的一個(gè)文本屏障(有時(shí)也稱為一個(gè)防火墻)與其它的文本相分離。在一個(gè)特定的實(shí)施例中,文本760是一個(gè)超級(jí)文本。即文本760具有從屬文本770和780所沒(méi)有的特權(quán)和容量,大致包括產(chǎn)生進(jìn)入點(diǎn)對(duì)象或全局?jǐn)?shù)據(jù)結(jié)構(gòu)的特權(quán)以及訪問(wèn)從屬文本770和780內(nèi)的對(duì)象的特權(quán)。每一個(gè)對(duì)象與一個(gè)特定的文本相聯(lián)系。所述的文本擁有與其相聯(lián)系的每一個(gè)對(duì)象。運(yùn)行時(shí)系統(tǒng)740提供了一種用于唯一地識(shí)別文本的手段和一種指定并確認(rèn)當(dāng)前執(zhí)行文本的手段。對(duì)象系統(tǒng)750提供了一個(gè)用于將對(duì)象與其所屬的文本相聯(lián)系的機(jī)構(gòu)。例如運(yùn)行時(shí)系統(tǒng)740可鑒別文本具有一個(gè)唯一的名稱,相應(yīng)地,對(duì)象系統(tǒng)750通過(guò)將文本名稱記錄在對(duì)象頭中而將對(duì)象與該文本相聯(lián)系。對(duì)象頭中的信息不能由面向?qū)ο蟮木幊陶Z(yǔ)言寫(xiě)成的程序來(lái)訪問(wèn),而僅由虛擬機(jī)720本身可以??蛇x擇的是,運(yùn)行時(shí)系統(tǒng)740可通過(guò)將存儲(chǔ)空間分割成分離的區(qū)域,每一個(gè)分離的區(qū)域用于一個(gè)特定的文本來(lái)識(shí)別文本,相應(yīng)地,對(duì)象系統(tǒng)750可通過(guò)將對(duì)象的存儲(chǔ)器分配到該文本存儲(chǔ)空間中而將對(duì)象與該文本相聯(lián)系在一起。圖8為根據(jù)本發(fā)明的一個(gè)方面實(shí)施一個(gè)防火墻的一個(gè)安全實(shí)施過(guò)程的流程圖。當(dāng)一個(gè)主體(principal)調(diào)用一個(gè)對(duì)象上的一個(gè)操作時(shí)(800),將做一個(gè)檢查來(lái)確認(rèn)該對(duì)象是否在主體(principal)的文本之內(nèi)(810)。如果不在其內(nèi),則將禁止該操作(840)。否則允許該操作進(jìn)行(830)。這是文本屏障或防火墻的最簡(jiǎn)單的形式。在一個(gè)特定的實(shí)施例中,如果對(duì)象位于文本請(qǐng)求訪問(wèn)的名稱空間和存儲(chǔ)空間之外,通過(guò)實(shí)施一個(gè)安全異常而將禁止操作發(fā)生(840)。圖9為根據(jù)本發(fā)明的一個(gè)方面展示了通過(guò)一個(gè)防火墻訪問(wèn)對(duì)象的一個(gè)方框圖。圖9與圖6大致相似。然而圖9也展示了主體(principal)900為了在對(duì)象910上實(shí)施操作905而去搜索訪問(wèn)對(duì)象910。根據(jù)本發(fā)明,操作905被允許經(jīng)訪問(wèn)點(diǎn)920而穿過(guò)防火墻,而不是具有被防火墻600阻擋的訪問(wèn)通道,在該訪問(wèn)通道上操作635被禁止,這樣盡管事實(shí)是主體(principal)和對(duì)象位于不同的執(zhí)行文本中,主體(principal)900也可在對(duì)象910上實(shí)施操作905。參考附圖12-18在下文中對(duì)訪問(wèn)點(diǎn)920之后的機(jī)構(gòu)進(jìn)行說(shuō)明。注意訪問(wèn)點(diǎn)920可以與阻塞的訪問(wèn)通道如X636共存。這樣訪問(wèn)點(diǎn)920可以提供通過(guò)文本屏障600精細(xì)的共享控制(逐個(gè)對(duì)象的安全性)。當(dāng)對(duì)象訪問(wèn)900被初始化時(shí),當(dāng)前的文本設(shè)置是文本420。如果對(duì)象91O是一個(gè)數(shù)據(jù)對(duì)象,操作950就是一個(gè)簡(jiǎn)單的數(shù)據(jù)訪問(wèn)并且在第二文本620中不執(zhí)行代碼。如果對(duì)象910是一個(gè)實(shí)體對(duì)象,操作905將導(dǎo)致執(zhí)行對(duì)象的代碼,該代碼是在第二文本中被執(zhí)行的。為了在正確的文本620中執(zhí)行對(duì)象91O的代碼,虛擬機(jī)410實(shí)施了一個(gè)文本轉(zhuǎn)換。文本轉(zhuǎn)換將當(dāng)前的文本設(shè)置改變?yōu)槲谋?20并且當(dāng)前的文本設(shè)置的前值被保存下來(lái),這樣該值可在以后被恢復(fù)。在返回時(shí),虛擬機(jī)必須將當(dāng)前文本設(shè)置的值恢復(fù)為其前值。圖10展示了通過(guò)一個(gè)防火墻訪問(wèn)串聯(lián)對(duì)象的方框圖。圖10展示了三個(gè)執(zhí)行文本1000、1010、1020。在執(zhí)行文本1中主體(principal)1030搜索調(diào)用執(zhí)行文本2中的對(duì)象1050上的一個(gè)操作1035,并通過(guò)文本屏障600上的訪問(wèn)點(diǎn)1070而完成上述訪問(wèn)。在執(zhí)行文本2中的對(duì)象1050具有一個(gè)對(duì)象訪問(wèn)1040,該對(duì)象訪問(wèn)1040可搜索訪問(wèn)在執(zhí)行文本3內(nèi)的對(duì)象1060上的一個(gè)操作1045。通過(guò)使用分離執(zhí)行文本2和3的文本屏障600內(nèi)的訪問(wèn)點(diǎn)而完成上述訪問(wèn)。執(zhí)行文本2中的對(duì)象1050具有另一個(gè)對(duì)象訪問(wèn)1090,該對(duì)象訪問(wèn)1090可以調(diào)用位于同一個(gè)執(zhí)行文本即執(zhí)行文本2內(nèi)的一個(gè)對(duì)象1095上的一個(gè)操作。操作1035和1045都導(dǎo)致了如對(duì)圖9的解釋中所描述的文本轉(zhuǎn)換。但因?yàn)椴僮?095不穿過(guò)文本屏障,對(duì)其執(zhí)行時(shí)不需要文本轉(zhuǎn)換,因此不會(huì)發(fā)生文本轉(zhuǎn)換。圖11為在一個(gè)文本中的一個(gè)主體(principal)允許穿過(guò)一個(gè)防火墻進(jìn)入另一個(gè)文本來(lái)訪問(wèn)的過(guò)程的流程圖。該過(guò)程基本上具有三個(gè)步驟。在執(zhí)行文本2中,產(chǎn)生一個(gè)將被訪問(wèn)的對(duì)象并被指定為可共享(1100)。在執(zhí)行文本1中,主體(principal)獲得一個(gè)執(zhí)行文本2中的對(duì)象的一個(gè)基準(zhǔn)地址(reference)(1110)。然后在執(zhí)行文本1的主體(principal)調(diào)用在文本2中的被指定為可共享的對(duì)象上的一個(gè)操作(1120)。關(guān)于如在圖11的項(xiàng)目1100中所述的將一個(gè)已產(chǎn)生的對(duì)象識(shí)別或分配為可共享的,根據(jù)本發(fā)明的一個(gè)特定實(shí)施例,可通過(guò)包括在一個(gè)對(duì)象表示的頭內(nèi)的一個(gè)可共享屬性來(lái)完成上述工作。由面向?qū)ο蟮木幊陶Z(yǔ)言所編寫(xiě)的程序不能訪問(wèn)一個(gè)對(duì)象頭內(nèi)的信息,但僅VM本身可以。獲得另一個(gè)文本內(nèi)的一個(gè)對(duì)象的一個(gè)基準(zhǔn)地址是訪問(wèn)另一個(gè)文本內(nèi)的一個(gè)對(duì)象的一個(gè)特例。提供訪問(wèn)另一個(gè)文本內(nèi)的一個(gè)對(duì)象的訪問(wèn)通道的一個(gè)機(jī)構(gòu)可以使得其它對(duì)象也能被訪問(wèn)。例如,調(diào)用另一個(gè)文本內(nèi)的一個(gè)對(duì)象的程序(method)可以向一個(gè)不同的文本之內(nèi)的一個(gè)第二對(duì)象反饋一個(gè)基準(zhǔn)地址。需要一個(gè)附加的機(jī)構(gòu)來(lái)允許得到一個(gè)不同的文本中的一個(gè)對(duì)象的一個(gè)初始基準(zhǔn)地址。在一個(gè)特定的實(shí)施例中,可使用一個(gè)公共API來(lái)得到某公知的進(jìn)入點(diǎn)對(duì)象的基準(zhǔn)地址。一旦得到了一個(gè)不同文本內(nèi)的一的對(duì)象的初始基準(zhǔn)地址,可從該對(duì)象上獲得進(jìn)一步的基準(zhǔn)地址,由此繼續(xù)下去。根據(jù)本發(fā)明有四個(gè)穿過(guò)一個(gè)文本屏障獲得信息的常規(guī)途徑。為了穿過(guò)一個(gè)文本屏障訪問(wèn)一個(gè)對(duì)象或者穿過(guò)一個(gè)文本屏障獲得將要訪問(wèn)的一個(gè)對(duì)象的一個(gè)基準(zhǔn)地址,可以單獨(dú)使用或者也可以聯(lián)合使用這些途徑(1110)。在圖12-18中對(duì)這些途徑進(jìn)行了描述。圖12展示了使用一個(gè)進(jìn)入點(diǎn)對(duì)象允許穿過(guò)一個(gè)防火墻進(jìn)行訪問(wèn)的方框圖。如圖12所示,在文本770(文本1)中的一些對(duì)象1200希望訪問(wèn)到超級(jí)文本760中的信息。在一個(gè)特定的實(shí)施例中,一個(gè)超級(jí)文本760包含至少一個(gè)進(jìn)入點(diǎn)對(duì)象1210。進(jìn)入點(diǎn)對(duì)象1210可被公布(publish)成為一個(gè)公共API的部分或者通過(guò)一個(gè)公布(publish)的API使得進(jìn)入點(diǎn)對(duì)象1210可間接地得到(如根據(jù)在前描述的機(jī)構(gòu)并參考圖11),這樣從屬于超級(jí)文本的每一個(gè)文本可與超級(jí)文本的進(jìn)入點(diǎn)對(duì)象進(jìn)行通信(可以理解的是在其他實(shí)施例中,進(jìn)入點(diǎn)對(duì)象可以由一個(gè)文本容納而不是超級(jí)文本容納)。圖13展示了使用一個(gè)全局?jǐn)?shù)據(jù)結(jié)構(gòu)穿過(guò)一個(gè)防火墻進(jìn)行訪問(wèn)的方框圖。在這個(gè)途徑中,超級(jí)文本760產(chǎn)生一個(gè)全局?jǐn)?shù)據(jù)結(jié)構(gòu)如一個(gè)全局陣列。在特定的實(shí)施例中,超級(jí)文本760是能被允許產(chǎn)生一個(gè)全局?jǐn)?shù)據(jù)結(jié)構(gòu)的唯一文本(可以理解的是在其他實(shí)施例中,全局?jǐn)?shù)據(jù)可以由一個(gè)文本容納而不是超級(jí)文本容納)。依據(jù)全局?jǐn)?shù)據(jù)的狀態(tài),每一個(gè)文本770和780可對(duì)全局?jǐn)?shù)據(jù)結(jié)構(gòu)進(jìn)行讀和寫(xiě)。這樣由一個(gè)文本寫(xiě)入到全局?jǐn)?shù)據(jù)結(jié)構(gòu)內(nèi)的信息可被另一個(gè)文本讀出。例如該機(jī)構(gòu)可用來(lái)在文本之間傳送二進(jìn)制數(shù)據(jù)或者對(duì)象的基準(zhǔn)地址。圖14展示了使用一個(gè)超級(jí)文本(supercontext)特權(quán)允許經(jīng)一個(gè)防火墻進(jìn)行訪問(wèn)的方框圖。在圖14中,超級(jí)文本760內(nèi)的一個(gè)對(duì)象穿過(guò)分離兩個(gè)文本的文本屏障搜索訪問(wèn)文本780。依據(jù)與超級(jí)文本相聯(lián)系的特權(quán),超級(jí)文本760可以調(diào)用文本780內(nèi)的任何程序(method)以及可以訪問(wèn)包含在文本780內(nèi)的任何數(shù)據(jù)。圖15展示了使用共享接口對(duì)象允許經(jīng)一個(gè)防火墻進(jìn)行訪問(wèn)的方框圖。一個(gè)可共享的接口形成了一組可共享的接口程序(method)。一個(gè)可共享的接口對(duì)象是一個(gè)能實(shí)施在一個(gè)共享接口中形成的至少一組程序(method)的一個(gè)對(duì)象。在圖15中,文本2(780)中的對(duì)象1210是一個(gè)可共享的接口對(duì)象。如果對(duì)象訪問(wèn)1200的主體(principal)被對(duì)象1210授權(quán)可進(jìn)行訪問(wèn),在另一個(gè)文本770中的一個(gè)對(duì)象訪問(wèn)1200可調(diào)用對(duì)象1210上的任何可共享的程序(method)。在下文中參考圖18進(jìn)一步討論該授權(quán)??梢岳斫獾氖?,與本發(fā)明相一致的一個(gè)虛擬機(jī)可以提供的功能超出了在前的虛擬機(jī)所能提供的功能,在前的虛擬機(jī)可以是如在《JavaTM虛擬機(jī)說(shuō)明書(shū)》(JavaTMVirtualMachineSpecification)中所描述的虛擬機(jī)。特別地,與本發(fā)明相一致的虛擬機(jī)提供了實(shí)施或者便于一個(gè)安全實(shí)施過(guò)程的功能,該過(guò)程允許穿過(guò)一個(gè)防火墻進(jìn)行訪問(wèn)。在下文中參考圖16-18對(duì)該過(guò)程進(jìn)行討論。需要注意的是任何可穿過(guò)防火墻的進(jìn)行訪問(wèn)的途徑都是適用的,包括但不限制于上面參考圖12-15所描述的四個(gè)途徑。圖16為一個(gè)允許經(jīng)一個(gè)防火墻進(jìn)行訪問(wèn)的一個(gè)安全實(shí)施過(guò)程的流程圖。當(dāng)一個(gè)主體(principal)試圖調(diào)用一個(gè)對(duì)象上的操作時(shí)(1600),將會(huì)做一檢查以確認(rèn)該對(duì)象是否在主體(principal)的文本之內(nèi)(1610)。如果是(1610-Y),將允許進(jìn)行操作(1630)。如果不是(1610-N),將做一檢查以確認(rèn)主體(principal)的操作是否允許在對(duì)象上實(shí)施(1620)。如果是(1620-Y),將允許進(jìn)行操作(1630)。如果不是(1620-N),則不允許進(jìn)行操作。在特定的實(shí)施例中排除了(throw)一個(gè)安全異常(1640)。圖17為展示圖16中塊1620具體細(xì)節(jié)的流程圖。如果對(duì)象沒(méi)有位于主體(principal)的文本之內(nèi)(1610-N),將采取多個(gè)測(cè)試1621、1622、1623、……1629以便弄清楚主體(principal)的操作是否允許在對(duì)象上進(jìn)行。這些測(cè)試可以在一個(gè)虛擬機(jī)面向?qū)ο髮?shí)現(xiàn)(implementation)中由虛擬機(jī)單獨(dú)完成或者由虛擬機(jī)和對(duì)象共同完成。如果任何一個(gè)測(cè)試結(jié)果是通過(guò),將允許進(jìn)行操作(1630)。然而如果所有的測(cè)試都是不能通過(guò)(162X-NO),將禁止進(jìn)行操作。在一個(gè)特定的實(shí)施例中,一個(gè)安全異常將被排除掉(1640)。這些測(cè)試涉及參考圖12-15討論的允許進(jìn)行的訪問(wèn)。圖18展示了一個(gè)示范性實(shí)現(xiàn)(implementation)圖17中塊1629的流程圖,其中與圖15中描述的訪問(wèn)程序(accessmethod)一起使用。在一個(gè)測(cè)試如829或者1629中,一個(gè)虛擬機(jī)檢查對(duì)象是否是一個(gè)共享對(duì)象1810。如果不是(1810-N),測(cè)試失敗。然而如果是(1810-Y),虛擬機(jī)將調(diào)用對(duì)象0上的一個(gè)程序(method)A(1820)。如果對(duì)象0上的程序(method)A確認(rèn)主體(principal)是被授權(quán)的(1830),將通過(guò)測(cè)試并允許進(jìn)行訪問(wèn)。否則測(cè)試失敗(1850)。這樣允許授權(quán)文本(authorizationtext)被編成對(duì)象本身的代碼。雖然利用一個(gè)智能卡執(zhí)行(implementation)對(duì)本發(fā)明進(jìn)行了描述,然而本發(fā)明可以應(yīng)用到具有小型注腳的其他設(shè)備上,而不僅僅是智能卡。具有小型注腳的設(shè)備通常被認(rèn)為是那些在存儲(chǔ)或者在計(jì)算能力或速度方面受限制或約束的設(shè)備。這些小型注腳設(shè)備包括邊界掃描設(shè)備、場(chǎng)可編程設(shè)備、尋呼機(jī)和移動(dòng)電話以及其它許多設(shè)備。通常,小型注腳設(shè)備是資源約束型計(jì)算設(shè)備和系統(tǒng),其中執(zhí)行文本的安全內(nèi)運(yùn)行是令人關(guān)注的。因?yàn)槠溆邢薜馁Y源,這種小型注腳設(shè)備將約束施加到安全手段的執(zhí)行上。因?yàn)橘Y源約束,在一個(gè)虛擬機(jī)執(zhí)行中,必須與多個(gè)虛擬機(jī)相反地來(lái)使用一個(gè)單獨(dú)的虛擬或物理機(jī)。本發(fā)明也可以被應(yīng)用到具有較大注腳設(shè)備上,其中本發(fā)明的特征可證明是有益的。例如當(dāng)使用servlets并且如果在它們之間具有共享的對(duì)象時(shí),本發(fā)明可證明是優(yōu)點(diǎn)的。即一些桌面系統(tǒng)有益地使用本發(fā)明的技術(shù)。JavaTM語(yǔ)言和平臺(tái)適合于本發(fā)明,然而具有某種特征的任何語(yǔ)言或平臺(tái)將都會(huì)很好的適合于實(shí)施本發(fā)明。這些特征包括類型(type)安全、指針安全、面向?qū)ο蟮?、?dòng)態(tài)鏈接的和基于虛擬機(jī)的。不是所有的上述這些特征需要在一個(gè)特定的實(shí)施例中出現(xiàn)。在一些實(shí)施例中,可以使用缺少一個(gè)或多個(gè)這些特征的語(yǔ)言或平臺(tái)。一個(gè)“虛擬機(jī)”可以在比特(虛擬機(jī))或者硅(實(shí)際/物理機(jī))中實(shí)現(xiàn)。雖然本發(fā)明描述了逐個(gè)對(duì)象的安全模式,但也可以使用其他途徑如逐個(gè)類的安全模式。雖然詳細(xì)地描述和展示了本發(fā)明,但可以很清楚地理解的是這只是展示和舉例的方式而不是用來(lái)限制的方式,本發(fā)明的精神和范圍僅由附后的權(quán)利要求及其等效(theirequivalents)進(jìn)行限制。JavaTMCardTM運(yùn)行時(shí)環(huán)境(JCRE)2.1說(shuō)明書(shū)第2草稿SunMicrosystem,Inc.901SanAntonioRoadPaloAlto,CA94303USA650960-1300第2草稿,1998年12月14日版權(quán)所有1998SunMicrosystem公司901SanAntonioRoad,PaloAlto,CA94303USA在該文件中的版權(quán)屬于SunMicrosystem公司。SunMicrosystem公司據(jù)此授權(quán)用戶在SUN公司的知識(shí)產(chǎn)權(quán)之下免費(fèi)的公用性的、不可轉(zhuǎn)讓的、世界范圍的、限制的許可(沒(méi)有從屬許可的權(quán)利)的情況下僅為了內(nèi)部評(píng)估的目的來(lái)使用本說(shuō)明書(shū),上述SUN公司的知識(shí)產(chǎn)權(quán)是使用JavaTMCardTM運(yùn)行時(shí)環(huán)境(JCRE)2.1說(shuō)明書(shū)的必不可少的。除了該限制的授權(quán)外,用戶沒(méi)有本說(shuō)明書(shū)的權(quán)利、資格、利益并且用戶沒(méi)有權(quán)利為了商業(yè)目的來(lái)使用本說(shuō)明書(shū)。限制性權(quán)利的圖標(biāo)符號(hào)由美國(guó)政府進(jìn)行的使用、復(fù)制或公開(kāi)都將受到FAR52.227-14(g)(2)(6/87)和FAR52.227-19(6/87)或DFAR52.227-7015(b)和DFAR227-7202(a)的限制。SUN公司沒(méi)有對(duì)本軟件的適應(yīng)性作出明示的或者暗示的保證,所述暗示保證包括但不限制于對(duì)商業(yè)能力、特定目的的適應(yīng)性或者非侵權(quán)的暗示保證。SUN公司對(duì)于許可人的由于使用、修改或者傳播本軟件或?qū)ζ溥M(jìn)行衍生而遭受的任何破壞不負(fù)責(zé)任。商標(biāo)Sun,thesunlogo,SunMicrosystem,JavaBeana,JDK,Java,JavaCard,HotJavaViews,VisualJava,Solaris,NEO,Jeo,Netra,NFS,ONC,ONC+,OpenWindows,PC-NFC,EmbeddedJava,PersonalJava,SNM,SunNetManager,Solarissunberstdesign,Solstice,SunCore,SolarNet,SunWeb,SunWorkstation,TheNetworkIsTheComputer,ToolTalk,Ultra,Ultracomputing,Ultraserver,WhereTheNetworkIsGoing,SunWorkShop,Xview,JavaWorkShop,theJavaCoffeeCuplogo,VisualJava是SunMicrosystem公司在美國(guó)和其他國(guó)家的商標(biāo)和注冊(cè)商標(biāo)。在沒(méi)有任何明示或暗示的保證的情況下“照原樣”提供的公開(kāi),所述暗示包括但不限制于對(duì)商業(yè)能力、特定目的的適應(yīng)性或者非侵權(quán)的暗示保證。本說(shuō)明書(shū)可包括技術(shù)誤差或者印刷錯(cuò)誤。在此定期地將改進(jìn)加入到本說(shuō)明書(shū)中;這些改進(jìn)將成為出版物的新版組成部分。SUNMICROSYSTEM公司在任何時(shí)候都會(huì)對(duì)本公開(kāi)無(wú)所描述的產(chǎn)品和/或程序作出改進(jìn)和/或變化。目錄前言1.概述2.JavaCard虛擬機(jī)的生存期3.JavaCardApplet生存期3.1安裝程序3.2選擇程序3.3交易程序3.4取消選擇的程序3.5電源中斷和復(fù)位4.瞬時(shí)對(duì)象4.1清除瞬時(shí)對(duì)象的事件5.選擇5.1默認(rèn)的Applet5.2SELECT命令處理5.3Non-SELECT命令處理6.Applet隔離和對(duì)象共享6.1Applet防火墻6.1.1文本和文本轉(zhuǎn)換6.1.2對(duì)象所有權(quán)6.1.3對(duì)象訪問(wèn)6.1.4防火墻保護(hù)6.1.5靜態(tài)域(staticfield)和程序6.2穿過(guò)文本的對(duì)象訪問(wèn)6.2.1JCRE進(jìn)入點(diǎn)對(duì)象6.2.2全局陣列6.2.3JCRE特權(quán)6.2.4共享接口6.2.5確認(rèn)在前文本6.2.6可共享接口細(xì)節(jié)6.2.7獲得可共享接口對(duì)象6.2.8對(duì)象訪問(wèn)特性6.3瞬時(shí)對(duì)象和applet文本7.處理和完整性7.1完整性7.2處理7.3處理持續(xù)時(shí)間7.4嵌套處理7.5撕裂(tear)或者復(fù)位處理失敗7.6中止一個(gè)處理7.6.1計(jì)劃中止7.6.2JCRE中止7.6.3清除JCRE響應(yīng)性7.7瞬時(shí)對(duì)象7.8提交容量8.API主題8.1APDU類8.1.1T=0表示傳出數(shù)據(jù)的傳輸8.1.2T=I表示傳出數(shù)據(jù)的傳輸8.2安全性和隱秘包8.3JCS系統(tǒng)類9.虛擬機(jī)主題9.1資源失敗10.Applet安裝器10.1安裝器10.1.1安裝器的執(zhí)行10.1.2安裝器AID10.1.3安裝器APDU10.1.4安裝器特性10.1.5安裝器特權(quán)10.2最近安裝的Applet10.2.1安裝參數(shù)11.API常量前言JavaTMCardTM技術(shù)融合了Java編程語(yǔ)言的一部分和一個(gè)運(yùn)行時(shí)環(huán)境,該運(yùn)行時(shí)環(huán)境被最優(yōu)化的用于智能卡以及相關(guān)的、小內(nèi)存嵌入式設(shè)備。JavaCard技術(shù)的目的在于為資源約束型的智能卡提供Java軟件編程的許多益處。本文件為JavaCard運(yùn)行時(shí)環(huán)境(JCRE)2.1的一個(gè)說(shuō)明書(shū)。JavaCard設(shè)備的一個(gè)銷售商可提供JCRE的一個(gè)執(zhí)行(inplementation)。在本說(shuō)明書(shū)中一個(gè)JCRE執(zhí)行(inplementation)是指基于JavaCard技術(shù)說(shuō)明書(shū)的JavaCard虛擬機(jī)(VM)的一個(gè)銷售商的執(zhí)行(implementation)、JavaCard應(yīng)用程序接口(API)或其它部件。一個(gè)參考執(zhí)行是由SunMicrosystem公司生產(chǎn)的一個(gè)執(zhí)行。為JavaCard平臺(tái)所編寫(xiě)的Applets被稱為JavaCardapplets。誰(shuí)使用本說(shuō)明書(shū)?本說(shuō)明書(shū)的目的在于幫助JCRE執(zhí)行者創(chuàng)造出一個(gè)執(zhí)行、開(kāi)發(fā)出一個(gè)規(guī)范從而對(duì)JavaCard技術(shù)說(shuō)明書(shū)進(jìn)行擴(kuò)展或者對(duì)JavaCard運(yùn)行時(shí)環(huán)境(JCRE)進(jìn)行擴(kuò)展。本說(shuō)明書(shū)目的還在于幫助JavaCardapplets程序開(kāi)發(fā)人員能更好的理解JavaCard技術(shù)說(shuō)明書(shū)。在你閱讀本說(shuō)明書(shū)之前在你閱讀本指南之前,應(yīng)熟悉Java編程語(yǔ)言、JavaCard技術(shù)說(shuō)明以及智能卡技術(shù)。一個(gè)較好地幫助你熟悉Java技術(shù)和JavaCard技術(shù)的地方是SunMicrosystem公司的互聯(lián)網(wǎng)站,位置在http//java.sun.com本說(shuō)明書(shū)是如何組織的第1章“JCRE的范圍和任務(wù)”給出了所需JCRE執(zhí)行的服務(wù)的一個(gè)綜述。第2章“虛擬機(jī)的生存期”定義了虛擬機(jī)的生存期。第3章“Applet生存期”定義了一個(gè)Applet程序的生存期。第4章“瞬時(shí)對(duì)象”對(duì)瞬時(shí)對(duì)象作了一個(gè)綜述。第5章“選擇”描述了JCRE如何處理applet選擇。第6章“Applet分離和對(duì)象共享”描述了applet分離和對(duì)象共享。第7章“處理和完整性”對(duì)在處理過(guò)程中的完整性作了一綜述。第8章“API主題”描述了一個(gè)JCRE所要求的API功能,但沒(méi)有在《JavaCard2.1API說(shuō)明書(shū)》中完全說(shuō)明。第9章“虛擬機(jī)主題”描述了虛擬機(jī)的具體細(xì)節(jié)。第10章“Applet安裝器”對(duì)Applet安裝器作一個(gè)綜述。第11章“API常量”提供了常量的數(shù)值,該數(shù)值在《JavaCardAPI2.1說(shuō)明書(shū)》中沒(méi)有給出。術(shù)語(yǔ)表是一個(gè)單詞及其定義的清單,可幫助你來(lái)使用該手冊(cè)。相關(guān)文件及出版物在該手冊(cè)中參考了各種文件或產(chǎn)品。你應(yīng)該具有下列文件《JavaCard2.1API第2草稿說(shuō)明書(shū)》,SunMicrosystem公司《JavaCard2.0語(yǔ)言子集和虛擬機(jī)說(shuō)明書(shū)》,1997年10月13日最后修訂版1.0《JavaCardApplet開(kāi)發(fā)人員指南》,SunMicrosystem公司《Java語(yǔ)言說(shuō)明》JamesGosling,BillJoy,GuyL.Steele著,Addison-Wesley1996年,ISBN0-201-63451-1《Java虛擬機(jī)說(shuō)明》TimLindholm,F(xiàn)rankYellin著,Addison-Wesley1996年,ISBN0-201-63452-X《Java類庫(kù)注釋參考(Java系列)》PatrickChan,RosannaLee著,Addison-Wesley,2卷,ISBN0201310023和0201310031《ISO7816說(shuō)明書(shū)》第1~6部分EMV’96用于支付系統(tǒng)的集成電路卡說(shuō)明書(shū)。1.概述JavaCard運(yùn)行時(shí)環(huán)境(JCRE)2.1包括JavaCard虛擬機(jī)(VM)、JavaCard應(yīng)用程序接口(API)類(及工業(yè)方面的擴(kuò)展)和支持服務(wù)。本文件及JCRE2.1對(duì)JavaCard技術(shù)所需的JCRE功能進(jìn)行了介紹。JavaCard技術(shù)的任何執(zhí)行將提供該必需的特性和環(huán)境。2.JavaCard虛擬機(jī)的生存期在一個(gè)PC或者工作站中,Java虛擬機(jī)作為一個(gè)操作系統(tǒng)過(guò)程(OSprocess)來(lái)運(yùn)行。當(dāng)操作系統(tǒng)過(guò)程被終止時(shí),Java應(yīng)用程序及其對(duì)象將自動(dòng)被破壞掉。在JavaCard技術(shù)中,虛擬機(jī)(VM)的生存期是卡的生存期。即使對(duì)卡進(jìn)行斷電,存儲(chǔ)在卡上的大多數(shù)信息都是會(huì)被保存下來(lái)的。永久存儲(chǔ)技術(shù)(如EEPROM)使一個(gè)智能卡在被斷電時(shí)也能存儲(chǔ)信息。因?yàn)閂M和在卡上產(chǎn)生的對(duì)象用來(lái)表示永久的應(yīng)用信息,所以JavaCardVM虛擬機(jī)似乎可以永遠(yuǎn)地運(yùn)行下去。當(dāng)被斷電時(shí),VM僅僅是暫時(shí)地停止。當(dāng)卡下一次被復(fù)位時(shí),VM再一次啟動(dòng)并從永久存儲(chǔ)器中恢復(fù)出其在前的對(duì)象頭。除了其永久的屬性外,JavaCard虛擬機(jī)幾乎與Java虛擬機(jī)一樣??ǖ某跏蓟瘯r(shí)間是屏蔽之后的時(shí)間,在卡的個(gè)性化和發(fā)行時(shí)間之前。在卡的初始化時(shí),JCRE也進(jìn)行初始化。由JCRE產(chǎn)生的結(jié)構(gòu)對(duì)象在虛擬機(jī)的生存期內(nèi)存在。因?yàn)樘摂M機(jī)和JCRE的執(zhí)行生存期跨過(guò)了卡的CAD通信期,所以有applet產(chǎn)生的對(duì)象的生存期也將跨過(guò)CAD通信期(CAD的意思是識(shí)別卡設(shè)備或者卡閱讀器??ㄍㄐ牌鳛楫?dāng)將卡插入到CAD中、加電、與CAD交換APDU流。當(dāng)卡從CAD中拿出時(shí)卡通信期隨之結(jié)束。)。具有該性質(zhì)的對(duì)象被稱之為永久對(duì)象。當(dāng)出現(xiàn)下列情況時(shí),JCRE執(zhí)行者將使一個(gè)對(duì)象為永久型調(diào)用Applet注冊(cè)程序。JCRE存儲(chǔ)了applet對(duì)象的實(shí)例的一個(gè)基準(zhǔn)地址(reference)。JCRE執(zhí)行者將確保類applet的實(shí)例是永久型的。一個(gè)對(duì)象的一個(gè)基準(zhǔn)地址被存儲(chǔ)在任何其他永久對(duì)象的一個(gè)域中或者存儲(chǔ)在一個(gè)類的靜態(tài)域中。該需求源于需要保留JCRE的內(nèi)部數(shù)據(jù)結(jié)構(gòu)的整體性。3.JavaCardApplet生存期對(duì)本說(shuō)明而言,一個(gè)JavaCardapplet的生存期在此處開(kāi)始它被正確的調(diào)入到卡的存儲(chǔ)器中、鏈接以及準(zhǔn)備執(zhí)行。(在本說(shuō)明書(shū)的剩余部分,applet指的是為JavaCard平臺(tái)而編寫(xiě)的一個(gè)applet程序)用applet注冊(cè)程序注冊(cè)的applet在卡的生存期內(nèi)存在。JCRE通過(guò)applet的公用程序安裝、選擇、取消選擇和處理與applet進(jìn)行相互操作。一個(gè)applet將實(shí)施一個(gè)靜態(tài)的安裝程序。如果安裝程序沒(méi)有被實(shí)施,將不能產(chǎn)生applet的對(duì)象或者對(duì)其進(jìn)行初始化。一個(gè)JCRE執(zhí)行將調(diào)用一個(gè)如下描述的applet安裝、選擇、取消選擇和處理程序。當(dāng)將一個(gè)applet安裝在智能卡上時(shí),JCRE為每一個(gè)產(chǎn)生的applet實(shí)例調(diào)用靜態(tài)安裝程序一次。JCRE不直接調(diào)用applet的構(gòu)造器。3.1安裝程序當(dāng)安裝被調(diào)用時(shí),不存在applet的對(duì)象。在applet之內(nèi)的安裝程序的主要任務(wù)是產(chǎn)生applet類的一個(gè)實(shí)例并注冊(cè)該實(shí)例??梢援a(chǎn)生applet在其生存期內(nèi)所需要的所有其他對(duì)象,這樣是可行的。也可以完成由一個(gè)CAD選擇和訪問(wèn)applet所需的的任何其他的準(zhǔn)備。安裝程序從輸入的字節(jié)陣列參數(shù)的內(nèi)容中獲得了初始化參數(shù)。典型的,一個(gè)applet產(chǎn)生多個(gè)對(duì)象并用預(yù)定值對(duì)其進(jìn)行初始化,設(shè)置一些內(nèi)部狀態(tài)變量并調(diào)用applet注冊(cè)程序來(lái)指定使用AID(applet標(biāo)示符在ISO7816-5中有定義)來(lái)進(jìn)行選擇。當(dāng)調(diào)用applet注冊(cè)程序結(jié)束而沒(méi)有發(fā)生異常時(shí),該安裝被認(rèn)為是成功的。如果安裝程序不調(diào)用applet注冊(cè)程序或者在applet注冊(cè)程序被調(diào)用之前在安裝程序內(nèi)部出現(xiàn)了一個(gè)異?;蛘遖pplet注冊(cè)程序發(fā)生了異常,則認(rèn)為安裝沒(méi)有成功。如果安裝沒(méi)有成功,當(dāng)JCRE重新進(jìn)行控制時(shí)將執(zhí)行一個(gè)總的清除。即所有的永久對(duì)象將返回到它們調(diào)用安裝程序之前的狀態(tài)。如果安裝是成功的,JCRE將applet標(biāo)記為可供選擇的。3.2選擇程序applet被保留在一個(gè)掛起狀態(tài)直到它們被確切地選定。當(dāng)JCRE接收到一個(gè)SELECTAPDU,其中名稱數(shù)據(jù)與applet的AID相匹配,此時(shí)會(huì)發(fā)生選擇。選擇導(dǎo)致一個(gè)applet成為當(dāng)前被選定的applet。在調(diào)用SELECT之前,JCRE將取消對(duì)在前選定的applet的選擇。JCRE通過(guò)調(diào)用applet取消選定程序?qū)⒃撊∠x定指示給applet。JCRE通過(guò)調(diào)用applet選擇程序來(lái)對(duì)其進(jìn)行選擇。當(dāng)從調(diào)用選擇程序中返回的是假或者出現(xiàn)了異常時(shí),applet拒絕被選定。如果applet返回的是真,在接下來(lái)的調(diào)用處理程序中將實(shí)際的SELECTAPDU命令提供給applet,這樣applet可以檢查APDU的內(nèi)容。Applet可以像其處理任何其它APDU命令一樣處理SELECTAPDU命令。它可利用數(shù)據(jù)對(duì)SELECTAPDU進(jìn)行響應(yīng)(處理程序處有詳細(xì)描述)或者它通過(guò)利用適當(dāng)?shù)腟W(返回的狀態(tài)字)產(chǎn)生一個(gè)IOS異常而來(lái)標(biāo)記錯(cuò)誤。SW和選擇性響應(yīng)數(shù)據(jù)被返回到CAD中。當(dāng)在選擇程序期間被調(diào)用時(shí),applet.selectingapplet程序返回的是真。在后繼的處理程序期間applet.selectingapplet程序?qū)⒗^續(xù)返回真,該處理程序被調(diào)用來(lái)處理SELECTAPDU命令。如果applet拒絕被選定,JCRE將向CAD返回一個(gè)APDU響應(yīng)狀態(tài)字ISO.SW_APPLET_FAILED。當(dāng)選定失敗時(shí),JCRE狀態(tài)被設(shè)定可指示出沒(méi)有applet被選定。在成功選定之后,通過(guò)處理程序?qū)⑺械暮罄^的APDU傳送給當(dāng)前選定的applet。3.3處理程序所有的APDU被JCRE接收,該JCRE將APDU類的一個(gè)實(shí)例傳遞給當(dāng)前選定的applet的處理程序。注意在調(diào)用處理程序之前一個(gè)SELECTAPDU可能在當(dāng)前選定的applet中引起一個(gè)變化。在正常的返回中,JCRE自動(dòng)將添加0x9000作為對(duì)已經(jīng)由applet傳送的任何數(shù)據(jù)的完成響應(yīng)SW。在處理期間的任何時(shí)間內(nèi),applet可以產(chǎn)生一個(gè)具有一個(gè)適當(dāng)SW的ISO異常,在此情況下JCRE將捕捉到異常并將SW返回給CAD。如果在處理期間產(chǎn)生任何其他的異常,JCRE將捕捉到異常并將狀態(tài)字ISO7816_SW_UNKNOWN返回給CAD。3.4取消選定的程序當(dāng)JCRE接收到一個(gè)SELECTAPDU命令并且在命令中名稱與一個(gè)applet的AID相匹配時(shí),JCRE調(diào)用當(dāng)前選定的applet的取消選定程序。這允許applet執(zhí)行任何清除操作,在為了允許執(zhí)行一些其它applet時(shí)需要該清除操作。在取消選定程序期間當(dāng)進(jìn)行調(diào)用時(shí)applet.selectingApplet程序?qū)?huì)返回一個(gè)“假”。取消選定程序產(chǎn)生的異常被JCRE捕獲,但applet被取消了選定。3.5電源中斷和復(fù)位當(dāng)卡從CAD中拿出時(shí)或者如果出現(xiàn)一些其它的機(jī)械或者電故障,會(huì)發(fā)生斷電。當(dāng)對(duì)卡以及卡復(fù)位鍵(冷啟動(dòng)或熱啟動(dòng))進(jìn)行重新加電時(shí),JCRE將確保瞬時(shí)數(shù)據(jù)將被復(fù)位到默認(rèn)值。當(dāng)電源中斷(或者發(fā)生復(fù)位)時(shí),進(jìn)行中的處理將被中止。當(dāng)電源中斷(或者發(fā)生復(fù)位)時(shí),被選定的applet將隱含地被取消掉。(在此情況下,取消選定程序沒(méi)有被調(diào)用)。如果JCRE執(zhí)行了一個(gè)默認(rèn)的applet選擇(參看5.1段),默認(rèn)的applet被選定為當(dāng)前選定的applet,并調(diào)用默認(rèn)applet的選定程序。否則,JCRE將其狀態(tài)設(shè)定成表示沒(méi)有applet被選定的狀態(tài)。4.瞬時(shí)對(duì)象applet有時(shí)需要包含臨時(shí)(瞬時(shí))數(shù)據(jù)的對(duì)象,該數(shù)據(jù)在整個(gè)CAD通信期不必是永久的。JavaCard不支持Java瞬時(shí)關(guān)鍵詞(keywordtransient)。然而JavaCard技術(shù)提供了產(chǎn)生具有對(duì)象的原始成分或基準(zhǔn)地址的瞬時(shí)陣列的程序。術(shù)語(yǔ)“瞬時(shí)對(duì)象”是一個(gè)誤稱。它可被錯(cuò)誤地解釋為該對(duì)象本身是瞬時(shí)的。然而只有對(duì)象的域的內(nèi)容(除了長(zhǎng)度域)具有瞬時(shí)屬性。與Java編程語(yǔ)言中的任何其他對(duì)象一樣,JavaCard平臺(tái)中的瞬時(shí)對(duì)象在其被參考的期間內(nèi)一直存在堆棧局部變量一個(gè)類靜態(tài)域在另一個(gè)存在的對(duì)象中的一個(gè)域在JavaCard平臺(tái)中的一個(gè)瞬時(shí)對(duì)象具有下列需要的特性在某事件發(fā)生時(shí)(參見(jiàn)下文)一個(gè)瞬時(shí)對(duì)象的域?qū)⒈磺宄秊橛虻哪J(rèn)值(零、假或者null)。為了安全的原因,一個(gè)瞬時(shí)對(duì)象的域絕不會(huì)被存儲(chǔ)在“永久存儲(chǔ)技術(shù)”中。使用當(dāng)前的智能卡技術(shù)為例,瞬時(shí)對(duì)象的內(nèi)容可被存儲(chǔ)在RAM中,但決不會(huì)被存儲(chǔ)在EEPROM中。該需求的目的在于允許使用瞬時(shí)對(duì)象來(lái)存儲(chǔ)通信期密鑰。寫(xiě)入到一個(gè)瞬時(shí)對(duì)象的域中將不會(huì)產(chǎn)生性能惡化(performancepenalty)。(以當(dāng)前的智能卡為例,瞬時(shí)對(duì)象的內(nèi)容可被存儲(chǔ)在RAM中,而非瞬時(shí)對(duì)象的內(nèi)容可被存儲(chǔ)在EEPROM中。RAM技術(shù)典型的比EEPROM具有一個(gè)更快的寫(xiě)周期)。寫(xiě)入到一個(gè)瞬時(shí)對(duì)象的域中將不會(huì)受到“處理”的影響。即一個(gè)中止處理(abortTransaction)將絕不會(huì)導(dǎo)致將一個(gè)瞬時(shí)對(duì)象的一個(gè)域恢復(fù)為一個(gè)前值。該特性使得瞬時(shí)對(duì)象對(duì)于經(jīng)常修改的小量臨時(shí)applet數(shù)據(jù)是理想的,而不必在CAD或選擇通信期內(nèi)進(jìn)行保存(preserve)。4.1清除瞬時(shí)對(duì)象的事件永久對(duì)象被用于保持狀態(tài),該狀態(tài)在卡復(fù)位期間是將要被保留的。當(dāng)產(chǎn)生一個(gè)瞬時(shí)對(duì)象時(shí),兩個(gè)事件中的一個(gè)被指定導(dǎo)致其域被清除。CLEAR_ON_RESET瞬時(shí)對(duì)象用于保持在applet選擇期間的將要被保留的狀態(tài),而不是在卡復(fù)位期間。CLEAR_ON_DESELECT瞬時(shí)對(duì)象用于保持當(dāng)一個(gè)applet被選定時(shí)必須保留的狀態(tài),但不是在applet選定或者卡復(fù)位期間。兩個(gè)清除事件的細(xì)節(jié)如下CLEAR_ON_RESET——當(dāng)卡進(jìn)行復(fù)位時(shí)對(duì)象的域被清除。當(dāng)對(duì)一個(gè)卡進(jìn)行上電時(shí),也導(dǎo)致一個(gè)卡復(fù)位。注意在對(duì)一個(gè)卡進(jìn)行斷電之前,不必對(duì)瞬時(shí)對(duì)象的域進(jìn)行清除。然而一旦斷電后,必須保證這樣的域的在前內(nèi)容不能被恢復(fù)。CLEAR_ON_DESELECT——只要任何applet被取消選定,對(duì)象的域?qū)⒈磺宄?。因?yàn)橐粋€(gè)卡的復(fù)位隱含地取消選定了當(dāng)前選定的applet,CLEAR_ON_DESELECT對(duì)象的域也被指定給CLEAR_ON_RESET的相同的事件給清除掉。只有一個(gè)SELECT命令被處理時(shí),當(dāng)前選定的applet被明顯地取消了選定(其取消選定程序被調(diào)用)。當(dāng)前選定的applet被取消了選定,然后所有CLEAR_ON_DESELECT瞬時(shí)對(duì)象的域?qū)⒈磺宄还躍ELECT命令是否失敗的選擇了一個(gè)applet。選擇了一個(gè)不同的applet。重新選擇了一個(gè)相同的applet。5.選擇卡接收到來(lái)自CAD的APDU形式的用于服務(wù)的請(qǐng)求。JCRE使用SELECTAPDU來(lái)指定一個(gè)當(dāng)前選定的applet。一旦被選定,一個(gè)applet將接收所有的后繼APDU,直到applet被取消選定。當(dāng)下面的任一種情況發(fā)生時(shí)不會(huì)有當(dāng)前選定的applet卡被復(fù)位并且沒(méi)有applet被預(yù)指定為默認(rèn)的applet。當(dāng)試圖選擇一個(gè)applet時(shí)一個(gè)SELECT命令失敗。5.1默認(rèn)的applet通常applet只有通過(guò)一個(gè)成功的SELECT命令才能被選定,一些智能卡CAD應(yīng)用程序要求在每一個(gè)卡復(fù)位之后具有一個(gè)隱含選定的默認(rèn)applet。其特性是1.卡被復(fù)位之后(或者重新上電,是復(fù)位的一種形式)JCRE將對(duì)其執(zhí)行初始化并檢查確認(rèn)其內(nèi)部狀態(tài)是否表明一個(gè)特定的applet是默認(rèn)的applet。如果是,JCRE將該applet設(shè)置為當(dāng)前選定的applet并且調(diào)用applet的選擇程序。如果applet的選擇程序產(chǎn)生一個(gè)異?;蛘叻祷匾粋€(gè)“假”,則JCRE將其狀態(tài)設(shè)置為表明沒(méi)有applet被選定。(在默認(rèn)applet選定期間不調(diào)用applet處理程序,因?yàn)闆](méi)有SELECTAPDU)。當(dāng)在卡復(fù)位時(shí)一個(gè)默認(rèn)的applet被選定,將不調(diào)用其處理程序。2.JCRE確保ATR已經(jīng)被發(fā)送并且智能卡準(zhǔn)備接受APDU命令。如果一個(gè)默認(rèn)的applet被成功地選定,APDU命令可被直接的傳送給該applet。如果一個(gè)applet沒(méi)有被選定,則只對(duì)SELECT命令進(jìn)行處理。在JavaCardAPI2.1中沒(méi)有對(duì)用于指定一個(gè)默認(rèn)的applet的機(jī)構(gòu)進(jìn)行定義。它是一個(gè)JCRE執(zhí)行細(xì)節(jié)并留給單個(gè)的JCRE執(zhí)行者(ItisaJCREimplementationdetailandislefttotheindividualJCREimplementers)。5.2SELECT命令處理SELECTAPDU命令用于選定一個(gè)applet。其特性是1.SELECTAPDU總是由JCRE進(jìn)行處理而不管applet是否處以激活狀態(tài)。2.JCRE對(duì)其內(nèi)部表進(jìn)行檢索以便找到一個(gè)匹配的AID。JCRE將支持選定一個(gè)applet,其中在SELECT命令中具有全AID。JCRE執(zhí)行者可自由地增強(qiáng)器JCRE來(lái)支持其它選擇標(biāo)準(zhǔn)。這樣的一個(gè)例子是通過(guò)在ISO7816-4中說(shuō)明的部分AID匹配的選擇。特定要求如下注意一個(gè)星號(hào)表示如在ISO7816中的二進(jìn)制比特編號(hào)。最該有效位=b8,最低有效位=b1。a)AppletSELECT命令使用CLA=0x00,INS=0xA4。b)AppletSELECT命令使用“通過(guò)DF名稱進(jìn)行選擇”,因此P1=0x04。c)P1的任何其它值意味著沒(méi)有一個(gè)applet被選定。當(dāng)前選定的applet對(duì)APDU進(jìn)行處理。d)JCRE將支持準(zhǔn)確的DF名稱(AID)選定,即P2=%b0000xx00。(無(wú)須注意b4,b3*)e)所有其它部分DF名稱SELECT選項(xiàng)(b2,b1*)是JCRE的獨(dú)立執(zhí)行(JCREimplementationdependent)f)所有文件控制信息選項(xiàng)代碼(b4,b3*)將由JCRE進(jìn)行支持并由applet進(jìn)行翻譯和處理。3.如果沒(méi)有發(fā)現(xiàn)AID匹配a.如果沒(méi)有當(dāng)前選定的applet,JCRE以狀態(tài)碼0x6999(SW_APPLET_SELECT_FAILED)對(duì)SELECT命令進(jìn)行響應(yīng)。b.否則,SELECT命令被轉(zhuǎn)送(forwardedto)到當(dāng)前選定的applet的處理程序上。在此點(diǎn)處將會(huì)發(fā)生一個(gè)文本轉(zhuǎn)入到applet文本中(applet文本在6.1.1段中有定義)。applet可使用SELECTAPDU命令用于它們自己內(nèi)部的SELECT處理。4.如果發(fā)現(xiàn)一個(gè)匹配的AID,JCRE準(zhǔn)備選擇一個(gè)新的applet。如果有一個(gè)當(dāng)前選定的applet,則通過(guò)調(diào)用其取消選定程序?qū)ζ溥M(jìn)行取消選定。在此點(diǎn)處會(huì)發(fā)生一個(gè)文本轉(zhuǎn)入到被取消選定的applet文本中。JCRE文本在從取消選定中退出時(shí)被恢復(fù)。5.JCRE設(shè)定新的當(dāng)前選定的applet。通過(guò)調(diào)用其選定程序?qū)π碌腶pplet進(jìn)行選擇并且會(huì)發(fā)生一個(gè)文本轉(zhuǎn)入到新的applet文本中。a.如果applet的選擇程序產(chǎn)生一個(gè)異?;蛘叻祷匾粋€(gè)“假”,則JCRE的狀態(tài)被設(shè)定,這樣就沒(méi)有applet被選定。JCRE以狀態(tài)碼0x6999(SWAPPLETSELECTFAILED)對(duì)SELECT命令進(jìn)行響應(yīng)。b.然后新當(dāng)前選定的applet的處理程序與SELECTAPDU被調(diào)用而作為一個(gè)輸入?yún)?shù)。發(fā)生了一個(gè)文本轉(zhuǎn)入到applet文本中。如果沒(méi)有匹配的AID,SELECT命令被轉(zhuǎn)送(forward)到當(dāng)前的選定applet中用于作為一個(gè)普通的appletAPDU命令進(jìn)行處理。如果有一個(gè)匹配的AID并且SELECT命令失敗,JCRE將總是進(jìn)入到?jīng)]有applet被選擇的狀態(tài)。如果匹配的AID與當(dāng)前選定的applet相同,JCRE將仍經(jīng)過(guò)取消選定applet的的過(guò)程,然后選擇該applet。重新選擇可能失敗,將智能卡保持在沒(méi)有applet選定的狀態(tài)。5.3非SELECT命令處理當(dāng)接收到一個(gè)非SELECTAPDU并不具有一個(gè)當(dāng)前選定的applet時(shí),JCRE用狀態(tài)碼0x6999(SW_APPLET_SELECT_FAILED)來(lái)響應(yīng)該APDU。當(dāng)接收到一個(gè)非SELECTAPDU并具有一個(gè)當(dāng)前選定的applet時(shí),JCRE調(diào)用當(dāng)前選定的applet處理程序?qū)PDU作為一個(gè)參數(shù)進(jìn)行傳送。這將引起從JCRE文本到當(dāng)前選定文本的一個(gè)文本轉(zhuǎn)換。當(dāng)處理程序存在時(shí),VM轉(zhuǎn)回到JCRE文本。JCRE傳送一個(gè)響應(yīng)APDU并等待新一個(gè)命令A(yù)PDU。6.applet分離和對(duì)象共享JCRE的任何執(zhí)行將支持文本和applet的分離。分離意味著沒(méi)有一個(gè)applet可對(duì)在另一個(gè)文本中的一個(gè)applet的域或者對(duì)象進(jìn)行訪問(wèn),直到其它的applet明確地提供了一個(gè)用于訪問(wèn)的接口。6.1applet防火墻在JavaCard技術(shù)內(nèi)的applet防火墻是一個(gè)運(yùn)行時(shí)強(qiáng)制的保護(hù),并與Java技術(shù)保護(hù)相分離。Java語(yǔ)言保護(hù)仍將應(yīng)用到JavaCardapplet中。Java語(yǔ)言確保增強(qiáng)對(duì)強(qiáng)打字(strongtyping)和保護(hù)屬性。在JavaCardVM中總是強(qiáng)制執(zhí)行applet防火墻。這樣允許VM在運(yùn)行時(shí)自動(dòng)執(zhí)行一個(gè)附加的安全檢查。6.1.1文本和文本轉(zhuǎn)換防火墻實(shí)際上將JavaCard平臺(tái)的對(duì)象系統(tǒng)分割成分離保護(hù)的對(duì)象空間,該分離保護(hù)的對(duì)象空間被稱為文本。防火墻是在一個(gè)文本和另一個(gè)文本之間的邊界。JCR俄將分配和管理用于每一個(gè)安裝在智能卡上的applet的一個(gè)applet文本(然而可參看6.1.1.2段中對(duì)組文本的討論)。另外,JCRE保持其自己的JCRE文本。該文本與一個(gè)applet文本很相似,但它具有特殊的系統(tǒng)特權(quán),這樣它可執(zhí)行拒絕applet文本執(zhí)行的操作。在任何點(diǎn)處,VM內(nèi)僅有一個(gè)激活的文本(它被稱為當(dāng)前激活文本)。為了確認(rèn)是否允許訪問(wèn),在運(yùn)行時(shí)在當(dāng)前激活文本處要對(duì)所有訪問(wèn)對(duì)象的字節(jié)碼進(jìn)行檢查。當(dāng)不允許進(jìn)行訪問(wèn)時(shí),將產(chǎn)生一個(gè)java.lang.安全異常。如6.2.8所述在執(zhí)行調(diào)用型字節(jié)碼期間當(dāng)遇到某定義好的條件時(shí),VM執(zhí)行一個(gè)文本轉(zhuǎn)換。在前的文本被推到一個(gè)內(nèi)部堆棧上,一個(gè)新文本變成當(dāng)前激活文本,在該新文本中執(zhí)行被調(diào)用的程序。在從該程序中退出時(shí),VM執(zhí)行一個(gè)恢復(fù)文本轉(zhuǎn)換。(程序的調(diào)用程序)的最初文本從堆棧中被上托出,并被恢復(fù)為當(dāng)前激活文本。文本轉(zhuǎn)換可以相互嵌套。嵌套的最大深度依賴于可供使用的VM堆??臻g的量。在JavaCard技術(shù)中大多數(shù)的程序調(diào)用不會(huì)導(dǎo)致一個(gè)文本轉(zhuǎn)換。文本轉(zhuǎn)換僅在調(diào)用某程序或者從其返回以及從這些程序退出的異常期間才能發(fā)生(參見(jiàn)6.2.8)。在一個(gè)文本轉(zhuǎn)換程序調(diào)用期間,表示當(dāng)前激活文本的數(shù)據(jù)的一個(gè)附加片段被推到返回棧中。當(dāng)該程序被退出時(shí),該文本即被恢復(fù)。文本及文本轉(zhuǎn)換的進(jìn)一步的細(xì)節(jié)在本章在后的節(jié)中進(jìn)行討論。6.1.1.1組文本一個(gè)JavaCardapplet的每一個(gè)實(shí)例通常定義了一個(gè)分離的文本。但在JavaCard2.1技術(shù)中介紹了組文本的概念。如果在一個(gè)單Java包中包含了不止一個(gè)applet,則它們共享相同的文本。另外,相同applet類的所有實(shí)例共享相同的文本。換句話說(shuō),在一個(gè)組文本中的兩個(gè)applet實(shí)例之間沒(méi)有防火墻。在6.1.1節(jié)中對(duì)文本和文本轉(zhuǎn)換的討論中,假定每一個(gè)applet實(shí)例與一個(gè)分離的文本相聯(lián)系。在JavaCard2.1技術(shù)中,文本被比較來(lái)增強(qiáng)防火墻(contextarecomparedtoenforcefirewall),實(shí)例AID被推到堆棧中。另外,它不僅在文本轉(zhuǎn)換時(shí)發(fā)生,而且也在當(dāng)在相同的包內(nèi)控制從由一個(gè)applet所述的一個(gè)對(duì)象轉(zhuǎn)向由另一個(gè)實(shí)例所屬的一個(gè)對(duì)象時(shí)發(fā)生。6.1.2對(duì)象所有權(quán)當(dāng)產(chǎn)生一個(gè)新對(duì)象時(shí),它與當(dāng)前激活的文本相聯(lián)系。但是當(dāng)對(duì)象被例化時(shí),當(dāng)前激活文本中applet實(shí)例擁有該對(duì)象。一個(gè)applet實(shí)例或者JCRE擁有一個(gè)對(duì)象。6.1.3對(duì)象訪問(wèn)通常,即當(dāng)擁有文本是當(dāng)前激活文本時(shí),一個(gè)對(duì)象僅可被擁有其的文本所訪問(wèn)。防火墻可阻止在一個(gè)不同的文本中的另一個(gè)applet訪問(wèn)一個(gè)對(duì)象。在執(zhí)行期間,在一個(gè)對(duì)象被訪問(wèn)的每一次會(huì)將對(duì)象的擁有者文本與當(dāng)前激活文本進(jìn)行比較。如果他們不匹配,則不執(zhí)行訪問(wèn)并產(chǎn)生一個(gè)安全異常(SecurityException)。當(dāng)使用對(duì)象基準(zhǔn)地址執(zhí)行下列字節(jié)碼時(shí),一個(gè)對(duì)象可被訪問(wèn)getfield,putfield,invokevirtual,invokeinterface,athrow,<T>aload,<T>astore,arraylength,checkcast,instanceof<T>表示各種類型的陣列字節(jié)碼,如baload,sastore等。該清單包括這些在JavaCardVM中執(zhí)行的字節(jié)碼的任何特殊或者最優(yōu)化形式,如getfield_b,sgetfield_s_this等。6.1.4防火墻保護(hù)JavaCard防火墻為最頻繁的預(yù)先安全提供保護(hù)開(kāi)發(fā)者的錯(cuò)誤或者設(shè)計(jì)疏漏將敏感數(shù)據(jù)“漏”到另一applet中。一個(gè)applet可從一個(gè)公開(kāi)訪問(wèn)位置得到一個(gè)對(duì)象基準(zhǔn)地址,但如果對(duì)象屬于一個(gè)不同的applet,防火墻可確保安全。防火墻也為防止錯(cuò)誤代碼提供了保護(hù)。如果將錯(cuò)誤代碼加載到一個(gè)智能卡上,防火墻仍可保護(hù)對(duì)象免受該代碼訪問(wèn)。JavaCardAPI2.1指定了文本和防火墻的基本最低保護(hù)要求,因?yàn)樵趯?duì)applet開(kāi)發(fā)者不透明的方式中經(jīng)支持這些特性。開(kāi)發(fā)者將意識(shí)到對(duì)象的特性、API以及與防火墻相關(guān)的異常。JCRE執(zhí)行者不(arefreetoimplement)執(zhí)行防護(hù)墻的安全機(jī)構(gòu)之外的附加安全機(jī)構(gòu),只要這些機(jī)構(gòu)對(duì)applet是透明的并不改變VM的外部可視操作。6.1.5靜態(tài)域和程序也應(yīng)該指出的是類不屬于文本。當(dāng)一個(gè)類靜態(tài)域被訪問(wèn)時(shí),沒(méi)有可被執(zhí)行的運(yùn)行時(shí)文本檢查。當(dāng)一個(gè)靜態(tài)程序被調(diào)用時(shí),也不具有一個(gè)文本轉(zhuǎn)換(相似的,invokespecial不會(huì)引起文本轉(zhuǎn)換)。可從任何文本訪問(wèn)公共靜態(tài)域和公共靜態(tài)程序與其調(diào)用程序一樣,可在在相同的文本中執(zhí)行靜態(tài)程序。在靜態(tài)域中參考的對(duì)象僅是常規(guī)對(duì)象。它們屬于產(chǎn)生他們的程序(whom),標(biāo)準(zhǔn)防火墻訪問(wèn)規(guī)則應(yīng)用(rulesapply)。如果需要穿過(guò)多個(gè)applet文本對(duì)它們進(jìn)行共享,則這些對(duì)象需要成為可共享的接口對(duì)象(SIOs)(參見(jiàn)下面的6.2.4段)。當(dāng)然,常規(guī)的Java技術(shù)保護(hù)仍對(duì)靜態(tài)域和程序進(jìn)行了加強(qiáng)。另外,當(dāng)applet安裝上時(shí),安裝程序要核實(shí)與一個(gè)外部靜態(tài)域和程序鏈接的每一個(gè)試圖是否被允許。關(guān)于鏈接的安裝和細(xì)節(jié)不是本說(shuō)明書(shū)討論的范圍。6.1.5.1可選擇的靜態(tài)訪問(wèn)檢查JCRE可執(zhí)行一個(gè)選擇的運(yùn)行時(shí)檢查,該運(yùn)行時(shí)檢查是冗余的并具有由一個(gè)檢驗(yàn)者實(shí)施的約束。當(dāng)代碼干擾基本語(yǔ)言約束(fundamentallanguagerestriction)如調(diào)用另一個(gè)類和報(bào)表中的一個(gè)私有程序或者其他地址沖突時(shí),一個(gè)JavaCardVM將會(huì)進(jìn)行檢測(cè)。6.2穿過(guò)文本訪問(wèn)對(duì)象為了使applet與其它applet或者JCRE相互操作,提供了一些定義明確的上安全的機(jī)構(gòu),這樣一個(gè)文本可以訪問(wèn)屬于另一個(gè)文本的一個(gè)對(duì)象。在JavaCardAPI2.1提供了這些機(jī)構(gòu)并在下面的節(jié)中對(duì)其進(jìn)行討論JCRE進(jìn)入點(diǎn)對(duì)象全局陣列JCRE特權(quán)可共享接口6.2.1JCRE進(jìn)入點(diǎn)對(duì)象安全計(jì)算機(jī)系統(tǒng)將具有一種用于非特權(quán)用戶處理(對(duì)資源的一個(gè)子集是受限制的)請(qǐng)求由“特權(quán)”系統(tǒng)實(shí)施的系統(tǒng)服務(wù)的方式。在JavaCardAPI2.1中,可使用JCRE進(jìn)入點(diǎn)對(duì)象來(lái)完成。這些是由JCRE文本所屬的對(duì)象,但是它們已經(jīng)被標(biāo)記為包含進(jìn)入點(diǎn)對(duì)象程序。防火墻可保護(hù)這些對(duì)象不被applet訪問(wèn)。進(jìn)入點(diǎn)標(biāo)記允許從任何文本中調(diào)用這些對(duì)象的程序。當(dāng)其發(fā)生時(shí),則執(zhí)行一個(gè)轉(zhuǎn)到JCRE文本的文本轉(zhuǎn)換。這些程序是大門(mén),通過(guò)該大門(mén)applet可請(qǐng)求特權(quán)的JCRE系統(tǒng)服務(wù)。在此具有兩類JCRE進(jìn)入點(diǎn)對(duì)象臨時(shí)JCRE進(jìn)入點(diǎn)對(duì)象象所有的JRE進(jìn)入點(diǎn)對(duì)象一樣,可從任何applet文本處調(diào)用臨時(shí)JCRE進(jìn)入點(diǎn)對(duì)象的程序(method)。然而,這些對(duì)象的基準(zhǔn)地址不能被存儲(chǔ)在類變量、實(shí)例變量、或陣列組件中。JCRE檢測(cè)并限制試圖存儲(chǔ)這些對(duì)象的基準(zhǔn)地址作為防火墻功能的一部分從而來(lái)防止未授權(quán)的再使用。APDU對(duì)象和所有的JCRE擁有的異常對(duì)象是臨時(shí)JCRE進(jìn)入點(diǎn)對(duì)象的例子。永久JCRE進(jìn)入點(diǎn)對(duì)象象所有的JRE進(jìn)入點(diǎn)對(duì)象一樣,可從任何applet文本處調(diào)用永久JCRE進(jìn)入點(diǎn)對(duì)象的程序(method)。另外,這些對(duì)象的基準(zhǔn)地址可被存儲(chǔ)并可自由地再使用。JCRE擁有的AID實(shí)例是永久JCRE進(jìn)入點(diǎn)對(duì)象的例子。JCRE對(duì)下列各項(xiàng)負(fù)責(zé)確認(rèn)將何種特權(quán)服務(wù)提供給applet。定義包含用于這些服務(wù)的進(jìn)入點(diǎn)程序的類。產(chǎn)生這些類的一個(gè)或者多個(gè)實(shí)例。指定這些實(shí)例作為JCRE進(jìn)入點(diǎn)對(duì)象。指定JCRE進(jìn)入點(diǎn)對(duì)象為臨時(shí)型或者永久型。產(chǎn)生這些對(duì)象的基準(zhǔn)地址提供給applet所需。注意通過(guò)防火墻只有這些對(duì)象的程序(method)可被訪問(wèn)。這些對(duì)象的域仍被防火墻所保護(hù)并且僅可由JCRE文本進(jìn)行訪問(wèn)。只有JCRE本身可制定進(jìn)入點(diǎn)對(duì)象以及它們是否是臨時(shí)或永久的。JCRE執(zhí)行者對(duì)執(zhí)行機(jī)構(gòu)負(fù)責(zé),該機(jī)構(gòu)指定JCRE進(jìn)入點(diǎn)對(duì)象并將其變成臨時(shí)或者永久的點(diǎn)對(duì)象。6.2.2全局陣列一些對(duì)象的全局屬性要求可從任何applet文本處對(duì)其進(jìn)行訪問(wèn)。防火墻通??煞乐挂砸粋€(gè)柔軟方式(flexiblemanner)使用這些對(duì)象。JavaCardVM允許將一個(gè)對(duì)象指定為全局對(duì)象。所有全局陣列是臨時(shí)全局陣列對(duì)象。這些對(duì)象屬于JCRE文本,但是可從任何applet文本處訪問(wèn)。然而這些對(duì)象的基準(zhǔn)地址不能被存儲(chǔ)在類變量、實(shí)例變量或者陣列組件中。JCRE檢測(cè)并限制試圖存儲(chǔ)這些對(duì)象的基準(zhǔn)地址作為防火墻功能的一部分從而來(lái)防止未授權(quán)的再使用。對(duì)于附加安全性,只有陣列可被指定為全局型而且只有JCRE本身才可指定全局陣列。因?yàn)閍pplet不能產(chǎn)生它們,沒(méi)有定義API程序。JCRE執(zhí)行者對(duì)執(zhí)行可指定全局陣列的機(jī)構(gòu)負(fù)責(zé)。在本說(shuō)明書(shū)出版時(shí),只有在JavaCardAPI2.1中需要的全局陣列是applet安裝程序的APDU緩沖和字節(jié)陣列輸入?yún)?shù)。注意由于其全局狀態(tài),在JCRE接收一個(gè)新的APDU命令之前,當(dāng)選定一個(gè)applet時(shí),API指定APDU被清除為零。這樣能防止一個(gè)applet潛在的敏感數(shù)據(jù)通過(guò)全局APDU緩沖“漏”到另一個(gè)applet中。可從一個(gè)共享的接口對(duì)象文本處訪問(wèn)APDU緩沖并且APDU緩沖適合于通過(guò)applet文本傳送數(shù)據(jù)。applet對(duì)可從APDU緩沖處訪問(wèn)的秘密數(shù)據(jù)的保護(hù)負(fù)責(zé)。6.2.3JCRE特權(quán)因?yàn)樗且粋€(gè)“系統(tǒng)”文本,JCRE文本具有一個(gè)特定的特權(quán)。它可調(diào)用卡上任何對(duì)象的一個(gè)程序。例如假定對(duì)象X屬于appletA。通常只有A可以訪問(wèn)X的域和程序。但是也允許JCRE文本調(diào)用X的任何程序。在這樣的調(diào)用過(guò)程中,從JCRE文本到擁有X的applet文本間會(huì)發(fā)生一個(gè)文本轉(zhuǎn)換。注意JCRE可以訪問(wèn)X的程序和域。程序訪問(wèn)是JCRE進(jìn)入到一個(gè)applet文本中的過(guò)程(mechanism)。雖然JCRE可以通過(guò)防火墻調(diào)用任何程序,但是它只調(diào)用在applet類中定義的選擇、處理、取消選定和獲取可共享接口對(duì)象(getShareableInterfaceObject)(參見(jiàn)6.2.7.1)。當(dāng)一個(gè)卡復(fù)位之后VM開(kāi)始運(yùn)行時(shí),JCRE文本是當(dāng)前激活文本。JCRE文本是“根”文本并且將當(dāng)前激活文本或底文本保存在堆棧上。6.2.4可共享接口在JavaCard2.1中可共享接口是一個(gè)新特性,它能使applet進(jìn)行相互操作。一個(gè)可共享的接口定義了一組共享的接口程序??蓮囊粋€(gè)applet文本處調(diào)用這些接口程序,即使執(zhí)行它們的對(duì)象屬于另一個(gè)applet文本。在該說(shuō)明書(shū)中,執(zhí)行一個(gè)可共享接口的一個(gè)類的一個(gè)對(duì)象實(shí)例被稱為一個(gè)可共享接口對(duì)象(SIO)。為了擁有文本,SIO是一個(gè)其域和程序可被訪問(wèn)的標(biāo)準(zhǔn)對(duì)象。對(duì)于任何其他文本,SIO是可共享接口的一個(gè)實(shí)例,只有在可共享接口中定義的程序才能被訪問(wèn)。SIO的所有其它域和程序由防火墻保護(hù)??晒蚕斫涌谔峁┝艘粋€(gè)用于內(nèi)applet通信的安全機(jī)構(gòu),如下1.為了產(chǎn)生一個(gè)供給另一applet的對(duì)象,appletA首先定義了一個(gè)可共享的接口SI。一個(gè)可共享接口延伸了接口javacard.framework.Shareable。在可共享接口中定義的程序SI代表了appletA使得可訪問(wèn)其它applet的服務(wù)。2.AppletA定義了一個(gè)執(zhí)行可共享接口SI的類C。C執(zhí)行在SI中定義的程序。C也可定義其它程序和域,但是這些是由applet防火墻保護(hù)的。只有在SI中定義的程序可訪問(wèn)其它applet。3.AppletA產(chǎn)生類C的一個(gè)對(duì)象實(shí)例O。O屬于appletA,防火墻允許A訪問(wèn)O的任何域和程序。4.為了訪問(wèn)appletA的對(duì)象O,appletB產(chǎn)生類型SI(typeSI)的一個(gè)對(duì)象參考SIO。5.AppletB調(diào)用一個(gè)特定的程序(JCSystem.getAppletShareableInterfaceObject,在6.2.7.2中有定義)來(lái)請(qǐng)求來(lái)自appletA的一個(gè)共享接口對(duì)象基準(zhǔn)地址。6.AppletA通過(guò)Applet.getAppletShareableInterfaceObject接收到請(qǐng)求者B的請(qǐng)求和AID,并確認(rèn)它是否能與appletB一起共享對(duì)象O。7.如果appletA同意與applet共享,A用O的一個(gè)基準(zhǔn)地址對(duì)請(qǐng)求進(jìn)行響應(yīng)。該基準(zhǔn)地址被投射到可共享的類型上(thisreferenceiscasttotypeShareable),這樣O的域和程序都是不可見(jiàn)的。8.AppletB從appletA處接收到對(duì)象基準(zhǔn)地址,將其投射到類型SI上并將其存儲(chǔ)在對(duì)象基準(zhǔn)地址SIO中。即使SIO實(shí)際上指向(referto)A的對(duì)象O,SIO是SI類型的。只有在SI中定義的可共享接口程序?qū)τ贐才是可見(jiàn)的。防火墻防止O的其它域和程序被B訪問(wèn)。9.AppletA可通過(guò)調(diào)用SIO的可共享接口程序中的一個(gè)來(lái)請(qǐng)求來(lái)自applet的服務(wù)。在調(diào)用期間,JavaCardVM執(zhí)行一個(gè)文本轉(zhuǎn)換。最初的當(dāng)前激活文本(B)被保存在一個(gè)堆棧上,實(shí)際對(duì)象(O)的擁有者(A)的文本變成新的當(dāng)前激活文本。A在A的文本中執(zhí)行可共享接口程序(SI程序)。10.SI程序可通過(guò)JCSystem.getPreviousContextAID程序找出其客戶(B)的AID。在6.2.5段中對(duì)此進(jìn)行了描述。該程序確認(rèn)它是否執(zhí)行用于appletB的服務(wù)。11.因?yàn)槲谋巨D(zhuǎn)換,防火墻允許SI程序可訪問(wèn)對(duì)象O的所有域和程序以及由A擁有的任何其它對(duì)象。同時(shí),防火墻可防止該程序訪問(wèn)由B擁有的非共享的對(duì)象。12.SI程序可以訪問(wèn)由B傳送的參數(shù)并能為B提供一個(gè)返回值。13.在返回期間,JavaCardVM執(zhí)行一個(gè)恢復(fù)性文本轉(zhuǎn)換。最初當(dāng)前激活文本從堆棧中托出并再次成為當(dāng)前文本。14.因?yàn)槲谋巨D(zhuǎn)換,防火墻再次允許B訪問(wèn)其任何對(duì)象,并防止B訪問(wèn)由A擁有的非共享的對(duì)象。6.2.5確定在前的文本當(dāng)一個(gè)applet調(diào)用JCSystem.getPreviousContextAID時(shí),JCRE返回applet實(shí)例的實(shí)例AID,該實(shí)例AID在上一次文本轉(zhuǎn)換時(shí)是激活的。6.2.5.1JCRE文本JCRE不具有一個(gè)AID。如果一個(gè)applet調(diào)用getPreviousContextAID程序,當(dāng)從JCRE文本處直接進(jìn)入到applet文本中時(shí),該程序?qū)⒎祷亓?null)。如果applet從一個(gè)程序處調(diào)用getPreviousContextAID,既可從applet本身內(nèi)部訪問(wèn)該程序或者通過(guò)一個(gè)可共享的接口由一個(gè)外部applet處進(jìn)行訪問(wèn),它將在執(zhí)行調(diào)用者AID鑒別之前檢查零(null)返回。6.2.6可共享接口細(xì)節(jié)一個(gè)可共享接口只是將標(biāo)記接口jacacard.framework.Shareable延伸(直接或者間接)的接口。該可共享接口與由RMI設(shè)備使用的遠(yuǎn)程接口的概念上很相似,在遠(yuǎn)程接口中穿過(guò)一個(gè)本地/遠(yuǎn)程邊界來(lái)調(diào)用接口程序。6.2.6.1JavaCard可共享接口延伸可共享標(biāo)記接口的接口具有特殊的屬性通過(guò)一個(gè)文本轉(zhuǎn)換,穿過(guò)JavaCardapplet防火墻邊界調(diào)用接口程序??晒蚕斫涌谟糜谧R(shí)別所有可共享的對(duì)象。需要通過(guò)applet防火墻進(jìn)行被共享的任何對(duì)象將直接或間接地執(zhí)行該接口。只有在一個(gè)可共享接口中指定的這些程序通過(guò)防火墻是有用的。執(zhí)行類可以執(zhí)行任何數(shù)量的可共享接口并能延伸其他可共享執(zhí)行類。象任何Java平臺(tái)接口一樣,一個(gè)可共享接口只是定義了一組服務(wù)程序。一個(gè)服務(wù)提供者類宣稱它“執(zhí)行”可共享接口并為接口的每一個(gè)服務(wù)程序提供執(zhí)行。一個(gè)服務(wù)客戶類通過(guò)得到一個(gè)對(duì)象來(lái)參考訪問(wèn)服務(wù),如果需要將其投射到可共享接口類型上并調(diào)用接口的服務(wù)程序。在JavaCard技術(shù)中的可共享接口將具有下列屬性當(dāng)一個(gè)可共享接口內(nèi)的一個(gè)程序被調(diào)用時(shí),對(duì)象擁有者的文本發(fā)生一個(gè)文本轉(zhuǎn)換。當(dāng)該程序退出時(shí),調(diào)用程序的文本被恢復(fù)。異常處理被增強(qiáng),這樣當(dāng)??蚣苷归_(kāi)發(fā)生一個(gè)異常時(shí),當(dāng)前激活文本被正確地恢復(fù)。6.2.7獲得可共享接口對(duì)象當(dāng)一個(gè)客戶applet調(diào)用了屬于一個(gè)服務(wù)器applet的一個(gè)SIO的一個(gè)可共享接口程序時(shí),則完成了內(nèi)部applet通信。為了完成此項(xiàng)工作,必須具有一種方式使得客戶applet能在第一位置從服務(wù)器applet處得到SIO。JCRE提供了一種使其成為可能的機(jī)構(gòu)。applet類和JCSystem類提供了使一個(gè)客戶請(qǐng)求來(lái)自服務(wù)器的服務(wù)的程序。6.2.7.1Applet.getShareableInterfaceObject程序該程序是通過(guò)服務(wù)器applet實(shí)例來(lái)完成的。通過(guò)JCRE調(diào)用該程序使其處于一個(gè)客戶applet和服務(wù)器applet之間,其中客戶applet請(qǐng)求使用屬于另一個(gè)applet的一個(gè)對(duì)象,服務(wù)器applet使得其對(duì)象可供用于共享。默認(rèn)的特性將返回null,其表明一個(gè)applet不參與內(nèi)部applet通信。一個(gè)試圖從另一個(gè)applet被調(diào)用的服務(wù)器applet需要時(shí)該程序無(wú)效(override)。該程序?qū)?duì)客戶AID(clientAID)和參數(shù)進(jìn)行檢查。如果客戶AID(clientAID)不是期望的AD中的一個(gè),該程序?qū)⒎祷匾粋€(gè)null。相似的,如果參數(shù)沒(méi)有被識(shí)別或者如果不允許其用于客戶AID(clientAID),則程序也返回null。否則applet將返回客戶請(qǐng)求的可共享接口類型(type)的一個(gè)SIO。服務(wù)器applet不必對(duì)所有客戶用相同的SIO來(lái)響應(yīng)。服務(wù)器支持多種類型的可共享接口,該可共享接口用于不同的目的,服務(wù)器可使用客戶AID(clientAID)和參數(shù)來(lái)確定哪種類型的SIO返回給客戶。6.2.7.2JCSystem.getAppletShareableInterfaceObject程序(method)JCSystem類包括了getAppletShareableInterfaceObject程序,其是通過(guò)一個(gè)客戶applet被調(diào)用而來(lái)與一個(gè)服務(wù)器applet進(jìn)行通信。JCRE將執(zhí)行該程序而表現(xiàn)如下1.JCRE在其內(nèi)部applet表進(jìn)行檢索來(lái)查找具有服務(wù)器AID(serverAID)的程序。如果沒(méi)有找到,則返回null。2.JCR調(diào)用該applet的getAppletShareableInterfaceObject程序并傳送調(diào)用程序的服務(wù)器AID(serverAID)和參數(shù)。3.服務(wù)器applet發(fā)生了一個(gè)文本轉(zhuǎn)換,如在前一節(jié)中所描述的繼續(xù)執(zhí)行g(shù)etShareableInterfaceObject。服務(wù)器applet返回一個(gè)SIO(或者null)。4.getAppletShareableInterfaceObject對(duì)其調(diào)用程序返回一個(gè)相同的SIO(或者null)。對(duì)于增強(qiáng)的安全性,執(zhí)行對(duì)于客戶而言不可能知道是下列哪一個(gè)條件引起了返回一個(gè)零(null)值服務(wù)器AID(serverAID)沒(méi)有找到。服務(wù)器applet沒(méi)有參與內(nèi)部applet通信。服務(wù)器applet沒(méi)有識(shí)別出服務(wù)器AID(serverAID)和參數(shù)。服務(wù)器applet與其客戶不進(jìn)行通信。服務(wù)器applet與由參數(shù)指定的客戶不進(jìn)行通信。6.2.8類和對(duì)象訪問(wèn)特性當(dāng)執(zhí)行下列Java字節(jié)碼時(shí)可訪問(wèn)一個(gè)靜態(tài)類域getstatic,putstatic當(dāng)使用對(duì)象基準(zhǔn)地址執(zhí)行下列Java字節(jié)碼時(shí)可訪問(wèn)一個(gè)對(duì)象getfield,putfield,invokevirtual,invokeintefface,athrow,<T>aload,<T>astore,arraylength,checkcast,instanceof<T>表示各種類型的陣列字節(jié)碼,如baload,sastore等。該清單包括這些在JavaCardVM中執(zhí)行的字節(jié)碼的任何特殊或者最優(yōu)化形式,如getfield_b,sgetfield_s_this等。在執(zhí)行由JavaVM指定的字節(jié)碼之前,JavaCardVM將在基準(zhǔn)地址的對(duì)象上執(zhí)行一個(gè)訪問(wèn)檢查。如果訪問(wèn)被拒絕,則產(chǎn)生一個(gè)安全異常(SecurityException)。由JavaCardVM執(zhí)行的訪問(wèn)檢查以來(lái)與參考的對(duì)象、字節(jié)碼和當(dāng)前激活文本的類型和擁有者。在后續(xù)的節(jié)中對(duì)其進(jìn)行描述。6.2.8.1訪問(wèn)靜態(tài)類域字節(jié)碼getstatic,putstatic如果JCRE是當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。另外,如果字節(jié)碼是putstatic并且正被存儲(chǔ)的域是一個(gè)基準(zhǔn)地址類型,以及正在存儲(chǔ)的基準(zhǔn)地址是一個(gè)臨時(shí)JCRE進(jìn)入點(diǎn)對(duì)象或者一個(gè)全局陣列的一個(gè)基準(zhǔn)地址,則拒絕進(jìn)行訪問(wèn)。否則,允許進(jìn)行訪問(wèn)。6.2.8.2訪問(wèn)陣列對(duì)象字節(jié)碼<T>aload,<T>astore,arraylength,checkcast,instanceof如果JCRE是當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。另外,如果字節(jié)碼是aastore并且正被存儲(chǔ)的組件是一個(gè)基準(zhǔn)地址類型,以及正在存儲(chǔ)的基準(zhǔn)地址是一個(gè)臨時(shí)JCRE進(jìn)入點(diǎn)對(duì)象或者一個(gè)全局陣列的一個(gè)基準(zhǔn)地址,則拒絕進(jìn)行訪問(wèn)。另外,如果陣列屬于當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。另外,如果陣列被指定為全局型的,則允許進(jìn)行訪問(wèn)。否則,拒絕進(jìn)行訪問(wèn)。6.2.8.3訪問(wèn)類實(shí)例對(duì)象域字節(jié)碼getfield,putfield如果JCRE是當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。另外,如果字節(jié)碼是putfield并且正被存儲(chǔ)的域是一個(gè)基準(zhǔn)地址類型,以及正在存儲(chǔ)的基準(zhǔn)地址是一個(gè)臨時(shí)JCRE進(jìn)入點(diǎn)對(duì)象或者一個(gè)全局陣列的一個(gè)基準(zhǔn)地址,則拒絕進(jìn)行訪問(wèn)。另外,如果對(duì)象屬于當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。否則,拒絕進(jìn)行訪問(wèn)。6.2.8.4訪問(wèn)類實(shí)例對(duì)象程序字節(jié)碼invokevirtual如果對(duì)象屬于當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。文本被轉(zhuǎn)換到了對(duì)象擁有者的文本。另外,如果對(duì)象被指定為一個(gè)JCRE進(jìn)入點(diǎn)對(duì)象,則允許進(jìn)行訪問(wèn)。文本被轉(zhuǎn)換到了對(duì)象擁有者的文本(將是JCRE)。另外,如果JCRE是當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。文本被轉(zhuǎn)換到了對(duì)象擁有者的文本。否則,拒絕進(jìn)行訪問(wèn)。6.2.8.5訪問(wèn)標(biāo)準(zhǔn)接口程序字節(jié)碼invokeinterface如果對(duì)象屬于當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。另外,如果JCRE是當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。文本被轉(zhuǎn)換到了對(duì)象擁有者的文本。否則,拒絕進(jìn)行訪問(wèn)。6.2.8.6訪問(wèn)可共享接口程序字節(jié)碼invokeinterface如果對(duì)象屬于當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。另外,如果對(duì)象的類執(zhí)行了一個(gè)可共享的接口,并且如果正被調(diào)用的接口延伸了可共享接口,則允許進(jìn)行訪問(wèn)。文本被轉(zhuǎn)換到了對(duì)象擁有者的文本。另外,如果JCRE是當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。文本被轉(zhuǎn)換到了對(duì)象擁有者的文本。否則,拒絕進(jìn)行訪問(wèn)。6.2.8.7產(chǎn)生一個(gè)異常對(duì)象字節(jié)碼athrow如果對(duì)象屬于當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。另外,如果對(duì)象被指定為一個(gè)JCRE進(jìn)入點(diǎn)對(duì)象,則允許進(jìn)行訪問(wèn)。另外,如果JCRE是當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。否則,拒絕進(jìn)行訪問(wèn)。6.2.8.8訪問(wèn)類實(shí)例對(duì)象字節(jié)碼checkcast,instanceof如果對(duì)象屬于當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。另外,如果JCRE是當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。另外,如果對(duì)象被指定為一個(gè)JCRE進(jìn)入點(diǎn)對(duì)象,則允許進(jìn)行訪問(wèn)。另外,如果該JCRE是當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。否則,拒絕進(jìn)行訪問(wèn)。6.2.8.9訪問(wèn)標(biāo)準(zhǔn)接口字節(jié)碼checkcast,instanceof如果對(duì)象屬于當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。另外,如果JCRE是當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。否則,拒絕進(jìn)行訪問(wèn)。6.2.8.10訪問(wèn)可共享接口字節(jié)碼checkcast,instanceof如果對(duì)象屬于當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。另外,如果對(duì)象的類執(zhí)行了一個(gè)可共享的接口,并且如果正被投射到(checkcast)的對(duì)象或者對(duì)象是一個(gè)延伸了可共享接口的一個(gè)接口的一個(gè)實(shí)例,則允許進(jìn)行訪問(wèn)。文本被轉(zhuǎn)換到了對(duì)象擁有者的文本。另外,如果JCRE是當(dāng)前激活文本,則允許進(jìn)行訪問(wèn)。否則,拒絕進(jìn)行訪問(wèn)。6.3瞬時(shí)對(duì)象和applet文本CLEAR_ON_RESET類型的瞬時(shí)對(duì)象與永久對(duì)象的特性相似,因?yàn)楫?dāng)當(dāng)前激活文本與對(duì)象的擁有者(在對(duì)象被產(chǎn)生時(shí)的當(dāng)前激活文本)相同時(shí)才能對(duì)它們進(jìn)行訪問(wèn)。當(dāng)當(dāng)前激活文本是當(dāng)前選定的applet文本時(shí),才能產(chǎn)生CLEAR_ON_DESELECT類型的瞬時(shí)對(duì)象或者對(duì)其進(jìn)行訪問(wèn)。當(dāng)當(dāng)前激活文本不是當(dāng)前選定的applet文本時(shí),如果調(diào)用任何產(chǎn)生瞬時(shí)工廠程序(makeTransientfactorymethod)產(chǎn)生一個(gè)CLEAR_ON_DESELECT類型的瞬時(shí)對(duì)象,則該程序?qū)a(chǎn)生一個(gè)具有理由碼ILLEGAL_TRANSIENT的一個(gè)系統(tǒng)異常(SystemException)。如果當(dāng)當(dāng)前激活文本不是當(dāng)前選定的applet文本而試圖去訪問(wèn)CLEAR_ON_DESELECT類型的瞬時(shí)對(duì)象時(shí),則JCRE將產(chǎn)生一個(gè)一個(gè)安全異常(SecurityException)。屬于相同包的部分的applet共享相同的組文本。來(lái)自一個(gè)包的每一個(gè)applet實(shí)例共享具有來(lái)自相同包的所有其他實(shí)例的所有其對(duì)象實(shí)例(它包括屬于這些applet實(shí)例的CLEAR_ON_DESELECT類型和CLEAR_ON_RESET類型瞬時(shí)對(duì)象)。當(dāng)相同的包內(nèi)的applet實(shí)例是當(dāng)前選定文本時(shí),在該包之內(nèi)的屬于任何applet實(shí)例的CLEAR_ON_DESELECT類型瞬時(shí)對(duì)象是可被訪問(wèn)的。7.處理和完整性一個(gè)處理是更新永久數(shù)據(jù)的一個(gè)邏輯組。例如,將一定量的錢(qián)從一個(gè)帳戶轉(zhuǎn)入到另一個(gè)帳戶是一個(gè)銀行處理。對(duì)于處理而言很重要的是完整性(atomic)或者所有的數(shù)據(jù)域被更新或者都不被更新。JCRE對(duì)于可分性處理提供了充分的支持,這樣如果處理沒(méi)有正常完成時(shí),卡數(shù)據(jù)被恢復(fù)到其最初預(yù)處理狀態(tài)。該機(jī)構(gòu)可防止事件的破壞,如一個(gè)處理期間的斷電,如果一個(gè)處理的所有的步驟沒(méi)有正常完成,也能防止引起數(shù)據(jù)訛誤的程序錯(cuò)誤。7.1完整性完整性定義了在更新一個(gè)單對(duì)象或者類域或者陣列組件期間發(fā)生一個(gè)中止、失敗或者重大異常時(shí)卡如何對(duì)永久存儲(chǔ)內(nèi)容的處理。如果在更新期間電源被切斷,applet開(kāi)發(fā)者將依賴當(dāng)電源恢復(fù)時(shí)域或者陣列組件包含的內(nèi)容。JavaCard平臺(tái)確保對(duì)一個(gè)單永久對(duì)象或者類域的任何更新都是完整的。另外,JavaCard平臺(tái)為永久陣列提供了單組件級(jí)完整性。即如果在更新一個(gè)數(shù)據(jù)單元(在一個(gè)對(duì)象/類或者一個(gè)陣列組件內(nèi)的域)期間智能卡斷電時(shí),該數(shù)據(jù)單元在CAD通信期內(nèi)將被保留,該數(shù)據(jù)單元將被恢復(fù)在其在前值。一個(gè)程序也確保對(duì)于多個(gè)數(shù)據(jù)單元的塊更新的完整性。例如Util.arrayCopy程序的完整性確保所有字節(jié)可被正確地復(fù)制,否則其目標(biāo)陣列將被恢復(fù)到其在前的字節(jié)組。一個(gè)applet可能不需要陣列更新的完整性。為此目的而提供了Util.arrayCopyNonAtomic程序。即使在進(jìn)行的處理中被調(diào)用時(shí),它也不使用處理提交緩沖。7.2處理一個(gè)applet可能需要完整的更新在多個(gè)不同對(duì)象中的多個(gè)不同域或者陣列組件?;蛘咚械亩急徽_地更新,或者所有的域/組件被恢復(fù)到其在前的值。JavaCard平臺(tái)支持一個(gè)處理模型,在該模型中,一個(gè)applet可以指定具有調(diào)用JCSystem.beginTransaction程序的一個(gè)完整更新組的一個(gè)起點(diǎn)。在此點(diǎn)之后的每一個(gè)對(duì)象更新是有條件的更新。域或陣列組件似乎要被更新一讀出域/陣列組件產(chǎn)生的其最近的關(guān)系值一但更新尚未被提交。當(dāng)applet調(diào)用JCSystem.commitTransaction時(shí),所有的有條件更新被提交到永久存儲(chǔ)器中。如果在完成JCSystem.commitTransaction之前電源斷電或者發(fā)生一些其它的系統(tǒng)失敗,所有的有條件更新的域或者陣列組件被恢復(fù)到其在前的值。如果applet碰到內(nèi)部錯(cuò)誤或者決定取消處理,它可通過(guò)調(diào)用JCSystem.abortTransaction來(lái)有計(jì)劃地撤銷有條件的更新。7.3處理持續(xù)時(shí)間當(dāng)JCRE重新獲得對(duì)來(lái)自applet的選擇、取消選定、過(guò)程或安裝程序的返回的控制時(shí),總是結(jié)束一個(gè)處理。不論是具有一個(gè)applet的commitTransaction的調(diào)用的一個(gè)處理正常結(jié)束還是處理的中止(由applet編程或者由JCRE默認(rèn)的),都是真實(shí)的。對(duì)于處理中止的細(xì)節(jié),可參考7.6節(jié)。處理持續(xù)時(shí)間是在調(diào)用JCSystem.beginTransaction和調(diào)用commitTransaction或處理中止之間的一個(gè)處理時(shí)間。7.4嵌套處理模型當(dāng)前假定嵌套處理是不可能的。在一個(gè)時(shí)間內(nèi)只有一個(gè)在進(jìn)行中的處理。如果當(dāng)一個(gè)處理在進(jìn)行中時(shí)調(diào)用了JCSystem.beginTransaction,則會(huì)產(chǎn)生一個(gè)TransactionException。提供了JCSystem.TransactionDepth程序從而能確定一個(gè)處理是否是在進(jìn)行中。7.5撕裂(tear)或者復(fù)位處理失敗如果在一個(gè)處理進(jìn)行中電源斷電或者卡被復(fù)位或者發(fā)生一些其它系統(tǒng)失敗,則JCRE將恢復(fù)到由于在前調(diào)用了JCSystem.beginTransaction其所有的域和陣列組件被有條件更新的在前的值。在電源供電、復(fù)位或失敗恢復(fù)后對(duì)卡進(jìn)行重新初始化時(shí),JCRE可自動(dòng)執(zhí)行該操作。JCRE確認(rèn)這些對(duì)象中哪一個(gè)是被有條件地更新并將其恢復(fù)。注意在由于電源斷電或者卡被復(fù)位引起的失敗的處理期間產(chǎn)生的實(shí)例使用的對(duì)象空間可被JCRE恢復(fù)。7.6中止一個(gè)處理處理可由一個(gè)applet或者JCRE中止。7.6.1程序性中止如果一個(gè)applet遇到一個(gè)內(nèi)部問(wèn)題或者決定取消處理,它可通過(guò)調(diào)用JCSystem.abortTransaction來(lái)撤銷有條件的更新。如果該程序被調(diào)用,所有由于在前調(diào)用JCSystem.beginTransaction而有條件更新的域和陣列組件被恢復(fù)到其在前值,JCSystem.TransactionDepth值被復(fù)位為0。7.6.2由JCRE中止如果一個(gè)applet從具有一個(gè)正在進(jìn)行的處理的選擇、取消選定、過(guò)程或者安裝程序處返回,JCRE將自動(dòng)中止處理。如果從具有一個(gè)正在進(jìn)行的處理的選擇、取消選定、過(guò)程或者安裝程序處得到一個(gè)返回,JCRE將其視為發(fā)生了一個(gè)異常。7.6.3清除JCRE的職責(zé)只有當(dāng)在正在被中止的處理期間產(chǎn)生的對(duì)象實(shí)例被定位以及轉(zhuǎn)換為null時(shí),才能將對(duì)象實(shí)例刪除。JCRE將確保在中止的處理期間產(chǎn)生的對(duì)象的基準(zhǔn)地址等于一個(gè)null的基準(zhǔn)地址。7.7瞬時(shí)對(duì)象只有永久對(duì)象的更新參與處理。對(duì)瞬時(shí)對(duì)象的更新決不會(huì)被撤銷,而不管它們是否在“一個(gè)處理的內(nèi)部”。7.8提交容量因?yàn)槠脚_(tái)資源是有限的,在一個(gè)處理期間可累加的有條件更新數(shù)據(jù)的字節(jié)數(shù)是有限的。JavaCard技術(shù)提供了確認(rèn)在執(zhí)行時(shí)多少提交容量是可用的程序。提交容量表示了有條件更新數(shù)據(jù)字節(jié)數(shù)的有用的一個(gè)上限。由于管理的開(kāi)銷,有條件更新數(shù)據(jù)的實(shí)際有用字節(jié)數(shù)比提交容量低。在一個(gè)處理期間如果超過(guò)了提交容量,將會(huì)產(chǎn)生一個(gè)異常。8.API主題本章的主題是對(duì)JavaCard2.1API第2草稿版說(shuō)明書(shū)的補(bǔ)充。的一個(gè)主題是JavaCardI/O功能,其完全是在APDU類中進(jìn)行執(zhí)行的。第二主題是API支持JavaCard安全性和機(jī)密技術(shù)。JCSystem類封裝了API版本級(jí)。在API內(nèi)的處理除非在JavaCard2.1API說(shuō)明書(shū)中特別聲明,如果一個(gè)處理正在進(jìn)行中,API類的執(zhí)行將不初始化或者改變其狀態(tài)。在API內(nèi)的資源使用除非在JavaCard2.1API說(shuō)明書(shū)中特別聲明,即使當(dāng)對(duì)象實(shí)例的擁有者不是當(dāng)前選定的applet,執(zhí)行也將支持調(diào)用API實(shí)例程序。換句話說(shuō),除非特別指出,執(zhí)行將不使用資源如CLEAR_ON_DESELECT類型的瞬時(shí)對(duì)象。API產(chǎn)生的異常API執(zhí)行產(chǎn)生的所有異常對(duì)象將是臨時(shí)JCRE進(jìn)入點(diǎn)對(duì)象。臨時(shí)JCRE進(jìn)入點(diǎn)對(duì)象不能被存儲(chǔ)在類變量、實(shí)例變量或者陣列組件中(參見(jiàn)6.2.1)。8.1APDU類APDU類封裝了穿過(guò)卡的串行線對(duì)基于I/O的ISO781-4的訪問(wèn)。APDU類被設(shè)計(jì)成獨(dú)立于基礎(chǔ)的I/O傳輸協(xié)議。JCRE可支持T=0或者T=1傳輸協(xié)議或者都支持。8.1.1T=0表示外發(fā)數(shù)據(jù)傳輸為了與不支持鏈接塊機(jī)構(gòu)的常規(guī)CAD/終端兼容,APDU類允許通過(guò)setOutgoingNoChaining方法進(jìn)行模式選擇。8.1.1.1無(wú)鏈接的約束性傳輸當(dāng)applet通過(guò)調(diào)用setOutgoingNoChaining程序請(qǐng)求輸出傳輸?shù)臒o(wú)鏈接模式時(shí),下列協(xié)議序列將在其后注意當(dāng)使用無(wú)鏈接模式時(shí),調(diào)用waitExtension程序?qū)a(chǎn)生一個(gè)具有理由碼ILLEGAL_USE的APDUException。符號(hào)Le=CAD期望的長(zhǎng)度Lr=applet通過(guò)setOutgoingLength程序?qū)﹂L(zhǎng)度設(shè)定進(jìn)行響應(yīng)。<INS>=等于輸入頭INS字節(jié)的協(xié)議字節(jié),它表明所有數(shù)據(jù)字節(jié)將被傳輸給下一個(gè)。<-INS>=輸入頭INS字節(jié)互補(bǔ)的協(xié)議字節(jié),它表示正被傳輸給下一個(gè)的約1個(gè)數(shù)據(jù)字節(jié)。<SW1,SW2>=如在ISO7816-4中的響應(yīng)狀態(tài)ISO7816-4第2個(gè)例子Le=Lr1.卡通過(guò)使用標(biāo)準(zhǔn)T=0<INS>或<-INS>程序字節(jié)機(jī)構(gòu)來(lái)發(fā)送輸出數(shù)據(jù)的Lr字節(jié)。2.卡傳送關(guān)于Applet.process方法的<SW1,SW2>完成狀態(tài)。Lr<Le1.卡傳送<0x61,Lr>完成狀態(tài)字節(jié)。2.CAD發(fā)送具有Le=Lr的GETRESPONSE命令。3.卡通過(guò)使用標(biāo)準(zhǔn)T=0<INS>或<-INS>程序字節(jié)機(jī)構(gòu)來(lái)發(fā)送輸出數(shù)據(jù)的Lr字節(jié)。4.卡傳送關(guān)于Applet.process方法的<SW1,SW2>完成狀態(tài)。Lr>Le1.卡通過(guò)使用標(biāo)準(zhǔn)T=0<INS>或<-INS>程序字節(jié)機(jī)構(gòu)來(lái)發(fā)送輸出數(shù)據(jù)的Le字節(jié)。2.卡傳送<0x61,Lr-Le>完成狀態(tài)字節(jié)。3.CAD發(fā)送具有Le<=Lr的GETRESPONSE命令。4.卡通過(guò)使用標(biāo)準(zhǔn)T=0<INS>或<-INS>程序字節(jié)機(jī)構(gòu)來(lái)發(fā)送輸出數(shù)據(jù)的(新)Le字節(jié)。5.如需要重復(fù)步驟2~4從而來(lái)發(fā)送所需的剩余的輸出數(shù)據(jù)字節(jié)(Lr)。6.卡傳送關(guān)于Applet.process方法的<SW1,SW2>完成狀態(tài)。ISO7816-4第4個(gè)例子在第4個(gè)例子中,在下面的初始交換之后來(lái)確定Le1.卡發(fā)送<0x61,Lr狀態(tài)字節(jié)>。2.CAD發(fā)送具有Le<=Lr的GETRESPONSE命令。協(xié)議序列的其余部分與如上所述的第2個(gè)例子中的相同。如果applet提前中止或者發(fā)送不超過(guò)Le字節(jié),則可能會(huì)發(fā)送一個(gè)零而不是填寫(xiě)(fillout)由CAD所期望的傳輸長(zhǎng)度。8.1.1.2常規(guī)的輸出傳輸當(dāng)applet沒(méi)有請(qǐng)求輸出傳輸?shù)臒o(wú)鏈接模式時(shí)(即使用setOutgoing程序),下列的協(xié)議序列將在其后可以使用任何ISO7816-3/4T=0兼容的協(xié)議傳輸序列。注意waitExtension可由在連續(xù)調(diào)用sendBytes或sendBytesLong程序之間的applet調(diào)用。waitExtension程序?qū)⒗?x60程序字節(jié)請(qǐng)求等待時(shí)間(ISO7816-3)的一個(gè)附加的操作。8.1.1.3附加的T=0需求在任何時(shí)候,當(dāng)使用T=0輸出傳輸協(xié)議時(shí)并且對(duì)來(lái)自卡的<0x61,xx>一個(gè)響應(yīng)狀態(tài)的反應(yīng),APDU類在等待一個(gè)來(lái)自CAD的GETRESPONSE命令,如果CAD發(fā)送了一個(gè)不同的命令,sendBytes或sendBytesLong程序?qū)a(chǎn)生一個(gè)具有理由碼NO_TO_GETRESPONSE的異常APDUException。由此點(diǎn)處調(diào)用sendBytes或sendBytesLong將導(dǎo)致一個(gè)具有理由碼ILLEGAL_USE的異常APDUException。如果在產(chǎn)生NO_TO_GETRESPONSE異常之后由applet產(chǎn)生一個(gè)ISOException異常,JCRE將放棄在其理由碼中的響應(yīng)狀態(tài)。JCRE將利用新接收到的命令和恢復(fù)的APDU分配重新開(kāi)始APDU過(guò)程。8.1.2T=1表示外發(fā)數(shù)據(jù)傳輸8.1.2.1無(wú)鏈接的約束性傳輸當(dāng)applet通過(guò)調(diào)用setOutgoingNoChaining程序請(qǐng)求輸出傳輸?shù)臒o(wú)鏈接模式時(shí),下列協(xié)議序列將在其后符號(hào)Le=CAD期望的長(zhǎng)度Lr=applet通過(guò)setOutgoingLength程序?qū)﹂L(zhǎng)度設(shè)定進(jìn)行響應(yīng)。轉(zhuǎn)送協(xié)議序列將不使用塊鏈接。特別是在傳輸期間(ISO7816-3)M-比特(大于數(shù)據(jù)比特)將不被設(shè)定在I塊的PCB中。換句話說(shuō),整個(gè)外發(fā)數(shù)據(jù)(Lr字節(jié))將在一個(gè)I塊中傳輸。(如果applet提前中止或者發(fā)送不超過(guò)Lr字節(jié),則可能會(huì)發(fā)送一個(gè)零而不是填寫(xiě)(fillout)由CAD所期望的傳輸長(zhǎng)度。)注意當(dāng)使用無(wú)鏈接模式時(shí),調(diào)用waitExtension程序?qū)a(chǎn)生一個(gè)具有理由碼ILLEGAL_USE的APDUException異常。8.1.2.2常規(guī)的輸出傳輸當(dāng)applet沒(méi)有請(qǐng)求輸出傳輸?shù)臒o(wú)鏈接模式時(shí)(即使用setOutgoing程序),下列的協(xié)議序列將在其后可以使用任何ISO7816-3/4T=1兼容的協(xié)議傳輸序列。注意waitExtension可由在連續(xù)調(diào)用sendBytes或sendBytesLong程序之間的applet調(diào)用。waitExtension程序?qū)l(fā)送一個(gè)具有INF單元的WTX請(qǐng)求的S塊,該請(qǐng)求等價(jià)于在T=0模式中1個(gè)附加操作等待時(shí)間的一個(gè)請(qǐng)求(ISO7816-3)。8.2安全性和加密包在下列類中的getInstance程序返回在請(qǐng)求算法的調(diào)用applet的文本中的一個(gè)執(zhí)行實(shí)例javacard.security.MessageDigestjavacard.security.Signaturejavacard.security.RandomDatajavacard.crypto.Cipher一個(gè)JCRE的執(zhí)行可執(zhí)行0或者多個(gè)列在API中算法。當(dāng)請(qǐng)求了一個(gè)沒(méi)有被執(zhí)行的算法,該程序?qū)a(chǎn)生一個(gè)具有理由碼NO_SUCH_ALGORITHM的一個(gè)CryptoException異常。執(zhí)行上述類將延伸相應(yīng)的基本類并執(zhí)行所有抽象程序(abstractmethod)。與執(zhí)行實(shí)例相聯(lián)系的所有數(shù)據(jù)分配將在一個(gè)實(shí)例構(gòu)造期間被執(zhí)行從而能確保在安裝applet期間所需資源的任何匱乏將被及早的標(biāo)記出來(lái)。相似的,javacard.security.keyBuilder類的buildKey程序返回一個(gè)請(qǐng)求的鍵類型(keytype)的執(zhí)行實(shí)例。JCRE可執(zhí)行0或者多個(gè)鍵類型(typesofkeys)。當(dāng)請(qǐng)求一個(gè)沒(méi)有被執(zhí)行的鍵類型時(shí),該程序?qū)a(chǎn)生一個(gè)具有理由碼NO_SUCH_ALGORITHM的一個(gè)CryptoException異常。執(zhí)行鍵類型將執(zhí)行相聯(lián)系的接口。與鍵執(zhí)行實(shí)例相聯(lián)系的所有數(shù)據(jù)分配將在一個(gè)實(shí)例構(gòu)造期間被執(zhí)行從而能確保在安裝applet期間所需資源的任何匱乏將被及早的標(biāo)記出來(lái)。8.3JCSystem類在JavaCard2.1中,getVersion程序?qū)⒎祷?短)0x0201。9.虛擬機(jī)主題本章的主題對(duì)虛擬機(jī)的氣節(jié)進(jìn)行討論。9.1資源失敗可恢復(fù)的資源條件的缺乏(如堆空間)將導(dǎo)致一個(gè)具有理由碼NO_RESOURCE的系統(tǒng)異常SystemException。在JCSystem中用于產(chǎn)生瞬時(shí)陣列的工廠程序(factorymethod)一個(gè)具有理由碼NO_TRANSIENT_SPACE的系統(tǒng)異常SystemException,表示缺乏瞬時(shí)空間。所有其他(不可恢復(fù)的)虛擬機(jī)錯(cuò)誤如堆棧溢出將導(dǎo)致一個(gè)虛擬機(jī)錯(cuò)誤。這些情況將會(huì)引起虛擬機(jī)的停機(jī)。當(dāng)發(fā)生這樣一個(gè)不可恢復(fù)的虛擬機(jī)錯(cuò)誤時(shí),一個(gè)執(zhí)行可選擇地要求卡在進(jìn)一步應(yīng)用中為啞的(mute)或者阻塞的(block)(requirethecardtobemutedorblockedfromfurtheruse)。10.Applet安裝器在一個(gè)智能卡上使用JavaCard技術(shù)的applet安裝是一個(gè)復(fù)雜的主題。JavaCardAPI2.1意圖在于為JCRE執(zhí)行者在其執(zhí)行時(shí)提供盡可能多的自由。然而,需要一些基本的通用說(shuō)明以便允許安裝JavaCardapplet而無(wú)需知道一個(gè)特定安裝器的執(zhí)行細(xì)節(jié)。本說(shuō)明書(shū)定義了一個(gè)安裝器的概念并指出了最小安裝要求,以便在可能的安裝器執(zhí)行的一個(gè)大范圍內(nèi)取得互用性。Applet安裝器是JCRE2.1說(shuō)明書(shū)中的一個(gè)可選擇的部分。即一個(gè)JCRE的執(zhí)行不必需要包括一個(gè)發(fā)布之后(post-issuance)的安裝器。然而,如果被執(zhí)行,要求安裝器支持在9.1節(jié)中說(shuō)明的特性(behavior)。10.1安裝器需要在一個(gè)智能卡上使用JavaCard技術(shù)安裝一個(gè)applet的機(jī)構(gòu)被體現(xiàn)在一個(gè)被稱為安裝器的在卡上的組件(on-cardcomponent)。對(duì)于CAD,安裝器似乎是一個(gè)applet。它具有一個(gè)AID并且當(dāng)該AID被一個(gè)SELECT命令成功處理時(shí),它將變成當(dāng)前選定的applet。一旦被選定,安裝器與任何其它applet的特性(behave)很相似。象任何其他選定的applet一樣,它接收所有的APDU。它的設(shè)計(jì)說(shuō)明規(guī)定了APDU的各種類型和格式,該APDU期望依照在各種前提下的這些命令的語(yǔ)義接收。它對(duì)所有接收的APDU進(jìn)行響應(yīng)和處理。對(duì)不正確的APDU以一些類型的一個(gè)錯(cuò)誤條件進(jìn)行響應(yīng)。當(dāng)選定另一個(gè)applet時(shí)(或者當(dāng)卡被復(fù)位時(shí)或者卡被斷電時(shí)),安裝器被取消選定并保持在暫停狀態(tài),直到下一次被選定。10.1.1安裝器執(zhí)行在卡上安裝器不必像一個(gè)applet一樣被執(zhí)行。該需要僅僅是安裝器功能是可選擇的。該需要的推論是當(dāng)一個(gè)非安裝器applet被選定或者沒(méi)有一個(gè)applet被選定時(shí),安裝器組件將不能被調(diào)用。明顯的是,一個(gè)JCRE執(zhí)行者可選擇執(zhí)行安裝器作為一個(gè)applet。如果是這樣,則安裝器可被編碼來(lái)延伸Applet類以及對(duì)選擇、處理和取消選定程序的調(diào)用的響應(yīng)。但是一個(gè)JCRE也可以其他方式執(zhí)行安裝器,只要其能為外界可選擇的特性。在該例子中,JCRE執(zhí)行者具有提供一些其它機(jī)構(gòu)的自由,通過(guò)該機(jī)構(gòu)APDU可被傳遞到安裝器代碼模塊中。10.1.2安裝器AID因?yàn)榘惭b器是可選擇的,它將具有一個(gè)AID。JCRE執(zhí)行者可自由地選擇其自己的AID,通過(guò)該AID,其安裝器被選定。也可以執(zhí)行多個(gè)安裝器。10.1.3安裝器APDUJavaCardAPI2.1沒(méi)有指定用于安裝器的任何APDU。JCRE執(zhí)行者在其操作中可以完全自由的選擇其自己的APDU命令來(lái)指導(dǎo)其安裝器。模型是在卡上的安裝器被一個(gè)運(yùn)行在CAD上的安裝程序驅(qū)動(dòng)。為了成功地安裝,該CAD安裝程序?qū)⒛茏R(shí)別智能卡。在卡上選擇(SELECT)安裝器。通過(guò)發(fā)送卡安裝器的適當(dāng)APDU來(lái)驅(qū)動(dòng)安裝過(guò)程。這些APDU將包含鑒別信息,能確保安裝是被授權(quán)的。將applet加載到智能卡的存儲(chǔ)器中。將applet代碼和已經(jīng)在卡上的代碼相連接的連接信息。發(fā)送給applet安裝程序(method)的實(shí)例初始化參數(shù)數(shù)據(jù)。JavaCardAPI2.1沒(méi)有詳細(xì)說(shuō)明CAD安裝程序和在它和安裝器之間傳送的APDU的細(xì)節(jié)。10.1.4安裝器特性JCRE執(zhí)行者也定義了其安裝器的其它特性,包括安裝是否可以被中止,如何實(shí)現(xiàn)。如果在安裝期間發(fā)生一個(gè)異常、復(fù)位或者斷電將如何應(yīng)對(duì)。如果在安裝其完成之前另一個(gè)applet被選定將如何應(yīng)對(duì)。JCRE將確保如果出現(xiàn)下列情況一個(gè)applet不能被成功地安裝在來(lái)自Applet.register程序的成功返回之前,applet的安裝程序產(chǎn)生一個(gè)異常。10.1.5安裝器特權(quán)盡管一個(gè)安裝器可以作為一個(gè)applet來(lái)執(zhí)行,但一個(gè)安裝器典型的需要“其他applet”所沒(méi)有的訪問(wèn)特性。例如,根據(jù)JCRE執(zhí)行者的執(zhí)行,安裝器將需要繞過(guò)對(duì)象系統(tǒng)和/或標(biāo)準(zhǔn)安全而直接對(duì)存儲(chǔ)器進(jìn)行讀和寫(xiě)。訪問(wèn)屬于其他applet或JCRE的對(duì)象。調(diào)用JCRE的非進(jìn)入點(diǎn)程序。可以調(diào)用一個(gè)新安裝的applet的安裝程序。要求每一個(gè)JCRE執(zhí)行者來(lái)確定安裝器執(zhí)行并在其JCRE的執(zhí)行中按需提供這些特性來(lái)支持其安裝器。JCRE執(zhí)行者也對(duì)這些特性的安全特性負(fù)責(zé),因此在一般的applet中沒(méi)有這些特性。10.2新安裝的applet在安裝其和正在安裝的applet之間具有一個(gè)單接口。在安裝器正確地準(zhǔn)備了用于執(zhí)行的applet之后(執(zhí)行的步驟如加載或者連接),安裝器將調(diào)用applet安裝程序。該程序在Applet類中有定義。將一個(gè)applet的安裝程序從安裝其中調(diào)出的準(zhǔn)確的機(jī)構(gòu)(precisemechanism)shiyigeJCRE執(zhí)行器定義的執(zhí)行細(xì)節(jié)。然而應(yīng)有一個(gè)文本轉(zhuǎn)換,這樣由安裝程序執(zhí)行的任何文本相關(guān)的操作在新的applet的文本中被完成而不是在安裝器的文本中被完成。安裝器也將確保在applet類初始化(<clinit>)程序期間產(chǎn)生的陣列對(duì)象也屬于新applet的文本。如果完成所有步驟而沒(méi)有失敗或者產(chǎn)生一個(gè)異常直到包括從Applet.register程序處的成功返回,則認(rèn)為一個(gè)applet的安裝完成。在此點(diǎn)處,安裝的applet是可選擇的。參數(shù)數(shù)據(jù)的最大長(zhǎng)度為32字節(jié)。為了安全的原因,在返回之后bArray參數(shù)被清零(就像在來(lái)自一個(gè)applet的處理方法的返回上的APDU緩沖被清零)10.2.1安裝參數(shù)不同于32字節(jié)的最大最大長(zhǎng)度,JavaCardAPI2.1不對(duì)安裝參數(shù)字節(jié)陣列組段的內(nèi)容進(jìn)行任何的指定。它是由applet設(shè)計(jì)者全部定義的并且可以是任何所需的格式。另外,這些安裝參數(shù)意在對(duì)于安裝器是不透名的。JCRE執(zhí)行者可設(shè)計(jì)其安裝器,這樣對(duì)一個(gè)運(yùn)行在一個(gè)CAD上的安裝程序而言可能指定一個(gè)可被傳送給安裝器的任意的(arbitrary)字節(jié)陣列。安裝器可簡(jiǎn)單地將該字節(jié)陣列轉(zhuǎn)送給bArray參數(shù)中的目標(biāo)applet安裝程序。一個(gè)典型的執(zhí)行可定義一個(gè)JCRE執(zhí)行者所有的APDU命令,該命令具有這樣的語(yǔ)義“對(duì)傳送伴隨字節(jié)陣列的applet安裝程序進(jìn)行調(diào)用”。11.API常數(shù)在JavaCardAPI2.1參考書(shū)中一些API類不具有為其常數(shù)指定的值。如果JCRE2.1說(shuō)明書(shū)的執(zhí)行者指定的常量不一致,則工業(yè)范圍內(nèi)的互換性是不可能的。本章為常數(shù)提供了所需的值,該所需值在JavaCardAPI2.1說(shuō)明書(shū)中沒(méi)有說(shuō)明。javacard.framework.APDU類publicstaticfinalbytePROTOCOL_T0=0;publicstaticfinalbytePROTOCOL_T1=0;javacard.framework.APDUException類publicstaticfinalshortILLEGAL_USE=1;publicstaticfinalshortBUFFER_BOUNDS=2;publicstaticfinalshortBAD_LENGTH=3;publicstaticfinalshortIO_ERROR=4;publicstaticfinalshortNO_TO_GETRESPONSE=0xAA;javacard.framework.ISO7816接口publicfinalstaticshortSW_NO_ERROR=(short)0x9000;publicfinalstaticshortSW_BYTES_REMAINING_00=0x6100;publicfinalstaticshortSW_WRONG_LENGTH=0x6700;publicstaticfinalshortSW_SECURITY_STATUS_NOT_SATISFIED=0x6982;publicfinalstaticshortSW_FILE_INVALID=0x6983;publicfinalstaticshortSW_DATA_INVALID=0x6984;publicfinalstaticshortSW_CONDITIONS_NO_SATIFIED=0x6985;publicfinalstaticshortSW_COMMAND_NOT_ALLOWED=0x6986;publicfinalstaticshortSW_APPLET_SELECT_FAILED=0x6999;publicfinalstaticshortSW_WRONG_DATA=0x6A80;publicfinalstaticshortSW_FUNC_NOT_SUPPORTED=0x6A81;publicfinalstaticshortSW_FILE_NOT_FOUND=0x6A82;publicfinalstaticshortSW_RECORD_NOT_FOUND=0x6A83;publicfinalstaticshortSW_INCORRECT_P1P2=0x6A86;publicfinalstaticshortSW_WRONG_P1P2=0x6B00;publicfinalstaticshortSW_CORRECT_LENGTH_00=0x6C00;publicfinalstaticshortSW_INS_NOT_SUPPORTED=0x6D00;publicfinalstaticshortSW_CLA_NOT_SUPPORTED=0x6E00;<!--SIPO<DPn="42">--><dpn="d42"/>publicfinalstaticshortSW_UNKNOWN=0x6F00;publicstaticfinalshortSW_FILE_FULL=0x6A84;publicfinalstaticbyteOFFSET_CLA=0;publicfinalstaticbyteOFFSET_INS=1;publicfinalstaticbyteOFFSET_P1=2;publicfinalstaticbyteOFFSET_P2=3;publicfinalstaticbyteOFFSET_LC=4;publicfinalstaticbyteOFFSET_CDATA=5;publicfinalstaticbyteCLA_ISO7816=0x00;publicfinalstaticbyteINS_SECLECT=(byte)0xA4;publicfinalstaticbyteINS_EXTERNAL_AUTHENTICATE=(byte)0x82;javacard.framework.JCSystem類publicstaticfinalbyteNOT_A_TRANSIENT_OBJECT=0;publicstaticfinalbyteCLEAR_ON_RESET=1;publicstaticfinalbyteCLEAR_ON_DESELECT=2;javacard.framework.PINException類publicstaticfinalshortILLEGAL_VALUE=1;javacard.framework.SystemException類publicstaticfinalshortILLEGAL_VALUE=1;publicstaticfinalshortNO_TRANSIENT_SPACE=2;publicstaticfinalshortILLEGAL_TRANSIENT=3;publicstaticfinalshortILLEGAL_AID=4;publicstaticfinalshortNO_RESOURCE=5;javacard.security.CryptoException類publicstaticfinalshortILLEGAL_VALUE=1;publicstaticfinalshortUNINITIALIZED=2;publicstaticfinalshortNO_SUCH_ALGOROTHM=3;publicstaticfinalshortINVALID_INIT=4;publicstaticfinalshortILLIGAL_USE=5;javacard.security.Keybuilder類publicstaticfinalbyteTYPE_DES_TRANSIENT_RESET=1;publicstaticfinalbyteTYPE_DES_TRANSIENT_DESELECT=2;publicstaticfinalbyteTYPE_DES=3;publicstaticfinalbyteTYPE_RSA_PUBLIC=4;publicstaticfinalbyteTYPE_RSA_PRIVATE=5;<!--SIPO<DPn="43">--><dpn="d43"/>publicstaticfinalbyteTYPE_RSA_CRT_PRIVATE=6;publicstaticfinalbyteTYPE_DSA_PUBLIC=7;publicstaticfinalbyteTYPE_DSA_PRIVATE=1;publicstaticfinalshortLENGTH_DES=64;publicstaticfinalshortLENGTH_DES3_2KEY=128;publicstaticfinalshortLENGTH_DES3_3KEY=192;publicstaticfinalshortLENGTH_RSA_512=512;publicstaticfinalshortLENGTH_RSA768=768;publicstaticfinalshortLENGTH_RSA_1024=1024;publicstaticfinalshortLENGTH_RSA_2048=2048;publicstaticfinalshortLENGTH_DSA_512=512;publicstaticfinalshortLENGTH_DSA_768=768;publicstaticfinalshortLENGTH_DSA_1024=1024;javacard.security.MessageDigest類publicstaticfinalbyteALG_SHA=1;publicstaticfinalbyteALG_MDS=2;publicstaticfinalbyteALG_RIPEMD160=3;javacard.security.RandomData類publicstaticfinalbyteALG_PSEUDO_RANDOM=l;publicstaticfinalbyteALG_SECURE_RANDOM=2;javacard.security.Signature類publicstaticfinalbyteALG_DES_MAC4_NOPAD=1;publicstaticfinalbyteALG_DES_MAC8_NOPAD=2;publicstaticfinalbyteALG_DES_MAC4_ISO9797_M1=3;publicstaticfinalbyteALG_DES_MAC8_ISO9797_M1=4;publicstaticfinalbyteALG_DES_MAC4_ISO9797_M2=5;publicstaticfinalbyteALG_DES_MAC8_ISO9797_M2=6;publicstaticfinalbyteALG_DES_MAC4_PKCSS=7;publicstaticfinalbyteALG_DES_MAC8_PKCSS=8;publicstaticfinalbyteALG_RSA_SHA_ISO9796=9;publicstaticfinalbyteALG_RSA_SHA_PKCSl=10;publicstaticfinalbyteALG_RSA_MDS_PKCS1=11;publicstaticfinalbyteALG_RSA_RIPEMD160_ISO9796=12;publicstaticfinalbyteALG_RSA_RIPEMD160_PKCS1=13;publicstaticfinalbyteALG_RSA_SHA=14;publicstaticfinalbyteMODE_SIGN=1;publicstaticfinalbyteMODE_VERIFY=2;javacardx.crypto.Cipher類publicstaticfinalbyteALG_DES_CBC_NOPAD=1;publicstaticfinalbyteALG_DES_CBC_IOS9797_M1=2;publicstaticfinalbyteALG_DES_CBC_ISO9797_M2=3;publicstaticfinalbyteALG_DES_CBC_PKCSS=4;publicstaticfinalbyteALG_DES_ECB_NOPAD=5;publicstaticfinalbyteALG_DES_ECB_ISO9797_M1=6;publicstaticfinalbyteALG_DES_ECB_ISO9797_M2=7;publicstaticfinalbyteALG_DES_ECB_PKCSS=8;publicstaticfinalbyteALG_RSA_ISO14888=9;publicstaticfinalbyteALG_RSA_PKCSS=10;publicstaticfinalbyteMODE_DECRYPT=1;publicstaticfinalbyteMODE_ENCRYPT=2;術(shù)語(yǔ)表AID是在ISO7816-5中定義的應(yīng)用標(biāo)示符的縮寫(xiě)。APDU是在ISO7816-5中定義的應(yīng)用協(xié)議數(shù)據(jù)單元的縮寫(xiě)。API是應(yīng)用程序接口的縮寫(xiě)。API定義了調(diào)用規(guī)范,一個(gè)應(yīng)用程序通過(guò)該規(guī)范可以訪問(wèn)操作系統(tǒng)和其他服務(wù)。Applet在本說(shuō)明書(shū)文本中的applet是一個(gè)JavaCardapplet,在JavaCard技術(shù)中它是一個(gè)選擇、文本、功能和安全的基本單元。applet開(kāi)發(fā)者指的是使用JavaCard技術(shù)說(shuō)明書(shū)編制一個(gè)JavaCardapplet的人。applet防火墻在JavaCard技術(shù)中是一個(gè)機(jī)構(gòu),VM可通過(guò)該機(jī)構(gòu)防止一個(gè)applet對(duì)屬于另一個(gè)applet文本或JCRE文本的對(duì)象進(jìn)行非法訪問(wèn)并進(jìn)行報(bào)告或相反會(huì)引起地址沖突。整體性操作是一種操作,該操作或者在整體上全部被完成(如果操作成功),或者在整體上一點(diǎn)都沒(méi)有被完成(如果操作失敗)。整體性指的是一個(gè)特定的操作是否是整體的以及在斷電或者智能卡從CAD中突然退出的情況下對(duì)于適當(dāng)?shù)臄?shù)據(jù)恢復(fù)是否是必需的。ATR是對(duì)復(fù)位的應(yīng)答的縮寫(xiě)。一個(gè)ATR是在一個(gè)復(fù)位之后由JavaCard發(fā)送的一串字節(jié)。CAD是卡識(shí)別設(shè)備的縮寫(xiě)。CAD是將智能卡插在其中的設(shè)備。投射(cast)是從一個(gè)數(shù)據(jù)類型向另一數(shù)據(jù)類型的明確轉(zhuǎn)換。cJCK是一套來(lái)鑒別JavaCard技術(shù)規(guī)格的執(zhí)行的兼容性的檢驗(yàn)程序。cJCK使用Java測(cè)試工具來(lái)運(yùn)行檢驗(yàn)程序。類在一個(gè)面向?qū)ο蟮木幊陶Z(yǔ)言中類是一個(gè)對(duì)象的原型。一個(gè)類可以被認(rèn)為是一組對(duì)象,該組對(duì)象具有共同的結(jié)構(gòu)和特性。一個(gè)類的結(jié)構(gòu)由表示該類的一個(gè)對(duì)象狀態(tài)的類變量來(lái)確定,類的特性由一組與類相聯(lián)系的程序來(lái)給定。類涉及類的層次結(jié)構(gòu)。一個(gè)類可以是另一個(gè)類(超類)的一個(gè)特殊化(一個(gè)子類),它可具有其它類的基準(zhǔn)地址(reference),并且在一個(gè)客戶-服務(wù)器關(guān)系中可使用其它的類。文本(參見(jiàn)Applet執(zhí)行文本)當(dāng)前激活文本JCRE對(duì)當(dāng)前激活的JavaCardapplet文本進(jìn)行記錄。當(dāng)一個(gè)虛擬程序在一個(gè)對(duì)象上被調(diào)用時(shí),要求并允許進(jìn)行一個(gè)文本轉(zhuǎn)換,當(dāng)前激活文本被改變成擁有對(duì)象的的applet文本。當(dāng)該程序返回時(shí),對(duì)在前的文本進(jìn)行恢復(fù)。調(diào)用靜態(tài)程序?qū)Ξ?dāng)前激活文本沒(méi)有影響。當(dāng)前激活文本和一個(gè)對(duì)象的共享狀態(tài)共同確認(rèn)是否可以允許對(duì)一個(gè)對(duì)象進(jìn)行訪問(wèn)。當(dāng)前選定的appletJCRE對(duì)當(dāng)前選定的JavaCardapplet進(jìn)行記錄。在接收到具有該applet的AID的一個(gè)SELECT命令時(shí),JCRE將該applet變成當(dāng)前選定applet。JCRE將所有的APDU命令發(fā)送給當(dāng)前選定的applet。EEPROM是電可擦除只讀存儲(chǔ)器的縮寫(xiě)。防火墻(參見(jiàn)Applet防火墻)框架(framework)是執(zhí)行API的類組。它包括核心和延伸包。職責(zé)(responsibility)包括APDU、applet選擇、管理整體性和安裝applet的調(diào)度。無(wú)用單元收集是一個(gè)過(guò)程,在執(zhí)行一個(gè)程序期間通過(guò)該過(guò)程,動(dòng)態(tài)分配存儲(chǔ)可自動(dòng)被收回。實(shí)例變量與域一樣公知,表是一個(gè)對(duì)象的內(nèi)部狀態(tài)的一個(gè)部分。每一個(gè)對(duì)象都具有其自己的實(shí)例變量組。相同類的對(duì)象將具有相同的實(shí)例變量,但每一個(gè)對(duì)象具有不同的值。例化在面向?qū)ο蟮木幊陶Z(yǔ)言中意思是從其類模板中產(chǎn)生一個(gè)特定的對(duì)象。它涉及具有由模板設(shè)定的類型的一個(gè)數(shù)據(jù)結(jié)構(gòu)的分配以及利用默認(rèn)值或者有類構(gòu)造函數(shù)提供的值對(duì)實(shí)例變量的一個(gè)初始化。JAR是Java存檔文件的縮寫(xiě)。JAR是一個(gè)獨(dú)立于平臺(tái)的文件格式,它能將許多文件合并到一個(gè)中去。JavaCard運(yùn)行時(shí)環(huán)境(JCRE)由JavaCard虛擬機(jī)、框架以及相聯(lián)系的本地程序組成。JC21RI是JavaCard2.1基準(zhǔn)地址(reference)執(zhí)行的縮寫(xiě)。JCRE執(zhí)行者指的是利用JavaCardAPI產(chǎn)生一個(gè)特定銷售執(zhí)行(vendor-specificimplementation)的一個(gè)人。JCVM是JavaCard虛擬機(jī)的縮寫(xiě)。JCVM是OP卡結(jié)構(gòu)的基礎(chǔ)。JCVM執(zhí)行字節(jié)代碼并對(duì)類和對(duì)象進(jìn)行管理。它在應(yīng)用程序之間實(shí)施一個(gè)分離(防火墻)并且可使數(shù)據(jù)安全地進(jìn)行共享。JDK是Java開(kāi)發(fā)工具包。JDK時(shí)SunMicrosystem的產(chǎn)品,它能為在Java中的編程提供一個(gè)所需的環(huán)境。JDK可供各種平臺(tái)使用,但最著名的是SunSolaris和MicrosoftWindows。程序(method)是在面向?qū)ο缶幊陶Z(yǔ)言中與一個(gè)或者多個(gè)類相聯(lián)系的程序(procedureorroutine)。名稱空間是一個(gè)名稱組,其中所有的名稱都是唯一的。面向?qū)ο笫且环N基于一個(gè)對(duì)象的概念的編程方法,它是一個(gè)封裝了一組程序的數(shù)據(jù)結(jié)構(gòu),該程序(method)在數(shù)據(jù)上運(yùn)行。對(duì)象,在面向?qū)ο蟮木幊讨惺且粋€(gè)數(shù)據(jù)結(jié)構(gòu)的獨(dú)特的實(shí)例,該數(shù)據(jù)結(jié)構(gòu)是根據(jù)其類提供的模板來(lái)定義的。每一個(gè)對(duì)象具有屬于其類的變量的其自己的值,并能對(duì)由其類定義的消息(程序)進(jìn)行響應(yīng)。包是Java編程語(yǔ)言中的一個(gè)名稱空間并具有類和接口。一個(gè)包是Java編程語(yǔ)言中的最小單元。永久對(duì)象永久對(duì)象和其值從一個(gè)CAD通信期到另一個(gè)CAD通信期持續(xù)無(wú)限期地存在。對(duì)象被默認(rèn)是永久的??墒褂锰幚韺?duì)永久對(duì)象的值進(jìn)行自動(dòng)更新。術(shù)語(yǔ)“永久”不意味著一個(gè)面向?qū)ο蟮臄?shù)據(jù)庫(kù)或者對(duì)象是串行的/解串行的,而是指當(dāng)卡斷電時(shí)對(duì)象沒(méi)有被丟失??晒蚕斫涌诙x了一組可共享接口程序。當(dāng)執(zhí)行這些接口程序的對(duì)象屬于另一個(gè)applet文本時(shí),可從一個(gè)applet文本調(diào)用該接口程序??晒蚕斫涌趯?duì)象(SIO)一個(gè)執(zhí)行可共享接口的對(duì)象。處理是一個(gè)整體性操作,其中開(kāi)發(fā)者定義了操作的范圍,該范圍表明程序代碼的開(kāi)始和結(jié)束。瞬時(shí)對(duì)象瞬時(shí)對(duì)象的值不能從一個(gè)CAD通信期到另一個(gè)期間存在,并且在一個(gè)特定的間隔處將其復(fù)位到一個(gè)默認(rèn)狀態(tài)。瞬時(shí)對(duì)象的值的更新不是整體性的而且不受處理的影響。1/5/991249PMHavnor材料;JCRED212DEC98READ-ME-JCRE21-DF2.TXT第一頁(yè)日期1998年12月16日親愛(ài)的JavaCard許可證持有者;JCRE21-DF2-14DEC98.ZIP包含了用于許可證持有者進(jìn)行參考和注釋的JavaCard2.1運(yùn)行時(shí)環(huán)境說(shuō)明書(shū)的第2版,日期為1998年12月14日。根據(jù)我們到目前為止收到的反饋我們對(duì)本文件進(jìn)行了合并和解釋。該ZIP文件的全部?jī)?nèi)容如下READ-ME-JCRE21-FD2.txt一個(gè)幫助型文本文件JCRE21-DF2.pdfPDF格式的《JavaCard2.1運(yùn)行時(shí)環(huán)境(JCRE)說(shuō)明書(shū)》JCRE21-DF2-changebar.pdf為了方便參考,具有從前版的修改條目的修訂本修改綜述1.是一個(gè)第2草稿版,并將立即在公眾網(wǎng)站上出版。2.為了限制非法訪問(wèn),對(duì)臨時(shí)JCRE進(jìn)入點(diǎn)對(duì)象的新的描述進(jìn)行了介紹。防火墻6.2.1章3.與臨時(shí)JCRE進(jìn)入點(diǎn)對(duì)象相似,全局陣列現(xiàn)在增與安全相關(guān)的的限制。6.2.24.對(duì)用于臨時(shí)JCRE進(jìn)入點(diǎn)對(duì)象和增加的全局陣列的關(guān)于存儲(chǔ)限制的字節(jié)碼進(jìn)行了詳細(xì)的說(shuō)明。6.2.8章5.在第8章增加的JCRE擁有的異常對(duì)象進(jìn)行了描述。6.在瞬時(shí)產(chǎn)生(factory)程序中的虛擬機(jī)資源失敗進(jìn)行了修正描述。9.1章《JavaCard2.1運(yùn)行時(shí)環(huán)境(JCRE)說(shuō)明書(shū)》為完全的JavaCard2.1的執(zhí)行指定了最小特性和運(yùn)行時(shí)環(huán)境,可參考JavaCardAPT2.1和JavaCard2.1虛擬機(jī)說(shuō)明書(shū)文件。要求本說(shuō)明書(shū)能確保JavaCardapplet的兼容運(yùn)行。本說(shuō)明書(shū)文件的目的在于以一種簡(jiǎn)潔的方式將所有的JCRE要素集中在一起作為系列JavaCard2.1說(shuō)明書(shū)的一部分。請(qǐng)將建議和意見(jiàn)發(fā)送給javaoem-javacard@sun.com或者寄信給我本人,地址如下所示。我代表JavaCard開(kāi)發(fā)組真誠(chéng)地恭候您的來(lái)信。祝福GodfreyDiGiorgiGodfreyDiGiorgi-godfrev.digiorgi@eng.sun.comOEMLicenseeEngineering2SunMicrosystem/JavaSoftware+1408343-1506傳真+1408517-5460權(quán)利要求1、一種小型注腳設(shè)備,包括至少一個(gè)處理單元,配置其以執(zhí)行各自文本中一個(gè)或者多個(gè)程序模塊的組,所述一個(gè)或者多個(gè)程序模塊包含零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義,所述零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義成組為對(duì)象定義,每個(gè)文本包含投影對(duì)象實(shí)例空間以便以例說(shuō)明至少一個(gè)與一特定文本相關(guān)的所述的對(duì)象定義。存儲(chǔ)器,其包含對(duì)象的實(shí)例;和文本屏障,其用于分離和隔離所述文本,所述文本配置用于至少部分根據(jù)是否執(zhí)行所述至少一個(gè)指令以用于與所述一個(gè)或多個(gè)各自文本的第一個(gè)相關(guān)的對(duì)象實(shí)例,以及是否至少一個(gè)指令正請(qǐng)求存取與所述一個(gè)或多個(gè)分離文本的第二個(gè)相關(guān)的對(duì)象定義的實(shí)例,來(lái)控制組成程序模塊所述零或多組指令中的至少一個(gè)的執(zhí)行,所述文本屏障還進(jìn)一步配置用于如果沒(méi)有授權(quán)所述存取則防止所述存取,以及如果授權(quán)所述存取則致能所述存取。2、如權(quán)利要求1所述的小型注腳設(shè)備,其中通過(guò)記錄在所述對(duì)象實(shí)例標(biāo)題內(nèi)的所述文本的名稱,所述標(biāo)題中不可存取所述一個(gè)或多個(gè)程序模塊的信息,將對(duì)象實(shí)例和文本相關(guān)。3、如權(quán)利要求1所述的小型注腳設(shè)備,其中所述存儲(chǔ)器包含對(duì)象標(biāo)題數(shù)據(jù),所述對(duì)象標(biāo)題數(shù)據(jù)包含與至少一個(gè)所述對(duì)象實(shí)例相關(guān)的信息;以及所述控制執(zhí)行至少部分取決于所述對(duì)象標(biāo)題數(shù)據(jù)。4、如權(quán)利要求1所述的小型注腳設(shè)備,其中將所述存儲(chǔ)器分區(qū)為具有對(duì)象實(shí)例的多個(gè)存儲(chǔ)空間,分配所述對(duì)象實(shí)例以存儲(chǔ)在所述多個(gè)存儲(chǔ)空間中的一個(gè);以及所述控制執(zhí)行至少取決于決定分配給正在執(zhí)行的對(duì)象實(shí)例和已存取對(duì)象實(shí)例的存儲(chǔ)空間。5、如權(quán)利要求1所述的小型注腳設(shè)備,其中所述至少一個(gè)處理單元是運(yùn)行在處理器上的虛擬機(jī)。6、如權(quán)利要求5所述的小型注腳設(shè)備,其中所述虛擬機(jī)運(yùn)行在卡操作系統(tǒng)的頂部。7、如權(quán)利要求1所述的小型注腳設(shè)備,其中所述文本屏障為每一個(gè)文本分配不同的各自名稱空間。8、如權(quán)利要求1所述的小型注腳設(shè)備,其中所述文本屏障為每一個(gè)文本分配不同的各自存儲(chǔ)空間。9、如權(quán)利要求1所述的小型注腳設(shè)備,其中至少一個(gè)安全檢測(cè)取決于主體和對(duì)象之間的存儲(chǔ)空間協(xié)議。10、如權(quán)利要求8所述的小型注腳設(shè)備,其中至少一個(gè)安全檢測(cè)取決于主體和對(duì)象之間的部分名稱協(xié)議。11、如權(quán)利要求1所述的小型注腳設(shè)備,其中至少一個(gè)程序模塊包含多個(gè)applets程序。12、如權(quán)利要求1所述的小型注腳設(shè)備,其中所述文本屏障對(duì)主體、對(duì)象或操作中至少一個(gè)實(shí)施至少一個(gè)安全檢測(cè)以防止一個(gè)文本中的主體存取不同文本中的對(duì)象。13、一種操作包含處理機(jī)的小型注腳設(shè)備的方法,其中在所述處理機(jī)上執(zhí)行程序模塊,所述方法包含執(zhí)行不同的文本中一個(gè)或多個(gè)程序模塊的組,所述一個(gè)或者多個(gè)程序模塊包含零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義,所述零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義成組為對(duì)象定義,每個(gè)文本包含投影對(duì)象實(shí)例空間以便以例說(shuō)明至少一個(gè)與一特定文本相關(guān)的所述的對(duì)象定義;以及提供文本屏障,用于分離和隔離所述文本,所述文本配置用于至少部分根據(jù)是否執(zhí)行所述至少一個(gè)指令以用于與所述一個(gè)或多個(gè)各自文本的第一個(gè)相關(guān)的對(duì)象實(shí)例,以及是否至少一個(gè)指令正請(qǐng)求存取與所述一個(gè)或多個(gè)分離文本的第二個(gè)相關(guān)的對(duì)象定義的實(shí)例,來(lái)控制組成程序模塊所述零或多組指令中的至少一個(gè)的執(zhí)行,所述提供文本屏障還進(jìn)一步包含如果沒(méi)有授權(quán)所述存取則防止所述存取;以及如果授權(quán)所述存取則致能所述存取。14、如權(quán)利要求13所述的方法,其中通過(guò)記錄在所述對(duì)象實(shí)例標(biāo)題內(nèi)的所述文本的名稱,所述標(biāo)題中不可存取所述一個(gè)或多個(gè)程序模塊的信息,將對(duì)象實(shí)例和文本相關(guān)。15、如權(quán)利要求13所述的方法,所述所述控制執(zhí)行至少部分取決于對(duì)象標(biāo)題數(shù)據(jù),所述對(duì)象標(biāo)題數(shù)據(jù)包含與至少一個(gè)所述對(duì)象實(shí)例相關(guān)的信息。16、如權(quán)利要求13所述的方法,其中將所述小型注腳設(shè)備的存儲(chǔ)器分區(qū)為具有對(duì)象實(shí)例的多個(gè)存儲(chǔ)空間,所述對(duì)象實(shí)例分配存儲(chǔ)在所述多個(gè)存儲(chǔ)空間中的一個(gè);以及所述控制執(zhí)行至少取決于決定分配給正在執(zhí)行的對(duì)象實(shí)例和已存取對(duì)象實(shí)例的存儲(chǔ)空間。17、如權(quán)利要求13所述的方法,其中使用虛擬機(jī)執(zhí)行所述文本屏障。18、如權(quán)利要求13所述的方法,其中只有主體和對(duì)象均是相同名稱空間的一部分時(shí)才允許主體訪問(wèn)對(duì)象。19、如權(quán)利要求13所述的方法,其中只有主體和對(duì)象均是相同存儲(chǔ)空間的一部分時(shí)才允許主體訪問(wèn)對(duì)象。20、如權(quán)利要求13所述的方法,其中只有主體和對(duì)象均是相同文本的一部分時(shí)才允許主體對(duì)對(duì)象執(zhí)行操作。21、如權(quán)利要求20所述的方法,其中當(dāng)主體和對(duì)象不是同一文本的一部分時(shí)但主體被授權(quán)能對(duì)對(duì)象進(jìn)行操作時(shí),文本屏障允許該主體存取該對(duì)象。22、如權(quán)利要求21所述的方法,其中如果主體通過(guò)至少一個(gè)安全檢測(cè)那么該主體就被授權(quán)。23、如權(quán)利要求22所述的方法,其中所述至少一個(gè)安全檢測(cè)是多個(gè)安全檢測(cè)中的一個(gè)。24、如權(quán)利要求21所述的方法,其中如果第一文本中的主體被授權(quán)對(duì)第二文本中的一個(gè)對(duì)象進(jìn)行一個(gè)或多個(gè)操作,那么在進(jìn)行操作時(shí),其將在第二文本中的進(jìn)行。25、如權(quán)利要求24所述的方法,其中當(dāng)操作在第二文本中進(jìn)行,而第二文本要求對(duì)第三文本中的對(duì)象進(jìn)行操作時(shí),操作在第三文本中進(jìn)行。26、如權(quán)利要求24所述的方法,其中當(dāng)授權(quán)一個(gè)或多個(gè)操作在第二文本中進(jìn)行時(shí),后續(xù)操作將基于在第二文本中進(jìn)行的原則被授權(quán),并且第二文本中的主體能夠存取第二文本中的對(duì)象。27、如權(quán)利要求25所述的方法,其中當(dāng)一個(gè)或多個(gè)操作在第二文本中完成時(shí),程序返回到第一文本。28、如權(quán)利要求27所述的方法,其中任何時(shí)候,只要已授權(quán)對(duì)新文本中的對(duì)象進(jìn)行操作,那么操作轉(zhuǎn)換到新的文本。29、一種計(jì)算機(jī)程序產(chǎn)品,包括存儲(chǔ)介質(zhì);以及計(jì)算機(jī)控制單元,該單元包含有用來(lái)在小型注腳設(shè)備上實(shí)現(xiàn)文本屏障的指令,所述小型注腳設(shè)備包含至少一個(gè)處理單元,配置其以執(zhí)行各自文本中一個(gè)或者多個(gè)程序模塊的組,所述一個(gè)或者多個(gè)程序模塊包含零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義,所述零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義成組為對(duì)象定義,每個(gè)文本包含投影對(duì)象實(shí)例空間以便以例說(shuō)明至少一個(gè)與一特定文本相關(guān)的所述的對(duì)象定義。存儲(chǔ)器,其包含對(duì)象的實(shí)例;和文本屏障,其用于分離和隔離所述文本,所述文本配置用于至少部分根據(jù)是否執(zhí)行所述至少一個(gè)指令以用于與所述一個(gè)或多個(gè)各自文本的第一個(gè)相關(guān)的對(duì)象實(shí)例,以及是否至少一個(gè)指令正請(qǐng)求存取與所述一個(gè)或多個(gè)分離文本的第二個(gè)相關(guān)的對(duì)象定義的實(shí)例,來(lái)控制組成程序模塊所述零或多組指令中的至少一個(gè)的執(zhí)行,所述文本屏障還進(jìn)一步配置用于如果沒(méi)有授權(quán)所述存取則防止所述存取,以及如果授權(quán)所述存取則致能所述存取。30、如權(quán)利要求29所述的計(jì)算機(jī)程序產(chǎn)品,其中所述存儲(chǔ)介質(zhì)為載波。31、一種計(jì)算機(jī)程序產(chǎn)品,包括存儲(chǔ)介質(zhì);以及計(jì)算機(jī)控制單元,該單元包含指令,該指令通過(guò)使程序在各自文本中的運(yùn)行從而將小型注腳設(shè)備上的多個(gè)程序分離開(kāi),所述小型注腳設(shè)備包含至少一個(gè)處理單元,配置其以執(zhí)行各自文本中一個(gè)或者多個(gè)程序模塊的組,所述一個(gè)或者多個(gè)程序模塊包含零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義,所述零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義成組為對(duì)象定義,每個(gè)文本包含投影對(duì)象實(shí)例空間以便以例說(shuō)明至少一個(gè)與一特定文本相關(guān)的所述的對(duì)象定義。存儲(chǔ)器,其包含對(duì)象的實(shí)例;和文本屏障,其用于分離和隔離所述文本,所述文本配置用于至少部分根據(jù)是否執(zhí)行所述至少一個(gè)指令以用于與所述一個(gè)或多個(gè)各自文本的第一個(gè)相關(guān)的對(duì)象實(shí)例,以及是否至少一個(gè)指令正請(qǐng)求存取與所述一個(gè)或多個(gè)分離文本的第二個(gè)相關(guān)的對(duì)象定義的實(shí)例,來(lái)控制組成程序模塊所述零或多組指令中的至少一個(gè)的執(zhí)行,所述文本屏障還進(jìn)一步配置用于如果沒(méi)有授權(quán)所述存取則防止所述存取,以及如果授權(quán)所述存取則致能所述存取。32、如權(quán)利要求31所述的計(jì)算機(jī)程序產(chǎn)品,其中所述存儲(chǔ)介質(zhì)為載波。33、一種載有指令的載波,該指令用來(lái)實(shí)現(xiàn)小型注腳設(shè)備上通信鏈路的文本屏障,所述小型注腳設(shè)備包含至少一個(gè)處理單元,配置其以執(zhí)行各自文本中一個(gè)或者多個(gè)程序模塊的組,所述一個(gè)或者多個(gè)程序模塊包含零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義,所述零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義成組為對(duì)象定義,每個(gè)文本包含投影對(duì)象實(shí)例空間以便以例說(shuō)明至少一個(gè)與一特定文本相關(guān)的所述的對(duì)象定義。存儲(chǔ)器,其包含對(duì)象的實(shí)例;和文本屏障,其用于分離和隔離所述文本,所述文本配置用于至少部分根據(jù)是否執(zhí)行所述至少一個(gè)指令以用于與所述一個(gè)或多個(gè)各自文本的第一個(gè)相關(guān)的對(duì)象實(shí)例,以及是否至少一個(gè)指令正請(qǐng)求存取與所述一個(gè)或多個(gè)分離文本的第二個(gè)相關(guān)的對(duì)象定義的實(shí)例,來(lái)控制組成程序模塊所述零或多組指令中的至少一個(gè)的執(zhí)行,所述文本屏障還進(jìn)一步配置用于如果沒(méi)有授權(quán)所述存取則防止所述存取,以及如果授權(quán)所述存取則致能所述存取。34、一種在通信鏈路載有指令的載波,該指令通過(guò)將程序在各自文本中的運(yùn)行,將小型注腳設(shè)備上的多個(gè)程序分離開(kāi),所述小型注腳設(shè)備包含至少一個(gè)處理單元,配置其以執(zhí)行各自文本中一個(gè)或者多個(gè)程序模塊的組,所述一個(gè)或者多個(gè)程序模塊包含零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義,所述零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義成組為對(duì)象定義,每個(gè)文本包含投影對(duì)象實(shí)例空間以便以例說(shuō)明至少一個(gè)與一特定文本相關(guān)的所述的對(duì)象定義。存儲(chǔ)器,其包含對(duì)象的實(shí)例;和文本屏障,其用于分離和隔離所述文本,所述文本配置用于至少部分根據(jù)是否執(zhí)行所述至少一個(gè)指令以用于與所述一個(gè)或多個(gè)各自文本的第一個(gè)相關(guān)的對(duì)象實(shí)例,以及是否至少一個(gè)指令正請(qǐng)求存取與所述一個(gè)或多個(gè)分離文本的第二個(gè)相關(guān)的對(duì)象定義的實(shí)例,來(lái)控制組成程序模塊所述零或多組指令中的至少一個(gè)的執(zhí)行,所述文本屏障還進(jìn)一步配置用于如果沒(méi)有授權(quán)所述存取則防止所述存取,以及如果授權(quán)所述存取則致能所述存取。35.一種在網(wǎng)絡(luò)上運(yùn)載代碼的方法,包括將一組代碼從服務(wù)器發(fā)出的步驟,所述這組代碼包括在通信鏈路上的指令,這些指令通過(guò)將程序在各自文本中的運(yùn)行,將小型注腳設(shè)備上的多個(gè)程序分離開(kāi),所述小型注腳設(shè)備包含至少一個(gè)處理單元,配置其以執(zhí)行各自文本中一個(gè)或者多個(gè)程序模塊的組,所述一個(gè)或者多個(gè)程序模塊包含零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義,所述零或多組可執(zhí)行指令和零或多組數(shù)據(jù)定義成組為對(duì)象定義,每個(gè)文本包含投影對(duì)象實(shí)例空間以便以例說(shuō)明至少一個(gè)與一特定文本相關(guān)的所述的對(duì)象定義。存儲(chǔ)器,其包含對(duì)象的實(shí)例;和文本屏障,其用于分離和隔離所述文本,所述文本配置用于至少部分根據(jù)是否執(zhí)行所述至少一個(gè)指令以用于與所述一個(gè)或多個(gè)各自文本的第一個(gè)相關(guān)的對(duì)象實(shí)例,以及是否至少一個(gè)指令正請(qǐng)求存取與所述一個(gè)或多個(gè)分離文本的第二個(gè)相關(guān)的對(duì)象定義的實(shí)例,來(lái)控制組成程序模塊所述零或多組指令中的至少一個(gè)的執(zhí)行,所述文本屏障還進(jìn)一步配置用于如果沒(méi)有授權(quán)所述存取則防止所述存取,以及如果授權(quán)所述存取則致能所述存取。全文摘要一種小型注腳設(shè)備如智能卡,通過(guò)包含一個(gè)將多個(gè)程序的執(zhí)行隔開(kāi)的文本屏障,其能夠安全地運(yùn)行來(lái)自不相關(guān)的供貨商的多個(gè)程序。該文本屏障進(jìn)行安全檢測(cè)以確定主體和對(duì)象是否在同一名稱空間或存儲(chǔ)空間中,或者用來(lái)確定請(qǐng)求的操作是否授權(quán)給準(zhǔn)備被操作的對(duì)象。文檔編號(hào)G06F9/44GK1619455SQ200410038220公開(kāi)日2005年5月25日申請(qǐng)日期2000年1月20日優(yōu)先權(quán)日1999年1月22日發(fā)明者J·舒塞爾,M·B·巴特勒,A·施特賴希申請(qǐng)人:太陽(yáng)微系統(tǒng)公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1