專利名稱:防篡改可信任虛擬機的制作方法
技術領域:
本發(fā)明一般地涉及在虛擬計算機上運行的應用。更具體地說,本發(fā)明 涉及在提供了用于使應用防篡改的方法的可信任環(huán)境中運行的應用。
背景技術:
娛樂業(yè)正經(jīng)歷著數(shù)字革命。音樂、電視和電影正日益變得數(shù)字化,在 質(zhì)量和靈活性方面為用戶提供了新的優(yōu)點。同時,由于數(shù)字數(shù)據(jù)可以被完 整并快速地復制,數(shù)字革命也包含著威脅。如果用戶可以隨意地復制娛樂 內(nèi)容并在因特網(wǎng)上提供該內(nèi)容,那么娛樂內(nèi)容的市場就會消失。已經(jīng)設計了內(nèi)容保護方案來減少此威脅,例如數(shù)字權利管理(DRM) 系統(tǒng)、用于DVD視頻的內(nèi)容擾亂系統(tǒng)(CSS)、用于DVD音頻的預記錄 媒體的內(nèi)容保護(CPPM)等等。這些系統(tǒng)都具有以下特征實現(xiàn)這些系 統(tǒng)的軟件需要是"健壯的",即,所述軟件可以阻擋黑客從所述軟件提取 機密(密鑰)或者修改所述軟件的行為以獲得未授權功能的攻擊。阻擋此 類攻擊的技術被稱為防墓改軟件。通常的理解是防墓改軟件與"開放源代碼"的概念相沖突,前提是黑 客可以更容易地危害開放源代碼程序的安全。但是,開放源代碼內(nèi)容保護 方案提供了不容置疑的優(yōu)點。開放標準可以防止市場分割并避免專有解決 方案排除竟爭。此外,開放源代碼內(nèi)容保護方案實際上可以幫助降^f氐黑客 攻擊的級別。對DVD視頻CSS方案的公知破解很大一部分是通過來自內(nèi) 部人員的泄漏來實現(xiàn)的。這些內(nèi)部人員顯然受到在開放源代碼平臺Liimx 上擁有DVD播放器的愿望的驅(qū)動。同時,對于許多應用,^¥3@語言已取代了計算機0:語言。Java語言 通過將源程序轉(zhuǎn)換成被稱為Java虛擬機("JVM")的假想計算機的指令(稱為字節(jié)代碼)來實現(xiàn)。
Java虛擬機并不是實際的硬件計算機,而是解釋所述字節(jié)代碼并在給 定的物理計算機上實現(xiàn)它們的功能的程序。此方法給定了 Java可移植性; 所述語言可用于所有類型的計算機甚至可用于諸如蜂窩電話、立體聲系統(tǒng) 以及電視才球頂盒之類的嵌入式設備中。
許多公司已生產(chǎn)出其指令集與Java虛擬樹目同的計算機。在這種情況 下,所述Java虛擬機是實際的而并非虛擬的。但是,按照慣例(將在此采 用的慣例),此類實際計算機仍被稱為"Java虛擬機"。
內(nèi)容保護的一種方法使用Java虛擬機來實現(xiàn)內(nèi)容保護方案的健壯性 要求。在此方法中,所有機密數(shù)據(jù)和算法都不在Java中實現(xiàn);相反,它們 被"內(nèi)裝"到Java虛擬機本身。此外,Java虛擬機提供了 "沙箱,,環(huán)境 以便阻止未授權的行動。例如,當Java虛擬機正在處理受保護的內(nèi)容時, Java的正常文件寫入機制被禁用。有利地,無需發(fā)汪Java代碼自身的完 整性。
此"沙箱"通過Java代碼防止了任何未授權的行為。每個內(nèi)容^f呆護方 案的重要邏輯都隱藏在Java虛擬機自身內(nèi)的防墓改環(huán)境中。盡管此^支術已 被證明是有用的,但是仍希望提供其中機密數(shù)據(jù)和算法無需在Java虛擬機 中被實現(xiàn)并且它們可以在Java中被實現(xiàn)的解決方案。此類解決方案具有其 可以支持"開放源代碼,,概念的額外優(yōu)點。
與機密算法相反,多數(shù)內(nèi)容保護應用都涉及機密數(shù)據(jù)(密鑰)。某些 內(nèi)容保護方案(如水印方案)還涉及機密算法。對于黑客來說,從字節(jié)代 碼導出原始Java程序要相對容易。傳統(tǒng)的"字節(jié)代碼困惑,,程序?qū)嶋H上幾 乎不阻止此操作,而只是使變量、方法和類的名稱變得混亂。需要一種包 括用于字節(jié)代碼的強加密保護(如果必要)的解決方案。
某些內(nèi)容保護方案使用"安全計數(shù)器"。例如,DVD音頻用戶被允許 只進行一定數(shù)量的復制。用戶可以僅通過在其硬盤上保存或重新存儲某些 文件來重置這些計數(shù)器。用戶還可以將其受保護的文件復制給某些朋友, 并由此復制原始用戶已購買的內(nèi)容。需要一種解決內(nèi)容保護的這些基本缺陷的解決方案。
Java語言提供了相對的"公共"和"私有"的概念。每個方法或子例 程都被聲明是公共的、私有的還是兩者都不是。公共方法最初旨在用于 Java應用的外部接口 。私有方法旨在用于不能被外部地調(diào)用的Java應用 內(nèi)的所有函數(shù)。既不是公共也不是私有的方法旨在用在"軟件包"(一組 相關的Java類)內(nèi)。
但是,大型的Java應用包括許多Java "軟件包",并且因此幾乎每 個函數(shù)都必須是公共的。黑客可以將這些公共方法用作"后門",導致應 用以未授權的方式運行。甚至在單個軟件包內(nèi),黑客也可以通過只是將其 自己的類添加到所述軟件包中來簡單地使軟件包保護失效。應用設計者很 難驗證他或她并未無意中暴露某些黑客可能利用的內(nèi)部但是"公共的"接 口。需要一種防止暴露方法和函數(shù)的虛擬機語言,將安全問題從應用移至 虛擬機語言。
最近,已提出了多種硬件建議來幫助軟件存儲機密并IHE完整性。例 如,可信任計算機平臺聯(lián)盟已定義了用于此類硬件的開放標準。已經(jīng)開發(fā) 了類似的專有技術。這些方法使用要么全有要么全無的方面。為了4吏應用 受到信任,操作系統(tǒng)需^f言任。為了使操作系統(tǒng)受到信任,操作內(nèi)核需要 信任。為了使操作內(nèi)核受到信任,原始引導代碼需^f言任。即使對4壬何級 別的無危險的更改都將破壞信任鏈。
一種解決方案在操作系統(tǒng)中定義了新的權限級別。在此權限級別中駐 留了內(nèi)核的子集、操作系統(tǒng)的子集和所有可信任的應用。但是,此專有方 法在建立可信任應用方面給予了此技術的擁有者巨大的竟爭優(yōu)勢,4吏得"開 放源代碼,,的概念變得無效。需要一種允許開發(fā)"開放源代碼"應用并且 仍能夠有效利用特殊安全硬件的解決方案。
許多Java設計者都表達了為特定用戶或設備編寫的應用不應凈皮可移 植到其他用戶或設備的期望。Java設計者希望將應用出售給單個用戶而不 希望該用戶能夠?qū)⑺鰬媒o予或出售給其他用戶。需要一種防止在沒有 來自應用設計者或擁有者的許可的情況下共享應用的解決方案。
發(fā)明內(nèi)容
本發(fā)明提供了 一種用于防墓改可信任Java虛擬機的模型、計算機程序 產(chǎn)品和關聯(lián)方法(在此總稱為"系統(tǒng)"或"本系統(tǒng)")。所述可信4壬Java 虛擬機提供了 一種用于支持防墓改應用的方法。本系統(tǒng)提供了 一種用于確 保應用及其機密的完整性,使編寫開放源代碼的防墓改軟件的過程變得容 易的方法。
所述可信任Java虛擬機實現(xiàn)了防篡改。它驗證所述應用的完整性、防 止調(diào)試所述應用,并允許所述應用安全地存儲和檢索機密。所述可信任 Java虛擬機并未開放源代碼。但是,只需一個可信任Java虛擬機,該可 信任Java虛擬機可以支持多種不同的開放源代碼應用。"開放源代碼,,的 價值在所述應用中得以實現(xiàn)。
本系統(tǒng)需要單獨的可信任Java虛擬機,并且在所述可信任Java虛擬 機中實現(xiàn)內(nèi)容保護邏輯。傳統(tǒng)的Java安全用于防止從因特網(wǎng)下載的Java 小程序或應用損壞用戶的計算機。相比之下,本系統(tǒng)防止用戶損壞應用, 即,保護應用免于修改或暴露機密。本系統(tǒng)提供了一種所述應用知道是可 信任的并且所述應用可以在其中運行的可信任環(huán)境。
與機密算法相反,多數(shù)內(nèi)容保護應用都涉及機密數(shù)據(jù)(密鑰)。本系 統(tǒng)提供了 一種用于使應用創(chuàng)建并安全地存儲這些機密的方法。某些內(nèi)容保 護方案(如水印方案)還涉及機密算法。本系統(tǒng)包括對字節(jié)代碼的強加密 保護(如果必要)。
本系統(tǒng)允許應用訪問所述應用的機密(例如密鑰)。但是,所述應用 不能訪問其他應用的機密,即使這兩個應用正運行在同 一機器上。
此外,本系統(tǒng)具有一種確保應用完好的機制。完好的、未經(jīng)修改的應 用可以訪問其機密。如果本系統(tǒng)確定所述應用已被修改,則被修改的應用 不再能夠訪問其機密。本系統(tǒng)并未定義所述應用使用的機密。所述應用設 計者定義這些機密。
本系統(tǒng)還提供了 一種用于通過加密編程代碼或虛擬機指令來保護應用的編程代碼的機制。本系統(tǒng)在與實際代碼相同的文件中具有媒體密鑰塊。
所述Java虛擬機具有一組可以被用來處理所述媒體密鑰塊以提取媒體密 鑰的設備密鑰。所述媒體密鑰被用來解密該文件中的所述編程代碼。所述 編程代碼從未以可被黑客觀察到的方式被暴露。所述編程代碼只有在其被 加載到存儲器中或由所述Java虛擬機執(zhí)行時才被暴露。
某些內(nèi)容保護方案需要"安全計數(shù)器"。例如,用戶被允許只進行一 定數(shù)量的DVD音頻的復制。用戶可以僅通過在其硬盤上保存和重新存儲 某些文件來嘗試重置他或她的計數(shù)器。用戶還可以嘗試將其受保護的文件 復制給某些朋友,并由此復制原始用戶已購買的內(nèi)容。本系統(tǒng)提供了一種 用于解決對內(nèi)容權利的這些基本欺騙的方法。
本系統(tǒng)包括可信任字典、可信任捆綁包、可選的用于加密和解密字節(jié) 代碼的加密方法以及基礎可信任Java虛擬機。所述可信任字典保護數(shù)據(jù), 而所述可信任捆綁包保護編程代碼。
所述可信任字典被加密,使得應用可以存儲機密數(shù)據(jù)并保護計數(shù)器。 由應用使用所述可信任字典隱含地驗證了所述應用正運行在可信4壬環(huán)境 中。所述可信任捆綁包允許應用設計者將包括所述應用的所有Java軟件包 分組在一起,將訪問只限于那些所述應用i殳計者顯式導出的接口 。
當所述應用需要時,所述可信任捆綁包可以可選地被加密。例如,本 系統(tǒng)使用可信任字典來保護應用所使用的機密同時允許所述可信任捆綁包 中的編程代碼是開放源代碼的。開放源代碼的代碼未#>密。但是,所述 應用的開放源代碼的編程代碼所需的機密在所述可信任字典中被加密。
所述加密方法允許應用設計者加密那些要保持為機密的類文件(字節(jié) 代碼序列)。所述加密方法還提供了一種使本系統(tǒng)可以解密那些正在被執(zhí) 行的類文件的可更新的方法。所述可信任Java虛擬機內(nèi)裝到所述可4言任字 典和所述可信任捆綁包的實現(xiàn)中。換言之,對于給定的處理器,所迷實現(xiàn) (或其重要部分)是以"固有"的代碼而不是以虛擬機字節(jié)代碼來實現(xiàn)。 所述可信任Java虛擬機由標準軟件防篡改技術來保護。
所述可信任字典和所述可信任捆綁包以如以下方式相關當應用實例化可信任字典時,所述應用隱含地列出那些可以從所述可信任字典"獲得" 和"itA"值的可信任捆綁包。所述應用通過列出已被用來簽署那些可信 任捆綁包的公用密鑰來列出那些可信任捆綁包。
可信任捆綁包可以是Java檔案(JAR)文件, 一種通過其包裝用于應 用的類文件的標準方法。Java語言允許通過簽署Java檔案清單來數(shù)字地 簽署Java檔案。本系統(tǒng)確保只有來自完好的并正確地簽署的Java檔案文 件的應用才能夠成功地使用所述可信任字典。Java檔案文件只能使用已被 標記為供它們使用的可信任字典。
本系統(tǒng)提供了 一種通過其應用可以獲知其正在可信任環(huán)境中運行的機 制。應用設計者在已知為可信任的環(huán)境(例如其軟件制造構建機器)中實 例化可信任字典。然后,應用設計者將此可信任字典與所述應用一起部署。 所述應用只有當其在可信任環(huán)境中運行時才能成功地從所述可信任字典提 取制造機密。
例如,DVD音頻播放器應用可以在工廠被加載有具有一組DVD音頻 設備密鑰的可信任字典。能夠使用這些密鑰成功地播放DVD音頻的DVD 播放器應用知道其正在可信任環(huán)境中運行。黑客可以嘗試假裝具有可信任 字典的"特洛伊木馬"環(huán)境。但是,從此類"可信任字典"獲得的任何設 備密鑰都無法解密DVD音頻。因此,如果所述應用在此虛假環(huán)境中運行, 不存在對內(nèi)容保護方案的暴露。應用設計者知道如果應用處于受到危害的 環(huán)境中時,應用無法執(zhí)行非法操作。
作為另 一個實例,數(shù)字權利管理應用與服務器一起使用公鑰協(xié)議來接 收授權的內(nèi)容。公鑰協(xié)議是公知的,并且該協(xié)議本身并非機密。所述機密 是在該協(xié)議中與公鑰對應的私鑰。只要私鑰保持隱藏,所述協(xié)議就可以被 置于公開的源代碼中。如果客戶機的私鑰在部署客戶機應用之前^L^文入可 信任字典,則所述密鑰只能在可信任環(huán)境中使用。如果客戶機應用和服務 器能夠成功地協(xié)商公鑰協(xié)議,則它們可以確信所ii^戶機應用正在可信任 環(huán)境中運行。所述服務器可以安全地將授權的內(nèi)容作為協(xié)議的一部分來傳 送。在另一個實例中,應用設計者編寫提供用于音頻音樂的音頻水印的程 序。此音頻水印是指示各種音頻播放器以特定方式執(zhí)行的特殊復制控制信 號。所迷音頻播放器如指示的那樣響應所述音頻水印以進行版權保護,防 止所述音頻音樂的未授權4吏用。所述音頻播放器用來檢測和響應音頻水印 中的指令的編程代碼需要防止黑客。本系統(tǒng)可以加密此編程代碼并提供此 編程代碼可以在其中運行的安全和可信任的環(huán)境。
選擇加密他們的某些或所有類文件的應用設計者具有用于驗證所述應 用是否在可信任環(huán)境中運行的其他方法。這些類文件無法成功地被加載,
除非它們在可信任Java虛擬機中運行。在此情況下,如果所述應用沒有加 載到可信任Java虛擬機環(huán)境中,則所述應用無法運行。
本系統(tǒng)可以例如被用來確保記錄諸如銀行大廳連同時間和日期之類的 場景的安全照相機的完整性。銀行和安全公司依賴于畫面上的時間和日期 的完整性。本系統(tǒng)可以被用來提供用于安全照相機的可信任環(huán)境,其中外 人4艮難更改時間和日期。
因此,定義了一種用于能夠支持防篡改應用軟件同時保持"開放源代 碼"的概念的安全或可信任Java虛擬機的模型、計算機程序產(chǎn)品和關聯(lián)方 法。
現(xiàn)在將僅通過實例的方式參考附圖來描述本發(fā)明的實施例,這些附圖
是
圖1是其中可以使用本發(fā)明的可信任Java虛擬機環(huán)境的示例性運行環(huán) 境的示意圖2是圖1的可信任Java虛擬機環(huán)境的高級體系結構的方塊圖3是示出了創(chuàng)建在圖1和2的可信任Java虛擬機環(huán)境中使用的應用
的方法的過程流程圖4包括圖4A和4B并代表示出了在圖1和2的可信任Java虛擬機
環(huán)境中運行示例性應用的方法的過程流程圖。
具體實施例方式
圖1描繪了其中可以使用根據(jù)本發(fā)明的用于可信任Java虛擬機的系統(tǒng) 和關聯(lián)方法的示例性總體環(huán)境??尚湃蜫ava虛擬機10包括軟件編程代碼 或通常嵌入或安裝在服務器15上的計算機程序產(chǎn)品??商娲?,可信任 Java虛擬機10可以被保存在諸如軟盤、CD、硬盤驅(qū)動器之類的合適的存 儲介質(zhì)上。
雖然根據(jù)Java編程語言描述了可信任Java虛擬機10 ,但是本系統(tǒng)可 以使用任何適合類型的虛擬機或"實際"虛擬機來實現(xiàn)。使用Java編程語 言來描述可信任Java虛擬機10只是示例性的,并且并非將本發(fā)明的應用 限于其他的虛擬機。
用戶(如遠程因特網(wǎng)用戶)由各種計算機(如計算機20、 25、 30)來 表示,并且可以通過網(wǎng)絡35訪問服務器15。計算機20、 25、 30中的每一 個計算機都包括允許所述用戶安全地連接服務器15的軟件。服務器15通 過諸如電話、電纜或衛(wèi)星鏈路之類的通信鏈路40與網(wǎng)絡35相連。
計算機20、 25、 30分別通過通信鏈路45、 50、 55與網(wǎng)絡35相連。雖 然根據(jù)網(wǎng)絡35描述了可信任Java虛擬機lO,但是計算機20、 25、 30也 可以本地而不是遠程地訪問可信任Java虛擬機lO。計算機20、 25、 30可 以通過使用應用來手動或自動地訪問可信任Java虛擬機10。
圖2示* 了可信任Java虛擬機10的高級層次結構。可信任Java虛擬 機或TJYM 10通常包括可信任Java虛擬機205、 Java基類210和Java 應用215。
可信任Java虛擬機205包括通常以計算機語言(如C )編寫的例程, 該例程被編譯成用于所述可信任Java虛擬機在其上運行的計算機的機器 指令。雖然根據(jù)c編程語言描述了可信任Java虛擬機205,但是本發(fā)明可 以使用任何類型的編程語言來實現(xiàn)。使用C編程語言來描述可信4壬Java 虛擬機205只是示例性的,并且并非將可信任Java虛擬機205的應用限于 其他編程語言。在標準的Java實現(xiàn)中,C代碼實現(xiàn)需要與操作系統(tǒng)連接的字節(jié)代碼解 釋器220和"固有"方法225。 C代碼在不同的平臺上可能不同。在此實 例中,由可信任Java虛擬機205來實現(xiàn)所述C代碼。
以Java語言來編寫Java基類210并實現(xiàn)以下基本的Java對象字符 串、對象、1/0等。它們已由Java編譯器編譯成字節(jié)代碼。某些Java基 類可能具有已經(jīng)以"固有"代碼(即,以它們在其上執(zhí)行的處理器的固有 指令集)實現(xiàn)的方法。
Java應用215在Java基類210以上運行。Java應用215包括一個或 多個可信任捆綁包l, 230至可信任捆綁包N, 235,它們總稱為可信任捆 綁包240。此外,應用215包括其他無需被信任的Java代碼,例如主應用 245或初始小程序(applet init) 250。 Java應用215可選地包括一個或多 個可信任字典,例如可信任字典l, 255至可信任字典N, 260,它們被總 稱為可信任字典265。
Java應用215可以包括多個可信任捆綁包240和可信任字典265。多 個可信任捆綁包240能夠彼此通信??尚湃卫壈?40可以分別在可信任 字典265中維護機密或共享可信任字典265中的機密。
不同的軟件公司可能生產(chǎn)不同的Java應用215,266,這些應用通過它 們各自的可信任字典265,267通信并傳遞機密。例如,軟件公司生產(chǎn)用于 將數(shù)字水印插入音頻CD的Java應用215。所述數(shù)字水印軟件包括可信任 捆綁包240。 CD播放器包括調(diào)用水印可信任捆綁包240來檢測水印信號的 Java應用266中的軟件。可信任字典265,267提供了安全路徑以便所述數(shù) 字水印軟件與CD播放器軟件通信,安全地驗證了它們是可靠版本而不是 被破解版本的軟件。
某些模塊在圖2中被示為包封在"完整性包封"內(nèi)。完整性包封提供 了驗證這些模塊未被修改的機制??尚湃蜫ava虛擬機205由完整性包封 270保護。Java基類210由完整性包封275保護??尚湃卫壈?,230由 完整性包封280保護??尚湃卫壈麼,235由完整性包封285保護。
完整性包封270、 275、 280、 285包括檢查數(shù)字簽名。此外,完整性包封270、 275、 280、 285包括諸如數(shù)字印章之類的其他技術。有關數(shù)字印章 技術的更多詳細信息,可以參考例如專利No. 5,978,482和6,038,316。數(shù)字 印章類似于數(shù)字簽名,但在檢查軟件模塊的完整性方面具有一定的優(yōu)勢。 此外,完整性包封270、 275、 280、 285包括基于硬件的完整性檢查,如那 些在可信任計算平臺聯(lián)盟(TCPA)和Palladium芯片中找到的完整性檢 查。
如圖2所示,可信任Java虛擬機205的固有方法225中的機密方法 2卯可以被加密。此外,可信任字典265也可以被加密。另外,如可信任 捆綁包1,230中的類295所示出的,可信任捆綁包240中的某些或全部類 可以被加密。在最小程度上,機密方法290、可信任字典265和類295都 被加密同時被例如存儲在存儲器中、盤上或外部存儲器中。
加密可以一直持續(xù),甚至是在機密方法290、可信任字典265和類295 都已被加載到計算機存儲器中之后。在此情況下,用于機密方法290、可 信任字典265和類295的代碼可以在執(zhí)行之前立即"動態(tài)地(on the fly)" 被解密。;f幾密方法290、可信任字典265和類295可以在執(zhí)行完成后被邏 輯地加密。
可信任Java虛擬機10使用公知的或可用的軟件防篡改技術。有關密 碼的詳細信息,可以參考例如2000年7月3日申請的美國專利申請 No.09/609,809 (代理人案號ARC2000-0063,其在此引入作為參考)。在 一個實施例中,使用諸如數(shù)據(jù)加密標準(DES)或高級加密標準(AES) 之類的標準密碼來加密可信任字典265。
如通常用在軟件防篡改技術中的那樣,用來加密機密方法2卯的密鑰 可以是高度擾亂的全局機密。公知的或可用的廣播加密技術可以被用來管 理用于加密類295的密鑰。有關廣播加密技術的詳細信息,可以參考例如 美國專利No.6,118,813和美國專利申請No.2002/01147卯6Al。可信任Java 虛擬機10可以使用任何合適的廣播加密方案來加密類295。
為了使用廣播加密,可信任Java虛擬機205的設計者將媒體密鑰塊及 其關聯(lián)的媒體密鑰傳送^爭個應用設計者以便加密Java類(例如類295)。應用it計者使用利用媒體密鑰的工具來加密指定的類295。此工具將媒體 密鑰塊添加到Java檔案文件。
一組設備密鑰292被建立在可信任Java虛擬機205中。可信任Java 虛擬機205的每個版本都具有一組不同的設備密鑰。為了解密給定的加密 的類295,可信任Java虛擬機205使用其設備密鑰來處理所述Java檔案 文件中的媒體密鑰塊并提取所述媒體密鑰。
如果黑客破壞了特定的可信任Java虛擬機205并且其設備密鑰集也被 泄漏,則可以部署具有一組新的設備密鑰的新的可信任Java虛擬機205。 這組新的設備密鑰可以處理所有現(xiàn)有應用中的所有媒體密鑰塊。
此外,可以將排除了受到損害的設備密鑰的新的媒體密鑰塊給予應用 設計者,同時允許未受損害的密鑰執(zhí)行其功能。應用^:計者可以在其方使, 時將他的應用更新到所述新的媒體密鑰塊。媒體密鑰塊的更新不必與新的 可信任Java虛擬機205的部署嚴格地同步。
可信任Java虛擬機205在其上運行的平臺可以包括諸如例如TCPA 芯片或Palladium芯片之類的安全芯片。如果這樣的話,這些芯片可以被 用來存儲所述設備密鑰。
在一個實施例中,可信任字典265包括標準Java基類字典的子類。任 何允許存儲和檢索數(shù)據(jù)值的合適的類都可以被用作可信任字典265。可信 任字典265的方法(例如,"獲得"或"放入")被實現(xiàn)為可信任Java 虛擬機205中的固有方法225。
如果可信任字典265不允許復制,則其被定義為"本地化的"。如果 Java應用215指定可信任字典265是本地化的,則Java應用215無法讀 取在另 一計算機系統(tǒng)上的可信任字典265。
包括"密鑰數(shù)據(jù)庫,,和密鑰計算中的間接級別的公知的或可用的邏輯 技術可以被用來創(chuàng)建可信任字典265。有關可信任字典265的基本邏輯的 詳細信息,可以參考例如2001年1月5日申請的美國專利申請 No.09〃54,396 (代理人案號AM9-99-0145,其在此引入作為參考)。
Java字典通常具有"密鑰"和"值"。但是,為了避免將字典密鑰與加密密鑰相混淆,對于前者的概念,將使用術語"關鍵字"而不是"密鑰"。 因此,與關鍵字關聯(lián)地存儲所述字典值,并且以后通過使用關鍵字來檢索
所述字典值。在可信任字典265中,使用稱為數(shù)據(jù)庫主密鑰的機密密鑰來 加密所述關鍵字和值。所述數(shù)據(jù)庫主密鑰是以下類型的值的機密函數(shù)的結 果通用值、平臺特定的值以及讀-寫值。平臺特定的值可以例如是用戶計 算機上的硬盤的序列號。
寫區(qū)域中的值。出于完整性的目的,所述讀/寫值不能輕易地被最終用戶保 存和恢復。在具有TCPA或Palladium芯片的平臺中,平臺值和讀/寫能力 被建立在芯片中。
作為一個實例,"密鑰數(shù)據(jù)庫,,可以用于可信任字典265。如果所述 密鑰數(shù)據(jù)庫從一臺PC移至另一臺PC,則程序?qū)⒉辉儆嬎阌糜谒鰯?shù)據(jù)庫 的正確主密鑰并且所述數(shù)據(jù)庫是無用的。所述密鑰數(shù)據(jù)庫可以包括計數(shù)器。 用戶可以嘗試保存和恢復密鑰數(shù)據(jù)庫以重置計數(shù)器。所述讀/寫值在保存和 恢復之間改變,改變了所述主密鑰。因此,所述密鑰數(shù)據(jù)庫和可信^壬字典 265不再有用。Java應用215現(xiàn)在知道所述用戶嘗試繞過使用規(guī)則并可以 正確地《故出響應。
某些Java應用215無需平臺綁定或保存/恢復保護。使平臺綁定或保 存/恢復保護成為字典的配置參數(shù)以及根據(jù)需要忽略將平臺特定的值或讀/ 寫值包括在機密主密鑰函數(shù)中相對容易。
可信任字典265包括創(chuàng)建可信任字典265時提供的公鑰的列表。這些 公鑰限制了可信任字典265對可信任捆綁包240的訪問,所述可信^f壬捆綁 包240的Java檔案文件由與所述公鑰之一關聯(lián)的私鑰來簽署。
在一個實施例中,可信任字典265實現(xiàn)在訪問可信任字典265之前代 表可信任捆綁包240檢查^/H^的列表。另一個實施例利用內(nèi)置的"才幾密函 數(shù)"主密鑰機制,將所述公鑰用作輸入到所述機密函數(shù)的通用值之一。然 后,所述捆綁包可以如所允許的那樣成功解密可信任字典265。
如果多于一個公鑰被與可信任字典265關聯(lián),則間接級別可以被添加到密鑰計算。各個主密鑰中的每個主密鑰(對于每個公鑰, 一個主密鑰)
都加密共用的中間密鑰。所述中間密鑰加密可信任字典265中的值。
此外,所述中間密鑰的不同加密版4^皮存儲在可信任字典265中。當 可信任捆綁包240試圖訪問可信任字典265時,可信任Java虛擬機205 計算主密鑰并解密所述中間密鑰的這些加密版本中的每個版本。如果所述 捆綁包被允許訪問此可信任字典265,則這些解密中的一個解密是真的中 間密鑰。此真的中間密鑰允許訪問。
可信任字典中的關鍵字的值幾乎可以是任何Java對象。在Java語言 中,例如,多數(shù)Java對象可以使用writeObject()方法被變成字節(jié)序列。此 類對象被稱為"可串行化的"。該字節(jié)序列可以被看作字典關鍵字或值。 因此,任何可串行化的Java對象都可以被安全地存儲在可信任字典265 中。
在一個實施例中,可信任捆綁包240是開放服務網(wǎng)關組織(OSGi)的 捆綁包類的子類。任何能夠限制對應用的多數(shù)公用方法的訪問的概念都可 以是可信任捆綁包240。
Java的一個功能被用來對捆綁包之外的任何人"隱藏"整個類(不只 是其私有方法)。例如,兩個類(如類x和類y)由不同的類加載器(類 加栽器a和類加載器B)來加栽。類的名稱和實際的類加載器兩者對于將 類標識到Java虛擬機來說都很重要。
除非類加載器a和類加載器B采取特殊的措施來相互通信,否則即使 具有相同名稱的類也被復制并由每個類加載器單獨引入。因此,具有相同 名稱的兩個同樣的類被可信任Java虛擬機205看作不同的類。例如,如果 類x生成窗口小部件對象并將其傳遞給類y的方法,則由于類x生成了 a 窗口小部件而類y期望B窗口小部件,將出現(xiàn)ClassCastException錯誤, 盡管實現(xiàn)窗口小部件的類文件是相同的。
在一個實施例中,此隱藏整個類的Java功能在OSGi捆綁包概念中被 實現(xiàn)。每個捆綁包都是由單獨的類加栽器慎重地加載的單獨的Java檔案文 件。此類加栽器與系統(tǒng)中的其他類加載器通信以獲得Java基類210并導出軟件包(類的組),該軟件包被專門設計為"導出"Java檔案文件的清單 中的軟件包。只有導出的類才能成功地被其他捆綁包或所述捆綁包之外的 代碼所引用。
為了使OSGi捆綁包成為可信任捆綁包240,可信任Java虛擬機10 要求OSGi捆綁包的Java檔案清單被簽署。因此,只有由原始簽署者指定 的軟件包才可以被導出。
在一個實施例中,可信任Java虛擬機10使getClassLoader()成為私有 方法;這防止了黑客利用getClassLoader()來繞過應用設計者保護例如媒體 的專有權利的目的。由于OSGi捆綁包的以下特征,使方法getClassLoader() 是私有的。任何Java對象的類都可以通過在該對象上使用"getClass()" 方法來獲得。結果是具有稱為getClassLoader()的公共方法的類對象。 GetClassLoader()返回加載所述類的類加載器的ClassLoader對象。根據(jù)所 述ClassLoader對象,方法loadClass()可以被用來查找由所述類加栽器加 栽的任何其他類的類對象。才艮據(jù)所述類對象,可以實例化該類的新的對象。 這挫敗了只允許在可信任捆綁包240之外實例化導出的類的企圖。
在另 一個實施例中,"getClassLoader()"的行為被修改以便其可以識 別可信任捆綁包240。因此,getClassLoader()只向在同一可信任捆綁包240 內(nèi)的方法返回有用的類加載器。另一個實施例利用Java安全管理器來限制 執(zhí)行"getClassLoader()"的對象。另一個實施例修改捆綁包類加載器以便 其僅在可信任捆綁包240的外部調(diào)用時才顯露導出的類。
由于Java基類210對所有可信任捆綁包240都是共用的,所以Java 基類210被封裝在完整性包封中。否則,理論上可以使特洛伊木馬偽裝成 Java基類210。例如,如果可信任捆綁包240要將密鑰轉(zhuǎn)換為字符串,則 偽造的字符串類可以將結果寫到硬盤上。雖然此攻擊有些牽強,但是通過 檢查Java基類210來消除此攻擊是很簡單的。
可信任Java虛擬機10利用"安全驗證通道"。術語"安全發(fā)江通道" 是防篡改軟件中的標準術語。它指在不允許中間人取走被傳遞的數(shù)據(jù)的情 況下需要相互通信的兩個獨立軟件才莫塊之間的連接。通過使可信任捆綁包240共享可信任字典265,可以方^更地在可信任 Java虛擬機10中建立所述安全驗證通道。換言之,調(diào)用方可信任捆綁包 240調(diào)用被調(diào)用方可信任捆綁包240中的導出的類,傳遞使用來自調(diào)用方 和被調(diào)用方的可信任捆綁包240兩者的公用密鑰來實例化的可信^r字典 265。通過預先安排,用作到被調(diào)用方可信任捆綁包240的參數(shù)的特定命名 值被存儲在可信任字典265中。同樣,被調(diào)用方可信任捆綁包240通過將 值以預先安排的名稱存儲在可信任字典265中來返回所述值。可信l壬Java 虛擬機10以這種方式返回諸如密鑰之類的機密值以防止被中間人程序觀 察到或修改。
此安全驗證通道方法并未向可信任捆綁包240證明它們正運行在可信 任環(huán)境中。因此,可信任捆綁包240在信任此機制之前利用上述方法來驗 證它們處于可信任環(huán)境中。此外,沒有實例化可信任字典265的一方mi 其公鑰是所期望的。在一個實施例中,可信任字典265的類實現(xiàn) getPublicKeys()方法來驗證公鑰??尚湃蜫ava虛擬機10可以使用多種方 法中的任意方法來驗汪所述公鑰。
在一個實施例中,可信任Java虛擬機環(huán)境在不影響Java應用215的 情況下使用諸如例如TCPA和Palladium芯片之類的安全芯片??尚湃?Java虛擬機205通常作為開始于基本輸入/輸出系統(tǒng)(BIOS )加載器的信 任鏈的一部分被加載。如果信任鏈丟失,則可信任Java虛擬機205不再相 信操作系統(tǒng)是安全的。
但是,這是軟件防篡改的正常狀態(tài)并且存在公知的技術進行補償。例 如,操作系統(tǒng)的關鍵部分可以具有軟件完整性包封。可替代地,可以部署 與那些用在病毒檢測中的技術類似的技術來檢測用戶已安裝在其操作系統(tǒng) 內(nèi)核中的欺騙程序。
在操作系統(tǒng)不可信的情況下,可信任Java虛擬機205使用標準的軟件 防篡改技術來檢測操作系統(tǒng)中的欺騙程序。可信任Java虛擬機205使用安 全芯片來存^i殳備密鑰和用于計算可信任字典265的值。
在正常操作中,安全芯片中的值由Java應用215的校驗和來保護。但是,這些校驗和并非機密,它們由信任鏈中的緊鄰下層來執(zhí)行。 一旦信任
鏈被破壞,這些值就用作密鑰;所述密鑰不再需要是檢驗和。在一個實施 例中,解鎖可信任Java虛擬機205的存儲值的值是完整性計算(例如,數(shù) 字印章計算)的結果。
圖3的過程流程圖示出了用于創(chuàng)建使用可信任Java虛擬機10的可信 任Java應用215的方法300。在步驟305,應用設計者確定Java應用215 的哪些方面需要保護。Java應用215可以包括機密代碼、機密數(shù)據(jù)或兩者 的組合。例如,DVD視頻內(nèi)容保護方案(CSS)具有機密密鑰。CSS還需 要許可證來保護加密算法。另一方面,DVD音頻保護方案(CPPM)只包 括機密密鑰;所述算法被公開地描述。
如果Java應用215包括機密數(shù)據(jù),則Java應用215被設計為將所述 機密數(shù)據(jù)放置在Java字典中。所述Java字典在部署Java應用215時被實 例化為可信任字典265。
在步驟310設計Java應用215的捆綁包。在一個實施例中,這些捆綁 包被設計為公開服務網(wǎng)關組織捆綁包。應用設計者簽署對應于所述捆綁包 的Java檔案文件;這確保了所述捆綁包^L看作可信任捆綁包240。所述應 用設計者在實例化可信任字典265時提供了公鑰列表。只有由關聯(lián)的私鑰 簽署的捆綁包才被允許訪問可信任字典265。
在步驟305,所述應用設計者可以確定Java應用215不包括機密。例 如,MPEG呈現(xiàn)程序無需機密信息來執(zhí)行其功能。例如,所述應用i殳計者 可以創(chuàng)建被其他內(nèi)容保護方案作為子例程的應用。在此情況下,所述內(nèi)容 保護方案相信所述子例程只是呈現(xiàn)數(shù)據(jù)并且沒有將數(shù)據(jù)保存在文件中。在 此情況下,所述應用設計者遵循可選步驟315,"使用其他捆綁包i殳計接 cr,,。
在步驟315,可以被從任何應用或服務(可信任的或不可信任的)調(diào) 用的公用接口可以作為具有任何適當接口的正常OSGi服務而可用。如果 所述月艮務需要具有可信任捆綁包240的接口 ,則到可信任捆綁包240的接 口需要可信任字典265。例如,到可信任捆綁包240的接口可以位于調(diào)用方和"被調(diào)用方"之 間。如果所述服務是具有可信任捆綁包240的接口中的調(diào)用方,則所述服 務使用可信任字典265。如果所述服務不是調(diào)用方,則應用設計者實例化 具有所述服務的公鑰和所述被調(diào)用方的7>鑰的可信任字典265。這些公鑰 被保存在私有可信任字典265中以確保防墓改。
如果所述服務是被調(diào)用方,則調(diào)用方已實例化了可信任字典265。當 可信任字典265被傳遞給所述服務時,所述服務驗證可信任字典265是否 是使用預期的公鑰建立的。沒有機密并且為任何調(diào)用方執(zhí)行其功能的呈現(xiàn) 應用無需可信任字典265的確認。
機密參數(shù)和返回值通過可信任字典265被傳遞以防止中間人攻擊。可 信任字典265可以包括任何可串行化的Java對象。"init"方法可以通過 可信任字典265將對象返回到服務調(diào)用方。正常參數(shù)和返回值然后可以被 與該初始對象中的方法一起4吏用。此初始對象可以是導出類的一個實例。 如果應用設計者正在使用此優(yōu)化,則導出軟件包中可以只有接口和抽象類。
在步驟320,應用設計者可選地建立可信任字典工具。應用設計者將 應用所使用的任何機密數(shù)據(jù)提供到已知的可信任環(huán)境(如在其中創(chuàng)建Java 應用215的環(huán)境)中的可信任字典265中。
允許最終用戶在安裝期間在用戶的機器上實例化可信任字典265并不 能保證所需的可信任環(huán)境。所述應用設計者建立工具來實例化可信任字典 265、向該工具提供必需的機密,以及使用標準的ObjectOutputStream方 法將該工具串行化成文件。
例如,被串行化的可信任字典265可以作為Java應用215的Java檔 案文件的一部分來部署。串行化的可信任字典265僅可由可信任Java虛擬 機205來讀或?qū)憽?br>
應用設計者在步驟325可選地設計用于Java應用215的注冊過程。如 果Java應用215的給定實例要保持綁定到單個平臺,則調(diào)用捆綁包啟動器 類的start()方法將讀取私有可信任字典265、在私有可信任字典265上執(zhí) 行setLocal(),以及將所述私有可信任字典265寫回到文件系統(tǒng)中。為了更多的保護,應用設計者可以將步驟325與到外部注冊服務的連 接相合并。與所述應用一起部署的私有可信任字典265可以具有用于初始 連接的ID和機密。在可信任字典265已被本地化之后,后續(xù)機密可以作 為注冊的一部分被傳送。
所述應用設計者在步驟330可選地設計安全計數(shù)。Java應用215可以 在操作期間需要安全計數(shù)。當在硬盤上保存和恢復文件時無法輕易,皮用戶 重置的安全計數(shù)3皮存儲在可信任字典265中。捆綁包啟動器類的start()方 法的調(diào)用將讀取私有可信任字典265并在該私有可信任字典265上執(zhí)行 preventNorma限estore()。 然后,所述捆綁包啟動器類4吏用 ObjectOutputStream的writeObject()方法將所述私有可信任字典265寫回 文件系統(tǒng)中??尚湃巫值?65現(xiàn)在處于不可逆的狀態(tài),意味著最終用戶無 法通過簡單地使用舊版本替換其文件來輕易地將其更改為先前狀態(tài)。
每次在可信任字典265中遞增安全計數(shù)時,所述安全計數(shù)被寫回文件 系統(tǒng)中。然后,Java應用215在可信任字典265上執(zhí)行commit(),防止由 于不合適的系統(tǒng)崩潰而導致無意中破壞可信任字典265。沒有commit(), 用戶可以將可信任字典265恢復回先前的commit()點。在任何字典上的任 何提交(commit)都將提交所有字典。因此,可以使用單個調(diào)用來提交所 有字典,同時按順序更新多個字典。但是,可信任Java虛擬機205能夠恢 復可信任字典265,即使它已被標記為不可逆。
所述應用設計者在步驟335調(diào)試Java應用215??尚湃巫值?65的調(diào) 試版本可以在任何Java虛擬機上運行。根據(jù)系統(tǒng)屬性 trustedDictionary.keyVerify是"真"還是"假,,,所述調(diào)試類可以或可以 不實施適當?shù)囊押炇鸬腏ava檔案文件??尚湃巫值?65的調(diào)試版本實施可 信任字典265的"可串行化"行為即,可信任字典265中的所有對象都 可串行化并且"get"方法返回原始對象的副本而不是原始對象本身。
可信任字典265的調(diào)試版本在可信任Java虛擬機205中不可讀??尚?任Java虛擬機205不支持任何種類的調(diào)試。
所述應用設計者在步驟340完成Java應用215的建立過程。可選地,如果該設計者加密一個或多個類,則可以獲得媒體密鑰塊。此媒體密鑰塊
專用于所述Java檔案文件的7>鑰。
Java檔案簽署器(jarsigner)被用來簽署Java檔案文件。在Java檔 案文件被簽署之后,不會再向所述Java檔案文件添加類。但是,數(shù)據(jù)或其 他資源可以在Java檔案文件被簽署之后被添加到所述Java檔案文件???信任字典265是自驗證的;因此,通常不需要在Java檔案文件中簽署可信 任字典265。
圖4 (圖4A、 4B)的過程流程圖的方法400示出了可信任Java虛擬 機10中的DVD播放器應用與DVD盤之間的交互。用戶具有DVD驅(qū)動器 并希望使用開放源代碼DVD播放器軟件來操作DVD驅(qū)動器。DVD驅(qū)動 器是操作DVD盤的機械裝置。所述用戶在步驟405下載可信任Java虛擬 機205并將其安裝在他的DVD設備上。所述DVD設備包括DVD驅(qū)動器 和充分的計算能力以操作所述可信任Java虛擬機205和所述DVD驅(qū)動器。
在步驟410,用戶下載并安裝DVD播放器軟件。所述DVD播放器軟 件包括一個或多個可信任捆綁包240中的開放源代碼和一個或多個可信任 字典265中的機密(如密鑰)和ID??尚湃蜫ava虛擬機205檢查所述DVD 播放器軟件的可信任捆綁包240的數(shù)字簽名以確保可信任捆綁包240自其 被創(chuàng)建以來尚未被修改(步驟415)。如果所述數(shù)字簽名不是完好的(決 策步驟420),則可信任Java虛擬機205在步驟425不允許對可信任字典 265的訪問。
所述DVD播放器軟件在步驟430訪問DVD驅(qū)動器中的DVD盤。所 述DVD盤要求特定的設備密鑰來授權盤播放;這些密鑰被存儲在可信任 字典265中。對可信任字典265的訪問需要由正確密鑰所簽署的完好簽名。 可信任Java虛擬機205在步驟435驗證所述DVD播放器軟件具有適當?shù)?密鑰來訪問可信任字典265。如果所述DVD播放器軟件沒有用于訪問的適 當密鑰(決策步驟440),則可信任Java虛擬機205不允許對可信一f壬字典 265的訪問(步驟425)。
如果所述DVD播放器在決策步驟440具有用于訪問的適當密鑰,則所述DVD播放器軟件被驗證為完好無損并且真實。所述DVD播放器軟件 現(xiàn)在可以訪問可信任字典265??尚湃蜫ava虛擬機205在步驟445解密可 信任字典265。所述DVD播放器軟件在步驟450從可信任字典265獲得一 個或多個密鑰(例如,設備密鑰)并根據(jù)需要在步驟455將密鑰提供給所 述DVD驅(qū)動器。然后,所述DVD驅(qū)動器在步驟460播放所述DVD盤。 所述DVD播放器軟件、DVD盤和DVD設備可以都由不同的生產(chǎn)商來制 造。但是,它們都協(xié)同工作以確??尚湃蜫ava虛擬機lO中的內(nèi)容保護。
在以未授權的方式4吏用Java應用215的嘗試中,Java應用215可以 被加栽到?jīng)]有提供可信任環(huán)境的常規(guī)Java虛擬機中。在正常操作中,Java 應用215嘗試訪問可信任字典265,請求用于執(zhí)行諸如播放DVD盤之類的 任務的密鑰。但是,所述常規(guī)的Java虛擬機無法解密可信任字典265。因 此,Java應用215無法獲得繼續(xù)操作所需的密鑰。盡管Java應用215是 在常規(guī)Java虛擬機中運行的開放源代碼軟件,但是沒有被Java應用215 的設計者所允許的操作或信息在沒有正確密鑰的情況下無法出現(xiàn)。
應當理解,已經(jīng)描述的本發(fā)明的特定實施例只是本發(fā)明的原理的特定 應用的示例。在不偏離本發(fā)明的范圍的情況下,可以對防墓改可信l壬Java 虛擬機和在此描述的使用該防篡改可信任Java虛擬機的方法做出大量修 改。
權利要求
1.一種用于在可信任環(huán)境中運行防篡改應用的方法,所述方法包括定義包含用于保護數(shù)據(jù)的可信任字典的可信任虛擬機環(huán)境;驗證所述應用的完整性;其中,如果所述應用被篡改,則所述可信任虛擬機環(huán)境阻止所述應用訪問所述可信任字典中的機密,從而禁用所述應用的正常操作。
2.根據(jù)權利要求l的方法,其中如果所述應用的完整性被確認,則所 述可信任虛擬機環(huán)境允許所述應用訪問所述可信任字典中的所述機密,從 而啟用所述應用的正常操作。
3. 根據(jù)權利要求2的方法,其中定義所述可信任虛擬機環(huán)境包括定義 用于保護所述應用的編程代碼的可信任捆綁包。
4. 根據(jù)權利要求3的方法,其中保護所述編程代碼包括加密所述編程 代碼。
5. 根據(jù)權利要求4的方法,其中所述可信任虛擬機環(huán)境使用來自與所 述應用關聯(lián)的媒體密鑰塊的解密密鑰來解密所述加密的編程代碼。
6. 根據(jù)權利要求l的方法,其中定義所述可信任虛擬機環(huán)境包括使用 安全芯片。
7. 根據(jù)權利要求3的方法,其中定義所述可信任捆綁包包括限制對所 述可信4壬捆綁包的指令代碼的訪問。
8. 根據(jù)權利要求1的方法,還包括加密所述可信任字典。
9. 根據(jù)權利要求l的方法,其中定義所述可信任虛擬機環(huán)境包括定義 至少兩個可信任捆綁包;并且其中所述可信任字典在所述至少兩個可信任 捆綁包中的至少某些捆綁包之間凈皮共享以維持所述至少兩個可信任捆綁包 之間的通信完整性。
10. 根據(jù)權利要求1的方法,其中所述應用包括播放防復制媒體的播 放器。
11. 根據(jù)權利要求10的方法,其中所述可信任字典包含一個或多個 解密密鑰以解密所述防復制媒體。
12. —種用于在可信任虛擬機環(huán)境中生成防墓改應用的方法,所述方 法包括判定所述應用的任何方面是否需要防篡改;如果所述應用的任何 方面需要防篡改,則定義一個或多個可信任捆綁包以限制對一組預定應用 功能的訪問;在非可信虛擬機環(huán)境中運行所述一個或多個可信任捆綁包以 調(diào)試所述應用;以及將所述應用部署在所述可信任虛擬機環(huán)境中。
13. 根據(jù)權利要求12的方法,其中所述應用的所述方面包括以下各 項中的任意一個或多個所述應用的完整性、所述應用的機密密鑰、;K密 數(shù)據(jù)以及機密代碼。
14. 根據(jù)權利要求12的方法,其中判定所述應用的任何方面是否需 要防篡改包括判定所述應用是否需要訪問在可信任虛擬機環(huán)境中運行的另 一個應用內(nèi)的可信任捆綁包。
15. 根據(jù)權利要求14的方法,還包括定義將在來自所述應用和另一個 應用的所述可信任捆綁包之間凈皮共享的可信任字典。
16. 根據(jù)權利要求13的方法,其中如果所述方面是機密密鑰或機密數(shù) 據(jù)中的任何一個,則建立工具以生成至少一個具有所述機密密鑰或所述機 密數(shù)據(jù)的可信任字典。
17. 根據(jù)權利要求12的方法,其中所述應用的所述方面包括阻止所述 應用被復制。
18. 根據(jù)權利要求17的方法,還包括設計注冊過程以判定所述應用是 否已被復制。
19. 根據(jù)權利要求12的方法,其中所述應用的所述方面包括阻止用戶 重置所述應用的活動的計數(shù)。
20. 根據(jù)權利要求19的方法,還包括設計可信任字典以包含所述活動 計數(shù)。
21. —種具有指令代碼的計算^IM呈序產(chǎn)品,當所述指令代碼被執(zhí)行時, 所述指令代碼用于執(zhí)行以上任一權利要求的方法步驟。
全文摘要
一種可信任Java虛擬機,所述可信任Java虛擬機提供了一種用于支持防篡改應用、確保應用及其機密(例如密鑰)的完整性的方法。所述可信任Java虛擬機驗證所述Java應用的完整性,阻止調(diào)試所述Java應用并使得所述Java應用能夠安全地存儲并檢索機密??尚湃蜫ava虛擬機環(huán)境包括可信任字典、可信任捆綁包、用于加密和解密字節(jié)代碼的可選加密方法以及下層可信任Java虛擬機。加密的可信任字典保護數(shù)據(jù)而所述可信任捆綁包保護編程代碼,允許應用存儲機密數(shù)據(jù)和安全計數(shù)器。應用設計者可以將可信任捆綁包訪問只限于那些所述應用設計者顯式導出的接口。開放源代碼可以可選地被加密。所述應用的所述開放源代碼的編程代碼所需的機密在可信任字典中被加密。
文檔編號G06F21/00GK101305333SQ200480034386
公開日2008年11月12日 申請日期2004年11月9日 優(yōu)先權日2003年11月26日
發(fā)明者D·小利克, J·羅茨皮奇, S·寧, W·普羅夫, 金紅霞 申請人:國際商業(yè)機器公司