欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

智能卡安全環(huán)境的控制方法

文檔序號(hào):6623838閱讀:189來(lái)源:國(guó)知局
專(zhuān)利名稱:智能卡安全環(huán)境的控制方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種對(duì)智能卡安全環(huán)境進(jìn)行控制的方法,具體地說(shuō),是指一種Java智能卡的安全環(huán)境管理系統(tǒng)的控制方法。
背景技術(shù)
隨著Java智能卡的廣泛應(yīng)用,對(duì)于Java智能卡技術(shù)的研究也逐步展開(kāi)。如何通過(guò)Java智能卡來(lái)提供一個(gè)安全計(jì)算環(huán)境,這包括代碼安全性校驗(yàn)、下載過(guò)程的安全保證等多方面的問(wèn)題。
Java智能卡技術(shù)是Java虛擬機(jī)技術(shù)向有限資源設(shè)備平臺(tái)的移植。Java智能卡的Applet經(jīng)過(guò)編譯和轉(zhuǎn)換后生成虛擬機(jī)指令集的字節(jié)碼程序。這些字節(jié)碼再由卡上虛擬機(jī)來(lái)運(yùn)行。Java虛擬機(jī)早期的運(yùn)行技術(shù)主要是解釋執(zhí)行機(jī)制,即將字節(jié)碼通過(guò)解釋程序翻譯為相應(yīng)的本地執(zhí)行代碼來(lái)運(yùn)行,它適合于在資源較少的設(shè)備中使用。而后,為了提高字節(jié)碼的執(zhí)行速度,又相繼提出了編譯為本地代碼執(zhí)行、動(dòng)態(tài)編譯和JIT編譯執(zhí)行、HotSpot技術(shù)及直接的專(zhuān)用硬件結(jié)構(gòu)執(zhí)行等運(yùn)行技術(shù)。編譯為本地代碼的方法雖然顯著地提高了速度,但卻一定程度地影響了Java語(yǔ)言的安全機(jī)制和可移植性,這在高安全性要求的智能卡應(yīng)用中顯然并不適合。動(dòng)態(tài)編譯、JIT編譯技術(shù)和HotSpot技術(shù)是在運(yùn)行時(shí)將字節(jié)碼編譯為本地代碼,這需要大量的運(yùn)行時(shí)的存儲(chǔ)資源,這在通常只有2K左右RAM的智能卡中也不具可行性。
為了通過(guò)Java智能卡來(lái)提供一個(gè)安全計(jì)算環(huán)境,必須解決代碼安全性校驗(yàn)、運(yùn)行環(huán)境中的應(yīng)用防火墻機(jī)制、下載過(guò)程的安全保證等多方面的問(wèn)題。Java智能卡中的Applet經(jīng)過(guò)編譯和轉(zhuǎn)換后生成Java智能卡虛擬機(jī)能夠識(shí)別的字節(jié)碼指令,而后再通過(guò)讀寫(xiě)器下載到智能卡上。為了防止惡意Applet下載到Java卡上運(yùn)行,必須對(duì)生成的字節(jié)碼指令進(jìn)行安全性校驗(yàn)。這主要包括防止Applet運(yùn)行過(guò)程中出現(xiàn)棧溢出、非法的跳轉(zhuǎn)指令以及非法的類(lèi)型轉(zhuǎn)換如將整數(shù)轉(zhuǎn)換為對(duì)象引用、不兼容的對(duì)象引用間的轉(zhuǎn)換等。這一過(guò)程必須在對(duì)Java卡指令類(lèi)型系統(tǒng)形式化描述的基礎(chǔ)上,結(jié)合Java卡虛擬機(jī)的特點(diǎn),采用卡外生成代碼證書(shū)卡內(nèi)校驗(yàn)的方法來(lái)執(zhí)行。

發(fā)明內(nèi)容
本發(fā)明的目的是提供一種智能卡安全環(huán)境的管理方法,該管理方法為了給有限計(jì)算資源環(huán)境下的智能卡平臺(tái)提供一個(gè)安全的計(jì)算環(huán)境,在Java卡卡內(nèi)、卡外虛擬機(jī)結(jié)構(gòu)的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了橢圓曲線數(shù)字簽名的方法,卡外代碼證書(shū)(CodeCertificate)的生成法和卡上字節(jié)碼的安全校驗(yàn)法。
本發(fā)明的一種智能卡安全環(huán)境的控制方法,所述智能卡包括有智能卡硬件系統(tǒng)以及硬件系統(tǒng)相關(guān)的本地方法集、Java卡虛擬機(jī)、Java卡運(yùn)行環(huán)境、Java卡類(lèi)庫(kù)和Java卡應(yīng)用管理組件組成,下載至智能卡中的應(yīng)用程序經(jīng)過(guò)編譯和轉(zhuǎn)換后生成Java卡虛擬機(jī)指令集的字節(jié)碼序列,所述字節(jié)碼序列通過(guò)Java卡虛擬機(jī)來(lái)運(yùn)行;所述Java卡虛擬機(jī)有卡內(nèi)虛擬機(jī)和卡外虛擬機(jī),卡外虛擬機(jī)實(shí)現(xiàn)對(duì)編譯后的文件進(jìn)行轉(zhuǎn)換,生成CAP文件;卡內(nèi)虛擬機(jī)實(shí)現(xiàn)執(zhí)行CAP文件中的所述字節(jié)碼序列;在卡內(nèi)安全環(huán)境的控制中首先將由卡外虛擬機(jī)的轉(zhuǎn)換器輸出的所述字節(jié)碼序列進(jìn)行類(lèi)型劃界,得到第一校驗(yàn)類(lèi)型和第二校驗(yàn)類(lèi)型;然后采用校驗(yàn)規(guī)則對(duì)所述校驗(yàn)類(lèi)型進(jìn)行安全校驗(yàn)。
所述的智能卡安全環(huán)境的控制方法,其類(lèi)型劃界包括第一校驗(yàn)類(lèi)型和第二校驗(yàn)類(lèi)型。相對(duì)于校驗(yàn)類(lèi)型的校驗(yàn)規(guī)則有第一校驗(yàn)規(guī)則和第二校驗(yàn)規(guī)則。
本發(fā)明的優(yōu)點(diǎn)(一)加快了類(lèi)型校驗(yàn)的速度,因?yàn)楸苊饬酥噶罘种Ы粎R處的類(lèi)型推斷和反復(fù)疊代。(二)降低了對(duì)存儲(chǔ)資源的要求。因?yàn)榇a證書(shū)為只讀信息,可存儲(chǔ)在卡內(nèi)容量較大的EEPROM中,校驗(yàn)完成后可刪除。從而避免了在RAM中存儲(chǔ)大量的需進(jìn)行讀寫(xiě)操作的類(lèi)型推斷的中間過(guò)程。(三)由于增加了卡內(nèi)校驗(yàn)部分,所以提高了系統(tǒng)的安全性,避免了卡外校驗(yàn)采用簽名加密機(jī)制所存在的單點(diǎn)安全失敗問(wèn)題(簽名密鑰泄漏)。


圖1是Java智能卡的內(nèi)部結(jié)構(gòu)示意圖。
圖2是Java智能卡虛擬機(jī)的結(jié)構(gòu)框圖。
圖3是基于proof-carrying機(jī)制的字節(jié)碼安全校驗(yàn)結(jié)構(gòu)。
圖4是字節(jié)碼安全校驗(yàn)的流程圖。
圖5是Java Card類(lèi)型偏序集哈斯結(jié)構(gòu)圖。
具體實(shí)施例方式
下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。
Java智能卡中的Applet(應(yīng)用程序)經(jīng)過(guò)編譯和轉(zhuǎn)換后生成Java智能卡虛擬機(jī)能夠識(shí)別的字節(jié)碼指令,而后再通過(guò)讀寫(xiě)器下載到智能卡上。為了防止惡意Applet下載到Java卡上運(yùn)行,必須對(duì)生成的字節(jié)碼指令進(jìn)行安全性校驗(yàn)。
本發(fā)明的一種智能卡安全環(huán)境的控制方法,所述智能卡包括有智能卡硬件系統(tǒng)以及硬件系統(tǒng)相關(guān)的本地方法集、Java卡虛擬機(jī)、Java卡運(yùn)行環(huán)境、Java卡類(lèi)庫(kù)和Java卡應(yīng)用管理組件組成,下載至智能卡中的應(yīng)用程序經(jīng)過(guò)編譯和轉(zhuǎn)換后生成Java卡虛擬機(jī)指令集的字節(jié)碼序列,所述字節(jié)碼序列通過(guò)Java卡虛擬機(jī)來(lái)運(yùn)行;所述Java卡虛擬機(jī)有卡內(nèi)虛擬機(jī)和卡外虛擬機(jī),卡外虛擬機(jī)實(shí)現(xiàn)對(duì)編譯后的文件進(jìn)行轉(zhuǎn)換,生成CAP文件;卡內(nèi)虛擬機(jī)實(shí)現(xiàn)執(zhí)行CAP文件中的所述字節(jié)碼序列;在卡內(nèi)安全環(huán)境的控制中首先將由卡外虛擬機(jī)的轉(zhuǎn)換器輸出的所述字節(jié)碼序列進(jìn)行類(lèi)型劃界,得到第一校驗(yàn)類(lèi)型和第二校驗(yàn)類(lèi)型;然后采用校驗(yàn)規(guī)則對(duì)所述校驗(yàn)類(lèi)型進(jìn)行安全校驗(yàn)。根據(jù)對(duì)字節(jié)碼序列的類(lèi)型劃界得到第一校驗(yàn)類(lèi)型和第二校驗(yàn)類(lèi)型,對(duì)于校驗(yàn)類(lèi)型的校驗(yàn)規(guī)則有第一校驗(yàn)規(guī)則和第二校驗(yàn)規(guī)則。
本發(fā)明中的第一校驗(yàn)類(lèi)型為實(shí)現(xiàn)所述CAP文件中的下載組件的結(jié)構(gòu)化校驗(yàn);第二校驗(yàn)類(lèi)型為實(shí)現(xiàn)所述卡外虛擬機(jī)輸出的字節(jié)碼序列的類(lèi)型校驗(yàn)。第一校驗(yàn)規(guī)則,對(duì)所述第一校驗(yàn)類(lèi)型中的下載組件進(jìn)行橢圓曲線數(shù)字簽名,所述簽名后的下載組件中含有基于橢圓曲線機(jī)制的數(shù)字簽名信息,智能卡卡內(nèi)的結(jié)構(gòu)化校驗(yàn)器將對(duì)所述數(shù)字簽名信息進(jìn)行驗(yàn)證;第二校驗(yàn)規(guī)則,對(duì)所述第二校驗(yàn)類(lèi)型中的字節(jié)碼序列采用基于proof-carrying機(jī)制的字節(jié)碼序列安全校驗(yàn)方法。
在本發(fā)明中,Java卡上的字節(jié)碼安全校驗(yàn)可分為兩個(gè)過(guò)程第一個(gè)過(guò)程為下載組件的結(jié)構(gòu)化校驗(yàn)過(guò)程,即第一校驗(yàn)類(lèi)型。第二個(gè)過(guò)程為字節(jié)碼的類(lèi)型校驗(yàn)過(guò)程,即第二校驗(yàn)類(lèi)型。
對(duì)于第一校驗(yàn)類(lèi)型過(guò)程而言,主要是用于校驗(yàn)下載組件的完整性和一致性。為了保證下載過(guò)程的安全,本發(fā)明中采取了對(duì)組件進(jìn)行橢圓曲線數(shù)字簽名的方法,在下載組件中含有基于橢圓曲線機(jī)制的數(shù)字簽名信息,卡上結(jié)構(gòu)化校驗(yàn)器會(huì)驗(yàn)證此簽名信息,以防止下載過(guò)程中對(duì)組件的篡改。此外,第一校驗(yàn)類(lèi)型還包括對(duì)于各個(gè)組件長(zhǎng)度、格式、組成元素定義一致性的檢查,以保證組件結(jié)構(gòu)的正確性。
由于智能卡內(nèi)有限的計(jì)算資源(2K RAM),因此在目前的硬件平臺(tái)上無(wú)法完成全部的字節(jié)碼安全校驗(yàn)過(guò)程,尤其是在類(lèi)型偏序集合上的類(lèi)型推斷計(jì)算,因此我們結(jié)合Java智能卡卡內(nèi)、卡外虛擬機(jī)的結(jié)構(gòu)特點(diǎn),采取了嵌入式設(shè)備上得到廣泛應(yīng)用的基于proof-carrying機(jī)制的字節(jié)碼安全校驗(yàn)算法。即在卡外生成用于卡內(nèi)校驗(yàn)使用的代碼證書(shū)(Certificate),作為定制組件同字節(jié)碼一起下載到卡內(nèi)虛擬機(jī)。卡內(nèi)虛擬機(jī)的字節(jié)碼類(lèi)型校驗(yàn)器使用證書(shū)作為輔助信息進(jìn)行第二類(lèi)型的校驗(yàn),以加快整個(gè)卡內(nèi)虛擬機(jī)的校驗(yàn)速度。
將JCVM程序P定義為方法的集合{m1,m2,…mn}。其中mi為對(duì)應(yīng)于每個(gè)方法的唯一方法引用。我們使用H來(lái)代表JCVM中的堆,其中用于存放實(shí)例化對(duì)象,因此H可表示為實(shí)例化對(duì)象引用到實(shí)例化對(duì)象存儲(chǔ)結(jié)構(gòu)的映射,即H={...,objref <context,fieldToken=val,...>,...}。其中objref代表對(duì)象引用,fieldToken代表對(duì)象域,context代表對(duì)象上下文。將Java棧結(jié)構(gòu)中的局部變量區(qū)定義為L(zhǎng)={i vali,0≤i<n},并且定義L[k val]等于L,除了其中的k映射到val。我們將Java棧結(jié)構(gòu)中的操作數(shù)棧定義為列表S={val0,val1...,valn-1},并且用S+val表示將值val壓入棧S中。局部變量和操作數(shù)棧中的元素均為一個(gè)字(short類(lèi)型的寬度)寬。使用J來(lái)表示JCVM中的Java棧。J中存儲(chǔ)的幀表示為屬性組(context,L,S,rpc),其中context表示當(dāng)前的執(zhí)行上下文,L表示局部變量區(qū),S表示操作數(shù)棧,rpc表示當(dāng)前方法執(zhí)行結(jié)束后的返回地址。我們將運(yùn)行狀態(tài)表示為R=(bc,pc,J,L,S,H)。其中bc表示當(dāng)前的異常處理狀態(tài),它只含有兩個(gè)值throw和notThrow,分別表示已拋出異常和未拋出異常。程序P的執(zhí)行可表示為一系列的運(yùn)行狀態(tài)R的轉(zhuǎn)換。
此外,定義用于類(lèi)型推斷系統(tǒng)的類(lèi)型信息,其定義如下類(lèi)類(lèi)型 cls=…類(lèi)類(lèi)型…接口類(lèi)型 interface=…接口類(lèi)型…引用為空類(lèi)型 Null=空引用引用類(lèi)型 ref=cls|interface|Null基本類(lèi)型 prim=byte|short|boolean字節(jié)數(shù)組類(lèi)型 byteArray=字節(jié)或布爾數(shù)組類(lèi)型短整型數(shù)組類(lèi)型 shortArray=短整型數(shù)組類(lèi)型布爾數(shù)組類(lèi)型 booleanArray=布爾數(shù)組類(lèi)型引用數(shù)組類(lèi)型 refArray=引用數(shù)組類(lèi)型基本類(lèi)型數(shù)組類(lèi)型 primArray=byteArray|shortArray|booleanArray數(shù)組類(lèi)型 array=primArray|refArrayreturnAddress類(lèi)型returnAddress=返回地址類(lèi)型不可用類(lèi)型 unusable同時(shí),在Java智能卡字節(jié)碼指令類(lèi)型集合上定義了一個(gè)自反、反對(duì)稱、傳遞的關(guān)系≤對(duì)于α,β∈{clsn‾},]]>如果α≤β,則α擴(kuò)展了(extends)β。若α∈{arrayn‾},]]>β為object類(lèi),則α≤β。若β為unusable,則α≤β。則在≤關(guān)系的定義下,JavaCard語(yǔ)言類(lèi)型集合構(gòu)成了一個(gè)偏序集,其哈斯圖結(jié)構(gòu)如圖5所示。圖中類(lèi)型下的數(shù)字為相應(yīng)類(lèi)型的編碼,這種編碼規(guī)則主要用于加速偏序集上運(yùn)算的速度。在類(lèi)型推斷系統(tǒng)中,經(jīng)常需計(jì)算兩種類(lèi)型的最小上界LUB(α,β)。在此編碼規(guī)則下,最小上界的運(yùn)算可轉(zhuǎn)換為相應(yīng)類(lèi)型編碼的與(Λ)操作。
為了有效地表示字節(jié)碼指令的形式化規(guī)范,我們引入了一些輔助類(lèi)型的定義接口類(lèi)型集合int ers={int erfacen‾}(n>0)]]>空類(lèi)型 void數(shù)據(jù)類(lèi)型ty=ref|prim數(shù)據(jù)類(lèi)型或空類(lèi)型tyOrVoid=ty|void未初始化的對(duì)象類(lèi)型 raw=unin(pc,cls)|init(pc,cls)引用或數(shù)組類(lèi)型 refOrArray=ref|array引用或未初始化對(duì)象類(lèi)型 refOrRaw=ref|raw引用、數(shù)組或未初始化對(duì)象類(lèi)型refOrAyyayOrRaw=ref|raw|array引用、未初始化對(duì)象、返回地址類(lèi)型refOrRawOrAds=ref|raw|returnAddress引用、數(shù)組、未初始化對(duì)象、返回地址類(lèi)型refOrArrayOrRawOrAds=ref|raw|returnAddress可用類(lèi)型 usuable=ty|raw|returnAddress任意類(lèi)型 any=usuable|unusable字節(jié)碼安全校驗(yàn)算法的一個(gè)主要任務(wù)就是推斷(在編譯時(shí))局部變量區(qū)和操作數(shù)棧中的運(yùn)行時(shí)數(shù)據(jù)類(lèi)型從而保證在運(yùn)行時(shí)指令不會(huì)使用錯(cuò)誤的數(shù)據(jù)類(lèi)型。為此首先給出局部變量區(qū)類(lèi)型表LT的形式化描述為L(zhǎng)T={i anyi|0≤i<max_local},其中max_local為當(dāng)前方法中局部變量的個(gè)數(shù)。并且定義LT[k any]等于LT,除了其中的k映射到any。此外,定義操作數(shù)棧類(lèi)型表為ST=[usable0,usable1,...,usabletop],若使用max_stack表示當(dāng)前方法中操作數(shù)棧的最大長(zhǎng)度,則索引top<max_local。為了構(gòu)建類(lèi)型推斷系統(tǒng),我們將運(yùn)行時(shí)的狀態(tài)類(lèi)型定義為∏=(LT,ST,Contour),其中Contour為一集合。并且將關(guān)系≤的定義擴(kuò)展到運(yùn)行時(shí)的狀態(tài)類(lèi)型集合上若LT={i anyi|0≤i<max_local},LT`={i any`i|0≤i<max_local},如果下式成立anymax_local-1≤anymax_local-1′‾,]]>則LT≤LT`。
若ST=[usablen‾],]]>ST′=[usable′n‾],]]>如果下式成立usablen≤usable′n‾,]]>則ST≤ST`。
若∏=(ST,LT,Contour),∏`=(ST`,LT`,Contour`),如果下列條件成立ST≤ST`,LT≤LT`,ContourContour`,則∏≤∏`?!恰堋莁意味著對(duì)于所有可應(yīng)用于狀態(tài)類(lèi)型∏`的指令均適用于狀態(tài)類(lèi)型∏。
對(duì)于類(lèi)型推斷系統(tǒng),我們使用pc⊥∏來(lái)表示在地址pc處所具有的編譯時(shí)狀態(tài)類(lèi)型∏。由于pc地址處的狀態(tài)類(lèi)型不僅依賴于指令本身,而且還依賴于到達(dá)pc處的指令執(zhí)行路徑,即對(duì)于一個(gè)pc地址會(huì)存在多個(gè)狀態(tài)類(lèi)型,因此我們使用pc⊥≤∏來(lái)表示其中的一種狀態(tài)類(lèi)型,這表示pc處所有可應(yīng)用于狀態(tài)類(lèi)型∏`的指令均適用于狀態(tài)類(lèi)型∏。
在本發(fā)明中引入基于proof-carrying機(jī)制的字節(jié)碼安全校驗(yàn)算法前,我們首先介紹傳統(tǒng)的字節(jié)碼校驗(yàn)算法。通常,卡內(nèi)類(lèi)型校驗(yàn)器采用數(shù)據(jù)流分析(Data FlowAnalysis)方法來(lái)進(jìn)行字節(jié)碼安全性校驗(yàn)。整個(gè)分析過(guò)程以單個(gè)方法為單位進(jìn)行,相當(dāng)于一個(gè)類(lèi)型層面上的抽象解釋器。方法入口處的類(lèi)型信息由字節(jié)碼所攜帶的證書(shū)來(lái)提供,并使用這些信息來(lái)初始化函數(shù)入口處的局部變量區(qū)類(lèi)型。對(duì)于方法中的每條指令,設(shè)置標(biāo)志位“Changed”,在一個(gè)新的方法校驗(yàn)開(kāi)始時(shí),只有第一條指令的標(biāo)志位為1。接下來(lái)進(jìn)入數(shù)據(jù)流分析的主循環(huán)過(guò)程步驟一查找到一條標(biāo)志位為1的字節(jié)碼指令,并置標(biāo)志位為0。如果不存在標(biāo)志位為1的指令,則方法校驗(yàn)過(guò)程成功結(jié)束,退出主循環(huán)過(guò)程。
步驟二依據(jù)當(dāng)前指令的類(lèi)型規(guī)則(在上一節(jié)中已定義)來(lái)執(zhí)行指令,如果當(dāng)前指令不能滿足類(lèi)型規(guī)則,則指令執(zhí)行失敗,方法校驗(yàn)過(guò)程失敗,退出主循環(huán)過(guò)程。
步驟三確定當(dāng)前指令的后續(xù)指令,可為如下的任一指令a.如果當(dāng)前指令為非跳轉(zhuǎn)指令、返回指令和拋出異常指令,則為當(dāng)前指令的下一條指令。如果超出了當(dāng)前方法的指令地址空間,則指令執(zhí)行失敗,方法校驗(yàn)過(guò)程失敗,退出主循環(huán)過(guò)程。
b.如果當(dāng)前指令為跳轉(zhuǎn)指令,則為跳轉(zhuǎn)指令目的地址處的字節(jié)碼指令。
c.當(dāng)前指令所對(duì)應(yīng)的異常處理句柄。
步驟四合并當(dāng)前指令執(zhí)行結(jié)束后的類(lèi)型狀態(tài)到后續(xù)指令中a.如果后續(xù)指令未被訪問(wèn)過(guò),則將當(dāng)前指令執(zhí)行結(jié)束后的類(lèi)型狀態(tài)作為后續(xù)指令的前續(xù)類(lèi)型狀態(tài),置后續(xù)指令的標(biāo)志位為1。
b.如果后續(xù)指令已被訪問(wèn)過(guò),則合并當(dāng)前的類(lèi)型狀態(tài)和已有的后續(xù)指令的前續(xù)類(lèi)型狀態(tài),如果類(lèi)型狀態(tài)發(fā)生改變,則置后續(xù)指令的標(biāo)志位為1。
c.類(lèi)型信息合并的過(guò)程即為求兩個(gè)類(lèi)型LUB的過(guò)程,對(duì)于操作數(shù)棧,合并后不能存在unusable類(lèi)型,并且合并的操作數(shù)棧必須具有相同的高度。否則方法校驗(yàn)過(guò)程失敗,退出主循環(huán)過(guò)程。
d.對(duì)于通過(guò)jsr調(diào)用的子過(guò)程(Subroutine)我們另行考慮,在下文中有更詳細(xì)的討論。
步驟五跳轉(zhuǎn)到步驟一。
由于子過(guò)程的調(diào)用相對(duì)比較復(fù)雜,存在多條執(zhí)行路徑同時(shí)到達(dá)的問(wèn)題,并且會(huì)存在在同一局部變量中存儲(chǔ)不同數(shù)據(jù)類(lèi)型而不能進(jìn)行類(lèi)型合并的問(wèn)題。因此,為了正確地描述子過(guò)程的處理,在參考Sun提供的Java卡開(kāi)發(fā)工具的方法中,本發(fā)明采用在類(lèi)型推斷系統(tǒng)中引入了Contour,其定義如下pc⊥∏[ST,LT,Contour] 在子過(guò)程中進(jìn)行類(lèi)型推斷時(shí),具有不同Contour的指令不進(jìn)行類(lèi)型合并,即來(lái)自不同執(zhí)行路徑的指令的類(lèi)型信息之間互不影響,并且會(huì)將不同路徑的類(lèi)型信息在子過(guò)程結(jié)束后正確地帶給后續(xù)指令。
如果上述主循環(huán)過(guò)程成功結(jié)束,則表示當(dāng)前方法的字節(jié)碼通過(guò)了安全性校驗(yàn),否則表示校驗(yàn)失敗。如果當(dāng)前包中全部的方法均通過(guò)校驗(yàn),則表示當(dāng)前包是安全可用的,否則拒絕執(zhí)行當(dāng)前包中的程序。
在上述的主循環(huán)校驗(yàn)過(guò)程中可見(jiàn),其中的第四步驟必須按照4.c中的規(guī)則進(jìn)行類(lèi)型偏序集合上的類(lèi)型推斷計(jì)算,并且如果發(fā)生了類(lèi)型信息的改變,必須執(zhí)行4.b進(jìn)行新一輪的疊代。這對(duì)于存儲(chǔ)資源和執(zhí)行速度都提出了較高的要求,因此,為了避免這一問(wèn)題,基于proof-carrying機(jī)制的字節(jié)碼安全校驗(yàn)算法對(duì)程序分支交匯地址處的類(lèi)型信息進(jìn)行判斷,如果發(fā)生類(lèi)型推斷過(guò)程(求兩個(gè)類(lèi)型信息的LUB),則首先通過(guò)卡外的校驗(yàn)過(guò)程生成此信息,存儲(chǔ)在代碼證書(shū)(Certificate)中,并將證書(shū)作為用戶定制組件(Custom component),同其他組件一起下載到智能卡上。為了節(jié)約存儲(chǔ)空間,在證書(shū)中只存儲(chǔ)相應(yīng)的需進(jìn)行類(lèi)型推斷并發(fā)生了改變的元素信息和方法入口處的元素信息,證書(shū)的數(shù)據(jù)結(jié)構(gòu)定義如下 其中pc為程序分支的交匯地址(或方法入口地址),LT用于存儲(chǔ)局部變量區(qū)中的變化類(lèi)型信息(或方法入口的局部變量類(lèi)型信息),ST用于存儲(chǔ)操作數(shù)棧中的變化類(lèi)型信息。因此,校驗(yàn)過(guò)程中的第四步驟改寫(xiě)為4.a如果后續(xù)指令未被訪問(wèn)過(guò)且在證書(shū)中存在后續(xù)指令的pc地址,則將當(dāng)前指令執(zhí)行結(jié)束后的類(lèi)型∏c同證書(shū)中的類(lèi)型∏δ相比較,如果∏c≤∏δ,則采用∏δ作為合并后的類(lèi)型狀態(tài),置后續(xù)指令的標(biāo)志位為1。否則校驗(yàn)失敗,退出主循環(huán)過(guò)程。如果后續(xù)指令未被訪問(wèn)過(guò)且在證書(shū)中不存在后續(xù)指令的pc地址,則將當(dāng)前指令執(zhí)行結(jié)束后的類(lèi)型狀態(tài)作為后續(xù)指令的前續(xù)類(lèi)型狀態(tài),置后續(xù)指令的標(biāo)志位為1。
4.b如果后續(xù)指令已被訪問(wèn)過(guò),則將當(dāng)前指令執(zhí)行結(jié)束后的類(lèi)型∏c同證書(shū)中后續(xù)指令pc處的類(lèi)型∏δ相比較,如果∏c≤∏δ,跳轉(zhuǎn)到步驟5。否則校驗(yàn)失敗,退出主循環(huán)過(guò)程。
4.c此步驟取消。
4.d此步驟不變。
這一算法具有如下的三個(gè)優(yōu)點(diǎn)(1)加快了類(lèi)型校驗(yàn)的速度,因?yàn)楸苊饬酥噶罘种Ы粎R處的類(lèi)型推斷和反復(fù)疊代。
(2)降低了對(duì)存儲(chǔ)資源的要求。因?yàn)榇a證書(shū)為只讀信息,可存儲(chǔ)在卡內(nèi)容量較大的EEPROM中,校驗(yàn)完成后可刪除。從而避免了在RAM中存儲(chǔ)大量的需進(jìn)行讀寫(xiě)操作的類(lèi)型推斷的中間過(guò)程。
(3)由于增加了卡內(nèi)校驗(yàn)部分,所以提高了系統(tǒng)的安全性,避免了卡外校驗(yàn)采用簽名加密機(jī)制所存在的單點(diǎn)安全失敗問(wèn)題(簽名密鑰泄漏)。
權(quán)利要求
1.一種智能卡安全環(huán)境的控制方法,所述智能卡包括有智能卡硬件系統(tǒng)以及硬件系統(tǒng)相關(guān)的本地方法集,其特征在于還包括有Java卡虛擬機(jī)、Java卡運(yùn)行環(huán)境、Java卡類(lèi)庫(kù)和Java卡應(yīng)用管理組件組成,下載至智能卡中的應(yīng)用程序經(jīng)過(guò)編譯和轉(zhuǎn)換后生成Java卡虛擬機(jī)指令集的字節(jié)碼序列,所述字節(jié)碼序列通過(guò)Java卡虛擬機(jī)來(lái)運(yùn)行;所述Java卡虛擬機(jī)有卡內(nèi)虛擬機(jī)和卡外虛擬機(jī),卡外虛擬機(jī)實(shí)現(xiàn)對(duì)編譯后的文件進(jìn)行轉(zhuǎn)換,生成CAP文件;卡內(nèi)虛擬機(jī)實(shí)現(xiàn)執(zhí)行CAP文件中的所述字節(jié)碼序列;在卡內(nèi)安全環(huán)境的控制中首先將由卡外虛擬機(jī)的轉(zhuǎn)換器輸出的所述字節(jié)碼序列進(jìn)行類(lèi)型劃界,得到第一校驗(yàn)類(lèi)型和第二校驗(yàn)類(lèi)型;然后采用校驗(yàn)規(guī)則對(duì)所述校驗(yàn)類(lèi)型進(jìn)行安全校驗(yàn)。
2.根據(jù)權(quán)利要求1所述的智能卡安全環(huán)境的控制方法,其特征在于第一校驗(yàn)類(lèi)型為實(shí)現(xiàn)所述CAP文件中的下載組件的結(jié)構(gòu)化校驗(yàn);第二校驗(yàn)類(lèi)型為實(shí)現(xiàn)所述卡外虛擬機(jī)輸出的字節(jié)碼序列的類(lèi)型校驗(yàn)。
3.根據(jù)權(quán)利要求1所述的智能卡安全環(huán)境的控制方法,其特征在于第一校驗(yàn)規(guī)則,對(duì)所述第一校驗(yàn)類(lèi)型中的下載組件進(jìn)行橢圓曲線數(shù)字簽名,所述簽名后的下載組件中含有基于橢圓曲線機(jī)制的數(shù)字簽名信息,智能卡卡內(nèi)的結(jié)構(gòu)化校驗(yàn)器將對(duì)所述數(shù)字簽名信息進(jìn)行驗(yàn)證;第二校驗(yàn)規(guī)則,對(duì)所述第二校驗(yàn)類(lèi)型中的字節(jié)碼序列采用基于proof-carrying機(jī)制的字節(jié)碼序列安全校驗(yàn)方法。
4.根據(jù)權(quán)利要求1所述的智能卡安全環(huán)境的控制方法,其特征在于在第二校驗(yàn)規(guī)則中對(duì)所述第二校驗(yàn)類(lèi)型依照基于proof-carrying機(jī)制的字節(jié)碼安全校驗(yàn)方法是對(duì)程序分支交匯地址處的元素信息進(jìn)行判斷,對(duì)所述智能卡的類(lèi)型推斷進(jìn)行卡外校驗(yàn)生成所述卡外校驗(yàn)信息,并存儲(chǔ)在代碼證書(shū)(Certificate)中;對(duì)所述代碼證書(shū)制定成用戶定制組件(Custom component),并對(duì)所述用戶定制組件與所述下載組件一并下載到智能卡上。
5.根據(jù)權(quán)利要求4所述的智能卡安全環(huán)境的控制方法,其特征在于基于proof-carrying機(jī)制的字節(jié)碼安全校驗(yàn)方法中數(shù)據(jù)流分析的主循環(huán)過(guò)程為步驟一查找到一條標(biāo)志位為1的字節(jié)碼指令,并置標(biāo)志位為O。如果不存在標(biāo)志位為1的指令,則方法校驗(yàn)過(guò)程成功結(jié)束,退出主循環(huán)過(guò)程;步驟二依據(jù)當(dāng)前指令的類(lèi)型規(guī)則來(lái)執(zhí)行指令,如果當(dāng)前指令不能滿足類(lèi)型規(guī)則,則指令執(zhí)行失敗,方法校驗(yàn)過(guò)程失敗,退出主循環(huán)過(guò)程;步驟三確定當(dāng)前指令的后續(xù)指令;步驟四合并當(dāng)前指令執(zhí)行結(jié)束后的類(lèi)型狀態(tài)到后續(xù)指令中;步驟五跳轉(zhuǎn)到步驟一。
6.根據(jù)權(quán)利要求4所述的智能卡安全環(huán)境的控制方法,其特征在于所述代碼證書(shū)中存儲(chǔ)的所述卡外校驗(yàn)信息為進(jìn)行所述類(lèi)型推斷改變后的元素信息和所述程序分支交匯地址處的元素信息。
全文摘要
本發(fā)明公開(kāi)了一種智能卡安全環(huán)境的控制方法,下載至智能卡中的應(yīng)用程序經(jīng)過(guò)編譯和轉(zhuǎn)換后生成Java卡虛擬機(jī)指令集的字節(jié)碼序列,所述字節(jié)碼序列通過(guò)Java卡虛擬機(jī)來(lái)運(yùn)行;所述Java卡虛擬機(jī)有卡內(nèi)虛擬機(jī)和卡外虛擬機(jī),卡外虛擬機(jī)實(shí)現(xiàn)對(duì)編譯后的文件進(jìn)行轉(zhuǎn)換,生成CAP文件;卡內(nèi)虛擬機(jī)實(shí)現(xiàn)執(zhí)行CAP文件中的所述字節(jié)碼序列;在卡內(nèi)安全環(huán)境的控制中首先將由卡外虛擬機(jī)的轉(zhuǎn)換器輸出的所述字節(jié)碼序列進(jìn)行類(lèi)型劃界,得到第一校驗(yàn)類(lèi)型和第二校驗(yàn)類(lèi)型;然后采用校驗(yàn)規(guī)則對(duì)所述校驗(yàn)類(lèi)型進(jìn)行安全校驗(yàn)。本發(fā)明的智能卡安全環(huán)境控制方法,在Java卡卡內(nèi)、卡外虛擬機(jī)結(jié)構(gòu)的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了橢圓曲線數(shù)字簽名以及卡外代碼證書(shū)的生成法和卡上字節(jié)碼序列的安全校驗(yàn)。
文檔編號(hào)G06F1/00GK1687862SQ20051007716
公開(kāi)日2005年10月26日 申請(qǐng)日期2005年6月16日 優(yōu)先權(quán)日2005年6月16日
發(fā)明者楊東凱, 張其善, 姚黎明, 吳鑫山 申請(qǐng)人:北京航空航天大學(xué)
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
萨嘎县| 浦江县| 尚义县| 楚雄市| 香港| 香港| 万荣县| 高台县| 卢氏县| 仲巴县| 波密县| 车致| 盐城市| 涟源市| 南木林县| 从江县| 类乌齐县| 敖汉旗| 肇庆市| 中西区| 唐河县| 泸西县| 都昌县| 江阴市| 孝昌县| 明溪县| 淮滨县| 龙南县| 侯马市| 麟游县| 江北区| 瑞安市| 余姚市| 盐池县| 和平县| 涡阳县| 仁寿县| 香港 | 察哈| 广河县| 阿合奇县|