專利名稱:基于MMU架構(gòu)的Java Card系統(tǒng)組件更新方法
技術(shù)領(lǐng)域:
本發(fā)明涉及Java Card技術(shù)、嵌入式系統(tǒng)及二進(jìn)制代碼重定位技術(shù),主要是實現(xiàn)一種基于MMU新架構(gòu)解決Java Card系統(tǒng)組件動態(tài)更新的方法。
背景技術(shù):
Java Card是一種能運(yùn)行Java小應(yīng)用程序的智能卡,它以其多應(yīng)用的支持、良好的安全特性、面向?qū)ο蟮木幊汰h(huán)境、應(yīng)用程序動態(tài)下載等優(yōu)點(diǎn)得到了快速發(fā)展,在SIM/ USIM應(yīng)用、身份認(rèn)證以及金融等領(lǐng)域的應(yīng)用越來越廣泛。Java Card是一種嵌入式系統(tǒng), 在資源極其受限的智能卡上運(yùn)行一個java運(yùn)行時環(huán)境,其最大的優(yōu)勢在于可以在卡片發(fā)行之后動態(tài)地下載及更新卡上的應(yīng)用程序,實現(xiàn)了靈活的多應(yīng)用卡。然而,由于目前Java Card平臺的存儲特性,系統(tǒng)組件(包括java運(yùn)行時環(huán)境,系統(tǒng)API,卡片操作系統(tǒng)等)在發(fā)卡后被固化在ROM中,如果發(fā)卡后出現(xiàn)系統(tǒng)組件故障或漏洞就只能通過更換新卡的方法來解決,由于智能卡的發(fā)卡量極大,這種方法將給發(fā)卡方帶來巨大的損失,所以有必要開發(fā)出一種新的架構(gòu)或方法來解決發(fā)卡后系統(tǒng)組件的更新問題。目前,國內(nèi)外對標(biāo)準(zhǔn)的面向?qū)ο蟪绦虻念悇討B(tài)更新的研究已經(jīng)非常多了,對動態(tài)類的實現(xiàn)主要有三種方法1)、通過對JVMCJava Virtual Machine)進(jìn)行修改,使JVM能夠支持Java類的動態(tài)更新操作;2)、利用庫函數(shù)的支持,如C++中的相關(guān)實現(xiàn);3)、通過Java 語言的某些機(jī)制,編寫合理的算法和類裝載機(jī)制來支持類動態(tài)更新。對于Java的動態(tài)更新,Alessandro提出了一種基于類重命名和代碼重寫的技術(shù)來實現(xiàn)Java類動態(tài)更新,使用一個叫DUSC的工具在運(yùn)行時動態(tài)切換類,但是這種方法非常耗時,且對存儲空間浪費(fèi)嚴(yán)重,不適合計算和存儲資源極其受限的Java Card環(huán)境;另外一個支持在線更新的JVM是JV0LVE,其利用相關(guān)工具查找到所需更新的類列表,然后動態(tài)裝載類并利用JIT技術(shù)將其編譯用以替換現(xiàn)有類,最后利用修改了的垃圾收集器將原對象引用修改為新對象引用。因為Java Card平臺不支持類動態(tài)裝載及JIT機(jī)制,所以必須對這種方法進(jìn)行修改,Agnes C. Noubissi提出了一種類似的方法,并用于Java Card平臺,在卡外通過相應(yīng)的工具得到更新列表,卡內(nèi)通過軟件查找所有需替換的類,通過傳入數(shù)據(jù)創(chuàng)建新類及實例,并修改所有對原實例的引用來實現(xiàn)動態(tài)更新,其使用純軟件的方法來實現(xiàn)查找、 替換及更新操作,導(dǎo)致效率比較低,且智能卡賴以生存的安全問題難以得到保證。
發(fā)明內(nèi)容
本發(fā)明針對上述技術(shù)缺陷,提出一種基于MMU架構(gòu)的Java Card系統(tǒng)組件更新方法。為了解決上述技術(shù)問題,本發(fā)明的技術(shù)方案如下
基于MMU架構(gòu)的Java Card系統(tǒng)組件更新方法,其特征在于,包括卡外操作和卡內(nèi)操
作,
所述卡外操作步驟如下1)通過對比修改后的工程代碼和原始工程代碼,給出代碼修改項目列表;
2)查找代碼修改項目列表中項目在目標(biāo)文件中的虛擬地址入口及二進(jìn)制長度,給出系統(tǒng)組件更新任務(wù)列表;
3)對所述系統(tǒng)組件更新任務(wù)列表中虛擬地址接近的項目進(jìn)行合并,生成卡內(nèi)MMU修改信息表和代碼實際二進(jìn)制修改信息表;
所述卡內(nèi)操作步驟如下
4)傳輸代碼修改數(shù)據(jù),將更新后的代碼數(shù)據(jù)寫入卡內(nèi)EEPROM空間,并以所述更新后的代碼數(shù)據(jù)在卡內(nèi)EEPROM空間的新地址作為參數(shù)處理之后進(jìn)行系統(tǒng)調(diào)用;
5)卡內(nèi)操作系統(tǒng)進(jìn)行認(rèn)證,如通過認(rèn)證則修改MMU的TLB初始化表,并重啟卡內(nèi)操作系統(tǒng)進(jìn)行初始化。作為可選方案,所述步驟2)中給出系統(tǒng)組件更新任務(wù)列表包括對原項目修改、對原項目刪除和對原項目的新增,
所述對原項目修改操作步驟如下
如果修改后項目的二進(jìn)制代碼長度不大于原項目的長度,則找到原項目的虛擬地址入口地址,在MMU的TLB表中新增一個表項,將所述虛擬地址入口地址映射到EEPROM中,并保持字節(jié)長度相等,在EEPROM新開辟的位置寫入修改后的項目二進(jìn)制碼,多余的位置補(bǔ)入空操作,如果新修改項目的二進(jìn)制代碼長度大于原項目的長度,則將此修改可以分為原項目刪除與原項目的新增的組合;
所述對原項目刪除操作步驟如下 將所有引用被刪除項目的代碼進(jìn)行修改; 所述對原項目的新增操作步驟如下
新增項目代碼只可能在修改后的代碼中被引用,對其處理可分兩個步驟在EEPROM中劃分一塊區(qū)域,將新項目代碼寫入;然后利用逆向工程將修改代碼中引用新增項目的地址更改為新地址。作為可選方案,當(dāng)多個更新項目的虛擬地址跨度小于更新項目實際地址占用空間的兩倍,即更新空間利用率高于50%的時候,可將更新項目在存儲空間實現(xiàn)步驟3)中對所述系統(tǒng)組件更新任務(wù)列表中虛擬地址接近的項目進(jìn)行合并。作為可選方案,步驟5)中所述修改MMU的TLB初始化表采用將一定長度的虛擬地址空間映射到等長的物理地址空間中,所述TLB初始化表格式分為logiC_addr_base、 Length和physical_addr_base,所述logic_addr_base表示MMU所要映射的虛擬地址段的基地址,所述Length表示此邏輯地址段的長度,所述physical_addr_base表示本段邏輯地址所映射到的物理地址的基地址。本發(fā)明的有益效果在于
1.本發(fā)明把更新操作分為卡外和卡內(nèi)操作,大量的工作在卡外完成,借助于普通 PC或工作站比Java Card強(qiáng)大的多的性能,對更新任務(wù)做了足夠的優(yōu)化,大大提高了更新效率。2.本發(fā)明提出了一種卡內(nèi)MMU的設(shè)計及初始化方法,采用軟硬件結(jié)合的方法實現(xiàn)系統(tǒng)組件的動態(tài)更新,簡化了卡內(nèi)修改量,方法簡單容易實施。3.本發(fā)明保證了 Java Card系統(tǒng)組件更新的安全性,通過對處理器和操作系統(tǒng)的設(shè)計,提供了三種處理器工作模式,MMU初始化表只有處理器工作在最高權(quán)限模式時才能訪問,通過系統(tǒng)調(diào)用進(jìn)行,此時要進(jìn)行發(fā)卡商認(rèn)證,保證了安全性。
圖1為現(xiàn)有技術(shù)中Java Card平臺存儲系統(tǒng)架構(gòu); 圖2為本發(fā)明的步驟流程圖3為一個典型的更新任務(wù)列表;
圖4為針對圖3的卡內(nèi)MMU修改信息表;
圖5為針對圖4第一條更新例,卡內(nèi)更新操作流程示意圖。
具體實施例方式下面將根據(jù)附圖和具體實施例對本發(fā)明做進(jìn)一步的說明?;谝环NMMU機(jī)制的卡內(nèi)存儲架構(gòu),以及利用MMU解決Java Card系統(tǒng)組件升級的方案。該方案需要一系列的卡外和卡內(nèi)操作來實現(xiàn),卡外通過對比代碼的修改將其修改位置在系統(tǒng)二進(jìn)制目標(biāo)文件中定位,形成一個更新任務(wù)列表,并采用一定的算法優(yōu)化該列表以減少更新項數(shù)及通信量;卡內(nèi)將修改后的代碼片段存儲在EEPROM中,并采用修改 TLB (Translation Lookaside Buffer)表的方法,來改變虛擬地址到物理地址的映射,將原虛擬地址映射到修改后項目的存儲位置,實現(xiàn)代碼重定位,達(dá)到更新系統(tǒng)組件的目的。在本發(fā)明中,所提出的Java Card架構(gòu)通過一個簡單的MMU來管理卡內(nèi)存儲資源, 實現(xiàn)虛擬地址到物理地址的轉(zhuǎn)換,將虛擬地址分段并靜態(tài)地映射到等長的一段物理存儲器上,初始狀態(tài)下每個物理存儲器對應(yīng)一個TLB映射表項,多余的TLB入口項設(shè)為無效,以供系統(tǒng)組件更新時增加映射項目使用??ㄍ獠僮鞯闹饕康氖钦页鱿到y(tǒng)組件中所有的修改信息,并將其在最終二進(jìn)制文件(.bin)中準(zhǔn)確定位,以便將修改內(nèi)容和位置信息傳入卡內(nèi)進(jìn)行更新。位置信息可通過查看工程文件編譯時生成的.map文件(工程使用IAR Embedded Workbench編譯)得到其虛擬地址入口和二進(jìn)制長度,由項目入口地址、長度及修改后內(nèi)容, 即可建立一個更新任務(wù),所有更新任務(wù)組成一個更新任務(wù)表。對更新任務(wù)表的優(yōu)化體現(xiàn)在兩個方面1)、合并任務(wù)表項,減少卡內(nèi)MMU映射數(shù)目,可將地址相近的更新任務(wù)合并,在減少M(fèi)MU映射數(shù)目的同時,不至于浪費(fèi)過多存儲空間;2)、項目實際修改內(nèi)容的映射,減少數(shù)據(jù)傳輸量,對項目內(nèi)容的實際修改往往只是其地址空間的一小部分,可將實際修改值及其偏移量為傳輸信息,而未修改部分則直接從卡內(nèi)ROM中原始位置拷貝,以提高速度并減少信息傳輸量??▋?nèi)操作使用卡外操作得到的更新數(shù)據(jù)以及地址映射表,在EEPROM中寫入更新代碼,并修改MMU的TLB映射,達(dá)到更新系統(tǒng)組件的目的??▋?nèi)提供一個服務(wù)程序接收并處理更新數(shù)據(jù),調(diào)用卡片操作系統(tǒng)來完成MMU初始化表的修改。MMU初始化表存放于EEPROM 中特定區(qū)域,只有提供MMU初始化表修改的系統(tǒng)調(diào)用sysMmuModify可以訪問該區(qū)域,當(dāng)發(fā)生該系統(tǒng)調(diào)用時,系統(tǒng)首先進(jìn)行發(fā)卡商認(rèn)證,如認(rèn)證通過則提供調(diào)用,否則退出系統(tǒng)。如果系統(tǒng)調(diào)用成功完成,則系統(tǒng)重新啟動以完成初始化,至此Java Card系統(tǒng)組件更新成功,帶有新系統(tǒng)組件的卡片即可正常使用。具體如下所述如圖1所示,顯示了 Java Card平臺的存儲架構(gòu),智能卡操作系統(tǒng)(COS),Java Card運(yùn)行時環(huán)境(JCRE),系統(tǒng)API以及一些內(nèi)置小應(yīng)用程序等系統(tǒng)組件存放在ROM中,這個過程是在卡片生產(chǎn)的時候燒入的,一旦寫入即不可更改,這就為以后的升級更新帶來了麻煩,一旦系統(tǒng)組件出現(xiàn)漏洞,就必須回收所有已發(fā)卡,并制發(fā)新卡,智能卡往往發(fā)卡量巨大,將給發(fā)卡商帶來較大損失。圖2顯示了本發(fā)明的總體操作流程,主要分為以下幾個步驟
201,DIFFGenerator 對修改后的工程和原始工程代碼進(jìn)行比較,給出代碼具體修改項目的列表(DIFF List);
202,DIFF Mapper 根據(jù)步驟201提供的代碼具體修改項目列表,查找這些項目在目標(biāo)文件中的虛擬地址入口及二進(jìn)制長度,給出系統(tǒng)組件需更新的任務(wù)列表(Mapped List);
203,ListOptimization 對系統(tǒng)組件需更新列表進(jìn)行優(yōu)化,減少卡內(nèi)MMU映射數(shù)量及卡內(nèi)外數(shù)據(jù)傳輸量,產(chǎn)生卡內(nèi)MMU修改信息表(MMU map Info)以及代碼實際二進(jìn)制修改信
(Changed Data Info);
204,DataProcessing & System Call Java Card卡內(nèi)提供程序?qū)ο到y(tǒng)更新操作進(jìn)行處理,并調(diào)用卡片操作系統(tǒng)進(jìn)行MMU初始化表數(shù)據(jù)的修改;
205,Authentication& MMU TLB Modify 操作系統(tǒng)提供修改MMU初始化表的系統(tǒng)調(diào)用并進(jìn)行發(fā)卡商認(rèn)證,如通過認(rèn)證則調(diào)用服務(wù)修改MMU的TLB初始化表,完成之后系統(tǒng)重啟, 完成初始化之后進(jìn)入用戶模式,MMU的TLB表已經(jīng)修改為新映射,代碼重定位完成,運(yùn)行新系統(tǒng)組件的Java Card卡片即可正常使用。圖3給出了經(jīng)過步驟202處理之后的一個典型的更新任務(wù)列表(Mapped List),具體如下
通過查看IAR Embedded Workbench編譯生成的工程.map文件,可以清楚地找到每個函數(shù)及常量在系統(tǒng)中的虛擬地址入口及其二進(jìn)制長度,通過對比兩個版本工程的.map 文件以及前一步驟得到的修改信息列表(DIFF List),即可得到一個所需更新的任務(wù)列表 (Mapped List),為了更清晰地展示系統(tǒng)代碼修改前后的差異,將未修改的項目忽略,只列出項目的修改、刪除及增加,如圖3所示,其中old map和new map分別顯示了代碼修改前后的內(nèi)存分配情況,使用字母和數(shù)字表示函數(shù)和常量名,可以看出新版本代碼中修改了 a, b, c, d, e五個函數(shù);刪除了 f,g, h, i四個函數(shù);新增了 j,k兩個函數(shù);修改了常量cons. 2 以及系統(tǒng)API類的mask數(shù)組。對于源代碼項目更新的不同操作采取以下不同的方法處理 (1)對原項目的修改
如果新修改項目的二進(jìn)制代碼長度不大于原項目,則找到原項目的入口地址,在TLB 表中新增一個表項,將此入口地址映射到EEPROM中,并保持字節(jié)長度相等,在新位置寫入修改后的項目二進(jìn)制碼,多余的位置補(bǔ)入空操作。如果新修改項目的二進(jìn)制代碼長度大于原項目,則將此修改分為刪除原項目與新增項目的組合。所以應(yīng)該盡量使得修改后項目代碼長度不大于原代碼,這樣可以節(jié)省卡內(nèi)存儲空間。(2)對原項目的刪除
將所有引用被刪除項目的代碼進(jìn)行修改,被刪除代碼即失效,所以新項目代碼中將不會引用原項目中的刪除代碼,對刪除操作可不予處理。(3)項目的新增新增項目代碼只可能在修改后的代碼中被引用,對其處理可分兩個步驟首先,在 EEPROM中劃分一塊區(qū)域,將新項目代碼寫入;然后利用逆向工程將修改代碼中引用新增項目的地址更改為新地址。 圖4給 出了圖3所示的任務(wù)列表經(jīng)過步驟203優(yōu)化之后產(chǎn)生的卡內(nèi)MMU修改信息表(MMU map hfo),具體如下
對于表項的合并,類似于內(nèi)存碎片的合并,有些更新項目的地址非常接近,尤其是對同一目標(biāo)文件中的函數(shù)其地址往往接近于連續(xù)分布,即使中間有間隔也非常小,完全可以將其合并,統(tǒng)一映射到新地址,減少需映射的項數(shù),但此方法必將造成一部分的存儲空間的浪費(fèi),所以必須有個折中的方法。為此給出公式(1),表示當(dāng)多個更新項目的地址跨度小于更新項目實際地址占用空間的兩倍,即更新空間利用率高于50%的時候,可將更新項目在存儲空間上合并。
利用上述規(guī)則對圖3中的項目進(jìn)行處理,可得結(jié)果如圖4所示。圖4中l(wèi)ogical address表示所合并的更新項目在原工程中的虛擬地址范圍,physical address表示合并之后的更新項目在工程中的地址范圍和內(nèi)容,其中new address表示在EEPROM中新分配的物理地址,items表示這段新地址空間中所存放的更新項目內(nèi)容。圖中的每一條記錄就形成了一個MMU映射項目。如圖4中的第一條記錄,既是將圖3中前三條修改記錄合并為一條修改記錄,因為圖3中前三條記錄中函數(shù)ι b, c的在空間上連續(xù)分布,可將三個函數(shù)的代碼存儲空間整個映射到新的空間來進(jìn)行代碼重定位,這樣可以減少M(fèi)MU中TLB表的映射數(shù)量。
權(quán)利要求
1.基于MMU架構(gòu)的JavaCard系統(tǒng)組件更新方法,其特征在于,包括卡外操作和卡內(nèi)操作,所述卡外操作步驟如下1)通過對比修改后的工程代碼和原始工程代碼,給出代碼修改項目列表;2)查找代碼修改項目列表中項目在目標(biāo)文件中的虛擬地址入口及二進(jìn)制長度,給出系統(tǒng)組件更新任務(wù)列表;3)對所述系統(tǒng)組件更新任務(wù)列表中虛擬地址接近的項目進(jìn)行合并,生成卡內(nèi)MMU修改信息表和代碼實際二進(jìn)制修改信息表;所述卡內(nèi)操作步驟如下4)傳輸代碼修改數(shù)據(jù),將更新后的代碼數(shù)據(jù)寫入卡內(nèi)EEPROM空間,并以所述更新后的代碼數(shù)據(jù)在卡內(nèi)EEPROM空間的新地址作為參數(shù)處理之后進(jìn)行系統(tǒng)調(diào)用;5)卡內(nèi)操作系統(tǒng)進(jìn)行認(rèn)證,如通過認(rèn)證則修改MMU的TLB初始化表,并重啟卡內(nèi)操作系統(tǒng)進(jìn)行初始化。
2.根據(jù)權(quán)利要求1所述的基于MMU架構(gòu)的JavaCard系統(tǒng)組件更新方法,其特征在于,所述步驟2)中給出系統(tǒng)組件更新任務(wù)列表包括對原項目修改、對原項目刪除和對原項目的新增,所述對原項目修改操作步驟如下如果修改后項目的二進(jìn)制代碼長度不大于原項目的長度,則找到原項目的虛擬地址入口地址,在MMU的TLB表中新增一個表項,將所述虛擬地址入口地址映射到EEPROM中,并保持字節(jié)長度相等,在EEPROM新開辟的位置寫入修改后的項目二進(jìn)制碼,多余的位置補(bǔ)入空操作,如果新修改項目的二進(jìn)制代碼長度大于原項目的長度,則將此修改可以分為原項目刪除與原項目的新增的組合;所述對原項目刪除操作步驟如下將所有引用被刪除項目的代碼進(jìn)行修改;所述對原項目的新增操作步驟如下新增項目代碼只可能在修改后的代碼中被引用,對其處理可分兩個步驟在EEPROM中劃分一塊區(qū)域,將新項目代碼寫入;然后利用逆向工程將修改代碼中引用新增項目的地址更改為新地址。
3.根據(jù)權(quán)利要求1所述的基于MMU架構(gòu)的JavaCard系統(tǒng)組件更新方法,其特征在于, 當(dāng)多個更新項目的虛擬地址跨度小于更新項目實際地址占用空間的兩倍,即更新空間利用率高于50%的時候,可將更新項目在存儲空間實現(xiàn)步驟3)中對所述系統(tǒng)組件更新任務(wù)列表中虛擬地址接近的項目進(jìn)行合并。
4.根據(jù)權(quán)利要求1所述的基于MMU架構(gòu)的JavaCard系統(tǒng)組件更新方法,其特征在于,步驟5)中所述修改MMU的TLB初始化表采用將一定長度的虛擬地址空間映射到等長的物理地址空間中,所述TLB初始化表格式分為logic_addr_base、Length和physical_addr_ base,所述l0giC_addr_base表示MMU所要映射的虛擬地址段的基地址,所述Length表示此邏輯地址段的長度,所述physical_addr_base表示本段邏輯地址所映射到的物理地址的基地址。
全文摘要
本發(fā)明公開了基于MMU架構(gòu)的Java Card系統(tǒng)組件更新方法,包括卡外和卡內(nèi)操作,具體包括1)通過對比修改后的工程代碼和原始工程代碼,給出代碼修改項目列表2)查找代碼修改項目列表中項目在目標(biāo)文件中的虛擬地址入口及二進(jìn)制長度,給出系統(tǒng)組件更新任務(wù)列表3)對所述系統(tǒng)組件更新任務(wù)列表中虛擬地址接近的項目進(jìn)行合并,生成卡內(nèi)MMU修改信息表和代碼實際二進(jìn)制修改信息表4)傳輸代碼修改數(shù)據(jù),將更新后的代碼數(shù)據(jù)寫入卡內(nèi)EEPROM空間,并以所述更新后的代碼數(shù)據(jù)在卡內(nèi)EEPROM空間的新地址作為參數(shù)處理之后進(jìn)行系統(tǒng)調(diào)用5)卡內(nèi)操作系統(tǒng)進(jìn)行認(rèn)證如通過認(rèn)證則修改MMU的TLB初始化表,并重啟卡內(nèi)操作系統(tǒng)進(jìn)行初始化。
文檔編號G06F9/445GK102243595SQ20111021981
公開日2011年11月16日 申請日期2011年8月3日 優(yōu)先權(quán)日2011年8月3日
發(fā)明者吳健, 尹建偉, 曹曉, 李瑩, 殷中科, 鄧水光 申請人:浙江大學(xué)