專利名稱::基于公開密鑰加密的數(shù)據存儲和數(shù)據檢索的制作方法
技術領域:
:本發(fā)明涉及數(shù)據存儲和數(shù)據檢索,尤其涉及基于公開密鑰加密的數(shù)據存儲和數(shù)據檢索。
背景技術:
:保護計算機上的數(shù)據,以使數(shù)據只被提供給合適的一方,這是用戶所非常關注的。用戶需要保護的數(shù)據類型變化很大,例如與工作相關的或私人的機密文件、銀行賬號、信用卡號碼、社會保險號碼等等。另外,對某些第三方而言,防止非法使用或訪問用戶計算機上的數(shù)據也同樣是重要的。例如,信用卡發(fā)行者希望信用卡號能夠得到保護從而不被泄漏給惡意程序或計算機黑客,音樂公司希望其歌曲能夠防止被盜版,電影制片廠希望防止其電影被盜版等等。為保護計算機上的數(shù)據,一種解決方案是舍棄通用計算設備而使用用于傳輸、存儲和顯示保密內容的專用抗干擾盒,。然而,這種解決方案并不是切實可行的,因為他阻止用戶擴展他們的計算機(例如,用戶不能在這種抗干擾盒上安裝另外的軟件組件和/或硬件組件)。因此,提供一種在通用計算設備上對數(shù)據進行保護的途徑是必要的。
發(fā)明內容基于公開密鑰加密的數(shù)據存儲和數(shù)據檢索將在下文進行說明。一方面,從一個調用程序獲得數(shù)據。使用公開密鑰加密以僅僅允許一個或多個目標程序從所述密文中獲得所述數(shù)據的形式產生包括該數(shù)據的密文。另一方面,從一個調用程序獲得一個位串。檢驗所述調用程序的的標識符以確認是否允許所述調用程序訪問所述位串密文中的加密數(shù)據。只有當所述調用程序被允許訪問所述數(shù)據時,該數(shù)據才通過公開密鑰被解密,并返回到所述調用程序。相同的標記應用于整篇文件,代表相同的組件和/或特征。圖1說明一個典型的訪問控制模型。圖2表示使用四個不同等級層次的一個訪問控制環(huán)境。圖3是用于執(zhí)行封閉操作的一個典型操作的流程圖。圖4是用于執(zhí)行開放操作的一個典型操作的流程圖。圖5是用于執(zhí)行存儲操作的一個典型操作的流程圖。圖6是用于執(zhí)行封閉操作的一個典型操作的流程圖。圖7是用于執(zhí)行引用操作的一個典型操作的流程圖。圖8是用于執(zhí)行檢驗操作的一個典型操作的流程圖。圖9是用于執(zhí)行封閉操作的一個典型操作的流程圖。圖10是用于執(zhí)行公開密鑰封閉操作的一個典型操作的流程圖。圖11是用于執(zhí)行通用封閉操作的一個典型操作的流程圖。圖12說明可用于執(zhí)行下文中的技術的一個通用計算機環(huán)境。具體實施例方式圖1說明一個典型訪問控制模型100。主體102能夠產生訪問被保護資源的一個請求。所述請求被一個防護裝置104所接收,該防護裝置控制對資源106的訪問。防護裝置104在與所述資源和其他信息相關的訪問策略的基礎上檢查所述請求并決定是否授權該請求,諸如識別發(fā)布所述請求的主體102。為更好的解釋,圖1中示出了一個單獨的主體102、防護裝置104和資源106。然而,應該說明,訪問控制模型100可包括多個主體102、多個防護裝置和104和/或多個資源106。主體102涉及請求訪問保護數(shù)據的一個組件或模塊。該請求可以是用于檢索被保護數(shù)據的一個請求(例如,用于檢索一個密鑰的一個請求),或使用所述保護數(shù)據來執(zhí)行操作的一個請求(例如,所述保護數(shù)據可以是一個密鑰,所述請求可以是通過使用所述密鑰進行加密或解密的請求)。所述主體102能以硬件、軟件、韌件的形式或硬件、軟件和/或韌件的組合形式來被實現(xiàn)。防護裝置104涉及一個組件或模塊,該組件或模塊控制訪問所述保護數(shù)據。防護裝置104使用與所述保護數(shù)據相關的訪問策略以及其它信息(例如對請求訪問所述保護數(shù)據的主體的識別)確定是否允許所述主體訪問所述保護數(shù)據。如果防護裝置104確定所述請求主體被允許訪問所述保護數(shù)據,則防護裝置104以一種合適的方式響應所述請求(例如,如果所述請求是對所述保護數(shù)據一個請求,則所述保護數(shù)據被返回給所述主體;或者,如果所述請求是一個與將使用所述保護數(shù)據進行加密的特定數(shù)據相關的請求,則防護裝置104使用所述保護數(shù)據來加密所述特定數(shù)據,并且返回所述密文(所述加密數(shù)據)到所述主體)。應該注意的是防護裝置104基于所述請求的性質來約束主體。例如,防護裝置104可以允許一個特定的主體具有使用所述保護數(shù)據簽名的特定數(shù)據,但是不允許所述保護數(shù)據被返回給所述特殊主體。防護裝置104也可被表現(xiàn)為一個解密防護裝置和/或一個服務防護裝置。服務防護裝置在沒有公開所述保護數(shù)據的情況下依據所述主體請求,利用所述保護數(shù)據(例如,一個密鑰)執(zhí)行某個操作(例如,加密、解密、數(shù)字簽名等)。另一方面,一個解密防護裝置將所述保護數(shù)據披露給被授權的請求者。應該注意的是,一個特殊防護裝置104可以同時是一個解密防護裝置和一個服務防護裝置。資源106可以是訪問被約束的任何數(shù)據類型。例如,資源106的例子包括密鑰、銀行賬戶、信用卡號、諸如社會保險號之類的個人信息、密碼等等。資源106實質上可以是一個計算設備以外的別的東西。例如,資源106可以是物理存儲器(例如,RAM或ROM),光盤或磁盤或磁盤機、視頻卡、聲卡、智能卡等等。又譬如,資源106也可以是操作系統(tǒng)的抽象,例如,進程、文件、線程、信號等等。在這里的論述中,將說明關于在一個單獨的計算設備上執(zhí)行的訪問控制模型100。然而很明顯所述,模型的不同部分可以在不同的計算設備上執(zhí)行。例如,主體102可以在一個計算設備上,而防護裝置104和資源106可以在其它的計算設備上。在一個計算設備上的主體和防護裝置可被分類為任意數(shù)目n的多個層次ln。圖2表示一個使用四個不同層的訪問控制環(huán)境。在一個實施例中,層l1涉及一個硬件或保密核心層,層l2涉及一個基本輸入/述出系統(tǒng)(BIOS)層,層l3涉及一個操作系統(tǒng)(OS)層,層l4涉及一個應用層。在圖2所示的范例環(huán)境中,最低層(層l1)保護根資源。在擔任下一個更高層中主體的防護裝置的同時,中間層(層l2和l3)中的程序擔任從下一個更低層中請求訪問的主體。所述中間層便可以為更高層中的主體增加功能。例如,假設一個程序120期望檢索被防護裝置126所保護的根資源128。程序120擔任一個請求從模塊122訪問所述根資源128的主體,即擔任所述資源的一個防護裝置。如果模塊122具有所述資源128的一個副本(例如,響應與所述資源相關的在前請求并利用程序120或層I4中的某個其他程序從防護裝置126中在前得到的或者當模塊122被初始化或載入所述計算設備中時),模塊122則檢查程序120是否被允許檢索所述資源。如果程序120被允許檢索所述資源,則模塊122返回所述資源到程序120。但是,如果模塊122沒有所述資源128的副本,則模塊122擔任請求從模塊124訪問所述根資源的一個主體,模塊124擔任所述資源的一個防護裝置。如果模塊124具有所述資源128的一個副本(例如,由模塊122或者在層l3中的某個其他模塊響應與所述資源相關的在前請求從防護裝置126中在前獲得的或者當模塊124被初始化或載入所述計算設備時),則模塊124檢查模塊122是否被允許檢索所述資源。如果模塊122被允許檢索所述資源,則模塊124返回所述資源到模塊122。然而,如果模塊124沒有所述資源128的一個副本,則模塊124擔任請求從防護裝置126訪問所述根資源的一個主體。防護裝置126檢查模塊124是否被允許檢索所述資源,并且,如果模塊124被允許檢索所述資源,則返回所述資源到模塊124。如果模塊122被允許檢索所述資源,則模塊124返回所述資源到模塊122,并且,如果程序120被允許檢索所述資源,則模塊122返回所述資源到程序120。在這里的論述中,為圖1的訪問控制模型100的使用列出了多個參考,以允許驗證軟件操作。通常,在軟件的驗證操作中被保護的所述資源是密鑰。然而很明顯,軟件驗證操作僅僅是使用訪問控制模型100的例子之一。另一個使用訪問控制模型100的例子是對計算機用戶的驗證。大多述當代計算機居有一個訪問控制系統(tǒng)。一個用戶登錄到計算機,以便該計算機知道用戶是誰。登錄之后,用戶運行通常訪問系統(tǒng)資源(例如,讀取文件、寫到屏幕上的窗口等)所需要的程序。通常,所述計算機的所述訪問控制系統(tǒng)被商議(例如,“用戶X能在資源Z上執(zhí)行操作Y嗎?”)。如果答案是否定的,所述程序便不能訪問所述資源。另一個使用訪問控制模型100的例子是對遠程服務用戶的驗證。諸如網絡站點(例如,在線經紀人或銀行)之類的遠程服務可被認為具有訪問控制系統(tǒng)。所述資源是人民銀行賬戶、他們的錢和股票。一個用戶登錄到所述網絡站點之后,所述訪問控制系統(tǒng)將確定所述用戶是否被授權執(zhí)行其請求的訪問,例如,對“銀行賬戶數(shù)據”資源的訪問(以檢索最新的銀行狀態(tài)),或者對資源“銀行賬戶12345中的1000美元”的一個“傳輸”訪問。另一個使用訪問控制模型100的例子是對特殊建筑或區(qū)域的物理訪問的約束。例如,當一個用戶早上到達崗位時,該用戶出示他/她的證件并請求對資源“前門”的“打開”操作。某個電子系統(tǒng)(一個防護裝置)根據證件上所存儲的信息確定所述用戶是否被允許進入該建筑并相應的對該門進行解鎖。如果可能讓計算機程序(從一個解密防護裝置或服務防護裝置)獲得對至少一個加密資源的保護訪問,則一臺計算設備使能一個程序(軟件)的驗證操作。如下文所述,在某些實施例中,使能驗證和隔離的計算設備使能驗證操作。如果這兩點都能夠被滿足,那么,程序C被稱之為正在與另一個程序D相互隔離(1)具有能被程序C訪問而不能被程序D訪問的存儲器,(2)程序D不能運行程序C(除了由程序C確定的一個可能的入口點)。一個程序由它的轉換規(guī)則(可執(zhí)行代碼)和它的初始狀態(tài)(入口點或指令指示器IP初始值)所提供。由于數(shù)據能存儲在不能被程序D所訪問的存儲器中,所以,即使有程序D的相悖行為的存在,所述第一點也能夠保證程序C的程序代碼和狀態(tài)信息的完整。這一點還允許程序C能夠保護來自由程序D的觀察中的機密數(shù)據(例如,密鑰)。所述第二點保證D不能通過選擇相悖的入口點來破壞C的行為。另外,如果程序C使能識別轉換規(guī)則(程序代碼)和程序D的初始狀態(tài),則可以說程序C能驗證程序D。計算設備能從任何其它程序D隔離出程序任何程序C,一個例外是,每層j<i的單個程序Ej,其中i是程序C的層。這可保護多個程序免受任一程序的觀察和干擾,除了防護裝置的序列E1,E2,......,Ei-1之外,程序C通過該防護裝置而請求訪問其資源。并且,對任何層i而言,所述計算設備能使一個程序在層i中執(zhí)行以驗證至少在層i+1中的一些程序。該請求允許一個程序擔任與來自所述下層中主題的請求相關的防護裝置。這兩個觀察導致了一個歸納式論證,即任何層中的程序可通過向它的前任請求訪問一個資源、并通過隔離來保護其完整和他們的資源以及驗證來自下一個層中的主體的請求而擔任資源的防護裝置。隔離可通過使用物理存儲器保護來實現(xiàn)。這種途徑被稱之為“空間中的隔離”和“空間隔離”。例如,許多現(xiàn)代微處理器中的環(huán)和虛擬存儲器保護足以實現(xiàn)空間中的隔離。以特權方式運行的一個操作系統(tǒng)核心(層i)可為應用程序(層i+1)建立頁表,從而,任何應用程序只能訪問物理存儲器的某些部分,該部分是所述操作系統(tǒng)核心選定映入的所述應用程序虛擬地址空間。并且,所述核心約束應用程序的特權以使它們不能改變存儲器映象,并保證應用程序僅在明確規(guī)定的入口點(系統(tǒng)調用)來啟動核心代碼的執(zhí)行。另一種在兩層之間實現(xiàn)隔離的途徑是及時分離它們的執(zhí)行。該方法涉及“及時分離”和“時間分離”。第一層i中的一個程序被完全執(zhí)行,并使不能獲得某些資源,然后便終止。隨后,控制被轉到下一個層i+1中。驗證發(fā)生在隨后的多個層(j=i+1)之間。程序C驗證程序(轉換規(guī)則)和j的配置的初始狀態(tài)。所述程序能通過使程序C檢查層j中的程序來得以驗證。即,典型程序C讀取包含層j的程序的存儲器,并在這個存儲器的范圍來計算一個機密摘要。應該注意的是,該點的目的僅在于確定所述代碼的身份,而不是評估有關所述代碼的其它主體的陳述。因此,在這一點上,證件并不是必要的。程序C的第二個任務是識別程序D的初始狀態(tài)。一般而言,在任意一個執(zhí)行階段來確定一個程序的初始狀態(tài)時非常困難的。因此,程序C控制程序D的初始狀態(tài)。實際上,這意味著如果程序C以δ狀態(tài)啟動程序D的執(zhí)行,那么,程序C僅能確定程序D的初始狀態(tài)δ??傊?,為了驗證程序D,程序C檢查其認為相關的存儲器內容并計算一個機密摘要。之后,程序C傳輸執(zhí)行到一個明確的程序D的入口點。在所述資源是加密密鑰的情況下,驗證操作允許每一個操作系統(tǒng)和應用程序排它地訪問一個或多個機密。上述隔離保護每一個機密免受敵對代碼的攻擊。上述程序的驗證允許程序被識別,從而每個機密只能夠被披露給擁有它的所述程序。通常,由于從程序(圖1的一個主體102)給出一個請求,防護裝置104設立所述程序的身份(即,防護裝置104授權所述程序)。如果所述程序不是請求保密的所有者(資源106),則防護裝置104拒絕該請求。否則,防護裝置104計算所述機密的某個函數(shù)(其自身可以是所述機密),并且可能的話,還進一步計算由所述程序所提供的信息并返回所述結果。或者說,不是明確接收或拒絕請求,防護裝置104可為所述請求服務,但將所述調用者的身份匯編到所述結果中。這種交替的方法是合適的,例如,如果被所述防護裝置返回的所述結果不包括保密信息(例如,使用一個機密產生數(shù)字簽名的請求)。項選通函數(shù)這里被用于查閱這兩種情況。另外,在各種情況下,防護裝置104驗證所述調用者(主體102)。對主體102的驗證也涉及這里的一個函數(shù)ID(),該函數(shù)id()返回所述調用程序(該程序調用防護裝置104的一個選通函數(shù))的一個摘要。所述摘要可以由任何一種慣用方式生成,例如使用任何一個或多個加密哈希函數(shù)(也稱為單向哈希函數(shù)),例如SHA1(保密哈希運算法則1),MD5(信息摘要5),MD2(信息摘要2),等等;使用鍵控MAC(消息驗證碼)等等。這里所說明的一類選通函數(shù)實現(xiàn)封閉存儲。封閉存儲的目的在于允許程序存儲機密,以使僅僅一組特殊的一個或多個程序(由存儲機密的程序所規(guī)定)能檢索所述機密。在一個實例中,僅有最初保存(封閉)所述機密的計算機能恢復(開啟)所述機密。通常,這些機密的使用期限將超出所述程序的單獨執(zhí)行期限。在程序執(zhí)行一次期間所使用的機密能被保存(封閉)或者隔離,一個隨機數(shù)發(fā)生器也允許所述程序在一次執(zhí)行期間保持所述機密。封閉存儲也允許一個程序在整個執(zhí)行期間自始至終都保持機密,這些執(zhí)行不能即時重疊。借助以下接口(例如,使用“封閉”和“開啟”操作和/或公開密鑰封閉和公開密鑰開啟操作),層li將封閉存儲暴露給下一層li+1。關于封閉存儲的論述涉及被用于加密和解密的密鑰。這些密鑰是與正在對資源進行防護的防護裝置(例如,圖1的防護裝置104)相關的密鑰。這里的論述也涉及程序標識符(例如,調用一個操作的程序的一個標識符,或被允許訪問一個資源的一個目標程序的一個標識符)。這些標識符在這里經常被稱之為摘要。然而很明顯,摘要僅僅是程序標識符的一個例子??墒褂脴俗R符的其它類型,該標識符是程序的一個度量或其它表現(xiàn),并允許對程序的任何改動都被檢測。如果程序被有所改動(例如,為惡意訪問或利用保護數(shù)據的對手所改動的一個或多個指令),則所述程序的所述標識符將反映出該變動(例如,未發(fā)生變動的程序的標識符將不同于發(fā)生變動的程序的標識符)。所述封閉操作接收將被封閉的數(shù)據(例如,一個機密)輸入。所述封閉操作也可任選地接收作為輸入的用于識別何時和/或向何者披露機密的條件。在一個實施例中,該條件是一個目標程序的一個摘要,該程序被允許檢索(開啟)所述數(shù)據。另外,被允許檢索(開啟)所述數(shù)據的程序能以其它方式被識別。例如,所述程序可被一個公開密鑰識別,從而使得每個證明與一個或多個程序相關。另外,除了或代替所述目標程序的標識符還可以使用其他條件。例如,所述條件可包括與所述數(shù)據可被披露(開啟)的時間相關的特殊的時間約束,例如在所述機密可被披露(開啟)期間的一周的一天或多天的特殊時間。又譬如,為了使所述機密被披露(開啟),所述條件可包括必須被提供的一個口令或其它數(shù)據的標識符,例如,所述機密只能被知道口令的程序所開啟。又譬如,所述條件可以是一個邏輯公式(例如,寫在第一階邏輯中的任何陳述,寫在謂詞邏輯中的任何陳述等等)。所述邏輯公式被評估(例如,通過防護裝置)并且只有當所述評估返回真的指示時,所述機密才被披露(開啟)。又譬如,所述條件可以是某種語言的可執(zhí)行程序(例如,java,C*,Javascript,VBScript等等)。程序被執(zhí)行(例如,通過防護裝置),只有當所述程序返回某個為“真”或“滿足”的指示時,所述機密才被披露(開啟)。在所述條件是所述目標程序的摘要的情況下,所述封閉操作可使用調用所述封閉操作的所述程序的摘要,(借此隱含地輸入所述目標程序的摘要),來代替提供所述目標程序的摘要。另外,多目標程序的摘要可被輸入到所述封閉操作,借此允許多目標程序披露(開啟)所述數(shù)據。所述封閉操作將所述調用者的標識符與輸入(所述數(shù)據和允許披露(開啟)所述數(shù)據的條件)一起進行加密。所述封閉操作以一個加密的形式(作為密文)返回所述輸入數(shù)據。所述封閉操作也返回一個值(例如,一個消息驗證碼(MAC)值),該值可用于驗證所述封閉數(shù)據的完整性。所返回的數(shù)據允許所存儲的數(shù)據在隨后的開啟操作中被引用,在下文中將進一步論述。用于所述開啟操作的偽碼在表I中進行說明。在表I的偽碼中,ID()涉及上文論述的ID()函數(shù),e涉及被返回給所述調用程序的值(例如,一個字符串或位序列),數(shù)據涉及被封閉的數(shù)據,并且[t1......,tm]涉及一個或多個目標程序的摘要,該目標程序允許披露(開啟)所述數(shù)據(或者說,一個或多個其它條件)。表I圖3是說明用于實現(xiàn)所述封閉操作的一個范例處理200的流程圖。處理200被圖1中的防護裝置104所執(zhí)行,并且能以硬件、軟件、韌件或其結合的形式來實現(xiàn)。最初,從所述調用程序接收一個需要被封閉的機密(步驟202)。所述機密被加密以使所述機密只能被一個特殊的目標程序所檢索(步驟202),或者,如果一個或多個特定條件被滿足的話,所述機密只能被檢索。包括加密機密的密文則被返回給所述調用程序(步驟206)。附加信息也可被返回給所述調用程序(作為所述密文的一部分或從所述密文分離),例如所述調用程序和/或所述目標程序的一個摘要。所述開啟操作接收作為輸入的一個位串,該位串是在封閉所述調用程序現(xiàn)在希望檢索的數(shù)據時由所述封閉操作返回的。所述開啟操作獲得用于披露所述數(shù)據的條件,并檢查這些條件是否被滿足。例如,如果條件包括被允許檢索(開啟)所述數(shù)據的一個或多個目標程序的摘要,則所述開啟操作獲得這些摘要并檢查所述調用程序是否是一個或多個目標程序之一。如果所述調用程序不是一個或多個調用程序之一,則所述開啟操作失敗且所請求的數(shù)據不被返回給所述調用程序。然而,如果所述調用程序是一個或多個目標程序之一,則所述開啟操作成功且所述被請求的數(shù)據被返回給所述調用程序。封閉所述數(shù)據的程序的摘要也被所述開啟操作任意返回。用于開啟操作的偽碼在表II中進行說明。在表II的偽碼中,數(shù)據涉及正被請求的數(shù)據(并且先前已被封閉),[t1......,tm]涉及被允許檢索(開啟)所述數(shù)據的一個或多個目標程序的摘要(即一個或多個其它條件),e涉及對所述開啟操作的輸入(通過一個封閉操作的先前的典型輸出),并且d涉及封閉所述數(shù)據的程序的摘要。表II圖4時說明用于實現(xiàn)所述開啟操作的一個范例處理220的流程圖。處理220由圖1的防護裝置104所執(zhí)行,也可通過硬件、軟件、韌件或其結合來實現(xiàn)。最初,所述調用者所期望檢索的、帶有加密數(shù)據的密文被檢索(步驟222)。作出一個關于是否允許所述調用程序檢索所述數(shù)據的檢查(步驟224),并進行基于是否允許所述調用程序檢索所述數(shù)據的處理(步驟226)。如果所述調用程序被允許檢索所述數(shù)據,則所述數(shù)據(已解密)被返回給所述調用程序(步驟228)。如果所述調用程序不被允許檢索所述數(shù)據,則所述處理失敗(步驟230)且所述數(shù)據不被返回給所述調用程序。封閉存儲可通過不同的方式實現(xiàn)。在一個實施例中,通過使用物理保護的非易失性存儲器來實現(xiàn)封閉存儲。在本實施例中,所述計算設備與具有被保護的非易失存儲器的不同部分的防護裝置相聯(lián),并允許每一個防護裝置只能訪問與所述防護裝置相關的部分。在本實施例中,調用閉和開啟操作中涉及的存儲和檢索操作以使所述計算設備能夠分別存儲和檢索在與所述防護裝置相關的被保護非易失性存儲器中的數(shù)據。例如,一個存儲設備(例如一個硬盤驅動器)可實現(xiàn)一個防護裝置。不是簡單的對所述存儲設備無條件地執(zhí)行讀寫命令,所述存儲設備識別企圖訪問該存儲設備的主體(例如,基于所述主體的一個摘要),并僅僅允許一個特殊的主體訪問所述存儲設備。另外,不同的主體可被約束為只能訪問所述存儲設備的特殊部分(例如,特殊的扇區(qū)或地址范圍)。在另一個實施例中,通過使用密碼術實現(xiàn)封閉存儲。下面將描述通過使用密碼術來進行封閉存儲的一個典型實施例。當使用密碼術來實現(xiàn)封閉存儲時,所述資源是一個密鑰K而不是被物理保護的存儲器。所述存儲操作不是物理地存儲其輸入。相反的,所述存儲操作產生一個密碼保護的輸出c,該輸出c是一個以加密和整體保護形式出現(xiàn)的存儲操作的輸入。所述加密是將一個對稱密碼施加到所述輸入上的結果。后一特性是通過(在所述輸入被加密之前或之后)將一個消息驗證碼(MAC)施加到所述輸入上獲得的。在表III中說明用于存儲操作的偽碼。在表III的偽碼中,b涉及被輸入到存儲操作中的位串,c涉及被所述存儲操作輸出的位串。K1涉及密鑰K的第一部分,K2涉及密鑰K的第二部分。所述密鑰K是實現(xiàn)封閉和存儲操作的防護裝置的對稱密鑰。表III因此,從表III中可以看到,通過將一個MAC應用于輸入到所述存儲操作中的位串而生成一個值(m)。所述MAC被用于密鑰K的一個部分(K1)。輸入到所述存儲操作中的位串也通過使用密鑰K的一個第二部分(k2)而被加密。通過將所述MAC施加到所述輸入位串并加密所述輸入位串而生成的值被返回給所述存儲操作的調用程序。所述密鑰K被劃分成兩個獨立的密鑰K1和K2,以避免對MAC和密碼使用相同的密鑰。該劃分能以多種方式中的任何一種方式執(zhí)行。該劃分可使用密鑰K的不同的位或使用一個或多個相同的位。例如,假設密鑰K是1024位,則低512位可用作密鑰K1,高512位可用作密鑰K2,偶數(shù)編號位(位0,2,4,6,8,10,......1022)可用作密鑰K1,奇數(shù)編號位(位1,3,5,7,9,11,......,1023)可用作密鑰K2,低650位可用作密鑰K1,高650位可用作密鑰K2(導致某些位可被用于K1和K2)等等。另外,同一密鑰K可被用于MAC和密碼。表III中說明的偽碼通過計算所述數(shù)據的MAC、加密數(shù)據以及輸出所述MAC和所述密文來實現(xiàn)所述存儲操作。另外,所述存儲操作可以不同的方式實現(xiàn)。例如,所述存儲操作可首先加密所述數(shù)據,然后計算所述密文的一個MAC,并輸出所述密文和所述MAC。又譬如,所述存儲操作可計算所述數(shù)據的MAC,然后加密所述數(shù)據和所述MAC,并輸出所述密文。通過存儲操作的密文來執(zhí)行的加密可通過使用不同的對稱加密算法來實現(xiàn)。通常,對稱加密算法使用同一密鑰進行加密和解密。例如,包括三重DES(數(shù)據加密標準)、AES(高級加密標準)等的算法。類似的,所述MAC可以是任意的消息驗證碼,例如,預先在密碼學——密碼機’96,即1996年的《計算機科學》講稿No.1109中,M.Bellare,R.Canetti和H.Krawczyk的“用于信息驗證的使用密鑰的哈希函數(shù)”中所描述的MAC。另外,通過替代一個MAC的一個公開密鑰數(shù)字簽名來對整體進行保護。圖5是用于實現(xiàn)所述存儲操作的一個范例性處理250的流程圖。通過圖1中的防護裝置104來執(zhí)行處理250,并能以硬件、軟件、韌件或其結合的形式來實現(xiàn)。最初,接收將被存儲的數(shù)據(步驟252)。一個對稱加密算法被應用于所述數(shù)據(步驟254)且一個消息驗證碼(MAC)被應用于所述數(shù)據(步驟256)。在步驟254中生成的加密數(shù)據和在步驟256中生成的MAC值被返回給所述調用程序(步驟258)。所述檢索操作接收包括一個MAC值和密文的的輸入位串。所述密文被解密以生成明文,并生成所述密文的一個MAC值。如果所述明文的MAC值與作為輸入位串的一部分而被接收的MAC值相同,則所述明文被返回給所述調用程序。但是,如果所述明文的MAC值與作為輸入位串的一部分而被接收的MAC值不同,則所述檢索操作失敗且所述明文不被返回給所述調用程序。很明顯,為從所述輸入位串獲得所述MAC和所述密文而進行的檢索操作的特殊方式取決于實現(xiàn)所述存儲操作的方式。在表IV中說明用于檢索操作的偽碼。在表IV的偽碼中,c涉及被輸入到所述檢索操作中的位串,b涉及被輸出到所述檢索操作中的位串,m涉及被輸入到所述檢索操作中的位串的部分MAC值,d涉及被輸入到所述檢索操作中的位串的部分密文,K1涉及所述密鑰K的第一部分,K2涉及所述密鑰K的第二部分。同上文中結合所述存儲操作相關的論述一樣,K1和K2是所述密鑰K的同一部分。表IV因此,從表IV中可以看到,通過解密輸入給所述檢索操作的位串來生成一個值(b)。如果所述檢索操作生成的MAC值與作為輸入給所述檢索操作中的一部分的位串而被接收的MAC值相同,則所述值(b)被返回給所述檢索操作的調用程序,否則所述檢索操作失敗。表IV中的所述偽碼基于所述存儲操作的實現(xiàn),在該存儲操作中計算所述數(shù)據的MAC并加密所述數(shù)據,所述MAC和密文一起被輸出(和作為到所述檢索操作的輸入位串)。如果所述存儲操作首先加密所述數(shù)據,則計算所述密文的一個MAC并輸出所述密文和MAC,然后,所述檢索操作將計算所述密文的MAC并和以部分輸入位串的形式所接收的MAC相比較,如果所述MAC值相匹配,則解密所述密文并返回所述解密數(shù)據。如果所述存儲操作被用于計算所述數(shù)據的一個MAC,則加密所述數(shù)據和MAC,然后所述檢索操作將解密所述輸入位串,然后計算所述輸入位串中的數(shù)據的一個MAC并將該MAC和所述解密字符串中的一個MAC相比較,如果所述MAC值相匹配,則返回所述數(shù)據。類似于上文中所述存儲操作的相關論述,所述檢索操作能使用任意的解密算法。然而,所述解密算法應與所述加密算法相應,以使所述加密數(shù)據能被解密。類似的,任意的消息驗證碼能被用作所述MAC,但是所用的消息驗證碼應與所述存儲操作使用的消息驗證碼相同。圖6是用于實現(xiàn)所述封閉操作的一個范例處理270的流程圖。圖1中的一個防護裝置104執(zhí)行處理270,且能以硬件、軟件、韌件或其結合的形式來實現(xiàn)。最初,接收一個密文和MAC值(步驟272)。所述密文被解密以生成明文數(shù)據(步驟274)。一個消息驗證碼(MAC)被應用于所述明文數(shù)據以生成一個MAC值,并檢查步驟276中生成的MAC值是否等于步驟272中所接收的MAC值(步驟278)。根據所生成的MAC值是否等于所接收的MAC值來進行處理(步驟280)。如果所生成的MAC值等于所接收的MAC值,則所述明文數(shù)據被返回給所述調用程序(步驟282)。然而,如果所生成的MAC值不等于所接收的MAC值,則處理失敗且所述明文數(shù)據不被返回所述調用程序。因此,用于封閉操作的加密方法充分保證了值c(所述存儲操作的輸出)的任何訛誤都能被檢測,并且,若沒有對密鑰K2(用于加密值b的密碼所使用的密鑰)的訪問,值b(所述存儲操作的輸入)不能被檢索。另一類選通功能實現(xiàn)遠程驗證。遠程驗證的目的是,即使在沒有到驗證裝置強物理耦合(例如,使用服務器或智能卡)的情況下也能驗證程序。在這種情況下,驗證是基于密碼的。即,兩個實體形成一個加密驗證協(xié)議。這包括能訪問一個機密的驗證配置,該配置通常是基于所述協(xié)議的一個專用密鑰或一個對稱密鑰。另外,所述計算設備能將這些驗證機密的使用和要求該使用的配置(例如,處理器和/或軟件)的等同性連接起來。因此,所述驗證裝置能建立所述計算設備以及在其上執(zhí)行的所述軟件的的等同性。引用操作和公開密鑰開啟操作分別是用于公開密鑰簽名和公開密鑰解密的選通功能。實現(xiàn)這些選通功能的防護裝置訪問簽名密鑰Ks和解秘密鑰Kd。所述簽名密鑰Ks和解秘密鑰Kd也被稱之為公開/專用密鑰對的專用密鑰。該公開/專用密鑰對是實現(xiàn)所述引用和公開密鑰開啟操作的防護裝置的一對密鑰。所述引用操作通過所述引用操作的輸入和一個條件的一個結合(例如,級連)來返回一個公開密鑰簽名,該條件識別何時和/或所述機密可被披露給何者。與上文中論述的所述封閉和開啟操作類似,所述機密的披露受限于多個條件的任意一個條件。在一個實施例中,該條件是所述調用程序的一個標識符(例如是所述調用程序的摘要)。在所述簽名內部具有表示所述操作是在被識別調用程序的請求的基礎上執(zhí)行的一個證明。所述引用操作與一個驗證操作協(xié)力工作,該驗證操作通常是在用于執(zhí)行引用操作的設備以外的設備(例如在遠程服務器或智能卡上等等)上執(zhí)行。所述驗證操作執(zhí)行一個公開密鑰簽名驗證,并檢索和評估所述調用程序(和/或其它用于披露所述機密的條件)的標識符。在表V中說明用于引用操作的偽碼。在表V的偽碼中,ID()涉及上述的ID()函數(shù),a涉及被輸入到所述引用操作中的數(shù)據,Ks涉及一個簽名密鑰。表V因此,從表V中可以看出,所述引用操作獲得所述調用程序的一個摘要并接收一個輸入值a。所述引用操作使用簽名密鑰Ks生成輸入值a和所述調用程序的摘要的數(shù)字簽名(sn)。輸入值a可由所述調用程序生成,或者可以是從另一個組件或設備(例如,將被執(zhí)行驗證操作的設備)所接收的一個值。使用公開密鑰加密來生成所述數(shù)字簽名。圖7是說明用于實現(xiàn)所述引用操作的一個范例處理300的流程圖。圖1中的防護裝置執(zhí)行處理300,且能以硬件、軟件、韌件或其結合的形式來實現(xiàn)。最初,從一個調用程序(步驟302)接收輸入數(shù)據。獲得該調用程序的一個標識符(一個/或多個用于檢索所述輸入數(shù)據的其它條件)(步驟304)且生成一個數(shù)字簽名(步驟306),該數(shù)字簽名基于所述輸入數(shù)據和所述調用程序的標識符(和/或一個或多個其它條件)的結合。所述驗證操作執(zhí)行一個公開密鑰簽名驗證并檢索和評估所述調用程序的標識符。所述驗證操作通常從除執(zhí)行驗證操作的設備以外的設備(例如,遠程服務設備、智能卡等)中接收由一個調用程序生成的一個數(shù)字簽名。所述驗證操作提取所述程序的摘要(例如,一個應用程序、操作系統(tǒng)、固件程序等)并評估該摘要以決定如何執(zhí)行,上述程序從所接收的數(shù)字簽名中調用所述引用操作。在表VI中說明用于所述驗證操作的偽碼6。在表VI的偽碼中,d涉及調用所述引用操作的程序的摘要,a涉及被輸入到所述引用操作中的值,Sn涉及所述驗證操作所接收的作為一個輸入的數(shù)字簽名。表VI因此,從表VI可以看出,所述驗證操作接收一個數(shù)字簽名,并使用驗證密鑰Kv(該密鑰是包括所述簽名密鑰Ks的公開/專用密鑰對的公開密鑰)從所述簽名中提取所述摘要d和值a。所述驗證操作能評估調用所述引用操作的程序的摘要d。評估摘要d的方式可以改變。例如,所述評估可包括將摘要d與被“核準的”或“信任的”應用程序的列表相比較。圖8是用于實現(xiàn)所述驗證操作的一個范例處理320的流程圖。圖1中的防護裝置104執(zhí)行處理320,并能以硬件、軟件、韌件或其結合的形式來實現(xiàn)。最初,接收一個數(shù)字簽名(步驟322)。引用一個輸入值(使用所述引用操作)的調用程序(和/或一個或多個用于檢索所述輸入值的其它條件)的標記符和所述輸入值本身從所述數(shù)字簽名中被提取(步驟324)。評估所述調用程序的標識符(和/或一個或多個被提取的其它條件)以確定如何繼續(xù)進行所述輸入值(步驟326)。所述公開密鑰開啟操作是在所述調用者(例如所述調用程序的摘要)的一致性的基礎上邏輯選通的一個公開密鑰加密版本或一個或多個其它條件。被輸入到所述公開密鑰開啟操作中的輸入c的公開密鑰解密結果被解釋為一個對(d,s),其中,s是一個機密,d識別一個可向其披露s的配置(例如,一個調用程序的摘要)。如果公開密鑰開啟的調用者不是d,則所述公開密鑰開啟操作失敗。一個第二公開密鑰封閉操作生成對所述公開密鑰開啟操作的輸入c,其能在除執(zhí)行所述公開密鑰開啟操作的設備以外的設備(例如,遠程服務設備、紙能卡等)上執(zhí)行。所述公開密鑰封閉操作執(zhí)行對r(d,s)的公開密要加密。所述公開密鑰開啟操作和公開密鑰封閉操作也可被用于實現(xiàn)封閉存儲。在表VII中說明用于所述公開密鑰開啟操作的偽碼。在表VII的偽碼中,ID()函數(shù)涉及上述的ID()函數(shù),c涉及對所述公開密鑰開啟操作的輸入,[d1,......,dm]涉及一個或多個調用程序的摘要,s可被披露給該程序(或者說一個或多個其它程序),s涉及所述保護數(shù)據,Kd涉及一個解秘密鑰(與一個防護裝置相關的一個公開/專用密鑰對中的一個專用密鑰,而該防護裝置正執(zhí)行所述公開密鑰開啟操作)。表VII因此,從表VII中可以看出,所述公開密鑰開啟操作使用公開密鑰解密和所述解密密鑰Kd來解密所述輸入值a。所述解密輸入值包括一個或多個被允許向其披露所述保護數(shù)據s的調用程序的摘要[d1,......,dm](或一個或多個可識別保護數(shù)據s何時被披露和/或披露給何者的其它條件)。所述公開密鑰開啟操作也生成所述調用程序的一個摘要。如果所述調用程序的摘要與摘要[d1,......,dm]之一相等,則所述保護數(shù)據被返回給所述調用程序。但是,如果所述調用程序的摘要與摘要[d1,......,dm]中的任何一個都不相等,則所述保護數(shù)據不被返回給所述調用程序。圖9是用于說明實現(xiàn)所述公開密鑰開啟操作的處理340的流程圖。圖1中的防護裝置104執(zhí)行處理340,且能以硬件、軟件、韌件或其一個結合的形式來實現(xiàn)。最初,帶有所述調用者所期望檢索的加密數(shù)據的密文被檢索(步驟342)。檢查是否允許所述調用者檢索所述數(shù)據(步驟344),并根據所述調用者是否被允許檢索所述數(shù)據來進行處理(步驟346)。如果所述調用者被允許檢索所述數(shù)據,則所述數(shù)據(已通過公開密鑰被解密)被返回給所述調用者(步驟348)。如果所述調用者被允許檢索所述數(shù)據,則所述處理失敗(步驟350)且所述數(shù)據不被返回給所述調用者。所述公開密鑰封閉操作是一個在所述調用者(例如,所述調用程序的摘要,或一個或多個其它程序)一致性的基礎上通過邏輯選通獲得的公開密鑰加密方案。所述公開密鑰封閉操作執(zhí)行一個函數(shù)對(d,s)的一個公開密鑰加密,其中s是一個機密且d識別可以向其披露所述s的一個或多個配置(例如,一個調用程序的摘要)。在表VIII中說明用于所述公開密鑰封閉操作的偽碼。在表VIII的偽碼中,c涉及所述公開密鑰封閉操作的輸出,[d1,......,dm]涉及一個或多個調用程序的摘要,s能被披露給該調用程序,s涉及所述保護數(shù)據,Ke涉及一個加密密鑰。表VIII因此,從表VIII中可以看出,所述公開密鑰封閉操作接收作為輸入的所述保護數(shù)據s和可以向其披露所述保護數(shù)據s的一個或多個程序的摘要[d1,...,dm]。所述函數(shù)對[d1,......,dm]、即s被使用基于所述加密密鑰Ke的公開密鑰密碼加密s。所述加密密鑰Ke是試圖能夠解密所述密文的所述防護裝置的公開密鑰。來自所述公開密鑰加密的密文被返回給所述調用程序。圖10是說明用于實現(xiàn)所述公開密鑰封閉操作的一個范例處理360的一個流程圖。處理360由圖1中的一個防護裝置104所執(zhí)行,且能以硬件、軟件、韌件或其一個結合的形式來實現(xiàn)。最初,從一個調用者接收將被封閉的一個機密(步驟362)。使用公開密鑰加密或者如果一個或多個其它條件被滿足,則加密所述機密,從而使所述機密只能被一個特定的目標程序所檢索(步驟364)。包括所述加密機密的密文被返回給所述調用者(步驟366)。附加信息也可被返回給所述調用者(作為所述密文的一部分或與所述密文分離的一部分),例如所述調用者的一個摘要和/或所述目標程序的摘要。所述引用和公開密鑰開啟操作試圖被用于連接公開密鑰驗證協(xié)議。大多數(shù)公開密鑰驗證協(xié)議可通過替換調用公開密鑰解密、公開密鑰加密、簽名和簽名驗證中的任何一個而被直接修改,其中的公開密鑰解密、公開密鑰加密、簽名和簽名驗證分別通過對公開密鑰開啟、公開密鑰封閉、引用及驗證的調用而實現(xiàn)。在某些情況下,獲得一個隨機數(shù)是很重要的(例如,作為生成密鑰的基礎)。隨機數(shù)能通過多種不同的方式而獲得。在一個實施例中,隨機數(shù)的來源是一個以計算設備硬件形式實現(xiàn)的密碼隨機數(shù)發(fā)生器。作為上述封閉操作的一個選擇是將所述封閉操作和一個隨機數(shù)生成操作相結合的通用封閉操作。所述通用封閉操作接收作為輸入的所述目標程序的摘要[t1,......,tm],該目標程序能檢索所述機密(和/或必須被滿足從而使得所述機密能夠被檢索的其它條件)。所述通用封閉操作生成一個隨機數(shù)并封閉新生成的隨機數(shù),以使它只能由具有目標摘要[t1,......,tm]中一個摘要的調用程序(和/或被滿足的其它條件)來檢索。在表IX中說明用于所述通用操作的偽碼。在表IX的位碼中,ID()涉及上述ID()函數(shù),c涉及所述通用操作的輸出,s涉及所述新生成的隨機數(shù),[t1,......,tm]涉及被允許檢索值s的一個或多個目標程序(其是可調用所述通用操作的任意程序之一),或者說一個或多個其它條件,函數(shù)GenRandom()涉及生成一個隨機數(shù)的一個函數(shù)。表IX圖11是說明用于實現(xiàn)所述通用封閉操作的一個范例處理380的一個流程圖。處理380由圖1中的防護裝置104所執(zhí)行,且能以硬件、軟件、韌件或其一個結合的形式來實現(xiàn)。首先,從用于識別能夠檢索一個機密的目標程序或將被滿足以使得所述機密能夠被檢索的一個或多個條件的調用者處接收輸入(步驟382)。然后生成所述機密(步驟384),所述機密被加密以使所述機密只能被識別的目標程序所檢索(步驟386),或者只有當一個或多個條件被滿足時,所述機密才能夠被檢索。然后,包括所述加密機密的密文被返回給所述調用者(作為所述密文的一部分或從所述密文所分離出的一部分),例如是所述調用者的一個摘要和/或所述目標程序的摘要。由一個解密防護裝置所提供的服務可被用于通用封閉服務。例如,參閱圖1和圖2,初始化中,層n-1基于層n的一致性而披露一個單密鑰給層n(例如,在所述計算設備的復位和啟動以后,或在一個程序開始執(zhí)行之前)。層n存儲該密鑰并使用它加密附加機密。在所述平臺被導入相同配置的下一時刻,所述解密防護裝置提供相同的根密鑰(例如,通過開啟或公開密鑰開啟),且先前被加密的所有機密能被層n所檢索。在某個實施例中,當下一層被初始化時,一個較低層向所述下一層披露一個或多個機密(例如,在所述計算設備的復位和啟動以后,或在一個程序開始執(zhí)行之前)。在該選通披露之后,所述較低層不再被使用(直到下一個啟動或復位)。該使用模型被稱為解密防護模型。通過使用該解密防護模型,對所述較低層的訪問被減少。使用時間隔離和空間隔離,這里所述的選通功能可與服務防護裝置和解密防護裝置一起使用。實現(xiàn)驗證操作的四種服務模型如下所述(1)服務防護裝置——空間隔離;(2)解密防護裝置——空間隔離;(3)解密防護裝置——時間隔離;(4)服務防護裝置——時間隔離。這里所述的服務模型中,假設一個較低級防護裝置已經向位于正在被考慮層處的所述防護裝置披露了一個或多個密鑰。獲得這些密鑰的方式依賴于所述防護裝置和其下的層的隔離模型。在同一臺計算設備中的不同的層可使用任何不同的服務模型。(1)服務防護裝置——空間隔離初始化時,所述防護裝置測量并保存請求程序的一致性。所述防護裝置使用處理器服務和一個展現(xiàn)所述驗證操作基本操作的系統(tǒng)調用接口來實現(xiàn)一個保護系統(tǒng)(例如,一個處理器或其它安全處理器或公用處理器)。(2)解密防護裝置——空間隔離所述防護裝置在初始化時獲得加密碼形式的服務請求。該點可被存儲在存儲器中,或者說從外存儲器獲得。所述防護裝置測量初始化程序的一致性,并根據上述的控制函數(shù)將密鑰披露給程序。在放棄對下一層的控制之前,所述防護裝置為自身和其機密資源設立模式保護。(3)解密防護裝置——時間隔離所述防護裝置在初始化時獲得密碼點形式的服務請求(位組)。該點可被存儲在存儲器中,或者說可從外存儲器獲得。所述防護裝置測量初始化程序的一致性,并根據上述的選通功能將密鑰披露給程序。在傳遞對這些程序的控制之前,所述防護裝置刪除(反之使其不可接入)被用于實現(xiàn)所述選通功能的密鑰。(4)服務防護裝置——時間隔離在所述服務防護裝置——時間隔離模型中,所述計算設備通過安全復位來安全地保持程序狀態(tài)。該模型與模型(1)(服務防護裝置——空間隔離)類似,然而,在將控制傳遞到下一層之前,所述服務防護裝置刪除其機密(使其喪失功能直到下一次重新啟動)。下一層將正常執(zhí)行,直到其需要請求來自所述防護裝置的一個服務。在這一點上,其將所述請求的參數(shù)存儲到存儲器中的某個位置,該位置能使存儲內容免于一個復位或執(zhí)行一個復位。當所述設備被重新啟動時,所述服務防護裝置獲得其機密,看見并(使用其密鑰)執(zhí)行所述請求,使所述密鑰和任何相關信息失效,并將計算和控制的結果傳送給下一層(最初請求服務的層)。在某些實施例中,如果一臺計算設備支持空間隔離,則所述安全核心將披露所述基本(操作)封閉、開啟、獲得隨機數(shù)(用于獲得一個隨機數(shù))和公開密鑰開啟(或引用)。所述安全核心可實現(xiàn)一個解密防護裝置或一個服務裝置。另一方面,如果所述平臺支持時間隔離,則所述安全核心將提供一個解密防護裝置,并實現(xiàn)所述基本(操作)開啟、通用封閉和公開密鑰開啟(或引用)。值得注意的是,可基于封閉和開啟或者開啟和通用封閉基本操作建立引用和公開密鑰開啟的功能。例如,廠商可依據在l1中實現(xiàn)的通用封閉和開啟制造一個實現(xiàn)引用或公開密鑰開啟的l2程序并充當用于高級軟件(例如,操作系統(tǒng))的一個主機。所述廠商能生成并封閉所述服務層所需要的密鑰并將其和所述設備或CPU一起裝船(或使其在線可用)。以下是對一系列硬件實施的一個典型說明,該實施將能使平臺支持驗證操作。同所述系統(tǒng)中的更高層一樣,最低層圖2中的I1)的特征是(a)機密密鑰資源,(b)有權訪問這些密鑰的特權碼,和(c)所述層的受控初始化。驗證操作提供程序和機密密鑰之間的強約束。在較高層中,較低層中的防護裝置保證該約束。在最低層中,沒有能夠選通訪問所述平臺機密的潛在軟件防護裝置。因此,另一種引擎被用于支持所述l1密鑰與所述l1程序的關聯(lián)。完成該約束的一種途徑是使I1軟件成為不隨制造而變化的平臺微碼或韌件并使得所述I1軟件無約束地訪問所述I1密鑰。該平臺微碼或韌件可被稱為安全核心,且所述l1密鑰稱為平臺密鑰。所述平臺被設計成只能將控制傳送到預定的安全核心。所述硬件的性能也能被解釋為向所述預定安全核心披露所述平臺密鑰的簡單資源防護裝置。所述平臺密鑰和安全核心韌件可以是所述處理器的一部分,也可以利用所述計算設備的一個或多個組件來實現(xiàn)(例如,一個安全處理其或共用處理器,其也可執(zhí)行加密操作)。所述平臺密鑰和安全核心韌件可在一個單獨的組件中被實現(xiàn),也可以在所述計算設備的多個組件中被實現(xiàn)。利用驗證操作,程序在一個可控初始狀態(tài)中被啟動。在較高層中,在較低層中運行的程序可在正確的入口點開始執(zhí)行。在l1處,由硬件來執(zhí)行該函數(shù)。通常,在電源上升或隨后復位的情況下,電流處理器按某種確定的順序開始執(zhí)行。例如,一個最簡單的情況下,所述處理器啟動來自一個規(guī)定存儲器單元的取數(shù)和執(zhí)行碼。對于l1,程序可在一個可控初始狀態(tài)中被硬件所啟動,該硬件確保所述安全核心是在啟動時執(zhí)行的代碼(作為確定序列的一部分)。另外,沒有其它平臺狀態(tài)能破壞所述安全核心的執(zhí)行。復位和電源上升為所述處理器提供一個堅固的經過良好調試的清零狀態(tài)。如同在本例中的使用,被用于啟動或調用所述安全核心的所述平臺狀態(tài)的改變被稱為一個安全復位。此外,一個設備制造商將安排平臺密鑰的生成和安裝,該密鑰被用于實現(xiàn)l1的封閉和開啟。如果所述設備被識別為一個PKI(公開密鑰基礎結構)的一部分,所述制造商也將保證用于所述平臺的一個公開密鑰。這可以直接是被l1所使用的一個平臺密鑰,或是一個較高層使用的一個密鑰。密鑰的生成和認證是所述CPU制造商或諸如將所述CPU組裝為一個設備的OEM的某些其他部門的職責,另外,所述職責應有多個當事人分擔。一旦執(zhí)行所述安全核心,則可使用上述的隔離引擎來避免其本身在較高層處代碼的執(zhí)行。空間中的隔離通常包括特權方式支持,時間中的隔離通常包括被隱藏在高層中的機密。在最新的處理器上不需要附加平臺支持來支持空間隔離——現(xiàn)有的特權方式或特權級是足夠的(只要允許訪問所述平臺密鑰的硬件資源能被保護于較高層)。為支持時間隔離,硬件輔助允許所述安全核心在將控制傳遞給較高層之前隱蔽所述平臺密鑰。在所述時間隔離模型中提供平臺密鑰安全的一個途徑是使用被稱為復位鎖存器的狀態(tài)防護電路。復位鎖存器是一個具有開啟隨后復位或電源上升特性的硬件電路,但是任何軟件在任何時候都能關閉所述鎖存器。一旦被關閉,所述鎖存器便保持關閉狀態(tài)直到下一個復位或電源上升。實現(xiàn)一個時間隔離安全核心的平臺將控制一個復位鎖存器狀態(tài)下的平臺密鑰訪問,且所述安全核心將在將控制傳遞給較高層之前關閉所述鎖存器。如上所述,所述安全核心也將采取額外的行動,例如在傳遞控制之前清除存儲器和寄存器,但是這些行動和在較高級中的使用相同。如果所述平臺使用空間隔離,則所述安全核心使用特權方式以避免其自身和其平臺密鑰受到它所接待的程序(例如操作系統(tǒng))的侵害。而且,所述安全核心為所述驗證操作的調用而設立一個系統(tǒng)調用接口。如果所述平臺使用空間隔離,則所述平臺也將包括一個能夠完好保存安全復位以便將參數(shù)傳送給服務程序的存儲器。為調用一個服務,操作系統(tǒng)在所述安全核心已知的一個存儲單元中準備一個命令和參數(shù)塊,并執(zhí)行一個安全復位。如果所述操作系統(tǒng)希望繼續(xù)執(zhí)行后續(xù)的服務調用(與一個簡單的重新啟動相對),則該操作系統(tǒng)和所述安全核心將進行附加的測量,以保證其被可靠和安全地執(zhí)行。這里所述的驗證操作可被用于多種設置的安全性,例如保護個人數(shù)據免受病毒、保護秘密的服務數(shù)據免受網絡攻擊、網絡管理、復制保護、可信賴的分布式計算等等。所述驗證操作允許不同的程序,這些程序可在同一計算機上執(zhí)行而不需一個特殊的信賴關系,以保護它們的與其它軟件無關的加密資源。以下的一些論述涉及一個SSP(安全服務處理器)。在一個實施例中,一個SSP是一個處理器(用于一臺計算設備中),該處理器提供基礎的機密服務給一臺計算設備(例如,所述SSP支持這里所述的選通功能(例如,圖2中的層l1))。所述SSP可使用密鑰,具有一個或多個所述SSP才有的(或被認為才有的)密鑰。所述SSP可以是所述設備的CPU的一部分,或者是一個或多個其它處理器。例如,所述SSP可以是一臺計算設備中的一個分離芯片或集成電路(IC)。在一個不同實施例中,,一個SSP是一個被適當隔離的軟件程序,該程序同前面的實施例一樣將相同的功能披露給它的調用者。所述SSP的實施例可(直接或間接地)訪問加密密鑰。為提供這種訪問,有許多實施選項存在。例如,所述SSP可調用在較低層中的服務或解密防護裝置。或者所述SSP可排它的訪問包括所請求的密鑰的永久存儲器(例如,硬盤、閃存、ROM等等)的某部分??傊?,在一個較高層中,一個SSP由被暴露于主體的功能所定義。一個SSP是一個可訪問密鑰的防護裝置(如上所述)。所述SSP使用這些密鑰來提供加密服務給其調用者。以下的部分將描述SSP所體現(xiàn)的典型功能。實例操作以下是對封閉存儲操作和遠程驗證操作的實施例的論述。該部分說明上述封閉、開啟、應用和公開密鑰開啟操作的實施例。下列定義在本部分中使用另外,該部分涉及存取策略涉而后面的部分涉及約束密鑰操作。所述訪問策略描述什么時候所述特定操作是功能性的(即,它們將在什么時候工作)。一臺計算設備的用戶可選擇性地切斷某個函數(shù)。例如,所述計算設備(例如,一個實現(xiàn)所述封閉操作的SSP)包括一個被稱為FeatureEnable的寄存器。所述寄存器中的一個位被稱為MainEnable。如果所述用戶設置MainEnable為假,則在這些部分中沒有函數(shù)再會工作。每個函數(shù)包括的存取策略描述描述了在什么樣的FeatureEnable設置下所述函數(shù)才工作。封閉定義S_SPSTATUSSeal([in]SECRETS,[in]DIGESTTarge[2],[in]UNIT32MaxLen,[out]UNIT32*ActualLen,BYTE*SealedBlob)參數(shù)Seal-Input::=SEQUENCE{OrdinalINTEGER,SecretSecret,TargetDigestPair}Seal-Output::=SEQUENCE{OrdinalINTEGER,StatusINTEGER,Sealed-bolbOCTETSTRING}返回值SSP_SUCCESS注釋如果下列評估為真,則所述封閉操作形成只能被相應開啟操作解密的一個加密點(一組位)●編碼正確嗎?●MAC正確嗎?●在所述封閉操作期間,名為目標的當前SK/SL(安全核心或安全裝入城序)正在運行嗎?開啟增加了內部隨機性以使同一輸入上的封閉操作的輸出導致不同的結果。這確保開啟不能被作為一個硬件設備標識符使用。開啟也包括一個程序的標識符,當執(zhí)行所述封閉以提供完整的信息給所述開啟裝置時,該程序調用所述封閉操作(例如,保存在所述SSP的PCR寄存器中的調用程序的摘要,在這里也被稱為PCR值)。存取策略Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsesymmKey==All|FeatureEnable.UseSymmKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UseSummKey)作用所述封閉操作實現(xiàn)下列功能1.生成一個128位隨機數(shù)R2.使D()成為所述PCR的當前值,D1=PCR[1]3.摘要M=HMAC[KM](R‖S‖target‖D0‖D1)4.C=AES[KS](R‖S‖Target‖D0‖D1‖M)5.返回帶有SealedBlob的SSP_SUCCESS給C開啟定義SSP_STATUSUnseal([in]BYTE*SealedBlob,[in]UINT32SealedBlobLen[out]SECRETS,[out]DIGESTSource)參數(shù)Unseal-Input::=SEQUENCE{OrdinalINTEGER,Sealed-blobOCTETSTRING}Unseal-Output::=SEQUENCE{OrdinalINTEGER,StatusINTEGER,SecretSecret,SourceDigest}返回值SSP_SUCCESSSSP_UNSEAL_ERROR注釋所述開啟操作內部解密一個由所述封閉操作生成的點并檢查下列條件●編碼正確嗎?●在所述封閉操作期間,是名為目標的所述PCR的當前值嗎?如果所有檢查都成功,則所述機密和所述封閉裝置的PCR被返回;否則返回一個UNSEALERROR。存取策略Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsesymmKey==All|FeatureEnable.UseSymmKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UseSummKey)作用所述開啟操作執(zhí)行下列功能1.M=AES-1[KS](SealedBlob)2.將M解釋為(BIT[128]R‖SECRETS1‖DIGESTTarget()‖DIGESTTarget1‖DIGESTSealer()‖DIGESTSealer1‖DIGESTN).3.DIGESTD=HMAC[KM](R‖S1‖Target()‖Target1‖Sealer()‖Sealer1).4.If(Target()!=PCR‖Target1!=PCR[1])returnSSP_UNSEAL_ERRORwithS,Sourcesettozero.5.IfD!=NreturnSSP_UNSEAL_ERRORwithS,Sourcesettozero.6.ElsereturnSSP_SUCCESSwithSsettoS1andSoucesetto{Sealer(),Sealer1}.引用定義SSP_STATUSQuote([in]BITSTRINGd-ext,[out]PKSingnatureSigBlob)參數(shù)Quote-Input::={OrdinalINTEGER,d-extDIGEST}Quote-output::={OrdinalINTEGER,StatusINTEGER,Sig-blobPKSignature}返回值SSP_SUCCESSSSP_CRYPTO_ERROR注釋所述引用操作指示所述SSP對由外部提供的D-EXT和內部PCR值的連接進行簽名。存取策略Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UseSummKey)作用所述引用操作執(zhí)行下列功能1.所述SSP構成由消息類型QuoteMessage的標識符、D-EXT和所述PCR寄存器的內容的拼接組成的一個信息M,在DER(特殊的編碼規(guī)則)編碼情況下SEQUENCE{Message-typePKMessageType,d-extDigestpcrDigestPair}2.所述SSP使用KQ、PRIV并根據如在PKCS#V02.1中規(guī)定的RSASSA-PSS-SIGND的默認值經過M生成簽名的消息。如果所述函數(shù)返回一個出錯信息,則返回帶有被設為零的SigBlob的SSP_CRYPTO_ERROR。3.所述SSP返回SSP_SUCCESS和所述簽名值,該簽名值是剛剛和位于SigBlob中的簽名算rSASSA-PSS-Default-Identifier一起計算的。公開密鑰開啟定義SSP_STATUSPK_Unseal([in]PKCiphertextSealedBlob,[out]SECRETSecret,)參數(shù)PKUnseal-Input::={OrdinalINTEGER,Pk-sealed-blobPKCiphertext}PKUnseal-output::={OrdinalINTEGER,StatusINTEGER,SecretSecret}返回值SSP_SUCCESSSSP_CRYPTO_ERRORSSP_BAD_DATA_ERROR注釋所述公開密鑰開啟操作采用一個416位長度的、特殊格式的加密點。該點被解密,且如果所述解密和解碼成功,則所述416位信息被解釋為一個加密值和所述PCR值的拼接,該拼接被允許接收所述解密值。如果當前PCR值與在所述機密點中所規(guī)定的值相等,則披露所述機密;否則返回一個出錯信息。存取策略Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UseSummKey)作用所述引用操作實現(xiàn)下列功能1.所述SSP檢測pk-seales-blob中的所述算法標識符是否為sspV1BoundKey。2.所述SSP根據在PKCS中規(guī)定的RSAES-OAEP-DECRYPT的默認值內部解密SealedBlob,獲得一個明文消息M。3.如果所述解碼操作的輸出是“解碼錯誤”,則返回帶有被置零的機密的SSP_BAD_DATA_ERROR。4.否則,所恢復的信息M將具有根據DER編碼的如下形式SEQUENCE{Message-typePKMessageType,secretSecrettargetDigest}并且,機密由256位(=32八位字節(jié))組成,且目標由160位(=20八位字節(jié))組成。所述消息類型是sspV1PKSealedMessage。如果這些條件的任何一個沒被滿足,則返回帶有被置零的機密的SP_BAD_DATA_ERROR。1.如果target!=PCR返回帶有被置零的機密的SP_BAD_DATA_ERROR。2.如果target==PCR返回帶有被置零的機密的SP_SUCCESS。約束密鑰操作另外,一組約束密鑰函數(shù)或操作允許局部設置和鑒定加密密鑰(例如,利用SSP),且也允許密鑰從所信任的遠程部分進行通信(例如,傳播到所述SSP)。約束密鑰的功能如下表示1.在某個系統(tǒng)層處的一個服務防護裝置(例如,SSP)直接訪問一個約束密鑰。每一個約束密鑰具有一個相關條件,該條件確定哪一個(些)防護裝置可以訪問所述約束密鑰。該條件被隱含地解釋。即,所述約束密鑰被加密,以使僅僅一組或多組防護裝置利用所述密鑰去解密它。2.對所述約束密鑰進行訪問的服務防護裝置將請求使用所述約束密鑰(例如,簽名、MAC、加密、解密)的函數(shù)披露給在較高層中的主體。每個約束密鑰可具有一個相關使用條件,在這種情況下,所述防護裝置將僅僅服務于滿足相關條件的請求。3.約束密鑰被包含在被加密保護的數(shù)據結構中(也涉及這里的約束密鑰點)。約束密鑰點自行保護并能被存儲在外部的可信環(huán)境中。約束密鑰具有下列優(yōu)點●每一個主體可被允許擁有自己的約束密鑰。并且,每一個主體可被允許擁有任意多個約束密鑰。對于更精良的防護策略來講,這允許在某些應用中設置和改善秘密。因此,防護裝置不必局限于擁有被用于服務來自全部主體的請求的僅僅一個或幾個密鑰?!袼黾s束密鑰不向除經授權的防護裝置以外的裝置披露。因此,一個主體的損害(例如,由于一個程序錯誤)將不會導致任何約束密鑰的損害。在一個實施例中,所述服務防護裝置(SSP)以硬件的形式實現(xiàn)。如果這樣的話,約束密鑰不會由于惡意的或不爭取的軟件而被損害。所述約束密鑰函數(shù)提供對加密密鑰的保護。約束密鑰可被遠程部分所生成,或它們可通過GenBoundKey命令而被局部設置。被局部生成的約束密鑰可發(fā)送一個“引用”證明,該證明可被用于給遠程部分提供所述公開密鑰類型的證明、生成密鑰類型的證明、生成期間機器狀態(tài)的證明以及約束所述密鑰的條件(可選)(例如,摘要)的證明。約束密鑰包括一個或多個下列要素●所述密鑰的用途(例如,約束簽名、約束引用、約束公開密鑰開啟、約束公開密鑰解密、約束MAC、約束加密或約束解密)。該要素是可選的。如果被包括,該要素將所述約束密鑰限定為只能和被識別的函數(shù)類型一起被使用。●一個條件要素(如上所述),它規(guī)定在哪種條件下所述約束密鑰才可以被使用(也被稱為約束密鑰使用條件)。例如,可以用一個或多個程序摘要的形式表達所述條件。在這種情況下,所述約束密鑰必須只能被指定摘要的程序或其代表所使用。條件的另一例子包括如上所述的時間約束、邏輯式和可執(zhí)行程序。該要素是可選的。如果該要素被忽略,某個默認條件便啟用。例如,所述默認條件不可限制對所述約束密鑰的訪問(空條件)?!裨试S計算所述密鑰的加密密鑰(所述約束密鑰)或一些數(shù)據?!?如上所述的)一個或多個條件,在該條件下,可以改變所述約束密鑰的使用條件。該改變也被稱為約束密鑰遷移,且該條件是一個遷移條件。該要素是可選的。如果該要素被忽略,某個默認條件便啟用。例如,所述默認條件可“一直為假”,以至于所述摘要(如果存在)不能被更改。●一個或多個條件,在該條件下,可直接訪問所述約束密鑰的一組服務防護裝置可被更改。該更改也被稱為約束密鑰輸出,且該條件是一個個輸出條件。該要素是可選的。約束密鑰的加密保護如上述的(封閉、開啟、公開密鑰開啟)封閉存儲和證明函數(shù),約束密鑰具有相同的加密要求。特別是,局部生成的約束密鑰可被上述的存儲和檢索函數(shù)的任一加密執(zhí)行所保護。在所有情況下,所述約束密鑰自身的機密性和整個數(shù)據結構的完整性得以保護,以確??刂扑黾s束密鑰的使用的的不同條件未曾被破壞。如上所述,這可通過對稱密碼或帶有MACs或數(shù)字簽名的公開密鑰加密算法的不同結合而實現(xiàn)。在一個實施例中,所述約束密鑰數(shù)據結構被公開密鑰加密。函數(shù)在某個實施例中,約束密鑰可被用于一個或多個下列函數(shù)●BoundSign(約束簽名)●BoundQuote(約束引用)●BoundPKDecrypt(約束公開密鑰解密)●BoundPKUnseal(約束公開密鑰開啟)●BoundMAC(約束消息驗證碼)●BoundEncrypt(約束加密)●BoundDecrypt(約束解密)●GenBoundKey(通用約束密鑰)●BoundKeyMigrate(約束密鑰遷移)●BoundKeyExporr(約束密鑰輸出)在每一個上述函數(shù)中,所述約束密鑰點(所述數(shù)據結構中的一組位)和被包括在所述約束密鑰點中的密鑰所操作的所述數(shù)據以參數(shù)的形式被提供給約束密鑰函數(shù)。如果該密鑰的使用單元被包括在所述約束密鑰點中,則所述SSP確保所述約束密鑰被用于正確的目的(例如,類型“BoundQuoteKey”所設置的一個密鑰只能被用于一個BoundQuote操作中)。在一些執(zhí)行中,所述約束密鑰是一個公開/專用密鑰對的一個專用密鑰。在這些執(zhí)行中,所述約束密鑰點可包括所述專用密鑰,或者說允許計算所述密鑰的一些數(shù)據。例如,一個專用密鑰段可被包括在所述約束密鑰點中,該密鑰段與相應的公開密鑰相結合,可被用于重構所述公開/專用密鑰對的專用密鑰。所述BoundSign操作接收一個將被使用所述約束密鑰簽名的數(shù)據輸入。所述SSP根據所述約束密鑰點恢復所述專用簽名密鑰,然后使用所述恢復簽名密鑰而生成基于所述數(shù)據輸入的一個數(shù)字簽名信息。然后所述SSP輸出所述數(shù)字簽名信息。如果所述約束密鑰點被破壞或任何所述約束密鑰使用條件不令人滿意,則所述SSP不執(zhí)行所述操作。在沒有被所述SSP所檢索的專用密鑰的情況下,使用所述恢復專用密鑰對所述數(shù)據輸入進行數(shù)字簽名。所述BoundQuote操作接收作為輸入的一個將被簽名的數(shù)據和一個約束密鑰點。所述SSP從所述約束密鑰點恢復所述專用密鑰并使用所述恢復簽名密鑰來生成基于如上述引用操作所述的對所述操作的數(shù)據輸入和當前PCR值(例如,一個標識符、諸如調用所述BoundQuote操作的程序的一個摘要)的一個簽名。然后所述SSP輸出所述數(shù)字簽名信息。如果所述約束密鑰被破壞或所述約束密鑰使用條件沒有被滿足,則所述SSP不執(zhí)行所述操作。在一個實施中,所述BoundQuote操作類似于所述BoundSign操作,但是其不同之處在于,當前PCR值在所述BoundQuote操作中被使用。所述BoundDecrypt操作接收作為輸入的一個密文和一個約束密鑰點。所述SSP根據述約束密鑰點恢復所述專用密鑰,然后使用所述恢復專用密鑰去解密所述輸入密文。然后所述解密密文被所述BoundPKDecrypt操作所輸出。如果所述約束密鑰被破壞或任何所述約束密鑰使用條件不令人滿意,則所述SSP不執(zhí)行所述操作。所述BoundPKUnseal操作接收一個輸入密文和一個約束密鑰點。所述SSP從所述約束密鑰點恢復所述專用密鑰,并如同在上述的所述公開密鑰開啟操作中一樣,使用該專用密鑰去解密所述輸入密文。然后,所述BoundPKUnseal操作輸出所述解密數(shù)據。如果所述約束密鑰點被破壞或所述約束密鑰使用條件沒有被滿足,則所述SSP不執(zhí)行該操作。所述BoundMAC操作接收一個使用所述約束密鑰計算其MAC的數(shù)據輸入。接收一個約束密鑰點。如果所述約束密鑰點被破壞或所述約束密鑰使用條件沒有被滿足,則所述SSP不執(zhí)行所述操作。否則,所述SSP根據所述約束密鑰點恢復所述約束密鑰,并通過使用被恢復的約束密鑰的數(shù)據輸入來生成一個消息驗證碼(MAC)。然后,所述SSP輸出計算后的MAC。因此,在沒有被所述SSP披露的約束密鑰的情況下,可使用恢復約束密鑰來計算一個用于數(shù)據輸入的MAC。所述BoundEncrypt操作接收一個數(shù)據輸入,其可使用所述約束密鑰來加密,且也接收一個約束密鑰點。如果所述約束密鑰點被破壞或所述約束密鑰使用條件沒有被滿足,則所述SSP不執(zhí)行所述操作。否則,所述SSP根據所述約束密鑰點恢復所述約束密鑰,并使用所述恢復約束密鑰來加密所述數(shù)據輸入。所述SSP輸出計算后的密文。因此,在沒有被所述SSP所披露的約束密鑰的情況下,可使用恢復約束密鑰來解密所述數(shù)據輸入。所述BoundDecrypt操作接收一個數(shù)據輸入,其可使用所述約束密鑰來被解密,并接收一個約束密鑰點。如果所述約束密鑰點被破壞或所述約束密鑰使用條件沒有被滿足,則所述SSP不執(zhí)行所述操作。否則,所述SSP根據所述約束密鑰點恢復所述約束密鑰,然后恢復約束密鑰來解密所述數(shù)據輸入。然后所述SSP輸出計算后的明文。因此,在沒有被所述SSP所披露的約束密鑰的情況下,可使用恢復約束密鑰來解密所述數(shù)據輸入。所述GenBoundKey操作使所述SSP設置一個新的約束密鑰。該新的約束密鑰是一個密碼密鑰,且生成包括新生成的密鑰的一個新的約束密鑰點。很明顯,所述約束密鑰點不必一直包括整個密鑰。例如,如果新生成的密鑰是一個公開/專用密鑰對,則在所述約束密鑰點中包括所述專用密鑰就足夠了。所述新的約束密鑰點必須是一個或多個防護裝置——通常是執(zhí)行所述操作的SSP(例如,類似于上述的存儲函數(shù),加密保護所述新的約束密鑰點,或者反之保密所述新的約束密鑰點以使其只能被所述SSP所檢索)。所述GenBoundKey操作也可擁有確定所述新約束密鑰點各個方面的參數(shù),且描述這些參數(shù)的數(shù)據一整體保護的形式附著到所述新生成的專用密鑰(例如,生成數(shù)據,作為所述新的約束密鑰點的一部分)上。如上所述,作為這種數(shù)據的一個例子包括所述遷移條件和所述約束密鑰使用條件等等。然后所述新的約束密鑰點被所述GenBoundKey操作所輸出。通常,一個約束密鑰可以使任何類型的密碼密鑰,包括一個對稱密鑰或一個公開——專用密鑰對。精確密鑰類型依賴使用該密鑰類型的約束密鑰操作。例如,在BoundMAC中使用的一個約束密鑰將作為一個對成密鑰,反之,在BoundSign中使用的一個約束密鑰將作為一個公開/專用簽名密鑰對。所述密鑰類型可被規(guī)定為GenBoundKey的一個參數(shù)。所述BoundKeyMigrate操作允許一個約束密鑰的使用條件被更改。所述SSP驗證一個或多個遷移條件是否被更改。多個條件中的任何一個可和所述BoundKeyMigrate操作一起被使用(例如,類似于上述的關于所述封閉和開啟操作的任何條件,該條件可識別何時和/或何種數(shù)據可被遷移)。如果沒有成功地執(zhí)行該驗證,則所述防護裝置設置一個新的約束密鑰點,其中的約束密鑰使用條件可根據請求而被改變。所述BoundKeyExport操作指示所述SSP去更改一組能直接訪問所述約束密鑰的防護裝置(SSP)。所述SSP驗證一個或多個條件是否被滿足。多個條件中的任何一個可與所述BoundKeyExport操作一起被使用(例如,類似于上述的關于所述封閉和開啟操作的任何條件,該條件可識別何時和/或何種數(shù)據可被遷移)。如果未成功地作出該驗證,所述操作失敗。如果成功地進行了該驗證,則所述SSP依照請求更改對所述約束密鑰點的加密保護。在一個實施例中,所述SSP使用一個或多個新的密鑰來加密所述約束密鑰。所述約束密鑰的生成器(局部的或遠程地)可規(guī)定條件的一類例子是所述約束密鑰只能被代表其程序摘要具有一個特殊的值的一個主體而被使用。在這種情況下,在所述約束密鑰點的內部檢索之后,所述約束密鑰操作檢查請求主體的摘要,且如果所述摘要與在所述約束密鑰點中規(guī)定的不同,則失效和不執(zhí)行附加計算。借助于請求所述特定SSP的唯一密鑰以便繼續(xù)的加密操作,所述約束密鑰點通常被連接或束縛到一個特定的SSP上。例如,這種操作可以是MAC、數(shù)字簽名、加密、組合加密和完整性驗證函數(shù)。約束密鑰操作實例在一個實施例中,通過一個局部遷移證明或一個由授權機構所發(fā)布的輸出證明來授權一個遷移。該局部遷移證明是基于下列數(shù)據結構的RSASSA-PSS-SIGN的一個默認Bound-migration-info::=SEQUENCE{Source-bound-blob-digestDigest,Dest-PCRDigestPair}使用所述BoundKeyMigrate操作來請求局部SSP遷移。為了授權局部遷移,所述SSP被提供一個Bound-migration-info結構,該結構涉及該約束密鑰和對由所述授權機構所提供的結構的一個適當形成的證明。如果所述遷移證明是可接受的,所述SSP利用剩余未變化的所有其它屬性重新約束與新PCR相關的密鑰(例如,如果最初沒有限定所述密藥為一個PCR值,當重新限定時便不再如此)。所述source-bound-blob-digest是由所述約束密鑰的外部加密形式的摘要。經過具有例如由所述授權機構簽名的Bound-export-info結構的所述BoundeyExport函數(shù)實現(xiàn)所述遠程遷移Bound-export-info::=SEQUENCE{Source-bound-blob-digestDigestDest-pubkeyRSAPublicKeyDest-PCRDigestPair}當一個密鑰被標記得可以輸出時,所述授權機構完全處于其密鑰受到重新約束的所述設備或軟件的控制下。所述約束密鑰操作使用一個PKCiphertext,它是使用下述平臺公開加密密鑰被加密的一個類型Bound-Key-blob序列Bound-key-blob::=SEQUENCE{Message-typePKMessageType,Key-typeBound-key-type,Bound-to-PCRBOOL,Bound-toDigestPair,MigrateableBool,Migrate-authDigest,ExportableBool,Export-authDigest,Pub-key-digestDigest,Bound-keyPKCmpressedPrivateKey}其中Bound-key-type::=INTEGER{BoundSignKey,BoundQuoteKeyBoundDecryptKey,BoundPKUnsealKey}所述bound-to-PCR成分是一個標記,該標記指出所述bound-to摘要字段是否與當前PCR值相匹配以便使用所述約束密鑰。{migrateable,migrate-auth}指出所述密鑰是否是可遷移的,如果是,則受某種權限的控制(如果不可遷移,則所述migrate-auth值便不重要)。{exportable,export-auth}指出所述值是否是可輸出的,如果是,則受某種權限的控制(如果不可輸出,則所述export-auth值便不重要)。Pub-key-digest是相應的公開密鑰的摘要,以在所述PKCompressedPrivateKey和所述公開密鑰之間提供一個恢復所述專用密鑰所需的強結合。在一個例子中,如果通過所述GenBoundKey函數(shù)來局部創(chuàng)建一個約束密鑰,則所述SSP針對在約束密鑰輸出期間祥述剛剛產生的所述密鑰公開特性的數(shù)據結構和所述系統(tǒng)結構創(chuàng)建一個簽名。Bound-key-pub-info::=SEQUENCE{Message-typePKMessageType,//sspVlBoundKeyGenMessagesig-nonceDigest,key-typeBound-key-type,bound-to-PCRBOOL,bound-toDigestPair,migrateableBool,migrate-authDigest,exportableBool,export-authDigest,creator-PCRDigestPairbound-pub-keyDigest}在這個數(shù)據結構中,key-type,bound-to-PCR,bound-to,migrateable,migrate-auth,exportable和export-auth都是新生成密鑰的約束密鑰的特征。Creator-PCR是在輸出所述密鑰時的有效的PCR,bound-pub-key是新生成的公開密鑰的摘要。Signonce是在請求公開密鑰生成時所傳遞的所述digest-sized值。所述BoundSign,BoundQuote,BoundPKDecrypt,BoundPKUnseal,GenBoundKey,BoundKeyMigrate和BoundKeyExport操作的典型定義如下BoundSign定義SSP_STATUSBoundSign([in]PKCiphertextBoundKeyBlob,[in]RSAPublicKeyPubPartOfBoundKey,[in]BITSTRINGDataToBeSigned[out]PKSignaturesig-blob)參數(shù)BoundSign-Input::={OrdinalINTERGER,Bound-keyBoundKeyBlob,Bound-pub-keyRSAPublicKey,Data-to-be-signedOCTETSTRING}BoundSign-output::={OrdinalINTEGER,StatusINTEGER,Sig-blobPKSignature}返回值SSP_SUCCESSSSP_CRYPTO_ERRORSSP_BAD_DATA_ERRORSSP_UNSEAL_ERROR注釋所述BoundSign操作采取類型sspV1BoundKey的明文,該明文包括類型BoundSignKey的一個BoundKeyBlob和相應的公開密鑰。如果這些條件中的任何一個未被滿足,或所述序列未成功解碼,則所述操作失敗,返回SSP_CRYPTO_ERROR。如果Bound-to-PCR被設定,則所述SSP檢查當前PCR值是否與在所述Bound-key-blob序列中的規(guī)定相同。如果不是,則所述SSP返回SSP_CRYPTO_ERROR。最后,所述SSP利用所述解密專用密鑰對所述輸入信息簽名。存取策略Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UseSummKey)作用所述BoundSign操作執(zhí)行下列功能1.所述SSP檢測pk-seales-blob中的所述算法標識符是否為sspV1BoundKey。2.述SSP根據在PKCS#1V2.1中規(guī)定的RSAES-OAEP-DECRYPT的默認值內部解密SealedBlob,獲得一個明文消息M。3.如果所述解碼操作的輸出是“解碼錯誤”,則返回帶有被置零的機密的SSP_CRYPTO_ERROR。4.否則,恢復的信息M將是帶有類型BoundSignKey的Bound-key-blob形式的一個DER編碼。如果不是,則所述SSP將發(fā)出SSP_CRYPTO_ERROR。5.如果bound-to-PCR為真,則所述bound-to將和當前PCR值相比較。如果所述值不相同,則所述SSP將輸出SSP_CRYPTO_ERROR。6.然后所述SSP使用被提供的相關公開密鑰來恢復所述約束專用密鑰。如果失敗,則所述SSP返回SSP_CRYPTO_ERROR。如果成功,則所述SSP依照PKCS#1V2.1中所規(guī)定的RSASSA-PSS-SIGN的默認執(zhí)行、使用所述恢復專用密鑰bound-key來生成基于所述輸入信息DataToSigned的一個簽名信息。7.返回SSP-SUCCESSBoundQuote定義SSP_STATUSBoundQuote([in]PKCiphertextBoundKeyBlob,[in]DIGESTDataToBeSigned[out]PKSignaturesig-blob)參數(shù)BoundQuote-Input::={OrdinalINTERGER,Bound-keyBoundKeyBlob,Bound-pub-keyRSAPublicKey,Data-to-be-quotedDigest}BoundQuote-output::={OrdinalINTEGER,StatusINTEGER,Sig-blobPKSignature}返回值SSP_SUCCESSSSP_CRYPTO_ERRORSSP_BAD_DATA_ERRORSSP_UNSEAL_ERROR注釋所述BoundQuote操作采取類型sspVlBoundKey的公開明文,該明文包括類型BoundQuoteKey的一個BoundKeyBlob。如果這些條件中的任何一個未被滿足,或所述序列未成功解碼,則產生SSP_CRYPTO_ERROR,操作失敗。如果Bound-to-PCR被設定,則所述SSP檢查當前PCR值是否與在所述Bound-key-blob序列中規(guī)定的相同。如果不是,則所述SSP返回SSP_CRYPTO_ERROR。最后,所述SSP引用具有所述解密專用密鑰的輸入消息。存取策略Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)作用所述BoundQuote操作執(zhí)行下列功能1.所述SSP檢測pk-seales-blob中的所述算法標識符是否為sspV1BoundKey。2.所述SSP根據在PKCS#1V2.1中規(guī)定的RSAES-OAEP-DECRYPT的默認值內部解密SealedBlob,獲得一個明文消息M。3.如果所述解碼操作的輸出是“解碼錯誤”,則返回帶有被置零的機密的SSP_CRYPTO_ERROR。4.否則,恢復的信息M將是Bound-key-blob形式的一個DER編碼,帶有類型BoundSignKey。如果不是,則所述SSP將發(fā)出SSP_CRYPTO_ERROR。5.如果bound-to-PCR為真,則所述bound-to將和當前PCR值相比較。如果所述值不相同,則所述SSP將輸出SSP_CRYPTO_ERROR。6.然后,所述SSP使用恢復專用密鑰段和公開密鑰以重構所述專用密鑰。所述專用密鑰可按如下方式被重構。通常,RSA密鑰由數(shù)N=p*q(N是兩個素數(shù)p和q的產物)和兩個指數(shù)e(加密指數(shù))和d(解密指數(shù))組成。N和e形成所述公開密鑰;d為所述專用密鑰。通常,d和N的長度相同(例如,2048位)。如果N的因式分解是已知的(即,如果p和q是已知的),則所述專用密鑰d可被輕易確定。注意,p和q只有N的一半。所以,我們存儲p而不是d作為所述專用密鑰。然后,由于給出了公開密鑰N、e和p,所以可以計算值q=N/p,然后,值d確定地給出p和q。然后依照上面定義的所述引用操作中的說明,所述專用密鑰被用于針對所述輸入信息DataToBeSigned和所述當前PCR產生簽名消息。如果所述函數(shù)返回一個出錯信息,則返回帶有被置零的SigBlob的SSP_CRYPTO_ERROR。7.返回SSP-SUCCESSBoundPKDecrypt定義SSP_STATUSBoundPKDecrypt([in]PKCiphertextBoundKeyBlob,[in]RSAPublicKeyBoundPubKey,[in]PKCiphertextDataToBeDcerypted[out]SecretdecryptedData)參數(shù)BoundSign-Input::={OrdinalINTERGER,Bound-keyBoundKeyBlob,Bound-pub-keyRSAPublicKey,Pk-sealed-blobPKCiphertext}BoundPKDecrypt-output::={OrdinalINTEGER,StatusINTEGER,d-blobSecret}返回值SSP_SUCCESSSSP_UNSEAL_ERRORSSP_CRYPTO_ERRORSSP_BAD_DATA_ERROR注釋所述BoundSignPKDecrypt操作采取類型sspV1BoundKey的公開密鑰明文,該明文包括類型BoundDecryptKey的一個BoundKeyBlob。如果這些條件中的任何一個未被滿足,或所述序列未成功解碼,則所述操作失敗,返回SSP_CRYPTO_ERROR。如果Bound-to-PCR被設定,則所述SSP檢查當前PCR值是否與在所述Bound-key-blob序列中的規(guī)定相同。如果不是,則所述SSP返回SSP_CRYPTO_ERROR。最后,所述SSP利用來自所述bound-blob的所述解密專用密鑰解密所述輸入信息。存取策略Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)作用所述BoundPkDecrypt操作執(zhí)行下列功能1.所述SSP檢測pk-seales-blob中的所述算法標識符是否為sspV1BoundKey。2.所述SSP根據在PKCS#1V2.1中規(guī)定的RSAES-OAEP-DECRYPT的默認值內部解密SealedBlob,獲得一個明文消息M。3.如果所述解碼操作的輸出是“解碼錯誤”,則返回帶有被置零的機密的SSP_CRYPTO_ERROR。4.否則,恢復的信息M將是具有類型BoundSignKey的Bound-key-blob形式的一個DER編碼,。如果不是,則所述SSP將發(fā)出SSP_CRYPTO_ERROR。5.如果bound-to-PCR為真,則所述bound-to將和當前PCR值相比較。如果所述值不相同,則所述SSP將輸出SSP_CRYPTO_ERROR。6.所述SSP使用所提供的公開密鑰恢復所述專用密鑰。該專用密鑰在BoundQuote操作中如上述一樣可被恢復。然后使用在PKCS#1V2.1中規(guī)定的RSAES-OAEP-DECRYPT的默認值恢復專用bound-key,以解密所述pk-sealed-blob,獲得一個明文消息M。7.所述SSP設置d-blob為M。8.返回SSP-SUCCESSBoundPKUnseal定義SSP_STATUSBoundPKDecrypt([in]PKCiphertextBoundKeyBlob,[in]RSAPublicKeyBoundPubKey,[in]PKCiphertextDataToBeUnsealed[out]SecretdecryptedData)參數(shù)BoundSign-Input::={OrdinalINTERGER,Bound-keyBoundKeyBlob,Bound-pub-keyRSAPublicKey,Pk-sealed-blobPKCiphertext}BoundPKDecrypt-output::={OrdinalINTEGER,StatusINTEGER,d-blobSecret}返回值SSP_SUCCESSSSP_UNSEAL_ERRORSSP_CRYPTO_ERRORSSP_BAD_DATA_ERROR注釋所述BoundSignPKDecrypt操作采取類型sspV1BoundKey的公開密鑰明文,該明文包括類型BoundDecryptKey的一個BoundKeyBlob。如果這些條件中的任何一個未被滿足,或所述序列未成功解碼,則產生SSP_CRYPTO_ERROR,所述操作失敗。如果Bound-to-PCR被設定,則所述SSP檢查當前PCR值是否與在所述Bound-key-blob序列中的規(guī)定相同。如果不是,則所述SSP返回SSP_CRYPTO_ERROR。最后,所述SSP使用PK_Unseal開啟具有來自所述bound-blob的所述解密專用密鑰的輸入消息。存取策略Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)作用所述BoundPkUnseal操作執(zhí)行下列功能1.所述SSP檢查pk-seales-blob中的所述算法標識符是否為sspV1BoundKey。2.所述SSP根據在PKCS#1V2.1中規(guī)定的RSAES-OAEP-DECRYPT的默認值內部解密SealedBlob,獲得一個明文消息M。3.如果所述解碼操作的輸出是“解碼錯誤”,則返回帶有被置零的機密的SSP_CRYPTO_ERROR。4.否則,恢復的信息M將是帶有類型BoundSignKey的Bound-key-blob形式的一個DER編碼,。如果不是,則所述SSP將發(fā)出SSP_CRYPTO_ERROR。5.如果bound-to-PCR為真,則所述bound-to將和當前PCR值相比較。如果所述值不相同,則所述SSP將輸出SSP_CRYPTO_ERROR。6.所述SSP使用所述約束密鑰點重建所述專用密鑰。所述專用密鑰在所述BoundQuote操作中如上述一樣可被恢復。然后使用在所述PK_Unseal命令中描述的步驟并使用所述恢復專用約束密鑰開啟所述pk-sealed-blob。7.如果在所述開啟點中命名的PCR與當前PCR不匹配,則所述SSP返回SSP_CRYPTO_ERROR。8.否則,所述SSP設置d-blob為M。9.返回SSP-SUCCESS。GenBoundKey定義SSP_STATUSGenBoundKey([in]BoundKeyTypeKeyType,[in]BOOLBoundToPcr,[in]DIGESTBoundTo[2],[in]BOOLmigrateable,[in]DIGESTmigrationAuthority,[in]BOOLexportable,[in]DIGESTexportAuthority,[in]DIGESTSigNonce,[out]BoundKeybound-key,[out]PKPublickeynewPubKey,[out]PKSignatureboundKeyQuoteBlob)參數(shù)GenBoundKey-Input::={OrdinalINTEGER,Key-typeBound-key-type,Bound-to-pcrBOOL,Bound-toDigestPair,MigrateableBOOL,Migrate-authDigest,ExportableBOOL,Export-authDigest,Sig-nonceDigest}GenBoundKey-output::={OrdinalINTEGER,StatusINTEGER,Bound-blobPKCiphertext,Bound-pubRSAPublicKey,Sig-blobPKSignature}返回值SSP_SUCCESSSSP_BAD_DATA_ERROR注釋所述GenBoundKey操作使所述SSP生成包括新生成的專用密鑰的一個新的約束密鑰點。所述約束密鑰點被利用所述SSP自己的公開密鑰加密。GenBoundKey也輸出所述新生成的密鑰對的公開密鑰、一個指出所述SSP生成所述密鑰的引用簽名、其特性和當生成所述密鑰時所述PCR值。GenBoundKey的調用者也指示將被生成的約束密鑰類型它是否被用于簽名、引用、BoundPKUnseal的開啟,還是BoundPKDecrypt的解密。所述調用者也規(guī)定所述約束密鑰是否被限定為一個PCR,如果是,所述PCR值被限定。存取策略Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)作用所述GenBoundKey操作執(zhí)行下列功能1.所述SSP產生一個新的公開專用RSA密鑰對。反之當所述SSP處于空閑時,所述SSP能可選地生成密鑰對,并在非易失性存儲器中存儲一個用于直接檢索的密鑰小存儲區(qū)。2.所述SSP內部生成包含新生成的專用密鑰、所述約束密鑰類型以及由所述調用者提供的其它參數(shù)的的一個約束密鑰結構。3.所述SSP利用所述平臺公開加密密鑰來加密所述約束密鑰點。4.所述SSP生成一個bound-key-pub-info的一個簽名點,該簽名點包含在密鑰創(chuàng)建和提供時的先創(chuàng)建密鑰的特性以及所述PCR的值。5.所述SSP輸出所述加密約束密鑰點、新生成的公開密鑰和所述引用密鑰點。6.返回SSP_SUCCESS。BoundKeyMigrate定義SSP_STATUSBoundKeyMigrate([in]PKCiphertextBoundKeyBlob,[in]RSAPublicKeyPubPartOfBoundKey,[in]BOUND_MIGRATION_INFOMifrationInfo,[in]RSA_SIGSigOnMigrationInfo)參數(shù)GenBoundKey-Input::={OrdinalINTEGER,Migration-infoBound-migration-info,Migration-pubkeyRSAPublicKey,Migration-authPKSignature}GenBoundKey-output::={OrdinalINTEGER,StatusINTEGER,Re-bound-blobPKCiphertext,}返回值SSP_SUCCESSSSP_BAD_DATA_ERROR注釋所述BoundKeyMigrate操作指令所述SSP以一個可控方式將所述密鑰重新連接到一個不同的PCR值上。最初的密鑰生成器、即本地或遠程密鑰生成器命名遷移授權機構。只有標記為可遷移的約束密鑰可被遷移,且只有當所述SSP被提供有一個合適的簽名Boundmigration-info結構時這些密鑰才能被遷移。適當簽名的裝置利用其摘要包含在所述約束密鑰點中的公開密鑰簽名。其余的約束密鑰屬性不被更改。存取策略Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)作用所述BoundKeyMigrate操作執(zhí)行下列功能1.所述SSP在內部解密所述約束密鑰結構且將其解釋為一個約束密要點。如果所述解碼失敗,則所述SSP返回SSP_CRYPTO_ERROR。2.所述SSP確認Bound-export-info涉及同一密鑰、所述簽名被適當形成以及所述簽名人的公開密鑰的摘要與在所述約束密鑰點的“可遷移”域中的命名相同。3.所述SSP檢查所述密鑰的可遷移性。如果不可遷移,則所述SSP返回SSP_CRYPO_ERROR。4.如果所述密鑰被限定為一個PCR,則所述SSP檢查當前PCR是否是在所述密鑰點中被命名的那個。5.所述SSP利用在所述Bound-migration-info的目標PCR域段中命名的值代替所述PCR值。6.所述SSP重新加密所述約束密鑰點,并輸出所述重新加密的結構。7.返回SSP_SUCCESS。BoundKeyExport定義SSP_STATUSBoundKeyExport([in]PKCiphertextBoundKeyBlob,[in]RSAPublicKeyPubPartOfBoundKey,[in]BOUND_Export_INFOExportInfo,[in]RSA_SIGSigOnMigrationInfo[out]PKCipherTextReBoundBlob)參數(shù)BoundKeyExporr-Input::={OrdinalINTEGER,Bound-keyPKCipherText,Bound-pub-keyRSAPublicKey,Export-infoBound-expoft-infoExport-authPKSignature}GenBoundKey-output::={OrdinalINTEGER,StatusINTEGER,Re-bound-blobPKCiphertext,}返回值SSP_SUCCESSSSP_BAD_DATA_ERROR注釋所述BoundKeyExport操作指示所述SSP以一個可控方式將約束密鑰的一個專用部分以和所述資源設備上的約束密鑰相一致的格式輸出給一個遠程機構。最初的密鑰生成器,即本地或遠程密鑰生成器命名所述輸出授權機構。只有被標記為可輸出的約束密鑰可被輸出,且只有當所述SSP被提供有一個正確簽名的Bound-export-info結構時,這些約束密鑰才被輸出。適當簽名的裝置利用其摘要包含在最初約束密鑰點中的公開密鑰簽名。BoundkeyExport允許合適授權的調用者規(guī)定將被重新約束所述密鑰的所述目標機構的公開密鑰和PCR值。這里沒有外部實體是一個SSP的特殊要求,但是所述新的約束點遵循約束密鑰的約定,以允許遠程SSPs直接消耗輸出的約束密鑰。存取策略Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)作用所述BoundKeyExport操作執(zhí)行下列功能1.述SSP內部解密所述約束密鑰結構且將其解釋為一個約束密要點。如果所述解碼失敗,則所述SSP返回SSP_CRYPTO_ERROR。2.所述SSP確認Bound-export-info涉及同一密鑰、所述簽名被正確形成以及所述簽名人的公開密鑰的摘要與在所述約束密鑰點的“輸出”段中的指定一樣。3.所述SSP檢查所述密鑰的可輸出性。如果不可輸出移,則所述SSP返回SSP_CRYPO_ERROR。4.如果所述密鑰被限定為一個PCR,則所述SSP檢查當前PCR是否在所述密鑰點中被命名。5.所述SSP內部生成一個包括來自最初約束密鑰結構的參數(shù)的新的約束密鑰點結構和在Bound-export-info中提供的新的PCR值。其它所有參數(shù)保持一致。6.所述SSP利用在Bound-export-info中提供的公開加密密鑰來加密所述新約束密鑰點。7.所述新的約束密鑰被輸出。8.返回SSP_SUCCESS。通用計算機環(huán)境圖12說明一個通用計算機環(huán)境400,其可被用于實現(xiàn)這里所述的技術。所述計算機環(huán)境400只是計算環(huán)境的例子之一,并不是試圖建議關于所述計算機和網絡結構的使用或功能的任何限定。計算機環(huán)境400不應被解釋為具有涉及在典型計算機環(huán)境400中說明的任何一個組件或其結合的任何相關或要求。計算機環(huán)境400包括計算機402形式的一臺通用計算設備。計算機402可被用于例如實現(xiàn)圖1中的主體102和防護裝置104或圖2中的層。計算機402的組件可包括、但不限于一個或多個處理器或處理單元404(可隨意包括一個或多個安全處理器或協(xié)處理器(例如一個SSP)和/或一個或多個加密處理器或協(xié)處理器),一個系統(tǒng)存儲器406和一個連接包括處理器404在內的各系統(tǒng)組件到系統(tǒng)存儲器406的系統(tǒng)總線408。系統(tǒng)總線408表示多種總線結構類型中一種或多種,包括一個存儲總線或存儲控制器、一個外圍總線、一個加速圖形端口、一個處理器或使用任一總線結構的局域總線。例如,該結構可包括一個工業(yè)標準結構(ISA)總線、一個微信道結構(MCA)總線、一個增強ISA(EISA)總線、一個視頻電子標準協(xié)會(VESA)局域總線和作為中層總線的一個外圍組件互連(PCI)總線。計算機402通常包多種計算機可讀媒體。該媒體可以是計算機402可訪問的可用媒體,且包括易失和非易失媒體、可拆卸和不可拆卸的媒體。系統(tǒng)存儲器406包括易失存儲器形式的計算機可讀媒體,例如一個隨機訪問存儲器(RAM)410,和/或非易失存儲器,例如只讀存儲器(ROM)412。一個基本輸入/輸出系統(tǒng)(BIOS)414,包括幫助在計算機402中的元件之間傳輸信息的基本程序,例如在啟動時被存儲在ROM中的基本程序。RAM410通常包括可直接訪問的和/或被處理單元404即時操作的數(shù)據和/或程序模塊。計算機402也可包括其它可移動的/不可移動的、易失的/非易失的計算機存儲媒體。例如,圖12說明一個用于對一個不可拆卸的非易失磁介質(圖中未示)進行讀寫的硬盤驅動器416,用于對一個可拆卸的非易失磁盤(例如,一個“軟盤”)進行讀寫的磁盤驅動器418,用于對諸如CD-ROM、DVD-ROM或其它光學媒體的一個可拆卸非易失存儲光盤424進行讀取得光盤驅動器422,。硬盤驅動器416、磁盤驅動器418和光盤驅動器422都通過一個或多個數(shù)據媒體接口426而被連接到系統(tǒng)總線408?;蛘哒f,硬盤驅動器416、磁盤驅動器418和光盤驅動器422可通過一個或多個接口(圖中未示)而被連接到系統(tǒng)總線408。所述盤驅動器和其相關的計算機可讀媒體提供計算機可讀指令、數(shù)據結構、程序模塊和用于計算機402的其它數(shù)據的非易失存儲。雖然本例示出了硬盤416、可移動磁盤420和可移動光盤424,但是很明顯,可被一臺計算機訪問的可存儲數(shù)據的其它類型的計算機可讀媒體,例如磁帶或其它磁存儲設備、快速存儲器卡、CD-ROM、數(shù)字通用盤(DVD)或其它光學存儲器、隨機訪問存儲器(RAM)、只讀存儲器(ROM)、電可擦除只讀存儲器(EEPROM)或類似物,也可被用于實現(xiàn)一個典型的計算系統(tǒng)和環(huán)境。作為例子包括操作系統(tǒng)426、一個或多個應用程序428、其它程序模塊430和程序數(shù)據432的許多程序模塊可被存儲在硬盤416、磁盤420、光盤424、ROM412和/或RAM410上。這種操作系統(tǒng)426、一個或多個應用程序428、其它程序模塊430和程序數(shù)據432中的每一個(或其某種結合)都可實現(xiàn)全部或部分支持分布式文件系統(tǒng)的常駐組件。用戶通過諸如鍵盤434和點擊設備436(例如,一個“鼠標”)向計算機402輸入命令和信息。其它設備438(未特別示出)可包括麥克風、操縱桿、游戲墊、圓盤式衛(wèi)星電視天線、串行端口、掃描儀和/或類似物。這些和其它輸入設備通過連接到系統(tǒng)總線408的輸入/輸出接口440而被連接到處理單元404上,但也可通過其它接口和總線結構而被連接,例如是并行端口、游戲端口或通用串行總線(USB)。監(jiān)視器442或其它類型的顯示設備也可通過例如是一個視頻適配器444的接口連接到系統(tǒng)總線408,。除監(jiān)視器442以外,其它輸出外圍設備可包括諸如揚聲器(未示出)之類的組件和可通過輸入/輸出接口440而被連接于計算機402的一個打印機446。計算機402可以使用邏輯連接到諸如遠程計算設備448的一個或多個遠程計算機運行于網絡環(huán)境中。例如,遠程計算設備448可以是個人計算機、便攜式計算機、服務器、路由器、網絡計算機、同等的設備或其它通用網絡節(jié)點和類似物。遠程計算設備448被表示為一臺便攜式計算機,該計算機可包括這里就計算機402所描述的許多或全部構件和特征。計算機402和遠程計算機448之間的邏輯連接作為一個局域網(LAN)450和廣域網(WAN)452而被描述。這種網絡環(huán)境在辦公室中是常見的,例如,企業(yè)之間的計算機網、企業(yè)內部互聯(lián)網和國際互聯(lián)網。當在一個局域網聯(lián)網環(huán)境中實現(xiàn)時,計算機402通過一個網絡接口或適配器454而被連接于一個局域網450。當在一個廣域網聯(lián)網環(huán)境中執(zhí)行時,計算機402通常包括一個用于在廣域網452上建立通信的調制解調器456或其它裝置。調制解調器456,其可被內置或外置于計算機402,可通過輸入/輸出接口440或其它合適的引擎而被連接于系統(tǒng)總線408。很明顯,示出網絡連接是一個例子,在計算機402和448之間建立通信連接的其它裝置也可被使用。在諸如利用計算環(huán)境400示出的網絡環(huán)境中,與計算機402相關的所述程序模塊或其中的部分可被存儲在一個遠程存儲設備中。例如,遠程應用程序458駐留在遠程計算機448的一個存儲設備上。為說明的目的,應用程序和諸如所述操作系統(tǒng)的其它可執(zhí)行程序在這里被表示為離散塊,雖然可以識別出這種程序和組件在不同時間駐留在計算設備402的不同存儲組件中且被所述計算機的數(shù)據處理器執(zhí)行。這里,以諸如可被一個或多個計算機或其它設備執(zhí)行的程序模塊的計算機可執(zhí)行指令的上下文來描述各種模塊和技術。通常,程序模塊包括能夠執(zhí)行特殊任務或實現(xiàn)特殊的摘要數(shù)據類型的子程序、程序、目標程序、組件、數(shù)據結構等等。通常,所述程序模塊的功能可如在各實施例所希望的相互組合或分配。這些模塊和技術的一個執(zhí)行可通過計算機可讀存儲媒體的形式被存儲或傳輸。計算機可讀存儲媒體可以是能被一臺計算機所訪問的任何可用媒體。譬如但不限于,計算機可讀媒體可包括“計算機存儲媒體”和“通信媒體”?!坝嬎銠C存儲媒體”包括以任意方法或技術實現(xiàn)的易失性和非易失性、可拆卸或不可拆卸的媒體,用于存儲諸如計算機可讀指令、數(shù)據結構、程序模塊或其它數(shù)據。計算機存儲媒體包括但不限于RAM、ROM、EEPROM、快速存儲器或其它存儲技術、CD-ROM、數(shù)字通用盤(DVD)或其它光學存儲器、磁帶盒、磁帶、磁盤存儲器或其它磁存儲設備,或可被用于存儲所期望的信息且可被一臺計算機所訪問的任何其它媒體?!巴ㄐ琶襟w”通常包括計算機可讀指令、數(shù)據結構、程序模塊或諸如載波或其它傳輸引擎的以調制數(shù)據信號形式存在的其它數(shù)據。通信媒體也包括任何信息傳送媒體。術語“調制數(shù)據信號”是指具有一個或多個以對在所述信號中的信息進行編碼的方式設置和改變的特征。譬如但不限于,通信媒體包括諸如一個有線網絡或直接有線連接之類的有線媒體以及諸如聲音、射頻、紅外線之類的無線媒體。上述的任一種結合也被包括在計算機可讀存儲媒體的范圍內。雖然上述說明使用了針對結構特征和/或方法行為的語言,但應當理解,由所附權利要求規(guī)定的本發(fā)明不限于所述特征或行為。即,所述特征和行為只是實現(xiàn)本發(fā)明的一個例子。權利要求1.一個系統(tǒng),包括包括一個最底層的多個分級層,該最底層可防護一個根資源;其中,所述多個分級層進一步包括一個或多個擔任主體的中間層,該主體請求從下一個較低層訪問所述根資源并且被用做朝向在所述下一較高層中主體的所述根資源的防護裝置;和僅僅允許被授權訪問所述根資源的程序訪問所述根資源,其中,所述允許包括使用一個公開密鑰封閉操作來安全地封閉所述根資源以及使用一個公開密鑰開啟操作來檢索所述根資源。2.所權利要求1所述的系統(tǒng),其中,所述多個分級層包括四層,其中,最底層包括一個安全核心層,其中,下一個最底層包括一個基本輸入/輸出系統(tǒng)層,其中,下一個最底層包括一個操作系統(tǒng)層,和其中,最高層包括一個應用層。3.所權利要求1所述的系統(tǒng),其中的所述根資源包括一個加密密鑰。全文摘要一方面,從一個調用程序獲得數(shù)據。使用公開密鑰加密以生成包括所述數(shù)據的密文,僅允許一個或多個目標程序能從所述密文獲得所述數(shù)據。另一方面,從一個調用程序獲得一個位串。檢驗所述調用程序的一個標識符以確定是否允許所述調用程序訪問所述位串密文中的加密數(shù)據。通過使用公開密鑰而使所述數(shù)據被解密,并且僅當所述調用程序被允許訪問所述數(shù)據時才將所述數(shù)據返回給所述調用程序。文檔編號G06F7/00GK1822015SQ20061005957公開日2006年8月23日申請日期2003年4月17日優(yōu)先權日2002年4月17日發(fā)明者P·英格蘭,M·佩納達申請人:微軟公司