專利名稱::用于加載到一裝置上的程序數(shù)據(jù)的排序的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計算機科學領(lǐng)域。更特定而言,本發(fā)明涉及用于加載到一裝置上的程序數(shù)據(jù)的排序。
背景技術(shù):
:圖1是一個說明一個用于在主計算機與智能卡之間傳送程序數(shù)據(jù)的典型機制的方塊圖。智能卡110通常經(jīng)由APDU(應(yīng)用協(xié)議數(shù)據(jù)單元)與其它計算機100進行通信。APDU協(xié)議在國際標準ISO/IEC7816-3中加以規(guī)定。APDU包括命令115或響應(yīng)120消息。智能卡110從主計算機100接收命令A(yù)PDU115,執(zhí)行在命令115中規(guī)定的指令,并以響應(yīng)APDU120來回復(fù)主計算機100。命令A(yù)PDU115與響應(yīng)APDU120在卡110與主計算機100之間交替地互換。根據(jù)APDU協(xié)議,APDU消息包含兩種結(jié)構(gòu)。一種結(jié)構(gòu)是被一加載終端上的主應(yīng)用程序使用以發(fā)送命令到卡。另一種結(jié)構(gòu)是被卡使用以將響應(yīng)發(fā)送回主應(yīng)用程序。前者被稱為命令A(yù)PDU(C-APDU),而后者被稱為響應(yīng)APDU(R-APDU)。圖2A及圖2B中分別說明了這兩種結(jié)構(gòu)。某些C-APDU組件為可選的。JavaCardTM技術(shù)使得用JavaTM程序設(shè)計語言編寫的程序能在智能卡和其它資源受限裝置上運行。Z.Chen的JavaCardTMTechnologyforSmartCards(2000)中描述了JavaCardTM技術(shù)?,F(xiàn)轉(zhuǎn)向圖3,展示了一個說明加載轉(zhuǎn)換過的小應(yīng)用程序(ConvertedApplet,CAP)文件的方塊圖。JavaCardTM虛擬計算機(JCVM)包含一個包括JavaCardTM字節(jié)碼解釋程序345的卡上部分,及一個被稱為轉(zhuǎn)換程序310的卡外部分。解釋程序345和轉(zhuǎn)換程序310一起實施所有的虛擬計算機功能,包括加載JavaTM類別文件300和用特定語義集來執(zhí)行這些文件。轉(zhuǎn)換程序310加載且預(yù)處理類別文件300,所述類別文件300包含可為一個或多個數(shù)據(jù)包結(jié)構(gòu)化的JavaCardTM程序,并產(chǎn)生一個CAP(轉(zhuǎn)換過的小應(yīng)用程序)文件350。接著,CAP文件350加載到啟用JavaCardTM技術(shù)的智能卡330上,并由解釋程序345執(zhí)行。CAP文件350包括JavaTM數(shù)據(jù)包350中類別的可執(zhí)行二進制表示。JavaCardTM解釋程序345提供對JavaTM語言執(zhí)行模塊的運行時間支持。在JavaCardTM技術(shù)中,用于下載及安裝CAP文件350的機制包含于一個被稱為安裝程序340的單元中。JavaCardTM安裝程序340位于卡330內(nèi)。其與卡外安裝程序320合作??ㄍ獍惭b程序320經(jīng)由加載終端325,將CAP文件350中的可執(zhí)行二進制及可能其它的數(shù)據(jù)傳送到在卡330上運行的安裝程序340。安裝程序340將二進制寫入到智能卡存儲器中,使其與已置于卡330上的其它類別鏈接,并產(chǎn)生和初始化由JavaCardTM運行時間環(huán)境內(nèi)部使用的任何數(shù)據(jù)結(jié)構(gòu)。在通過字節(jié)碼解釋程序345解釋下載碼之前,可選的卡上驗證程序335執(zhí)行下載碼的字節(jié)碼驗證。APDU協(xié)議將凈荷或數(shù)據(jù)字段(圖2的參考數(shù)字240)的大小限制為一個由RAM的限定大小決定的較小數(shù)目的字節(jié)(通常小于128)。大于所述限制的數(shù)據(jù)結(jié)構(gòu)必須拆分于多個APDU的凈荷部分之間。此拆分的執(zhí)行通常與數(shù)據(jù)內(nèi)容無關(guān)。舉例來說,一特定APDU可包含一個數(shù)據(jù)結(jié)構(gòu)的一部分和另一數(shù)據(jù)結(jié)構(gòu)的一部分。這將在下文參考圖4作更詳細的闡釋。現(xiàn)轉(zhuǎn)向圖4,展示了一個說明從加載終端的角度加載CAP文件的方法的流程圖。在步驟400中,接收一CAP文件。在步驟405中,在多個APDU間拆分CAP文件和相關(guān)認證數(shù)據(jù)。在步驟410中,根據(jù)APDU協(xié)議將APDU傳輸?shù)侥繕酥悄芸ā,F(xiàn)轉(zhuǎn)向圖5,展示了一個說明從智能卡的角度加載CAP的流程圖。在步驟500中,在智能卡中重組CAP文件。在步驟505中,解密經(jīng)重組的CAP文件。在步驟510中,認證經(jīng)過解密的CAP文件數(shù)據(jù)。在另一解決方案中,CAP文件經(jīng)認證且接著被解密。在又一解決方案中,所述CAP文件不經(jīng)加密進行通信。在步驟515中,將經(jīng)認證的CAP文件的內(nèi)容安裝于智能卡上?,F(xiàn)轉(zhuǎn)向圖6,展示了一個說明在智能卡中重組CAP文件的流程圖。在步驟600中,接收一APDU。在步驟605中,將APDU存儲于一個永久可變存儲器中,例如EEPROM(電子可抹除可編程只讀存儲器)。或者,APDU凈荷不存儲于永久可變存儲器中。在步驟610中,確認APDU的接收。在步驟615中,作出關(guān)于是否需要處理另一APDU的判定。從步驟600開始,處理另外的APDU。現(xiàn)轉(zhuǎn)向圖7,展示了一個說明修改具有鏈接數(shù)據(jù)的存儲程序以解析靜態(tài)引用的流程圖??ù鎯ζ?00代表在使用內(nèi)嵌鏈接數(shù)據(jù)(704、712、728)鏈接可執(zhí)行代碼段(702、706、708、710、712、716、718、720、722、724、726、728、732)之前的卡存儲器??ù鎯ζ?50代表在使用內(nèi)嵌鏈接數(shù)據(jù)(704、712、728)鏈接可執(zhí)行代碼段(702、706、708、710、712、716、718、720、722、724、726、728、732)之后的卡存儲器。參看卡存儲器700,方法“A1A”代碼702調(diào)用方法“A1C”708,方法“A2A”代碼712調(diào)用方法“B1A”720,且方法“B2A”代碼728調(diào)用方法“B1D”726。方法“A1A”鏈接數(shù)據(jù)704包含一個如何解析對方法“A1C”708的引用的指示。方法“A1A”鏈接數(shù)據(jù)704可額外地包含必須如何修改方法“A1A”代碼702的指示。同樣,方法“A2A”鏈接數(shù)據(jù)714包含如何解析對方法“B1A”720的引用的指示。方法“A2A”鏈接數(shù)據(jù)714可另外包含必須如何修改方法“A2A”代碼712的指示。另外,方法“B2A”鏈接數(shù)據(jù)730包含如何解析對方法“B1D”726的引用的指示。方法“B2A”鏈接數(shù)據(jù)730可額外地包含必須如何修改方法“B2A”代碼728的指示。參考圖7的卡存儲器750,用所調(diào)用的方法的地址來替代所調(diào)用的方法的符號引用且不存儲鏈接數(shù)據(jù)。遺憾的是,在一個永久可變存儲器中存儲重新創(chuàng)建的CAP文件及接著處理該CAP文件內(nèi)容以創(chuàng)建所鏈接的可執(zhí)行代碼,需要大量的可用存儲器而且很耗時。因此,現(xiàn)有技術(shù)需要一種用于在主計算機與智能卡之間傳送程序數(shù)據(jù)的相對有效的方法和裝置。還需要這樣一種相對安全的解決方案。另外還需要檢測程序數(shù)據(jù)何時受到竄改的解決方案。
發(fā)明內(nèi)容本發(fā)明是關(guān)于在一裝置上的程序數(shù)據(jù)的最優(yōu)化加載,其包含接收一包括多個程序單元的程序,其中至少一個程序單元為一主程序單元。獲得所述程序的使用圖,其中所述使用圖的根節(jié)點代表所述根節(jié)點與一個或多個代表至少一個主程序單元的節(jié)點的接點。所述多個程序單元是至少部分地基于所述使用圖的深度優(yōu)先遍歷而排序,而所述有序程序被傳送到所述裝置。并入本說明書中并構(gòu)成本說明書的一部分的了本發(fā)明的一個或多個實施例,而且與具體實施方式一起用于解釋本發(fā)明的原理和實施。在圖中圖1是說明在主計算機與智能卡之間傳送程序數(shù)據(jù)的典型機制的方塊圖。圖2A是說明典型命令應(yīng)用協(xié)議數(shù)據(jù)單元(C-APDU)的方塊圖。圖2B是說明典型響應(yīng)應(yīng)用協(xié)議數(shù)據(jù)單元(R-APDU)的方塊圖。圖3是說明加載轉(zhuǎn)換過的小應(yīng)用程序(CAP)文件的方塊圖。圖4是說明從加載終端的角度加載CAP文件的流程圖。圖5是說明從智能卡的角度加載CAP文件的流程圖。圖6是說明在智能卡中重組CAP文件的流程圖。圖7是說明修改具有鏈接數(shù)據(jù)以解析靜態(tài)引用的存儲程序的方塊圖。圖8是適用于實施本發(fā)明的若干方面的計算機系統(tǒng)的方塊圖。圖9是說明用于根據(jù)本發(fā)明的一個實施例,在主計算機與智能卡之間傳送程序數(shù)據(jù)的系統(tǒng)的方塊圖。圖10是說明根據(jù)本發(fā)明的一個實施例,從主計算機傳送程序數(shù)據(jù)到智能卡的高級流程圖。圖11是說明根據(jù)本發(fā)明的一個實施例,從主計算機傳送程序數(shù)據(jù)到智能卡的低級流程圖。圖12是說明根據(jù)本發(fā)明的一個實施例,從主計算機的角度將程序數(shù)據(jù)從主計算機傳送到加載終端的方法的流程圖。圖13是說明根據(jù)本發(fā)明的一個實施例,將CAP文件劃分為一個或多個邏輯APDU的流程圖。圖14為說明根據(jù)本發(fā)明的一個實施例,使用程序單元類型映射信息的方法的流程圖。圖15A為說明包含數(shù)據(jù)包結(jié)構(gòu)化數(shù)據(jù)的CAP文件的方塊圖。圖15B是對應(yīng)于圖15A的CAP文件內(nèi)的程序的使用圖。圖15C是說明根據(jù)本發(fā)明的一個實施例,基于圖15B的使用圖而排序的圖15A的CAP文件的方塊圖。圖16是說明根據(jù)本發(fā)明的一個實施例,對用于最優(yōu)化驗證的程序單元排序和鏈接的方法的流程圖。圖17A是說明包含數(shù)據(jù)包結(jié)構(gòu)化數(shù)據(jù)的CAP文件的方塊圖。圖17B是對應(yīng)于圖17A的CAP文件內(nèi)的程序的使用圖。圖17C是說明根據(jù)本發(fā)明的一個實施例,基于圖17B的使用圖而排序的圖17A的CAP文件的方塊圖。圖18是說明根據(jù)本發(fā)明的一個實施例,將CAP文件分解為一個或多個邏輯APDU的方法的流程圖。圖19是說明根據(jù)本發(fā)明的一個實施例,將CAP文件分解為包括包含有驗證數(shù)據(jù)的APDU的一個或多個邏輯APDU的方法的流程圖。圖20A是說明根據(jù)本發(fā)明的一個實施例,用于計算APDU數(shù)據(jù)流上的認證指紋的方法的流程圖,其中所述指紋中包括驗證APDU。圖20B是說明根據(jù)本發(fā)明的一個實施例,用于計算APDU數(shù)據(jù)流上的認證指紋的方法的流程圖,其中所述指紋中不包括驗證APDU。圖21是說明根據(jù)本發(fā)明的一個實施例,從加載終端的角度將程序數(shù)據(jù)從主計算機傳送到加載終端的方法的流程圖。圖22是說明根據(jù)本發(fā)明的一個實施例,將擴充的CAP文件分解為一個或多個邏輯APDU的方法的流程圖。圖23是說明一種用于根據(jù)本發(fā)明的一個實施例,將一個包括驗證數(shù)據(jù)的擴充的CAP文件分解成包括包含驗證數(shù)據(jù)的APDU的一個或多個邏輯APDU的方法的流程圖。圖24是說明根據(jù)本發(fā)明的一個實施例,將一個不包括驗證數(shù)據(jù)的擴充的CAP文件分解成包括包含驗證數(shù)據(jù)的APDU的一個或多個邏輯APDU的方法的流程圖。圖25是說明根據(jù)本發(fā)明的一個實施例,將一個擴充CAP文件分解成包括包含鏈接數(shù)據(jù)的APDU的一個或多個邏輯APDU的方法的流程圖。圖26是說明根據(jù)本發(fā)明的一個實施例,將一個包括驗證數(shù)據(jù)的擴充CAP文件分解成包括包含驗證數(shù)據(jù)的APDU和包含鏈接數(shù)據(jù)的APDU的一個或多個邏輯APDU的方法的流程圖。圖27是說明根據(jù)本發(fā)明的一個實施例,將一個不包括驗證數(shù)據(jù)的擴充的CAP文件分解成包括包含驗證數(shù)據(jù)的APDU和包含鏈接數(shù)據(jù)的APDU的一個或多個邏輯APDU的方法的流程圖。圖28是說明根據(jù)本發(fā)明的一個實施例,創(chuàng)建一個或多個方法鏈接APDU的方法的流程圖。圖29是說明根據(jù)本發(fā)明的一個實施例,從智能卡的角度將程序數(shù)據(jù)從加載終端傳送到智能卡的方法的流程圖。圖30是說明根據(jù)本發(fā)明的一個實施例,從智能卡的角度使用HMAC認證指紋將程序數(shù)據(jù)從加載終端傳送到智能卡的方法的流程圖。圖31是說明根據(jù)本發(fā)明的一個實施例,執(zhí)行加載初始化的方法的流程圖。圖32是說明根據(jù)本發(fā)明的一個實施例,處理邏輯APDU流的方法的流程圖。圖33是說明根據(jù)本發(fā)明的一個實施例,計算認證指紋的方法的流程圖。圖34是說明根據(jù)本發(fā)明的一個實施例,處理邏輯APDU的方法的流程圖。圖35是說明根據(jù)本發(fā)明的一個實施例,用于鏈接包括虛擬方法的程序的數(shù)據(jù)結(jié)構(gòu)的流程圖。圖36是說明根據(jù)本發(fā)明的一個實施例,修改具有鏈接數(shù)據(jù)以解析動態(tài)引用的存儲程序的方塊圖。圖37是說明根據(jù)本發(fā)明的一個實施例,修改具有鏈接數(shù)據(jù)以解析動態(tài)引用的存儲程序的流程圖。圖38是說明根據(jù)本發(fā)明的一個實施例,程序單元提交(commitment)指紋的層級的方塊圖。圖39是說明根據(jù)本發(fā)明的一個實施例,包括程序碼和程序單元提交指紋的數(shù)據(jù)結(jié)構(gòu)的方塊圖。圖40是說明根據(jù)本發(fā)明的一個實施例,包括程序碼和加載存儲提交指紋的數(shù)據(jù)結(jié)構(gòu)的方塊圖。圖41是說明根據(jù)本發(fā)明的一個實施例,使用程序單元提交指紋來判定一程序單元是否可使用的流程圖。圖42是說明根據(jù)本發(fā)明的一個實施例,判定存儲程序單元數(shù)據(jù)是否有效的方法的流程圖。圖43是說明根據(jù)本發(fā)明的一個實施例的智能卡的方塊圖,其被配置成確保一被調(diào)用的方法在執(zhí)行之前已經(jīng)被驗證。圖44是說明根據(jù)本發(fā)明的一個實施例,確保所調(diào)用的方法在執(zhí)行之前已經(jīng)被驗證的方法的流程圖。具體實施例方式本文所描述的實施例是關(guān)于用于加載到一裝置上的程序數(shù)據(jù)的排序。所屬領(lǐng)域的技術(shù)人員將認識到本發(fā)明的下列具體實施方式僅為說明性的而不欲以任何方式進行限制本發(fā)明。受益于本揭示,所屬領(lǐng)域的技術(shù)人員將不難發(fā)現(xiàn)本發(fā)明的其它實施例?,F(xiàn)將詳細參考如附圖中所說明的本發(fā)明的實施方式。在所有附圖和下文具體實施方式中使用相同的參考指示符來指示相同或相似部件。為清晰起見,并不展示和描述本文中所述的實施例的所有常規(guī)特征。當然,應(yīng)理解在任何這些實際實施方式的發(fā)展中,應(yīng)作出若干實施方式特定的決策以達成開發(fā)者的特定目標,例如符合與應(yīng)用及商業(yè)相關(guān)的限制,而且這些特定目標將因各實施方式和各開發(fā)者而不同。此外,應(yīng)理解,這樣的開發(fā)工作可能較復(fù)雜而且費時,但受益于本揭示的所屬領(lǐng)域的技術(shù)人員而言這不過是一項常規(guī)任務(wù)。根據(jù)本發(fā)明的一個實施例,可通過使用各種類型的操作系統(tǒng)(OS)、計算平臺、固件、計算機程序、計算機語言和/或通用機器來實施組件、處理步驟和/或數(shù)據(jù)結(jié)構(gòu)。所述方法可運行于編程程序在處理線路上運行時。處理線路可采用處理器和操作系統(tǒng)的各種組合或獨立裝置的形式。所述處理可實施為由硬件、獨立硬件或其任意組合執(zhí)行的指令。軟件可存儲于機器可讀取的程序存儲裝置上。此外,所屬領(lǐng)域的技術(shù)人員將認識到,在不偏離本文所揭示的發(fā)明概念的范疇和精神的情況下,還可以使用具有較小通用特征的裝置,例如,硬連線裝置、包括現(xiàn)場可編程閘極陣列(FPGA)和復(fù)雜可編程邏輯裝置(CPLD)的現(xiàn)場可編程邏輯裝置(FPLD)、特殊應(yīng)用集成電路(ASIC)或類似裝置。根據(jù)本發(fā)明的一個實施例,所述方法可于運行下述操作系統(tǒng)的數(shù)據(jù)處理計算機如個人計算機、工作站計算機、大型計算機或高性能服務(wù)器上實施,例如可從加利福尼亞圣克拉拉的SunMicrosystems,Inc.獲得的Solaris、從華盛頓雷蒙德的MicrosoftCorporation獲得的MicrosoftWindowsXP和Windows2000,或例如可從許多廠商獲得的Unix操作系統(tǒng)的各種版本,例如Linux。所述方法還可實施于多處理器系統(tǒng)、或包括用于從處理器傳輸數(shù)據(jù)或?qū)?shù)據(jù)傳輸?shù)教幚砥鞯亩鄠€外圍設(shè)備(例如,輸入裝置、輸出裝置、顯示器、指示符、存儲器、存儲裝置、媒體介面等)的計算環(huán)境。此外,此一計算機系統(tǒng)或計算環(huán)境可局部連網(wǎng)或通過因特網(wǎng)連接。在本發(fā)明的上下文中,術(shù)語“網(wǎng)絡(luò)”包括局域網(wǎng)、廣域網(wǎng)、因特網(wǎng)、電纜電視系統(tǒng)、電話系統(tǒng)、無線電信系統(tǒng)、光纖網(wǎng)絡(luò)、ATM網(wǎng)絡(luò)、幀中繼網(wǎng)絡(luò)、衛(wèi)星通信系統(tǒng)等。這些網(wǎng)絡(luò)在此項技術(shù)中已為人所熟知,因而在此將不再描述。在本發(fā)明的上下文中,如果對所有x和y而言h(x,y)=h(y,x),那么散列函數(shù)h是可交換的。換句話說,散列函數(shù)的結(jié)果與自變量階次無關(guān)。在本發(fā)明的上下文中,術(shù)語“指紋”被定義為識別或檢測位組序列的一個或更多變化的函數(shù)的結(jié)果。例如,指紋可以包含具有任意位組序列的非交換散列或具有一個或更多位組序列的序列的非交換散列。又例如,指紋可以包含CRC(循環(huán)冗余碼)、消息摘要等。在Knuth,D.TheArtofComputerProgramming,卷2SeminumericalMethods,第五章,AddisonWesley,1981中描述了這些函數(shù)。在本發(fā)明的上下文中,術(shù)語“認證碼”被定義為數(shù)字簽字或使用分組密碼的消息認證碼(MAC)。舉例來說,可使用DES運算法則(FederalInformationProcessingStandardsPublication46-3,DataEncryptionStandard(DES),1999年10月25日;FederalInformationProcessingStandardsPublication197,AdvancedEncryptionStandard(AES),2001年11月26日)、Rijndael運算法則(J.Daemen和V.Rijmen,AESProposalRijndael,AESAlgorithmSubmission,1999年9月3日)或類似運算法則來產(chǎn)生認證碼。作為鍵入的散列函數(shù)的結(jié)果而產(chǎn)生的認證碼是一個認證碼實例,它同時也是指紋。在本發(fā)明的上下文中,鍵入的基于散列的消息認證碼(HMAC)被定義為結(jié)合散列函數(shù)使用密鑰的MAC。HMAC既是指紋又是MAC。在本發(fā)明的上下文中,術(shù)語“經(jīng)過認證的指紋”被定義一個成至少部分地基于指紋的認證碼。在本發(fā)明的上下文中,術(shù)語“認證指紋”被定義為一個用于產(chǎn)生經(jīng)過認證的指紋的指紋。在本發(fā)明的上下文中,術(shù)語“會話期”或“用戶會話期”被定義為從當用戶將一個例如智能卡或類似物的安全便攜式裝置插入到一個例如加載終端或卡接收裝置(CAD)的通信裝置中時開始,到當該安全便攜式裝置從通信裝置移出時結(jié)束的時期?!皶捚贗D”用于描述一個獨特地識別這一會話期的識別符。一個或更多會話期ID可以用于獨特地識別相同的會話期。在本發(fā)明的上下文中,術(shù)語“數(shù)據(jù)包結(jié)構(gòu)化數(shù)據(jù)”被定義為使用類似JavaTM的命名約定以參考外部程序單元的可執(zhí)行碼。舉例來說,用于外類的JavaTM命名約定包括后面跟有類別名的數(shù)據(jù)包名稱。在本發(fā)明的上下文中,術(shù)語“驗證APDU”被定義為包含命令和驗證數(shù)據(jù)的APDU。驗證數(shù)據(jù)位于APDU的數(shù)據(jù)字段(圖2的參考數(shù)字240)內(nèi)。在本發(fā)明的上下文中,術(shù)語“鏈接APDU”被定義為包含命令和鏈接數(shù)據(jù)的APDU。鏈接數(shù)據(jù)位于APDU的數(shù)據(jù)字段(圖2的參考數(shù)字240)內(nèi)。在本發(fā)明的上下文中,術(shù)語“程序單元”被定義為程序動作的可識別單元。更高級程序單元可包括一個或多個更低級程序單元。舉例來說,一個JavaTM類別可以包括一個或多個方法。圖8描述了適合于實施本發(fā)明的各方面的計算機系統(tǒng)800的方塊圖。如圖8中所示,計算機系統(tǒng)800包括一個總線802,其與例如中央處理器804、系統(tǒng)存儲器806(通常為RAM)、輸入/輸出(I/O)控制器808、例如經(jīng)由顯示適配部件812連接的顯示屏810、串行端口814和816、鍵盤818、硬盤驅(qū)動器820、用以接收軟盤824的軟盤驅(qū)動器822和用以接收CD-ROM828的CD-ROM播放器826的外部裝置的主要子系統(tǒng)互相連接??梢赃B接許多其它裝置,例如經(jīng)由串行端口814連接的指示裝置830(例如,鼠標)和經(jīng)由串行端口816連接的調(diào)制解調(diào)器832。調(diào)制解調(diào)器823可以經(jīng)由電話鏈接提供對服務(wù)器的直接連接或經(jīng)由POP(存在點)提供直接連接對互聯(lián)網(wǎng)的直接連接。或者,網(wǎng)絡(luò)接口適配器834可以用于連接(interface)到利用所屬領(lǐng)域的技術(shù)人員已知的任何網(wǎng)絡(luò)界面系統(tǒng)的局域網(wǎng)或廣域網(wǎng)(例如,Ethernet,xDSL,AppleTalkTM)??梢砸韵嗨品绞竭B接許多其它裝置或子系統(tǒng)(未圖示)。同樣,如下文所討論,不需要存在圖8中所示的所有裝置來執(zhí)行本發(fā)明。此外,可以以不同于圖8中所示的方式來與這些裝置和子系統(tǒng)互相連接。如圖8中所示的計算機系統(tǒng)的操作在此項技術(shù)中已為已知的,因此在本申請案中不再加以贅述,以簡化本文的討論。實施本發(fā)明的代碼可以可操作地置于系統(tǒng)存儲器806中或存儲于例如硬盤820、軟盤824或CD-ROM828的存儲媒體上。卡加載的簽字協(xié)議現(xiàn)轉(zhuǎn)向圖9,展示了一個說明根據(jù)本發(fā)明的一個實施例在主計算機與智能卡之間傳送程序數(shù)據(jù)的系統(tǒng)的方塊圖。系統(tǒng)900包含一個主計算機910、加載終端985和智能卡950。主計算機910包含一個卡外安裝程序915,用于擴充包含數(shù)據(jù)包結(jié)構(gòu)化數(shù)據(jù)905的CAP文件980,以產(chǎn)生包含數(shù)據(jù)包結(jié)構(gòu)化數(shù)據(jù)925、認證指紋940、一個或多個加載終端認證碼930和一個或多個目標智能卡認證碼935的擴充的CAP文件920。擴充的CAP文件920還可以包含驗證CAP文件內(nèi)容的驗證數(shù)據(jù)945。在源自數(shù)據(jù)包結(jié)構(gòu)化數(shù)據(jù)925的邏輯APDU的凈荷部分之上計算認證指紋945。下文將參看圖13更詳細地說明邏輯APDU。如下文更詳細地闡釋,主計算機910、加載終端985和目標智能卡950用以計算認證指紋的方法的相似性保證了如果APDU凈荷保持相同,則不管執(zhí)行計算的實體如何,都將產(chǎn)生相同的認證指紋。相反,如果APDU凈荷在每個實體執(zhí)行計算之間發(fā)生變化,那么將產(chǎn)生不同指紋,發(fā)送一凈荷變化信號。根據(jù)本發(fā)明的一個實施例,一個或多個加載終端認證碼930和目標智能卡認證碼935至少部分地基于認證指紋940。根據(jù)本發(fā)明的另一實施例,認證指紋940包含一個鍵入的基于散列的信息認證碼(HMAC)。根據(jù)本發(fā)明的另一實施例,不考慮邏輯APDU,一個或多個加載終端認證碼930和目標智能卡認證碼935包含一個在擴充的CAP文件920上計算的數(shù)字簽字。根據(jù)本發(fā)明的實施例,一個邏輯程序單元APDU可以在提供驗證信息(驗證APDU)和/或鏈接信息(鏈接APDU)的一個或多個APDU之后和/或之前。驗證數(shù)據(jù)可嵌于CAP文件中。或者,驗證數(shù)據(jù)可以由加載終端計算得。如果驗證數(shù)據(jù)包括于CAP文件中,那么其可用于計算認證指紋。鏈接數(shù)據(jù)還可以由加載終端計算得。鏈接數(shù)據(jù)可以基于從卡上獲得的數(shù)據(jù),從環(huán)球網(wǎng)(Web)上獲得的數(shù)據(jù),在CAP文件的數(shù)據(jù)或者其任何組合。仍然參看圖9,加載終端985被配置成接收擴充的CAP文件920、從數(shù)據(jù)包結(jié)構(gòu)化數(shù)據(jù)925創(chuàng)建一個或多個邏輯APDU、至少部分地基于加載終端認證碼930來認證CAP文件、創(chuàng)建包含一選定目標智能卡認證碼935和認證指紋940的一個或多個APDU以及傳送所述一個或多個APDU到目標智能卡950。根據(jù)本發(fā)明的一個實施例,主計算機910傳送不具有驗證數(shù)據(jù)的擴充CAP文件。根據(jù)本發(fā)明的另一實施例,主計算機910傳送具有驗證數(shù)據(jù)的擴充CAP文件。根據(jù)本發(fā)明的一個實施例,加載終端985接收不具有驗證數(shù)據(jù)的擴充CAP文件920、計算驗證數(shù)據(jù)并創(chuàng)建一個或多個驗證APDU。根據(jù)本發(fā)明的另一實施例,加載終端985接收具有驗證數(shù)據(jù)的擴充CAP文件920并且創(chuàng)建一個或多個驗證APDU。根據(jù)本發(fā)明的另一實施例,加載終端985計算鏈接數(shù)據(jù)并且創(chuàng)建一個或多個鏈接APDU。根據(jù)本發(fā)明的一個實施例,智能卡950包含一安全便攜式裝置,例如啟用JavaCardTM技術(shù)的智能卡或類似物。根據(jù)本發(fā)明的一個實施例,智能卡950包含一啟用CDMA技術(shù)的智能卡。SmartCardStageIDescription,第1.1版,CDMADevelopmentGroup-SmartCardTeamDocument(1996年5月22日)中描述了啟用CDMA技術(shù)的智能卡。根據(jù)本發(fā)明的另一實施例,智能卡950包含一個SIM(subscriberidentitvmodule,用戶識別模塊)卡。術(shù)語“SIM卡”指用于GSM(全球移動通信系統(tǒng))移動電話的智能卡。SIM包括用戶的個人密碼識別密鑰和其它信息,例如電話的當前位置和經(jīng)常呼叫的號碼的地址簿。SIM在1998年發(fā)行的Digitalcellulartelecommunicationssystem(phase2+);SpecificationoftheSubscriberIdentityModule-MobileEquipment(SIM-ME)interface,ETSI,GSM11.11第7.4.0版中有描述。根據(jù)本發(fā)明的另一實施例,智能卡950包含一WIM(無線接口模塊)。WIM是用于WAP(無線應(yīng)用協(xié)議)電話智能卡。其在2001年7月12的WirelessIdentityModulePartSecurity,WAP-260-WIM-20010712-a,WirelessApplicationProtocolForum中有描述。根據(jù)本發(fā)明的另一實施例,智能卡950包含USIM(通用用戶識別模塊)。USIM是用于3GPP(第三代合作伙伴計劃)移動電話的智能卡。其在3rdGenerationPartnershipProject;TechnicalSpecificationTerminals;USIMandICcardrequirements,第4次發(fā)行,3GPPTS21.111第4.0.0版(2001-03)中加以描述。根據(jù)本發(fā)明的另一實施例,智能卡950包含一個UIM(useridentitymodule用戶識別模塊)。UIM是一個用于3GPP計劃2(3GPP2)移動電話的智能卡。在當智能卡為可分離時使用術(shù)語“R-UIM”。UIM是SIM的超集并且允許基于CDMA(碼分多址)的手機用戶穿越地理和裝置界限漫游。由第三代合作伙伴計劃2(3GPP2)發(fā)布的并且題為3rdGenerationPartnershipProject2;RemovableUserIdentityModule(R-UIM)forcdma2000SpreadSpectrumSystems,3GPP2C.S0023-0,2000年7月9的說明書中描述了R-UIM。不欲以任何方式來限制以上關(guān)于各移動電話技術(shù)的說明內(nèi)容。所屬領(lǐng)域的技術(shù)人員將認識到可以使用其它使用者裝置?,F(xiàn)轉(zhuǎn)向圖10,展示了說明根據(jù)本發(fā)明的一個實施例從主計算機傳送程序數(shù)據(jù)到智能卡的高級流程圖。在步驟1020中,準備了擴充CAP文件。擴充CAP文件可以包含數(shù)據(jù)包結(jié)構(gòu)化數(shù)據(jù)和在包含數(shù)據(jù)包結(jié)構(gòu)化數(shù)據(jù)的APDU數(shù)據(jù)流上計算得的認證指紋?;蛘?,擴充CAP文件可以包含數(shù)據(jù)包結(jié)構(gòu)化數(shù)據(jù)和至少一個至少部分地基于認證指紋的認證碼。根據(jù)本發(fā)明的一個實施例,在判定用于最優(yōu)化驗證和鏈接的程序元素(programelement)的加載次序(1015)之后,準備擴充CAP文件(1020)。在步驟1020中,可以使用步驟1015中使用的加載次序,以判定在計算認證指紋中的邏輯APDU的次序。在JavaTM環(huán)境中,判定用于一個或多個類別的加載次序、類別中的方法或方法中的字段??芍辽俨糠值鼗贑AP文件中的程序的使用圖來排序程序元素。方法的“使用”可以包含(例如)調(diào)用所述方法。字段的“使用”可以包含(例如)訪問所述字段。還可以至少部分地基于為所述程序而定義的類型映射信息來排序程序元素。下文將參看圖14更詳細地闡釋類型映射。下文中將參看圖15A-15C更詳細地闡釋程序元素的排序。仍然參看圖10,在步驟1025中,將擴充CAP文件傳送到加載終端。在步驟1030中,加載終端接收擴充的CAP文件并且初始化applet小應(yīng)用程序的加載。在步驟1035中,將認證的applet小應(yīng)用程序代碼加載到目標智能卡上。在步驟1040中,初始化applet小應(yīng)用程序。在步驟1045中,處理從目標智能卡接收的加載的證據(jù),以判定并記錄所述加載是否成功。仍然參看圖10,智能卡1050接收來自加載終端的加載請求。在步驟1055中,智能卡處理從加載終端接收的邏輯APDU。處理包括在APDU凈荷上計算認證指紋。在步驟1060中,從加載終端接收的初始化數(shù)據(jù)用于初始化智能卡。在步驟1065中,將加載的證據(jù)發(fā)送到加載終端?,F(xiàn)轉(zhuǎn)向圖11,其展示了說明根據(jù)本發(fā)明的一個實施例從主計算機傳送程序數(shù)據(jù)到智能卡的低級流程圖。圖11為圖10提供了更多細節(jié)。更詳細地來說,圖11的參考數(shù)字1106-1116、1118-1136和1140-1150分別對應(yīng)于圖10的參考數(shù)字1020-1025、1030-1045和1050-1065。在步驟1106中,主計算機將CAP文件分解成邏輯數(shù)據(jù)單元,并且將邏輯數(shù)據(jù)單元劃分成一個或多個APDU。在步驟1108中,如下文中參考圖20A和圖20B所描述,在APDU數(shù)據(jù)流上計算認證指紋。在步驟1110中,創(chuàng)建一個或多個加載終端認證碼。在步驟1112中,創(chuàng)建一個或多個目標智能卡認證碼。在步驟1114中,用認證碼、指紋或其兩者擴充CAP文件。在步驟1116中,將擴充CAP文件傳送到加載終端。仍然參看圖11,在步驟1118中,加載終端接收包括擴充CAP文件、Applet小應(yīng)用程序ID(AID)或其類似物、初始化指令和初始化數(shù)據(jù)的加載請求。數(shù)據(jù)“AID”由國際標準化組織(ISO)標準ISO-IEC7816-3定義。在步驟1120中,起始Applet小應(yīng)用程序的加載。起始可以包括將任何認證碼和指紋從擴充CAP文件中分離并且獲得鏈接信息。視需要,在步驟1121中,判定用于最優(yōu)化驗證和鏈接的程序元素的加載次序。如關(guān)于圖10的參考數(shù)字1015所述,可判定程序元素的加載次序?;蛘?,可依據(jù)存儲于一擴充CAP文件的指示符來判定次序。在步驟1122中,將擴充CAP文件分解成一個或多個邏輯APDU。在步驟1124中,基于加載終端認證碼認證擴充CAP文件。在步驟1126中,基于目標智能卡從擴充CAP文件中的目標智能卡認證碼中選擇一目標認證碼。在步驟1128中,將一個或多個邏輯APDU傳送到目標智能卡。在步驟1130中,將指紋或基于指紋的認證碼發(fā)送到智能卡。在步驟1132中,將目標智能卡認證碼發(fā)送到智能卡。在步驟1134中,將初始化指令和加載數(shù)據(jù)發(fā)送到目標智能卡。在步驟1136中,從目標智能卡接收加載的證據(jù)。根據(jù)本發(fā)明的實施例,在過程1126、1128和1130之前執(zhí)行過程1122和1124。然而,可以改變過程1126、1128和1130相互之間的次序。仍然參看圖11,在步驟1140中,目標智能卡從加載終端接收加載請求并且執(zhí)行加載初始化。加載初始化可以包括接收步驟1130發(fā)送的指紋或基于指紋的認證碼。在步驟1142中,處理從加載終端接收的邏輯APDU。所述處理包括在邏輯APDU凈荷上計算認證指紋。所述處理還可包括接收步驟1130發(fā)送的指紋或基于指紋的認證碼。在步驟1144中,基于目標智能卡認證碼來認證所接收的內(nèi)容。所述認證可包括接收步驟1130發(fā)送的指紋或指紋的認證碼。在步驟1146中,如果所接收的指紋和所計算得的指紋相匹配,并且如果所接收的內(nèi)容經(jīng)過適當認證,那么將所接收的內(nèi)容提交到智能卡上的存儲器。在步驟1148中,從加載終端接收的初始化數(shù)據(jù)用于初始化所述卡。在步驟1150中,將加載的證據(jù)發(fā)送到加載終端?;蛘?,可以在不使用加載終端認證碼和/或目標智能卡認證碼的情況下執(zhí)行圖10和圖11所說明的過程。使用或不使用認證碼的決策可以至少部分地基于對主計算機1100、加載終端1105和/或智能卡1110的信任級別。舉例來說,如果加載終端被信任,那么可無需加載終端認證碼而執(zhí)行圖10和圖11中所說明的過程。因此,如果卡發(fā)行者使用其自己的終端來更新卡,那么由于卡發(fā)行者可以信任發(fā)行者所控制的終端,不需要終端認證碼。但是,如果遠離卡發(fā)行者的銷售點處的第三方終端用于更新卡,并且所述卡已為使用者所擁有,因為卡發(fā)行者可以對終端具有很少(如果有的話)的控制,那么可能需要終端認證碼。相似地,如果信任目標智能卡,那么可無需目標智能卡認證碼而執(zhí)行圖10和圖11中所說明的過程。此外,所屬領(lǐng)域的技術(shù)人員將了解,可使用用于創(chuàng)建終端認證碼的其它機制。根據(jù)本發(fā)明的一個實施例,主計算機100和加載終端1105包含相同的裝置。主計算機現(xiàn)轉(zhuǎn)向圖12,展示了用于根據(jù)本發(fā)明的一個實施例,從主計算機的角度從主計算機傳送程序數(shù)據(jù)到加載終端的方法的流程圖。圖12為圖10的參考數(shù)字1015-1025和圖11的參考數(shù)字1106-1116提供了更多細節(jié)。在步驟1200中,接收CAP文件。在步驟1205中,將CAP文件分解成一個或多個邏輯APDU。在步驟1210中,在APDU數(shù)據(jù)流上計算認證指紋?;蛘撸梢栽趧?chuàng)建邏輯APDU(意即,作為CAP文件分解過程1205的一部分)時計算認證指紋。在步驟1215中,將CAP文件擴充為包括認證指紋,至少部分地基于該認證指紋的至少一個數(shù)據(jù)認證碼或其任何組合。在步驟1220中,將擴充CAP文件傳送到加載終端?,F(xiàn)轉(zhuǎn)向圖13,展示了說明根據(jù)本發(fā)明的一個實施例,將CAP文件劃分成一個或多個邏輯APDU的方塊圖。圖13為圖12的參考數(shù)字1205提供了更多細節(jié)。將CAP文件1300劃分成包含用于CAP文件中的任何數(shù)據(jù)包的數(shù)據(jù)包定義數(shù)據(jù)1305的一個或多個APDU。數(shù)據(jù)包定義數(shù)據(jù)可包含一數(shù)據(jù)包標識符。將數(shù)據(jù)包內(nèi)的類別劃分成包含用于數(shù)據(jù)包中的任何類別的類別定義數(shù)據(jù)1310的一個或多個APDU。類別定義數(shù)據(jù)可以包含例如,類別標識符、基類別標識符和一個或多個接口標識符。對一個類別中的任何方法而言,將方法劃分成包含方法定義數(shù)據(jù)1315的一個或多個APDU和包含方法代碼數(shù)據(jù)1320的一個或多個APDU。對一個類別中的任何字段而言,將所述字段劃分成包含字段定義數(shù)據(jù)1325的一個或多個APDU。對靜態(tài)字段而言,將所述字段劃分成包含字段初始化數(shù)據(jù)1330的一個或多個APDU。方法定義數(shù)據(jù)1315可以包含(例如)方法標識符、返回類型標識符、一個或多個參數(shù)類型標識符和一個或多個拋棄式(throwable)異常類型標識符。方法代碼數(shù)據(jù)1320可以包含(例如)可執(zhí)行的字節(jié)碼。字段定義數(shù)據(jù)1325可以包含(例如)字段計數(shù)和包括于該字段計數(shù)中的每個字段的字段類型標識符。字段初始化數(shù)據(jù)1330可以包含(例如)用于初始化恒定數(shù)據(jù)的數(shù)據(jù)。根據(jù)本發(fā)明的實施例,包含驗證數(shù)據(jù)的一個或多個APDU與例如數(shù)據(jù)包、類別或方法等的程序單元相聯(lián)系。驗證信息由主計算機或加載終端在卡外計算,并且加載到卡上以用于在加載時間使用,并且可能用于程序執(zhí)行期間。在相應(yīng)的邏輯程序單元APDU之前,將一個或多個驗證APDU插入到APDU數(shù)據(jù)流中。在相應(yīng)邏輯程序單元APDU之后還可以將一個或多個驗證APDU插入到APDU數(shù)據(jù)流中。在執(zhí)行期間,驗證數(shù)據(jù)包括用于預(yù)知程序動作的信息。驗證數(shù)據(jù)可以包括(例如)原始數(shù)據(jù)類型信息,例如屬于特定數(shù)據(jù)類型的數(shù)值的邊界值。驗證數(shù)據(jù)還可以包括程序棧狀態(tài)信息,例如在相關(guān)方法代碼的模擬執(zhí)行期間程序棧上的條目的數(shù)據(jù)類型。程序棧狀態(tài)信息還可以包括對類別(復(fù)合數(shù)據(jù)類型)的一個或多個引用。根據(jù)本發(fā)明的一個實施例,類別驗證APDU補充用于特定類別中的方法的方法驗證APDU中的驗證數(shù)據(jù)。舉例來說,當執(zhí)行每方法(per-method)驗證時一個特定加載次序?qū)е虏煌暾尿炞C信息可用性時,可使用這些類別驗證APDU。根據(jù)本發(fā)明的另一實施例,數(shù)據(jù)包驗證APDU補充用于特定數(shù)據(jù)包中的類別的類別驗證APDU中的驗證數(shù)據(jù)。舉例來說,當執(zhí)行每方法驗證時一個特定加載次序?qū)е虏煌暾尿炞C信息可用性時,可使用這些數(shù)據(jù)包驗證APDU。類型映射信息根據(jù)本發(fā)明的另一實施例,使用一個或多個類型映射來濃縮驗證信息。所述一個或多個類型映射是指與特定程序單元相關(guān)的成組類型。所述一個或多個類型映射是指在相應(yīng)代碼的模擬執(zhí)行期間操作數(shù)棧上或寄存器堆中的條目的數(shù)據(jù)類型。類型映射允許使用相對較小的數(shù)目的驗證最優(yōu)化,將預(yù)定組的類型稱為相應(yīng)代碼中所使用的類型。這提供了在程序單元的驗證期間需要校驗的類型的相對濃縮的表示。這將在下文中參看圖14加以更詳細的闡釋?,F(xiàn)轉(zhuǎn)向圖14,展示了說明根據(jù)本發(fā)明的一個實施例使用程序單元類型映射信息的方法的流程圖。在步驟1400中,接收一個程序單元。以JavaTM技術(shù)為例,接收方法、類別或數(shù)據(jù)包。在步驟1405中,判定程序單元所使用的類型。在步驟1410中,創(chuàng)建這些類型的映射。在步驟1415中,將程序單元映射信息用于程序單元的驗證信息。根據(jù)本發(fā)明的一個實施例,使用程序單元類型映射信息以代表程序單元中的所有類型信息。根據(jù)本發(fā)明的另一實施例,程序單元類型映射信息用于代表程序單元中的類型信息的子集。舉例來說,類型映射可以用于代表程序單元中的最常使用的類型。根據(jù)本發(fā)明的一個實施例,一個類型映射包含位映射,其中每個位的類型映射代表一個特定的數(shù)據(jù)類型。舉例來說,16位類型映射可以用于代表16個類型。根據(jù)本發(fā)明的另一實施例,用于低級程序單元的類型映射信息相對于高級程序單元的類型映射信息是累積的。舉例來說,數(shù)據(jù)包級4位類型映射可以用于代表數(shù)據(jù)包中的16個最常用的類型。類級4位類型映射可以用于代表類中的16個最常用的類型,由數(shù)據(jù)包級類型映射代表的16個類型除外。作為另一實例,位映射之數(shù)據(jù)包級4位類型映射可以用于代表數(shù)據(jù)包中的4個最常用的類型。位映射之類級4位類型可以用于代表類別中的4個最常用的類型,由數(shù)據(jù)包級類型映射代表的4個類型除外。根據(jù)本發(fā)明的一個實施例,尾部(trailer)APDU表示與程序單元相關(guān)聯(lián)的最后一個APDU。根據(jù)本發(fā)明的另一實施例,頭部APDU領(lǐng)先于與程序單元相關(guān)聯(lián)的一個或多個APDU,并且指定邏輯程序單元APDU要遵循的預(yù)期序列。程序元素次序圖15A至17C說明根據(jù)本發(fā)明的一個實施例,判定CAP文件中的程序元素的次序。圖15A至17C為圖10的參考數(shù)字1015和圖11的參考數(shù)字1121提供了更多細節(jié)。圖15A說明在排序之前的CAP文件。圖15B說明圖15A的CAP文件中的程序元素的使用圖,而且圖15C說明至少部分地基于圖15B的使用圖的原始CAP文件中的程序元素的排序。根據(jù)本發(fā)明的一個實施例,原始CAP文件是至少部分地基于相應(yīng)的使用圖而進行排序的。將經(jīng)過排序的文件傳送到目標裝置。根據(jù)本發(fā)明的另一個實施例,修改原始CAP文件以包括一個指示CAP文件內(nèi)容的加載次序的次序指示符。將經(jīng)過修改的CAP文件傳送到目標裝置。根據(jù)本發(fā)明的另一個實施例,將原始CAP文件和指示CAP文件內(nèi)容的加載次序的次序指示符傳送到目標裝置。現(xiàn)轉(zhuǎn)向圖16,展示了一個說明根據(jù)本發(fā)明的一個實施例,對最優(yōu)化驗證的程序單元排序和鏈接的方法的流程圖。在步驟1600中,接收一個程序,包括多個針對例如智能卡等的裝置的程序單元。在步驟1605中,獲得所述程序的使用圖。在步驟1610中,對程序單元排序,以創(chuàng)建一個有序程序。排序是至少部分地基于在步驟1605中所獲得的使用圖。在步驟1615中,將該有序程序傳送到所述裝置。根據(jù)本發(fā)明的一個實施例,遵循用于排序程序元素的“深度優(yōu)先”(depth-first)方法。以圖15A至圖15C為例,方法A.B.C(1540)是主要方法,且其調(diào)用方法A.B.A(1542)。方法A.B.A(1542)首先調(diào)用方法A.B.B(1544),其次調(diào)用方法A.A.B(1546)。方法A.B.B(1544)和方法A.A.B(1546)均不調(diào)用其它方法。方法A.B.C(1540)還調(diào)用方法A.A.A(1548),隨后調(diào)用方法A.A.C(1550)。按照圖15B的使用圖,繼續(xù)以深度優(yōu)先、從左到右的方式進行,所得到的次序是A.B.B(1544)、A.A.B(1546)、A.B.A(1542)、A.A.A(1548)、A.A.C(1550)、A.B.C(1540)。這是在圖15C中說明的有序數(shù)據(jù)包中所反映的次序。圖17A至圖17C說明基于使用圖判定CAP文件內(nèi)容的次序,以創(chuàng)建更扁平的有序CAP文件。圖17A至圖17C與圖15A至圖15C相似,但是圖15C的有序CAP文件1502保持原始CAP文件1500的類別結(jié)構(gòu),而圖17C的有序CAP文件1702已經(jīng)扁平化而因此并未保持CAP文件1700中的原始類別結(jié)構(gòu)。圖17A說明包含數(shù)據(jù)包結(jié)構(gòu)化數(shù)據(jù)的CAP文件。圖17B說明對應(yīng)于圖17A的CAP文件內(nèi)的程序的使用圖。圖17C說明根據(jù)本發(fā)明的一個實施例,基于圖17B的使用圖而排序的圖17A的CAP文件。如圖17C中所示,首先使用的方法是方法A.B.B1754。方法A.B.B1754的使用需要類別A.B數(shù)據(jù)1724和類別A.B字段1726,因此將此信息置于有序CAP文件1702中的方法A.B.B1728之前。下一個使用的方法是方法A.A.B1756。方法A.A.B1756的使用需要類別A.A數(shù)據(jù)1730和類別A.A字段1733。因為所需要的類別和字段數(shù)據(jù)不會較早地出現(xiàn)于有序CAP文件中,所以將所需要的類別和字段數(shù)據(jù)置于有序CAP文件1702中的方法A.A.B1734之前。隨后的方法在有序CAP文件1702中的放置是根據(jù)使用次序來進行的,而與方法屬于哪一類別無關(guān)。在本實例中,不需要再加載其它類別或字段數(shù)據(jù),因為用于存在于原始CAP文件1700中的僅兩個類別的類別和字段數(shù)據(jù)已被置于有序CAP文件1702中。圖15A至圖17C中所示的程序元素和使用圖僅為說明的目的。所屬領(lǐng)域的技術(shù)人員將了解,使用圖可以被用于代表一個程序的其它部分的使用。舉例來說,使用圖還可以代表字段或其它程序結(jié)構(gòu)的使用。此外,可以以類似于圖17C中所示的方式的方式來排序來自不同數(shù)據(jù)包的程序的部分,其中在所述數(shù)據(jù)包的任何程序單元之前將用于特定數(shù)據(jù)包的數(shù)據(jù)包數(shù)據(jù)置于所得文件中。同樣,所屬領(lǐng)域的技術(shù)人員將了解,程序元素的許多組合和在這些程序元素之間的調(diào)用關(guān)系都是可能的。根據(jù)本發(fā)明的另一個實施例,任意地排序APDU,而每個APDU包括上下文信息。舉例來說,APDU可以包括識別APDU內(nèi)容的信息,作為第二類別的第四方法。在APDU中包括上下文信息有利于首先加載所有靜態(tài)數(shù)據(jù)(所有字段、類別和名稱)再加載所有方法,確保在驗證和鏈接中使用的方法所用的信息是首先可用的。根據(jù)本發(fā)明的一個實施例,一個主計算機在含有程序數(shù)據(jù)的擴充CAP文件中插入一個排序指示符。加載終端使用所述排序指示符來判定由于CAP文件分解過程而創(chuàng)建的APDU的排序。根據(jù)本發(fā)明的一個實施例,排序指示符是至少部分地基于該程序的使用圖。舉例來說,類型映射信息可以在加載過程中相對較晚地加載,由此最小化所需要的存儲器的量?;蛘?,類型映射信息可以在加載過程中相對較早地加載,由此增加當引用所述類型時類型信息將駐留于卡上的可能性。根據(jù)本發(fā)明的一個實施例,在一個特定類別的任何相應(yīng)方法定義APDU1315或方法代碼APDU1320之前處理對應(yīng)于所述特定類別的一個或多個字段定義APDU1325和字段初始化APDU1330。CAP文件分解圖18和圖19是說明根據(jù)本發(fā)明的實施例,從主計算機的角度將CAP文件分解為邏輯APDU的流程圖。圖18說明分解不包括驗證數(shù)據(jù)的CAP文件,而圖19說明分解包括驗證數(shù)據(jù)的CAP文件?,F(xiàn)轉(zhuǎn)向圖18,展示了說明根據(jù)本發(fā)明的一個實施例,將CAP文件分解成邏輯APDU的方法的流程圖。對每個數(shù)據(jù)包執(zhí)行在框1800內(nèi)說明的過程。在步驟1805中,為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包定義數(shù)據(jù)的數(shù)據(jù)包定義APDU。對每個類別執(zhí)行在框1810內(nèi)說明的過程。在步驟1815中,為一個類別創(chuàng)建一個或多個包含類別定義數(shù)據(jù)的類別定義APDU。在步驟1820中,為所述類別創(chuàng)建一個或多個包含字段定義數(shù)據(jù)的字段定義APDU。對每個方法執(zhí)行在框1825內(nèi)說明的過程。在步驟1835中,為一個方法創(chuàng)建一個或多個包含方法定義數(shù)據(jù)的方法定義APDU。在步驟1840中,為所述方法創(chuàng)建一個或多個包含方法代碼的代碼APDU。在步驟1830中,創(chuàng)建一個或多個數(shù)據(jù)初始化APDU。根據(jù)本發(fā)明的實施例,可以為程序單元創(chuàng)建驗證數(shù)據(jù)。可為例如數(shù)據(jù)包、類別、方法或類似物或其組合的程序單元創(chuàng)建驗證數(shù)據(jù)。如前所述,可以在相應(yīng)的程序單元代碼APDU或程序單元定義APDU之前將程序單元的驗證數(shù)據(jù)插入到APDU流中。在一個實施例中,直接在相應(yīng)的程序單元代碼APDU或程序單元定義APDU之前插入驗證數(shù)據(jù)?;蛘?,可以在相應(yīng)的程序單元代碼APDU或程序單元定義APDU之后將程序單元的驗證數(shù)據(jù)插入到APDU流中。在一個實施例中,直接在相應(yīng)的程序單元代碼APDU或程序單元定義APDU之后插入驗證數(shù)據(jù)。這將在下文中參看圖19加以更詳細地闡釋?,F(xiàn)轉(zhuǎn)向圖19,展示了一個說明根據(jù)本發(fā)明的一個實施例,將CAP文件分解成包括含有驗證數(shù)據(jù)的APDU的邏輯APDU的方法的流程圖。圖19類似于圖18,但是圖19中包括參考數(shù)字1940、1945和1955處所表示的驗證數(shù)據(jù)。對每個數(shù)據(jù)包執(zhí)行在框1900內(nèi)說明的過程。在步驟1905中,為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包定義數(shù)據(jù)的數(shù)據(jù)包定義APDU。對每個類別執(zhí)行框1910內(nèi)說明的過程。在步驟1915中,為一個類別創(chuàng)建一個或多個包含類別定義數(shù)據(jù)的類別定義APDU。在步驟1920中,為所述類別創(chuàng)建一個或多個包含字段定義數(shù)據(jù)的字段定義APDU。對每個方法執(zhí)行在框1925內(nèi)說明的過程。在步驟1930中,為一個方法創(chuàng)建一個或多個包含方法定義數(shù)據(jù)的方法定義APDU。在步驟1935中,為所述方法創(chuàng)建一個或多個包含方法代碼的代碼APDU。在步驟1940中,為一個方法創(chuàng)建一個或多個包含方法驗證數(shù)據(jù)的方法驗證APDU。在步驟1945中,為一個類別創(chuàng)建一個或多個包含類別驗證數(shù)據(jù)的類別驗證APDU。在步驟1950中,創(chuàng)建一個或多個數(shù)據(jù)初始化APDU。在步驟1955中,為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包驗證數(shù)據(jù)的數(shù)據(jù)包驗證APDU。根據(jù)本發(fā)明的實施例,在相應(yīng)的一個或多個代碼或定義APDU之前和/或之后,將一個或多個驗證APDU插入APDU流中。以圖19為例,可以在插入相應(yīng)的一個或多個數(shù)據(jù)包定義APDU(1905)之后,將一個或多個數(shù)據(jù)包驗證APDU插入到APDU流(1955)中?;蛘撸梢栽诓迦胂鄳?yīng)的一個或多個數(shù)據(jù)包定義APDU之前,將一個或多個數(shù)據(jù)包驗證APDU插入到APDU流中。類似地,可以在插入相應(yīng)的一個或多個類別定義APDU(1915)之后將一個或多個類別驗證APDU插入到APDU流中(1945)。或者,可以在插入相應(yīng)的一個或多個類別定義APDU之前,將一個或多個類別驗證APDU插入到APDU流中。作為另一個實例,可以在插入相應(yīng)的一個或多個方法定義APDU(1930)之后,將一個或多個方法驗證APDU插入到APDU流中(1940)。或者,可以在插入相應(yīng)的一個或多個方法定義APDU之前,將一個或多個方法驗證APDU插入到APDU流中。在相應(yīng)的一個或多個代碼或定義APDU之前或之后的驗證APDU可以包括(例如)一個或多個類型映射。圖20A和圖20B是說明根據(jù)本發(fā)明的實施例,在一個APDU數(shù)據(jù)流上計算認證指紋的方法的流程圖。圖20A和圖20B為圖11的參考數(shù)字1108提供了更多細節(jié)。圖20A說明當驗證APDU用于判定認證指紋時,計算一個認證指紋。圖20B說明當驗證APDU不用于判定認證指紋時,計算一個認證指紋。如下文所述,由圖20A和圖20B說明的過程與加載終端(圖11的參考數(shù)字1128和1130)和目標智能卡(圖11的參考數(shù)字1142)用以計算認證指紋的過程相同?,F(xiàn)轉(zhuǎn)向圖20,展示了一個說明根據(jù)本發(fā)明的實施例,在一個APDU數(shù)據(jù)流上計算驗證指紋的方法的流程圖。參看圖20A,在步驟2000中,初始化一個認證指紋。在步驟2005中,接收一個邏輯APDU。在步驟2010中,在邏輯APDU凈荷上計算指紋。指紋計算使用先前所計算得的指紋的結(jié)果。在步驟2015中,作出關(guān)于另一邏輯APDU是否留待處理的判定。在步驟2005中,繼續(xù)對額外APDU的處理。參看圖20B,在步驟2020中,初始化一個認證指紋。在步驟2025中,接收一個邏輯APDU。在步驟2030中,作出關(guān)于所述APDU是否為驗證APDU的判定。如果所述APDU不是驗證APDU,那么在步驟2035中在邏輯APDU凈荷上計算指紋。指紋計算利用了先前計算出的指紋的結(jié)果。在步驟2040中,作出關(guān)于另一個邏輯APDU是否留待處理的判定。在步驟2025中,繼續(xù)對額外APDU的處理。加載終端現(xiàn)轉(zhuǎn)向圖21,展示了一個說明根據(jù)本發(fā)明的一個實施例,從加載終端的角度從主計算機傳送程序數(shù)據(jù)到加載終端的方法的流程圖。圖21為圖10的參考數(shù)字1030至1045和圖11的參考數(shù)字1118至1136提供了額外細節(jié)。在步驟2100中,接收一個擴充CAP文件。在步驟2105中,將任何認證碼和指紋與擴充CAP文件分離開。在步驟2110中,獲得鏈接信息。所述鏈接信息包含用以鏈接方法所需要的信息,例如卡當前可調(diào)用的例行程序和如何對它們進行引用。鏈接信息可以從外部信源(externalsource)獲得。舉例來說,加載終端可以通過環(huán)球網(wǎng)與具有特定目標智能卡的鏈接信息的知識的中心庫通信。作為從外部源程序獲取鏈接信息的另一實例,加載終端可以從目標智能卡自身獲得所述信息。仍然參看圖21,在步驟2115中,擴充CAP文件分解成一個或多個邏輯APDU。在步驟2120中,將一個或多個邏輯APDU傳輸?shù)街悄芸ǎ⒃贏PDU凈荷上計算認證指紋。步驟2115與步驟2120中的過程類似于上述由主計算機執(zhí)行的圖12中的過程1205和1210,以及下述由目標智能卡執(zhí)行的圖29中的過程2905和圖30中的過程3005。所述過程的相似性確保了如果APDU凈荷保持相同,那么不管執(zhí)行所述計算的實體為何,都創(chuàng)建相同的認證指紋。相反地,如果APDU凈荷在每個實體執(zhí)行計算之間發(fā)生改變,將產(chǎn)生不同的指紋,發(fā)送一凈荷變化信號。仍然參看圖21,當CAP文件視需要包括一個認證指紋時,過程2125適用。如果CAP文件包括一個認證指紋,那么作出關(guān)于從步驟2105中的擴充CAP文件提取的指紋是否與在步驟2120中計算得出的指紋相匹配的判定。如果所述指紋匹配,那么在步驟2130中,從CAP文件提取適合特定目標智能卡的目標智能卡認證碼。在步驟2135中,將指紋、認證碼或這兩者發(fā)送到目標智能卡。在步驟2140中,執(zhí)行初始化指令,并且加載所得到的數(shù)據(jù)。在步驟2145中,從智能卡接收加載證據(jù)。根據(jù)本發(fā)明的一個實施例,加載證據(jù)包含存儲提交指紋(storagecommitmentfingerprint)。如圖21中說明,加載終端將擴充CAP文件分解成邏輯APDU(2115),并且接著在將邏輯APDU傳輸?shù)侥繕酥悄芸?2120)時在邏輯APDU凈荷上計算一個認證指紋。或者,認證指紋的計算可以與分解過程(2115)交錯。作為另一個選擇,APDU至目標智能卡的傳輸和認證指紋的計算兩者可以與分解過程(2115)交錯。如前文所述,由加載終端所接收的擴充CAP文件可以包括驗證數(shù)據(jù)。加載終端還可以接收不含驗證數(shù)據(jù)的CAP文件,計算驗證數(shù)據(jù),創(chuàng)建一個或多個包含數(shù)據(jù)的APDU,并將所述一個或多個APDU發(fā)送到目標智能卡。關(guān)于在認證指紋計算中是否包括驗證數(shù)據(jù)的判定是基于由加載終端所接收的CAP文件是否包括驗證數(shù)據(jù),并且是基于目標智能卡是否需要驗證數(shù)據(jù)。如果所接收的CAP文件包括驗證數(shù)據(jù),那么認證指紋額外在驗證數(shù)據(jù)上計算。如果所接收的CAP文件不包括驗證數(shù)據(jù),那么不在驗證數(shù)據(jù)上計算認證指紋,不管加載終端是否產(chǎn)生被發(fā)送到目標智能卡的驗證數(shù)據(jù)。加載終端還可以接收CAP文件,計算鏈接數(shù)據(jù),創(chuàng)建一個或多個包含數(shù)據(jù)的APDU,并且將所述一個或多個APDU發(fā)送到目標智能卡。圖22至圖27說明根據(jù)本發(fā)明的實施例,從加載終端的角度將一個擴充CAP文件分解成一個或多個邏輯APDU的方法。圖22至圖27為圖21的參考數(shù)字2115提供更多細節(jié)。如前文所述,在圖22至圖27中說明的分解過程之前,待分解的CAP文件的程序元素可以經(jīng)過排序以用于最優(yōu)化驗證和鏈接(圖11的參考數(shù)字1121)。圖22說明將一個擴充CAP文件分解成一個或多個邏輯APDU。圖23說明將一個包括驗證數(shù)據(jù)的擴充CAP文件分解成一個或多個包括含有驗證數(shù)據(jù)的APDU的邏輯APDU。圖24說明將不包括驗證數(shù)據(jù)的擴充CAP文件分解成一個或多個包括含有驗證數(shù)據(jù)的APDU的邏輯APDU。圖25說明將一個擴充CAP文件分解成一個或多個包括含有鏈接數(shù)據(jù)的APDU的邏輯APDU。圖26說明將一個包括驗證數(shù)據(jù)的擴充CAP文件分解成一個或多個包括含有驗證數(shù)據(jù)的APDU和含有鏈接數(shù)據(jù)的APDU的邏輯APDU。圖27說明將一個不包括驗證數(shù)據(jù)的擴充CAP文件分解成一個或多個包括含有驗證數(shù)據(jù)的APDU和含有鏈接數(shù)據(jù)的APDU的邏輯APDU?,F(xiàn)轉(zhuǎn)向圖22,展示了一個說明根據(jù)本發(fā)明的一個實施例,將擴充CAP文件劃分為一個或多個邏輯APDU的方法的流程圖。圖22類似于圖18中所說明的由主計算機執(zhí)行的過程。對每個數(shù)據(jù)包執(zhí)行在框2200內(nèi)說明的過程。在步驟2205中,為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包定義數(shù)據(jù)的數(shù)據(jù)包定義APDU。對每個類別執(zhí)行在框2210內(nèi)說明的過程。在步驟2215中,為一個類別創(chuàng)建一個或多個包含類別定義數(shù)據(jù)的類別定義APDU。在步驟2220中,為所述類別創(chuàng)建一個或多個包含字段定義數(shù)據(jù)的字段定義APDU。對每個方法執(zhí)行在框2225內(nèi)說明的過程。在步驟2230中,為一個方法創(chuàng)建一個或多個包含方法定義數(shù)據(jù)的方法定義APDU。在步驟2235中,為所述方法創(chuàng)建包含方法代碼的一個或多個代碼APDU。在步驟2240中,創(chuàng)建一個或多個數(shù)據(jù)初始化APDU?,F(xiàn)轉(zhuǎn)向圖23,展示了一個說明根據(jù)本發(fā)明的一個實施例,將一個包括驗證數(shù)據(jù)的擴充CAP文件分解成一個或多個包括含有驗證數(shù)據(jù)的APDU的邏輯APDU的方法的流程圖。圖23類似于圖19中說明的由主計算機執(zhí)行的過程。對每個數(shù)據(jù)包執(zhí)行在框2300內(nèi)說明的過程。在步驟2305中,為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包定義數(shù)據(jù)的數(shù)據(jù)包定義APDU。對每個類別執(zhí)行在框2310內(nèi)說明的過程。在步驟2315中,為一個類別創(chuàng)建一個或多個包含類別定義數(shù)據(jù)的類別定義APDU。在步驟2320中,為所述類別創(chuàng)建一個或多個包含字段定義數(shù)據(jù)的字段定義APDU。對每個方法執(zhí)行在框2325內(nèi)說明的過程。在步驟2330中,為一個方法創(chuàng)建一個或多個包含方法定義數(shù)據(jù)的方法定義APDU。在步驟2335中,為所述方法創(chuàng)建一個或多個包含方法代碼的代碼APDU。在步驟2340中,為一個方法創(chuàng)建一個或多個包括方法驗證數(shù)據(jù)的方法初始化APDU。在步驟2345中,為一個類別創(chuàng)建一個或多個包含類別驗證數(shù)據(jù)的類別驗證APDU。在步驟2350中,創(chuàng)建一個或多個數(shù)據(jù)初始化APDU。在步驟2355中,為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包驗證數(shù)據(jù)的數(shù)據(jù)包驗證APDU?,F(xiàn)轉(zhuǎn)向圖24,展示了一個說明根據(jù)本發(fā)明的一個實施例,將一個不包括驗證數(shù)據(jù)的擴充CAP文件分解成一個或多個包括含有驗證數(shù)據(jù)的APDU的邏輯APDU的方法的流程圖。圖24類似于圖23,但是在圖24中,計算驗證數(shù)據(jù)(2440、2445、2455),而在圖23中,從擴充CAP文件中提取用于創(chuàng)建一個或多個驗證APDU(2340、2345、2355)的驗證數(shù)據(jù)。對每個數(shù)據(jù)包執(zhí)行在框2400內(nèi)說明的過程。在步驟2405中,為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包定義數(shù)據(jù)的數(shù)據(jù)包定義APDU。對每個類別執(zhí)行框2410內(nèi)說明的過程。在步驟2415中,為一個類別創(chuàng)建一個或多個包含類別定義數(shù)據(jù)的類別定義APDU。在步驟2420中,為所述類別創(chuàng)建一個或多個包含字段定義數(shù)據(jù)的字段定義APDU。對每個方法執(zhí)行在框2425內(nèi)說明的過程。在步驟2430中,為一個方法創(chuàng)建一個或多個包含方法定義數(shù)據(jù)的方法定義APDU。在步驟2435中,為所述方法創(chuàng)建一個或多個包含方法代碼的代碼APDU。在步驟2440中,計算方法驗證數(shù)據(jù),并為一個方法創(chuàng)建一個或多個包含方法驗證數(shù)據(jù)的方法驗證APDU。在步驟2445中,計算類別驗證數(shù)據(jù),并為一個類別創(chuàng)建一個或多個包含類別驗證數(shù)據(jù)的類別驗證APDU。在步驟2450中,創(chuàng)建一個或多個數(shù)據(jù)初始化APDU。在步驟2455中,計算數(shù)據(jù)包驗證數(shù)據(jù),并為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包驗證數(shù)據(jù)的數(shù)據(jù)包驗證APDU?,F(xiàn)轉(zhuǎn)向圖25,其展示了一個說明根據(jù)本發(fā)明的一個實施例將一個擴充CAP文件分解成一個或多個邏輯APDU的方法的流程圖,所述邏輯APDU包括多個含有鏈接數(shù)據(jù)的APDU。圖25類似于圖22,但是在圖25中創(chuàng)建了每方法(per-method)鏈接APDU(2540)。對每個數(shù)據(jù)包執(zhí)行框2500內(nèi)所說明的過程。在步驟2505申,為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包定義數(shù)據(jù)的數(shù)據(jù)包定義APDU。對每個類別執(zhí)行框2510內(nèi)所說明的過程。在步驟2515中,為一個類別創(chuàng)建一個或多個包含類別定義數(shù)據(jù)的類別定義APDU。在步驟2520中,為所述類別創(chuàng)建一個或多個包含字段定義數(shù)據(jù)的字段定義APDU。對每個方法執(zhí)行框2525內(nèi)所說明的過程。在步驟2530中,為一個方法創(chuàng)建一個或多個包含方法定義數(shù)據(jù)的方法定義APDU。在步驟2535中,為所述方法創(chuàng)建一個或多個包含方法代碼的代碼APDU。在步驟2540中,創(chuàng)建每方法鏈接APDU。在步驟2545中,創(chuàng)建一個或多個數(shù)據(jù)初始化APDU?,F(xiàn)轉(zhuǎn)向圖26,其展示了一個說明根據(jù)本發(fā)明的一個實施例將一個包括驗證數(shù)據(jù)的擴充CAP文件分解成一個或多個邏輯APDU的方法的流程圖,所述邏輯APDU包括含有驗證數(shù)據(jù)的APDU和含有鏈接數(shù)據(jù)的APDU。圖26代表圖23和圖25的結(jié)合。對每個數(shù)據(jù)包執(zhí)行框2600內(nèi)所說明的過程。在步驟2605中,為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包定義數(shù)據(jù)的數(shù)據(jù)包定義APDU。對每個類別執(zhí)行框2610內(nèi)所說明的過程。在步驟2615中,為一個類別創(chuàng)建一個或多個包含類別定義數(shù)據(jù)的類別定義APDU。在步驟2620中,為所述類別創(chuàng)建一個或多個包含字段定義數(shù)據(jù)的字段定義APDU。對每個方法執(zhí)行框2625內(nèi)所說明的過程。在步驟2630中,為一個方法創(chuàng)建一個或多個包含方法定義數(shù)據(jù)的方法定義APDU。在步驟2635中,為所述方法創(chuàng)建一個或多個包含方法代碼的代碼APDU。在步驟2640中,為一個方法創(chuàng)建一個或多個包含方法驗證數(shù)據(jù)的方法驗證APDU。在步驟2645中,創(chuàng)建每方法鏈接APDU。在步驟2650中,為一個類別創(chuàng)建一個或多個包含類別驗證數(shù)據(jù)的類別驗證APDU。在步驟2655中,創(chuàng)建一個或多個數(shù)據(jù)初始化APDU。在步驟2660中,為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包驗證數(shù)據(jù)的數(shù)據(jù)包驗證APDU?,F(xiàn)轉(zhuǎn)向圖27,展示了一個說明根據(jù)本發(fā)明的一個實施例,將一個不包括驗證數(shù)據(jù)的擴充CAP文件分解成一個或多個包括含有驗證數(shù)據(jù)的APDU和含有鏈接數(shù)據(jù)的APDU的邏輯APDU的方法的流程圖。圖27代表圖24和圖25的結(jié)合。對每個數(shù)據(jù)包執(zhí)行在框2700內(nèi)說明的過程。在步驟2705中,為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包定義數(shù)據(jù)的數(shù)據(jù)包定義APDU。對每個類別執(zhí)行框2710內(nèi)說明的過程。在步驟2715中,為一個類別創(chuàng)建一個或多個包含類別定義數(shù)據(jù)的類別定義APDU。在步驟2720中,為所述類別創(chuàng)建一個或多個包含字段定義數(shù)據(jù)的字段定義APDU。對每個方法執(zhí)行在框2725內(nèi)說明的過程。在步驟2730中,為一個方法創(chuàng)建一個或多個包含方法定義數(shù)據(jù)的方法定義APDU。在步驟2735中,為所述方法創(chuàng)建一個或多個包含方法代碼的代碼APDU。在步驟2740中,計算方法驗證數(shù)據(jù),并為一個方法創(chuàng)建包含一個或多個方法驗證數(shù)據(jù)的方法驗證APDU。在步驟2745中,創(chuàng)建每方法鏈接APDU。在步驟2750中,計算類別驗證數(shù)據(jù),并為一個類別創(chuàng)建一個或多個包含類別驗證數(shù)據(jù)的類別驗證APDU。在步驟2755中,創(chuàng)建一個或多個數(shù)據(jù)初始化APDU。在步驟2760中,計算數(shù)據(jù)包驗證數(shù)據(jù),并為一個數(shù)據(jù)包創(chuàng)建一個或多個包含數(shù)據(jù)包驗證數(shù)據(jù)的數(shù)據(jù)包驗證APDU?,F(xiàn)轉(zhuǎn)向圖28,展示了一個說明根據(jù)本發(fā)明的一個實施例,創(chuàng)建一個或多個方法鏈接APDU的方法的流程圖。圖28為圖25的參考數(shù)字2540、圖26的參考數(shù)字2645和圖27的參考數(shù)字2745提供更多細節(jié)。在步驟2800中,基于來自卡的信息和邏輯存儲器布局計算可驗證鏈接指令。如上文中關(guān)于圖21的參考數(shù)字2110所述,加載終端可以已經(jīng)預(yù)先獲得此信息。在步驟2805中,創(chuàng)建包括可驗證鏈接指令的鏈接APDU。智能卡現(xiàn)轉(zhuǎn)向圖29,展示了一個說明根據(jù)本發(fā)明的一個實施例,從智能卡的角度從加載終端傳送程序數(shù)據(jù)到智能卡的方法的流程圖。圖29為圖10的參考數(shù)字1050至1065和圖11的參考數(shù)字1140至1150提供額外的細節(jié)。在步驟2900中,執(zhí)行加載初始化。在步驟2905中,處理一個或多個邏輯APDU,以在其字段中準備數(shù)據(jù)用于加載。所述處理包含計算一個認證指紋。在步驟2910中,接收一個認證指紋APDU?;蛘?,可以接收認證指紋作為加載初始化(2600)的一部分,或作為處理APDU(2605)的一部分。仍然參看圖29,在步驟2915中,作出關(guān)于所接收的認證指紋是否與在步驟2905中計算出的認證指紋相匹配的判定。如果所接收的認證指紋與所計算出的認證指紋不匹配,那么在步驟2945中給出一個故障指示。如果所接收的認證指紋與所計算出的認證指紋相匹配,那么在步驟2920中接收目標智能卡認證碼,并在步驟2925中基于目標智能卡認證碼執(zhí)行認證。在步驟2930中,作出關(guān)于認證是否成功的判定。如果認證不成功,那么在步驟2945中作出故障指示。如果認證成功,那么在步驟2935中將程序數(shù)據(jù)提交到智能卡存儲器,并在步驟2940中提供加載證據(jù)??梢酝ㄟ^使程序數(shù)據(jù)與在最終存儲的程序數(shù)據(jù)上計算出的存儲提交指紋相關(guān)聯(lián)來將程序數(shù)據(jù)提交到智能卡存儲器。根據(jù)本發(fā)明的一個實施例,加載證據(jù)包含存儲提交指紋。根據(jù)本發(fā)明的另一個實施例,加載證據(jù)包含一個至少部分地基于存儲提交指紋的認證碼?,F(xiàn)轉(zhuǎn)向圖30,展示了一個說明根據(jù)本發(fā)明的一個實施例,使用一個HMAC認證指紋從智能卡的角度從加載終端傳送程序數(shù)據(jù)到智能卡的方法的流程圖。圖30類似于圖29,但是圖29中的判定2930和2915等同于圖30中的判定3015。由于HMAC既是指紋又是信息認證碼,所以當所接收的認證指紋與所計算出的認證指紋相匹配時,可將程序數(shù)據(jù)傳送到智能卡存儲器。在步驟3000中,執(zhí)行加載初始化。在步驟3005中,處理一個或多個邏輯APDU,以在其數(shù)據(jù)字段中準備數(shù)據(jù)用于加載。所述處理包含計算一個認證指紋。在步驟3010中,接收一個認證指紋APDU?;蛘?,可以接收認證指紋作為加載初始化(2600)的一部分,或作為處理APDU(2605)的一部分。仍然參看圖30,在步驟3015中,作出關(guān)于所接收的認證指紋是否與在步驟3005中所計算出的認證指紋相匹配的判定。如果所接收的認證指紋與所計算出的認證指紋不匹配,那么在步驟3030中給出一個故障指示。如果所接收的認證指紋與所計算出的認證指紋相匹配,那么在步驟3020中將程序數(shù)據(jù)提交到智能卡存儲器,并在步驟3025中提供加載證據(jù)。可以通過使程序數(shù)據(jù)與在最終存儲的程序數(shù)據(jù)上計算的存儲提交指紋相關(guān)聯(lián)來將程序數(shù)據(jù)提交到智能卡存儲器。根據(jù)本發(fā)明的一個實施例,加載證據(jù)包含存儲提交指紋。根據(jù)本發(fā)明的另一個實施例,加載證據(jù)包含一個至少部分地基于存儲提交指紋的認證碼。現(xiàn)轉(zhuǎn)向圖31,展示了一個說明根據(jù)本發(fā)明的一個實施例,執(zhí)行加載初始化的方法的流程圖。圖31為圖29的參考數(shù)字2900和圖30的參考數(shù)字3000提供更多細節(jié)。在步驟3100中,接收加載請求。在步驟3105中,認證該請求以判定是否應(yīng)該進行加載過程。在步驟3110中,作出關(guān)于步驟3105中的認證是否成功的判定。如果認證不成功,那么此過程在步驟3130中以失敗告終。如果認證成功,那么在步驟3115中基于卡和待加載的程序數(shù)據(jù)的已知特征,校驗加載參數(shù)以判定加載是否能夠成功。舉例來說,如果卡具有少于待加載的程序數(shù)據(jù)所需要的存儲器,那么作出加載將失敗的指示。此外,如果待加載的程序數(shù)據(jù)需要不存在于卡上并且不是待加載的程序數(shù)據(jù)的一部分的類別,那么作出加載將失敗的指示。在步驟3120中,基于過程3115的結(jié)果,作出關(guān)于加載是否能成功的判定。如果加載能夠成功,那么在步驟3125中作出加載準備。例示性準備包括初始化一個或多個認證指紋和一個或多個存儲提交指紋。如果加載不能夠成功,那么加載過程在步驟3130中以失敗告終。或者,可以交換過程3105和3115的次序,使得在過程3105之前執(zhí)行過程3115。然而,如果過程3105和3115都失敗了,那么加載初始化在步驟3130中以失敗告終?,F(xiàn)轉(zhuǎn)向圖32,展示了一個說明根據(jù)本發(fā)明的一個實施例,處理APDU流的方法的流程圖。圖32為圖29的參考數(shù)字2905和圖30的參考數(shù)字3005提供更多細節(jié)。在步驟3200中,接收一個邏輯APDU。在步驟3205中,預(yù)處理該邏輯APDU。舉例而言,如果當前APDU是另一程序單元的第一APDU,那么所述預(yù)處理可以包括結(jié)束前一程序單元的處理。所述預(yù)處理還可以包括(例如)解密。預(yù)處理的結(jié)果是關(guān)于邏輯APDU是否有效的指示。在步驟3210中,作出關(guān)于邏輯APDU是否有效的判定。如果邏輯APDU無效,那么在步驟3215中中斷加載。如果邏輯APDU有效,那么在步驟3210中計算認證指紋,并在步驟3225中處理接收到的邏輯APDU,以在邏輯APDU數(shù)據(jù)字段中準備數(shù)據(jù)用于存儲。所述理可以包括(例如)解析對其它程序單元的引用。在步驟3230中,作出關(guān)于是否需要所存儲的結(jié)果的判定。某些APDU可以不需要持久存儲。舉例來說,僅僅包括關(guān)于在先或后繼的APDU的信息的APDU可無需持久存儲。如果需要所存儲的結(jié)果,那么在步驟3225中存儲結(jié)果。在步驟3240中,使用先前計算出的存儲提交指紋的結(jié)果,在所存儲的結(jié)果上計算存儲提交指紋?,F(xiàn)轉(zhuǎn)向圖33,展示了一個說明本發(fā)明的一個實施例,計算認證指紋的方法的流程圖。圖33為圖32的參考數(shù)字3220提供更多細節(jié)。在步驟3300中,作出關(guān)于APDU是否為鏈接APDU的判定。如果APDU不是鏈接APDU,那么在步驟3305中作出關(guān)于APDU是否為驗證APDU的判定。如果APDU是驗證APDU,那么在步驟3310中作出關(guān)于驗證APDU是否為驗證指紋的一部分的判定。如果APDU不是鏈接APDU或驗證APDU,或如果APDU是驗證APDU并且驗證APDU是認證指紋的一部分,那么在步驟3315中,使用預(yù)先計算出的認證指紋的結(jié)果在邏輯APDU凈荷上計算認證指紋。如圖32中說明,邏輯APDU的接收(3200)與認證指紋的計算(3220)和存儲提交指紋的計算(3240)交錯?;蛘撸悄芸梢越邮找粋€或多個邏輯APDU,并接著在一個或多個所接收到的APDU上計算認證指紋和存儲提交指紋。現(xiàn)轉(zhuǎn)向圖34,展示了一個說明根據(jù)本發(fā)明的一個實施例,處理邏輯APDU的方法的流程圖。圖34為圖32的參考數(shù)字3225提供了更多細節(jié)。在步驟3400中,接受驗證信息。在步驟3405中,驗證信息用于驗證一個邏輯APDU。在步驟3410中,作出關(guān)于邏輯APDU是否被成功地驗證的判定。如果邏輯APDU被成功驗證,則在步驟3415中接受鏈接信息,并且在步驟3420中,將鏈接信息用于鏈接。虛擬方法跳轉(zhuǎn)表關(guān)于圖7所述的數(shù)據(jù)結(jié)構(gòu)說明與靜態(tài)方法或具有單一調(diào)用地址的方法的鏈接。例如JavaTM語言的面向?qū)ο笳Z言支持虛擬方法,或可能具有多份復(fù)制的方法。在JavaTM語言中,可以在一個類別中聲明(declare)一個虛擬方法,并且所述類別的一個子類別可以用虛擬方法的其自身的實例覆蓋(override)或取代該虛擬方法。所述子類別的一個實例將引用在子類別中被覆蓋的方法的版本,而所述類別的實例將引用在所述類別中聲明的虛擬方法。根據(jù)本發(fā)明的一個實施例,鏈接虛擬方法的能力是通過為每個關(guān)于經(jīng)過至少一次覆蓋的虛擬方法創(chuàng)建一個跳轉(zhuǎn)表來提供。所述跳轉(zhuǎn)表包括一個虛擬方法的每個實例的地址。對象構(gòu)造函數(shù)被重寫以接受一個“類型”參數(shù),構(gòu)造函數(shù)調(diào)用被重寫以提供類型信息,并且虛擬方法程序調(diào)用被重寫以包括關(guān)于所調(diào)用的對象的當前類型的指示。當前類型的指示被用作對相應(yīng)虛擬方法跳轉(zhuǎn)表的索引,其中獲得適當虛擬方法代碼的地址。下文中將參考圖35至圖37做更詳細的描述?,F(xiàn)轉(zhuǎn)向圖35,展示了根據(jù)本發(fā)明的一個實施例,用于連接包括虛擬方法的程序的數(shù)據(jù)結(jié)構(gòu)。如圖35中所示,子類別N(3505)擴展類別M(3500)并且不覆蓋方法A(3525)或B(3530)。子類別O(3510)擴展類別M(3500)并且覆蓋方法A(3525)。對方法O.A(3550)的任何調(diào)用實際上調(diào)用方法O.A(3550),而不是方法M.A(3525)。跳轉(zhuǎn)表3320由類別實例數(shù)據(jù)中的類型標識符的值索引。跳轉(zhuǎn)表3520的每個條目包括對應(yīng)于所述索引的虛擬方法實例的地址,因為一個類別中的每個虛擬方法具有至少一個實例。對已經(jīng)被覆蓋的方法M.A(3525)的每次調(diào)用包括一個類型指示符。類別指示符被用作跳轉(zhuǎn)表3320中的一個索引,以獲得對應(yīng)于該虛擬方法實例的代碼的地址。子類別N(3505)和子類別O(3510)中的調(diào)用被重寫以用類型指示符進行調(diào)用。在將程序加載到智能卡上之前,例如當產(chǎn)生擴充CAP文件時,所述調(diào)用可由主計算機或加載終端進行重寫。或者,所述調(diào)用可以由加載終端進行重寫。在已加載程序數(shù)據(jù)之后,目標智能卡還可以重寫所述調(diào)用。從所調(diào)用的對象3515中的“對象當前類型”字段3345獲得類型標識符。因此,可以通過為每個子類型和每個方法給定一個類型標識符,使適當虛擬方法實例的搜索更確定。通過使用圖35中說明的實例,當類別“M”(3500)或類別“N”(3505)對象被實例化時,用值為0的類型標識符來實例化這兩個對象。當“O”(3510)對象被實例化時,與所述實例相關(guān)聯(lián)的類型標識符的值是1。當對象“O”(3510)調(diào)用虛擬方法時,類型標識符被用作對跳轉(zhuǎn)表3520的索引,以判定調(diào)用哪一個虛擬方法實例,由此消除執(zhí)行對適當虛擬方法實例的窮盡搜索的需要?,F(xiàn)轉(zhuǎn)向圖36,展示了說明根據(jù)本發(fā)明的一個實施例,修改具有鏈接數(shù)據(jù)以解析動態(tài)引用的存儲程序的方塊圖。圖36類似于圖7,但是圖36包括用于每個具有至少一個虛擬方法實例的虛擬方法的跳轉(zhuǎn)表(3676、3680、3682)之外。參考卡存儲器3600,用于方法A1A(3602)、A2A(3612)和B2A(3628)的代碼分別包括對虛擬方法A1C(3608)、B1A(3602)和B1D(3626)的調(diào)用。參考被修改的卡存儲器3650,用于方法A1A(3652)、A2A(3660)和B2A(3674)的代碼被修改,以引用與被調(diào)用的虛擬方法(3676、3680、3682)相關(guān)聯(lián)的跳轉(zhuǎn)表和被調(diào)用的對象的類型指示符?,F(xiàn)轉(zhuǎn)向圖37,展示了一個說明根據(jù)本發(fā)明的一個實施例,修改具有鏈接數(shù)據(jù)以解析動態(tài)引用的存儲程序的流程圖。在步驟3700中,接收一個程序。在步驟3705中,列舉在所述程序中的類別。對每個類別執(zhí)行框3710。在步驟3720中,對象構(gòu)造函數(shù)(objectconstructor)調(diào)用被重寫,以提供類型信息。在步驟3725中,對象構(gòu)造函數(shù)被重寫,以接受一個“類型”參數(shù)。對一個類別中的每個虛擬方法執(zhí)行框3715。在步驟3730中,作出關(guān)于虛擬方法是否已經(jīng)被所述虛擬方法實例覆蓋的判定。如果所述虛擬方法已被覆蓋,則在步驟3735中,為具有至少一個虛擬方法實例的虛擬方法創(chuàng)建一個虛擬方法跳轉(zhuǎn)表。在步驟3740中,重寫對虛擬方法的程序調(diào)用,以引用與被調(diào)用的虛擬方法相關(guān)聯(lián)的跳轉(zhuǎn)表和被調(diào)用的對象的類型指示符。如果所述虛擬方法尚未被覆蓋,那么所述虛擬方法可以以與靜態(tài)方法相同的方式進行鏈接。根據(jù)本發(fā)明的一個實施例,對經(jīng)過至少一次覆蓋的虛擬方法的調(diào)用被一個調(diào)用指令所取代,其中所述調(diào)用指令使用被調(diào)用的對象的類型指示符作為對位于帶調(diào)用指令的指令流內(nèi)聯(lián)(inline)中的表的索引。程序單元存儲提交指紋根據(jù)本發(fā)明的實施例,一個程序單元存儲提交指紋與程序單元相關(guān)聯(lián)。程序單元存儲提交指紋可以用于指示程序單元的提交。換句話來說,程序單元存儲提交指紋可以用于指示已被最終加載到目標智能卡上的程序單元。程序單元存儲提交指紋還可以被用于指示所述程序單元數(shù)據(jù)是否已被竄改又或者不適合于執(zhí)行。程序單元存儲提交指紋在程序單元數(shù)據(jù)上計算,并在程序單元被最終存儲于永久可變存儲器中并準備投入使用時與程序單元相關(guān)聯(lián)。程序單元存儲提交指紋可以被存儲于與相關(guān)程序數(shù)據(jù)毗鄰的存儲器區(qū)域中?;蛘?,對程序單元提交指紋的引用可以與相關(guān)程序數(shù)據(jù)一起存儲。另一選擇是,程序單元可以以表格形式存儲,其中每個條目包括一個存儲單元和相應(yīng)的指紋。所屬領(lǐng)域的技術(shù)人員將了解,用于使程序單元與提交指紋相關(guān)聯(lián)的其它技術(shù)也是可以的。在使用程序單元之后,將最初與程序單元相關(guān)聯(lián)的程序單元存儲提交指紋與在程序單元數(shù)據(jù)上計算一個存儲提交指紋的結(jié)果相比。失配則表示所述程序單元數(shù)據(jù)已經(jīng)被竄改又或者不適于執(zhí)行。一個程序單元可以包含任何邏輯程序結(jié)構(gòu)。以JavaTM技術(shù)為例,一個程序單元可以包含一個數(shù)據(jù)包、類別、方法或其任何組合。此外,一個程序單元可以被存儲于非毗鄰的存儲器中。根據(jù)本發(fā)明的一個實施例,程序單元的“使用”包含執(zhí)行程序單元。根據(jù)本發(fā)明的另一實施例,程序單元的“使用”包含至少部分地基于所述程序單元創(chuàng)建另一程序單元的實例。以JavaTM技術(shù)為例,程序單元的“使用”可以包含對象實例化(objectinstantiation)。根據(jù)本發(fā)明的另一實施例,程序單元的“使用”包含讀取程序單元數(shù)據(jù)。分級程序單元存儲提交指紋根據(jù)本發(fā)明的實施例,一個較高級程序單元的存儲提交指紋可以至少部分地基于一個較低級程序單元的至少一個存儲提交指紋。下文中將就圖38加以說明?,F(xiàn)轉(zhuǎn)向圖38,展示了一個說明根據(jù)本發(fā)明的一個實施例的程序單元提交指紋的層次的方塊圖。參考數(shù)字3800至3808代表類別;參考數(shù)字3810至3812代表數(shù)據(jù)包,并且參考數(shù)字3814代表包含一個或多個數(shù)據(jù)包的加載。類別存儲提交指紋3818至3826通過計算分別在類別3800至3808中的類級數(shù)據(jù)上的指紋,和分別在類別3800至3808中的方法存儲提交指紋的集合而形成。數(shù)據(jù)包存儲提交指紋3828至3830通過計算分別在類別3810至3812中的類級數(shù)據(jù)上的指紋,和分別在類別3810至3812中類別存儲提交指紋的集合而形成。加載存儲提交指紋3816通過計算在加載3814中的數(shù)據(jù)包存儲提交指紋的集合上的指紋而形成?;蛘?,較高級程序單元的一個或多個存儲提交指紋可以基于一個較低級程序單元的數(shù)據(jù)。以JavaTM技術(shù)為例,一個類別存儲提交指紋可以基于屬于所述類別的方法的類級數(shù)據(jù)和方法級數(shù)據(jù)?,F(xiàn)轉(zhuǎn)向圖39,展示了一個說明根據(jù)本發(fā)明的一個實施例的包括程序碼和程序單元提交指紋的數(shù)據(jù)結(jié)構(gòu)的方塊圖。卡存儲器3900包含一個用于一個包含數(shù)據(jù)包“A”3904和數(shù)據(jù)包“B”3906的加載單元3902的存儲區(qū)域。數(shù)據(jù)包3904和3906分別包含類別3908-3910和3912-3914。類別3908、3910、3912和3914分別包含方法3916-3922、3924-3926、3928-3934和3936-3938。方法存儲提交指紋3940-3964分別在方法代碼3916-3938上加以計算。類別存儲提交指紋3966、3968、3970和3972分別在方法存儲提交指紋3940-3946、3948-3950、3954-3960和3962-3964上加以計算。類別存儲提交指紋3966、3968、3970和3972還可以在為各類別的一部分的任何字段定義和初始化靜態(tài)數(shù)據(jù)上加以計算。數(shù)據(jù)包存儲提交指紋3974和3976分別在類別存儲提交指紋3966-3968和3970-3972上加以計算。加載單元存儲提交指紋3978在數(shù)據(jù)包存儲提交指紋3974和3976上加以計算?,F(xiàn)轉(zhuǎn)向圖40,展示了一個說明根據(jù)本發(fā)明的一個實施例包括程序碼和加載存儲提交指紋的數(shù)據(jù)結(jié)構(gòu)的方塊圖。圖40類似于圖39,但是圖40不包括類別存儲提交指紋或數(shù)據(jù)包存儲提交指紋。加載單元存儲提交指紋4042在數(shù)據(jù)包“A”4004和數(shù)據(jù)包“B”4006中所存儲的方法代碼4016-4040上加以計算。運行時間完整性校驗根據(jù)本發(fā)明的實施例,程序單元提交指紋用于校驗一個程序單元在運行時間下的完整性。圖41和圖42說明此運行時間完整性校驗的一般情況。圖43和44說明本發(fā)明的使用一個分派機制來執(zhí)行運行時間完整性校驗的實施例。圖41是一個說明用于根據(jù)本發(fā)明的一個實施例使用程序單元提交指紋來判定是否可使用一個程序單元的流程圖。在步驟4100中,接收一程序單元的使用請求。根據(jù)本發(fā)明的一個實施例,“使用”包含至少部分地基于該程序單元創(chuàng)建一個實例。根據(jù)本發(fā)明的另一個實施例,“使用”包含執(zhí)行程序單元代碼。根據(jù)本發(fā)明的另一個實施例,“使用”包含讀取程序單元數(shù)據(jù)。根據(jù)本發(fā)明的實施例,一個程序單元可以是一個程序、數(shù)據(jù)包、類別、方法、實例變量或類別變量。然而,關(guān)于JavaTM技術(shù)的程序單元的說明不欲以任何方式作為限制性的。所屬領(lǐng)域的技術(shù)人員將了解,一個程序可以以許多方式加以劃分。仍然參看圖41,在步驟4105中,作出關(guān)于在當前會話中是否是第一次接收到所述程序單元使用請求的判定。如果在當前會話中所述程序單元使用請求已不是第一次接收,那么在步驟4130中使用已經(jīng)存儲的關(guān)于程序單元數(shù)據(jù)有效性的判定。如果在當前會話中所述程序單元使用請求是第一次被接收到,那么在步驟4135中作出在當前會話中已經(jīng)使用該程序單元的指示。在步驟4110中,作出關(guān)于所存儲的程序單元數(shù)據(jù)是否有效的判定。在步驟4115中,校驗此判定的結(jié)果。如果所存儲的程序單元數(shù)據(jù)無效,那么在步驟4120中作出一個故障指示。如果所存儲的程序單元數(shù)據(jù)有效,那么在步驟4125中使用所述程序單元。根據(jù)本發(fā)明的另一個實施例,接收到程序單元的使用請求時,判定所存儲的程序單元的有效性,而不考慮在當前會話期間是否先前接收到同一程序單元的使用請求。根據(jù)本發(fā)明的一個實施例,一個指紋裝置被配置成用于計算認證指紋、程序存儲提交指紋或其兩者。根據(jù)本發(fā)明的另一個實施例,一個指紋裝置包含計算存儲提交指紋的計算單元。所述計算單元被鏈接到專用于存儲提交數(shù)據(jù)的存儲器。所述計算單元可以與包含所述存儲器的存儲器裝置成為一體?;蛘?,所述計算單元可以是一個與包含所述存儲器的存儲器裝置通信的獨立裝置。根據(jù)本發(fā)明的一個實施例,所述計算單元被配置成在檢測到一個對存儲器的寫入操作時自動且增量地計算用于存儲器的指紋。根據(jù)本發(fā)明的一個實施例,所述計算單元被配置成在使用存儲器中的數(shù)據(jù)之前(例如在檢測到對存儲器的讀取操作時)自動且增量地計算用于存儲器的指紋。舉例來說,在接收到對存儲在由一個存儲器范圍指定的存儲器地址處的數(shù)據(jù)的讀取請求時,所述計算單元在存儲在由存儲器范圍指定的存儲器地址處的數(shù)據(jù)之上計算指紋?,F(xiàn)轉(zhuǎn)向圖42,展示了一個說明根據(jù)本發(fā)明的一個實施例,判定存儲程序單元數(shù)據(jù)是否有效的方法的流程圖。圖42為圖41的參考數(shù)字4110提供了更多細節(jié)。在步驟4200中,在程序單元數(shù)據(jù)上計算指紋。在步驟4205中,作出關(guān)于計算出的指紋是否與所存儲的指紋相匹配的判定。如果計算出的指紋與所存儲的指紋不相匹配,那么在步驟4210中作出所存儲的程序單元數(shù)據(jù)無效的指示。如果所計算的指紋與所存儲的指紋相匹配,那么在步驟4215中作出所存儲的程序單元數(shù)據(jù)有效的指示。分派表在本發(fā)明的上下文中,術(shù)語“網(wǎng)關(guān)分派器”被定義成一個被配置成在調(diào)用所述方法之前判定一個被調(diào)用的方法的可執(zhí)行代碼是否有效的程序單元。一個網(wǎng)關(guān)分派器可以是一個虛擬機的一部分或一個較低級例行程序。根據(jù)本發(fā)明的實施例,與被調(diào)用的例行程序的鏈接可以為硬編碼的。根據(jù)本發(fā)明的其它實施例,與一個保護單元相關(guān)聯(lián)的分派表包括由保護單元保護的方法的條目。一個保護單元中的方法的調(diào)用程序通過引用保護單元和表中的索引來調(diào)用所述方法。在調(diào)用所述方法之前,所述參考判定一個被調(diào)用的方法的可執(zhí)行代碼是否有效(已經(jīng)被驗證)。如果保護單元分派表已被加載但保護單元尚未被驗證,那么一個網(wǎng)關(guān)分派器驗證保護單元。如果保護單元分派表尚未被加載,那么網(wǎng)關(guān)分派器加載分派表并驗證保護單元。下文中將參考圖43和圖44做更詳細的闡釋?,F(xiàn)轉(zhuǎn)向圖43,展示了一個說明根據(jù)本發(fā)明的一個實施例,被配置成確保一個被調(diào)用的方法在執(zhí)行之前已經(jīng)被驗證的智能卡的方塊圖。圖43說明用于實施先前關(guān)于圖41的參考數(shù)字4125而論述的“使用程序單元”過程的數(shù)據(jù)結(jié)構(gòu)。根據(jù)本發(fā)明的一個實施例,在加載時間預(yù)先計算一個類別或數(shù)據(jù)包的入口點。所述入口點觸發(fā)一個測試來判定被調(diào)用的方法是否已經(jīng)被驗證。通過重寫含有對所述方法的調(diào)用的代碼來將調(diào)用鏈接到這些入口點。如圖43中所示,一個保護單元中的每一個可調(diào)用的例行程序有一個分派表條目。每一個條目包括一個校驗位和一個例行程序地址。一旦被初始化,一個保護單元內(nèi)的方法或例行程序可以彼此調(diào)用。調(diào)用保護單元外部的方法是通過一個分派表(4300、4305、4310)來達成這個目的。如果對應(yīng)于被調(diào)用的例行程序的分派表條目的校驗位指示一個校驗狀態(tài),那么分派表條目的例行程序地址用于調(diào)用所述例行程序。如果校驗位指示一個未校驗狀態(tài),那么執(zhí)行對所述代碼的驗證。在一個非永久可變存儲器(例如RAM4345)中存儲分派表(4300、4305、4310)并使值0與一個未驗證狀態(tài)相關(guān)聯(lián)確保了在初始化時所述校驗位指示一個未驗證狀態(tài)。換句話來說,確保程序代碼的驗證是基于會話的,因為在每個會話之后RAM1345的內(nèi)容將遭破壞且下一會話將從指示未驗證狀態(tài)的校驗位開始。每個條目具有一個校驗位允許所述表是毗鄰的;引用一個條目僅需要所述表的基地址和一個偏移量(offset)。此外,每個條目包括一個校驗位,因為對應(yīng)的例行程序可以是待被調(diào)用的保護單元內(nèi)的第一個例行程序。根據(jù)本發(fā)明的一個實施例,校驗位包含最高有效位,并且方法地址包含分派表條目的最低有效位。如果網(wǎng)關(guān)分派器讀取指示一個未校驗狀態(tài)的校驗位值,那么分派表條目的最低有效位用于調(diào)用例行程序。這個機制消除了對用于獲取方法地址的第二存儲器存取的需要。根據(jù)本發(fā)明的另一實施例,每個表具有一個指示所述表是否被有效初始化的每表(per-table)校驗位。每個表條目包含一個方法地址。根據(jù)本發(fā)明的一個實施例,保護單元是針對每個數(shù)據(jù)包的。根據(jù)本發(fā)明的另一個實施例,保護單元是針對每個類別的。根據(jù)本發(fā)明的另一個實施例,保護單元是針對每個方法的。根據(jù)本發(fā)明的另一個實施例,由保護單元保護的程序單元對應(yīng)于一個存儲提交指紋中所包括的程序單元。舉例來說,如果存儲提交指紋在一個類別中的方法上加以計算,那么保護單元是針對每個類別的。作為另一個實例,如果存儲提交指紋在一個數(shù)據(jù)包中的類別上加以計算,那么保護單元是針對每個數(shù)據(jù)包的。下一個基于RAM的分派表的地址以及用于其它加載單元的分派表的當前數(shù)目和尺寸是卡能為上文中關(guān)于圖21的參考數(shù)字2110而提及的鏈接過程提供的信息類型的實例。根據(jù)本發(fā)明的實施例,程序代碼被重寫,以替代對在具有對網(wǎng)關(guān)分派器的調(diào)用的保護單元外部的例行程序的調(diào)用。根據(jù)本發(fā)明的一個實施例,當創(chuàng)建CAP文件時,在轉(zhuǎn)換時間重寫代碼。根據(jù)本發(fā)明的另一實施例,在CAP文件分解時間重寫代碼。根據(jù)本發(fā)明的另一個實施例,代碼在加載時間或在目標智能卡中的鏈接時間被重寫。當對保護單元外部的例行程序進行調(diào)用時,必須判定是否也校驗所調(diào)用的區(qū)域。網(wǎng)關(guān)分派器檢查屬于被調(diào)用的方法的表,以判定其是否可以直接跳至例行程序,或者所調(diào)用的例行程序是否必須首先加以驗證。在圖43中說明的實例中,為0的校驗位值用于指示一個未校驗狀態(tài)。在這種情況下,0值可以指示條目已壞。其還可以指示所述條目是有效的但是代碼尚未被驗證。因此,如果校驗位具有一個指示未校驗狀態(tài)的值,那么從例如EEPROM的永久可變存儲器獲得分派表模板,并且被調(diào)用的例行程序得到驗證。下文中將參看圖44有更詳細的展示?,F(xiàn)轉(zhuǎn)向圖44,展示了一個說明根據(jù)本發(fā)明的一個實施例,用于確保被調(diào)用的方法在執(zhí)行之前已經(jīng)得到驗證的方法的流程圖。圖44假定程序代碼已經(jīng)被重寫,使得在保護單元之間的調(diào)用已經(jīng)被對網(wǎng)關(guān)分派器的調(diào)用所取代。圖44還假定指向用于每個條目的實際方法的分派表模板在鏈接過程中被置于在EEPROM中。圖44還假定在復(fù)位(reset)或第一次使用分派表中的任何條目時,將分派表模板復(fù)制到例如RAM的非永久可變存儲器中的預(yù)先分配的空間。在本發(fā)明的上下文中,如果使用單元與保護單元不相同,那么保護單元是集合的。舉例來說,如果使用單元是方法并且保護單元是方法,那么保護單元不是集合的。但是如果使用單元是方法但是保護單元是類別,那么保護單元是集合的。仍參看圖44,在步驟4400中作出關(guān)于調(diào)用方法和被調(diào)用的方法是否在同一保護單元內(nèi)的判定。作出這個判定,作為代碼重寫過程的一部分。如果這兩種方法在同一保護單元內(nèi),那么在步驟4405中所述調(diào)用方法直接調(diào)用被調(diào)用的方法。如果這兩種方法不在同一保護單元內(nèi),那么代碼重寫過程用對網(wǎng)關(guān)分派器的調(diào)用來替代對被調(diào)用的例行程序(B)的調(diào)用。如果代碼已經(jīng)以這種方式加以重寫,那么在步驟4410中所述調(diào)用方法調(diào)用網(wǎng)關(guān)分派器。在步驟4415中,網(wǎng)關(guān)分派器判定與被調(diào)用的方法的保護單元相關(guān)聯(lián)的分派表。在步驟4420中,作出關(guān)于保護單元是否已經(jīng)被校驗的判定。如果保護單元尚未被校驗,那么其在步驟4425中加以校驗。在步驟4430中,從例如EEPROM的永久可變存儲器中獲取對應(yīng)于保護單元的分派表,并且將其加載到例如RAM的非永久可變存儲器中。在步驟4435中,作出關(guān)于保護單元是否是集合的判定。如果保護單元是集合的,那么在步驟4440中令保護單元中的校驗位指示一個未校驗狀態(tài)。一旦保護單元已經(jīng)被校驗,那么在步驟4445中檢驗對應(yīng)于被調(diào)用的方法的分派表條目。在步驟4450中,作出關(guān)于表條目的校驗位是否具有一個指示校驗狀態(tài)的值的判定。如果校驗位具有一個指示校驗狀態(tài)的值,那么在步驟4465中通過使用表條目中的地址來調(diào)用被調(diào)用的方法。如果校驗位值指示未校驗狀態(tài),那么在步驟4455中執(zhí)行對包含所述方法的保護單元的驗證,并且在步驟4460中令保護單元中的方法的校驗位指示一個校驗狀態(tài)。在步驟4465中,通過使用表條目中的地址來調(diào)用所調(diào)用的方法。對本發(fā)明的關(guān)于JavaCardTM技術(shù)的實施例的說明是用于說明的目的而不意欲以任何方式作為限制性的??梢允褂冒绦驍?shù)據(jù)的任何程序文件來取代包含結(jié)構(gòu)化程序數(shù)據(jù)的CAP文件。舉例來說,可以使用例如JavaTM檔案(JAR)文件的檔案文件。此外,可以使用界定協(xié)議數(shù)據(jù)單元的任何通信協(xié)議來取代APDU協(xié)議。此外,可以使用以JavaTM語言之外的其他語言編寫的程序的程序數(shù)據(jù)。而且,目標裝置不必是智能卡。目標裝置可以是能接收協(xié)議數(shù)據(jù)單元并且至少部分地基于所接收的數(shù)據(jù)來執(zhí)行一個程序的任何裝置。雖然已經(jīng)展示并描述了本發(fā)明的實施例和應(yīng)用,但受益于本揭示內(nèi)容,所屬領(lǐng)域的技術(shù)人員將了解可在不偏離本文的發(fā)明概念的情況下,作出比上文所描述的內(nèi)容更多的修改。因此,本發(fā)明僅受限于隨附權(quán)利要求書的精神范疇。權(quán)利要求1.一種用于將程序數(shù)據(jù)最優(yōu)化加載在一裝置上的方法,所述方法包含接收一包含至少一個程序單元的程序,所述至少一個程序單元包括至少一個主程序單元;獲得所述程序的一使用圖,所述使用圖包含復(fù)數(shù)個節(jié)點,每個節(jié)點代表所述至少一個程序單元中的一個程序單元,如果所述程序包含一個主程序單元,那么所述復(fù)數(shù)個節(jié)點進一步包含一代表一主程序單元的根節(jié)點,如果所述程序包含復(fù)數(shù)個主程序單元,那么所述根節(jié)點代表一用于復(fù)數(shù)個主程序單元中每一個主程序單元的母節(jié)點;排序所述程序內(nèi)的所述至少一個程序單元以創(chuàng)建一個有序程序,所述排序是至少部分地基于對所述使用圖的一深度優(yōu)先遍歷;和存儲所述有序程序。2.根據(jù)權(quán)利要求1所述的方法,其進一步包含將所述有序程序傳送到所述裝置。3.根據(jù)權(quán)利要求1所述的方法,其中所述裝置包含一智能卡。4.根據(jù)權(quán)利要求1所述的方法,其中所述使用包含執(zhí)行所述至少一個程序單元。5.根據(jù)權(quán)利要求1所述的方法,其中所述使用包含實例化所述至少一個程序單元。6.根據(jù)權(quán)利要求1所述的方法,其中所述使用包含讀取所述至少一個程序單元。7.根據(jù)權(quán)利要求1所述的方法,其中所述程序包含一JavaTM程序。8.根據(jù)權(quán)利要求7所述的方法,其中所述至少一個程序單元包含數(shù)據(jù)包、類別、方法、實例變量和類別變量中的兩者或更多者。9.一種用于將程序數(shù)據(jù)最優(yōu)化加載在一裝置上的方法,所述方法包含用于接收一包含至少一個程序單元的程序的步驟,所述至少一個程序單元包括至少一個主程序單元;用于獲得所述程序的一使用圖的步驟,所述使用圖包含復(fù)數(shù)個節(jié)點,每個節(jié)點代表所述至少一個程序單元中的一個程序單元,如果所述程序包含一個主程序單元,那么所述復(fù)數(shù)個節(jié)點進一步包含一代表一主程序單元的根節(jié)點,如果所述程序包含復(fù)數(shù)個主程序單元,那么所述根節(jié)點代表一用于復(fù)數(shù)個主程序單元中的每一個主程序單元的母節(jié)點;用于排序所述程序內(nèi)的所述至少一個程序單元以創(chuàng)建一有序程序的步驟,所述排序是至少部分地基于對所述使用圖的一深度優(yōu)先遍歷;和用于存儲所述有序程序的步驟。10.根據(jù)權(quán)利要求9所述的方法,其進一步包含將所述有序程序傳送到所述裝置的步驟。11.根據(jù)權(quán)利要求9所述的方法,其中所述裝置包含一智能卡。12.根據(jù)權(quán)利要求9所述的方法,其中所述使用包含執(zhí)行所述至少一個程序單元。13.根據(jù)權(quán)利要求9所述的方法,其中所述使用包含實例化所述至少一個程序單元。14.根據(jù)權(quán)利要求9所述的方法,其中所述使用包含讀取所述至少一個程序單元。15.根據(jù)權(quán)利要求9所述的方法,其中所述程序包含一JavaTM程序。16.根據(jù)權(quán)利要求15所述的方法,其中所述至少一個程序單元包含數(shù)據(jù)包、類別、方法、實例變量和類別變量中的兩者或更多者。17.一種機器可讀取的程序存儲裝置,其包含(embody)一個可由所述機器執(zhí)行的指令程序以執(zhí)行一用于接收一包含至少一個程序單元的程序的方法,所述至少一個程序單元包括至少一個主程序單元,所述方法包含接收一包含至少一個程序單元的程序,所述至少一個程序單元包括至少一個主程序單元;獲得所述程序的一使用圖,所述使用圖包含復(fù)數(shù)個節(jié)點,每個節(jié)點代表所述至少一個程序單元中的一個程序單元,如果所述程序包含一個主程序單元,那么所述復(fù)數(shù)個節(jié)點進一步包含一代表一主程序單元的根節(jié)點,如果所述程序包含復(fù)數(shù)個主程序單元,那么所述根節(jié)點代表一用于復(fù)數(shù)個主程序單元中的每一個主程序單元的母節(jié)點;排序所述程序內(nèi)的所述至少一個程序單元以創(chuàng)建一有序程序,所述排序是至少部分地基于所述使用圖的一深度優(yōu)先遍歷;和存儲所述有序程序。18.根據(jù)權(quán)利要求17所述的程序存儲裝置,所述方法進一步包含將所述有序程序傳送到所述裝置。19.根據(jù)權(quán)利要求17所述的程序存儲裝置,其中所述裝置包含一智能卡。20.根據(jù)權(quán)利要求17所述的程序存儲裝置,其中所述使用包含執(zhí)行所述至少一個程序單元。21.根據(jù)權(quán)利要求17所述的程序存儲裝置,其中所述使用包含實例化所述至少一個程序單元。22.根據(jù)權(quán)利要求17所述的方法,其中所述使用包含讀取所述至少一個程序單元。23.根據(jù)權(quán)利要求17所述的方法,其中所述程序包含一JavaTM程序。24.根據(jù)權(quán)利要求23所述的方法,其中所述至少一個程序單元包含數(shù)據(jù)包、類別、方法、實例變量和類別變量中的兩者或更多者。25.一種用于將程序數(shù)據(jù)最優(yōu)化加載在一裝置上的設(shè)備,所述設(shè)備包含用于接收一包含至少一個程序單元的程序的構(gòu)件,所述至少一個程序單元包括至少一個主程序單元;用于獲得所述程序的一使用圖的構(gòu)件,所述使用圖包含復(fù)數(shù)個節(jié)點,每個節(jié)點代表所述至少一個程序單元中的一個程序單元,如果所述程序包含一個主程序單元,那么所述復(fù)數(shù)個節(jié)點進一步包含一代表一主程序單元的根節(jié)點,如果所述程序包含復(fù)數(shù)個主程序單元,那么所述根節(jié)點代表一用于復(fù)數(shù)個主程序單元中的每一個主程序單元的母節(jié)點;用于排序所述程序內(nèi)的所述至少一個程序單元以創(chuàng)建一有序程序的構(gòu)件,所述排序是至少部分地基于對所述使用圖的一深度優(yōu)先遍歷;和用于存儲所述有序程序的構(gòu)件。26.根據(jù)權(quán)利要求25所述的設(shè)備,進一步包含用于將所述有序程序傳送到所述裝置的構(gòu)件。27.根據(jù)權(quán)利要求25所述的設(shè)備,其中所述裝置包含一智能卡。28.根據(jù)權(quán)利要求25所述的設(shè)備,其中所述使用包含執(zhí)行所述至少一個程序單元。29.根據(jù)權(quán)利要求25所述的設(shè)備,其中所述使用包含實例化所述至少一個程序單元。30.根據(jù)權(quán)利要求25所述的設(shè)備,其中所述使用包含讀取所述至少一個程序單元。31.根據(jù)權(quán)利要求25所述的設(shè)備,其中所述程序包含一JavaTM程序。32.根據(jù)權(quán)利要求31所述的設(shè)備,其中所述至少一個程序單元包含數(shù)據(jù)包、類別、方法、實例變量和類別變量中的兩者或更多者。33.一種用于將程序數(shù)據(jù)最優(yōu)化加載在一裝置上的設(shè)備,所述設(shè)備包含一存儲器,其用于存儲所述程序數(shù)據(jù);和一卡外安裝程序,其經(jīng)配置以接收一包含至少一個程序單元的程序,所述至少一個程序單元包括至少一個主程序單元;獲得所述程序的一使用圖,所述使用圖包含復(fù)數(shù)個節(jié)點,每個節(jié)點代表所述至少一個程序單元中的一個程序單元,如果所述程序包含一個主程序單元,那么所述復(fù)數(shù)個節(jié)點進一步包含一代表一主程序單元的根節(jié)點,如果所述程序包含復(fù)數(shù)個主程序單元,那么所述根節(jié)點代表一用于復(fù)數(shù)個主程序單元中的每一個主程序單元的母節(jié)點;排序所述程序內(nèi)的所述至少一個程序單元以創(chuàng)建一有序程序,所述排序是至少部分地基于對所述使用圖的一深度優(yōu)先遍歷;和存儲所述有序程序。34.根據(jù)權(quán)利要求33所述的設(shè)備,其中所述卡外安裝程序經(jīng)進一步配置以將所述有序程序傳送到所述裝置。35.根據(jù)權(quán)利要求33所述的設(shè)備,其中所述裝置包含一智能卡。36.根據(jù)權(quán)利要求33所述的設(shè)備,其中所述使用包含執(zhí)行所述至少一個程序單元。37.根據(jù)權(quán)利要求33所述的設(shè)備,其中所述使用包含實例化所述至少一個程序單元。38.根據(jù)權(quán)利要求33所述的設(shè)備,其中所述使用包含讀取所述至少一個程序單元。39.根據(jù)權(quán)利要求33所述的設(shè)備,其中所述程序包含一JavaTM程序。40.根據(jù)權(quán)利要求39所述的設(shè)備,其中所述至少一個程序單元包含數(shù)據(jù)包、類別、方法、實例變量和類別變量中的兩者或更多者。41.一種用于將程序數(shù)據(jù)最優(yōu)化加載在一裝置上的方法,所述方法包含接收一包含至少一個程序單元的程序,所述至少一個程序單元包括至少一個主程序單元;獲得所述程序的一使用圖,所述使用圖包含復(fù)數(shù)個節(jié)點,每個節(jié)點代表所述至少一個程序單元中的一個程序單元,如果所述程序包含一個主程序單元,那么所述復(fù)數(shù)個節(jié)點進一步包含一代表一主程序單元的根節(jié)點,如果所述程序包含復(fù)數(shù)個主程序單元,那么所述根節(jié)點代表一用于復(fù)數(shù)個主程序單元中的每一個主程序單元的母節(jié)點;判定所述程序內(nèi)的所述至少一個程序單元的一排序,所述排序是至少部分地基于對所述使用圖的一深度優(yōu)先遍歷;和將所述程序和所述排序傳送到所述裝置。42.根據(jù)權(quán)利要求41所述的方法,其中所述裝置包含一智能卡。43.根據(jù)權(quán)利要求41所述的方法,其中所述使用包含執(zhí)行所述至少一個程序單元。44.根據(jù)權(quán)利要求41所述的方法,其中所述使用包含實例化所述至少一個程序單元。45.根據(jù)權(quán)利要求41所述的方法,其中所述使用包含讀取所述至少一個程序單元。46.根據(jù)權(quán)利要求41所述的方法,其中所述程序包含一JavaTM程序。47.根據(jù)權(quán)利要求46所述的設(shè)備,其中所述至少一個程序單元包含數(shù)據(jù)包、類別、方法、實例變量和類別變量中的兩者或更多者。48.一種用于將程序數(shù)據(jù)最優(yōu)化加載在一裝置上的方法,所述方法包含用于接收一包含至少一個程序單元的程序的步驟,其中所述至少一個程序單元包括至少一個主程序單元;用于獲得所述程序的一使用圖的步驟,所述使用圖包含復(fù)數(shù)個節(jié)點,每個節(jié)點代表所述至少一個程序單元中的一個程序單元,如果所述程序包含一主程序單元,那么所述復(fù)數(shù)個節(jié)點進一步包含一代表一主程序單元的根節(jié)點,如果所述程序包含復(fù)數(shù)個主程序單元,那么所述根節(jié)點代表一用于復(fù)數(shù)個主程序單元中的每一個主程序單元的母節(jié)點;用于判定所述程序內(nèi)的所述至少一個程序單元的一排序的步驟,所述排序是至少部分地基于對所述使用圖的一深度優(yōu)先遍歷;和用于將所述程序和所述排序傳送到所述裝置的步驟。49.根據(jù)權(quán)利要求48所述的方法,其中所述裝置包含一智能卡。50.根據(jù)權(quán)利要求48所述的方法,其中所述使用包含執(zhí)行所述至少一個程序單元。51.根據(jù)權(quán)利要求48所述的方法,其中所述使用包含實例化所述至少一個程序單元。52.根據(jù)權(quán)利要求48所述的方法,其中所述使用包含讀取所述至少一個程序單元。53.根據(jù)權(quán)利要求48所述的方法,其中所述程序包含一JavaTM程序。54.根據(jù)權(quán)利要求53所述的方法,其中所述至少一個程序單元包含數(shù)據(jù)包、類別、方法、實例變量和類別變量中的兩者或更多者。55.一種機器可讀取的程序存儲裝置,其包含(embody)一可由所述機器執(zhí)行的指令的程序以執(zhí)行一用于接收一包含至少一個程序單元的程序的方法,所述至少一個程序單元包括至少一個主程序單元,所述方法包含接收一包含至少一個程序單元的程序,所述至少一個程序單元包括至少一個主程序單元;獲得所述程序的一使用圖,所述使用圖包含復(fù)數(shù)個節(jié)點,每個節(jié)點代表所述至少一個程序單元中的一個程序單元,如果所述程序包含一主程序單元,那么所述復(fù)數(shù)個節(jié)點進一步包含一代表一主程序單元的根節(jié)點,如果所述程序包含復(fù)數(shù)個主程序單元,那么所述根節(jié)點代表一用于復(fù)數(shù)個主程序單元中的每一個主程序單元的母節(jié)點;判定所述程序內(nèi)的所述至少一個程序單元的一排序,所述排序是至少部分地基于對所述使用圖的一深度優(yōu)先遍歷;和將所述程序和所述排序傳送到所述裝置。56.根據(jù)權(quán)利要求55所述的程序存儲裝置,其中所述裝置包含一智能卡。57.根據(jù)權(quán)利要求55所述的程序存儲裝置,其中所述使用包含執(zhí)行所述至少一個程序單元。58.根據(jù)權(quán)利要求55所述的程序存儲裝置,其中所述使用包含實例化所述至少一個程序單元。59.根據(jù)權(quán)利要求55所述的程序存儲裝置,其中所述使用包含讀取所述至少一個程序單元。60.根據(jù)權(quán)利要求55所述的程序存儲裝置,其中所述程序包含一JavaTM程序。61.根據(jù)權(quán)利要求60所述的程序存儲裝置,其中所述至少一個程序單元包含數(shù)據(jù)包、類別、方法、實例變量和類別變量中的兩者或更多者。62.一種用于將程序數(shù)據(jù)最優(yōu)化加載在一裝置上的設(shè)備,所述設(shè)備包含用于接收一包含至少一個程序單元的程序的構(gòu)件,所述至少一個程序單元包括至少一個主程序單元;用于獲得所述程序的一使用圖的構(gòu)件,所述使用圖包含復(fù)數(shù)個節(jié)點,每個節(jié)點代表所述至少一個程序單元中的一個程序單元,如果所述程序包含一個主程序單元,那么所述復(fù)數(shù)個節(jié)點進一步包含一代表一主程序單元的根節(jié)點,如果所述程序包含復(fù)數(shù)個主程序單元,那么所述根節(jié)點代表一用于復(fù)數(shù)個主程序單元中的每一個主程序單元的母節(jié)點;用于判定所述程序內(nèi)的所述至少一個程序單元的一排序的構(gòu)件,所述排序是至少部分地基于對所述使用圖的一深度優(yōu)先遍歷;和用于將所述程序和所述排序傳送到所述裝置的構(gòu)件。63.根據(jù)權(quán)利要求62所述的設(shè)備,其中所述裝置包含一智能卡。64.根據(jù)權(quán)利要求62所述的設(shè)備,其中所述使用包含執(zhí)行所述至少一個程序單元。65.根據(jù)權(quán)利要求62所述的設(shè)備,其中所述使用包含實例化所述至少一個程序單元。66.根據(jù)權(quán)利要求62所述的設(shè)備,其中所述使用包含讀取所述至少一個程序單元。67.根據(jù)權(quán)利要求62所述的設(shè)備,其中所述程序包含一JavaTM程序。68.根據(jù)權(quán)利要求67所述的設(shè)備,其中所述至少一個程序單元包含數(shù)據(jù)包、類別、方法、實例變量和類別變量中的兩者或更多者。69.一種用于將程序數(shù)據(jù)最優(yōu)化加載在一裝置上的設(shè)備,所述設(shè)備包含一存儲器,其用于存儲所述程序數(shù)據(jù);和一卡外安裝程序,其經(jīng)配置以接收一包含至少一個程序單元的程序,所述至少一個程序單元包括至少一個主程序單元;獲得所述程序的一使用圖,所述使用圖包含復(fù)數(shù)個節(jié)點,每個節(jié)點代表所述至少一個程序單元中的一個程序單元,如果所述程序包含一個主程序單元,那么所述復(fù)數(shù)個節(jié)點進一步包含一代表一主程序單元的根節(jié)點,如果所述數(shù)據(jù)包含復(fù)數(shù)個主程序單元,那么所述根節(jié)點代表一用于復(fù)數(shù)個主程序單元中的每一個主程序單元的母節(jié)點;判定所述程序內(nèi)的所述至少一個程序單元的一排序,所述排序是至少部分地基于對所述使用圖的一深度優(yōu)先遍歷;和將所述程序和所述排序傳送到所述裝置。70.根據(jù)權(quán)利要求69所述的設(shè)備,其中所述裝置包含一智能卡。71.根據(jù)權(quán)利要求69所述的設(shè)備,其中所述使用包含執(zhí)行所述至少一個程序單元。72.根據(jù)權(quán)利要求69所述的設(shè)備,其中所述使用包含實例化所述至少一個程序單元。73.根據(jù)權(quán)利要求69所述的設(shè)備,其中所述使用包含讀取所述至少一個程序單元。74.根據(jù)權(quán)利要求69所述的設(shè)備,其中所述程序包含一JavaTM程序。75.根據(jù)權(quán)利要求74所述的設(shè)備,其中所述至少一個程序單元包含數(shù)據(jù)包、類別、方法、實例變量和類別變量中的兩者或更多者。全文摘要本發(fā)明是關(guān)于程序數(shù)據(jù)在一裝置上的最優(yōu)化加載,其包含接收一包括多個程序單元的程序,其中至少一個程序單元為一主程序單元。獲得所述程序的使用圖,其中使用圖的根節(jié)點代表所述根節(jié)點與一個或多個代表所述至少一個主程序單元的節(jié)點的接合。至少部分地基于對所述使用圖的深度優(yōu)先遍歷來排序所述多個程序單元,而且將該有序程序傳送到該裝置。文檔編號G06FGK1759376SQ200480006697公開日2006年4月12日申請日期2004年1月14日優(yōu)先權(quán)日2003年1月16日發(fā)明者愛德華·K·德容申請人:太陽微系統(tǒng)公司