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

基于對(duì)稱密鑰加密保存和檢索數(shù)據(jù)的制作方法

文檔序號(hào):6556944閱讀:187來(lái)源:國(guó)知局

專利名稱::基于對(duì)稱密鑰加密保存和檢索數(shù)據(jù)的制作方法
技術(shù)領(lǐng)域
:這個(gè)發(fā)明涉及保存和檢索數(shù)據(jù),尤其是涉及基于對(duì)稱密鑰加密來(lái)保存和檢索數(shù)據(jù)。
背景技術(shù)
:在計(jì)算機(jī)上保護(hù)數(shù)據(jù)以便使數(shù)據(jù)僅僅向適當(dāng)當(dāng)事人公開(kāi)對(duì)用戶來(lái)說(shuō)就變得重要了。用戶想要保護(hù)的數(shù)據(jù)類型變化很大,諸如工作相關(guān)的或者個(gè)人機(jī)密文件、銀行帳戶號(hào)碼、信用卡號(hào)、社會(huì)保險(xiǎn)號(hào)等。另外,對(duì)某些第三方來(lái)說(shuō),在用戶的計(jì)算機(jī)上保護(hù)數(shù)據(jù)免受不正確的使用或者訪問(wèn)也同樣重要。例如,信用卡發(fā)行者希望信用卡號(hào)被保護(hù)以便使它們不會(huì)向裝載到計(jì)算機(jī)中的惡意程序或者當(dāng)事人公開(kāi),音樂(lè)公司希望保護(hù)歌曲以便它們不能被復(fù)制,電影工作室希望保護(hù)電影以便它們不能被復(fù)制等等。一種解決保護(hù)在計(jì)算機(jī)上的數(shù)據(jù)的方案是拋棄通用計(jì)算設(shè)備而使用專用阻止篡改的盒子來(lái)傳送、儲(chǔ)存和顯示保護(hù)內(nèi)容。然而,這個(gè)解決方案不是所期望的,因?yàn)樗柚顾挠脩魯U(kuò)展他們的計(jì)算機(jī)(例如,用戶不能在這樣的阻止篡改的盒子上安裝附加的軟件組件和/或硬件組件)。因此,提供一種允許在通用計(jì)算設(shè)備上保護(hù)數(shù)據(jù)的方法將是有利的。
發(fā)明內(nèi)容在此處描述了基于對(duì)稱密鑰加密來(lái)保存和檢索數(shù)據(jù)。依據(jù)一個(gè)方面,從一個(gè)調(diào)用程序中檢索數(shù)據(jù)。以一種僅僅允許一個(gè)或者多個(gè)目標(biāo)程序能夠從密文中獲得該數(shù)據(jù)的方式,使用一個(gè)對(duì)稱密碼,來(lái)產(chǎn)生包含該數(shù)據(jù)的密文。依據(jù)另一個(gè)方面,從一個(gè)調(diào)用程序中檢索位串。檢查該調(diào)用程序的標(biāo)識(shí)符以確定該調(diào)用程序是否被允許訪問(wèn)以該位串密文方式所加密的數(shù)據(jù)。還驗(yàn)證該數(shù)據(jù)的完整性,以及使用一個(gè)對(duì)稱密鑰解密該數(shù)據(jù)。只有該調(diào)用程序被允許訪問(wèn)該數(shù)據(jù)而且該數(shù)據(jù)的完整性被成功驗(yàn)證時(shí)才把該數(shù)據(jù)返回到調(diào)用程序。附圖簡(jiǎn)要說(shuō)明在整個(gè)文件中使用了相同的數(shù)字以表示類似的元件和/或特征。圖1說(shuō)明了一個(gè)示范性的訪問(wèn)控制模型。圖2顯示了一個(gè)使用四個(gè)不同分層的訪問(wèn)控制環(huán)境示例。圖3給出了一個(gè)用于實(shí)現(xiàn)Seal操作的示范性處理過(guò)程的流程圖。圖4給出了一個(gè)用于實(shí)現(xiàn)UnSeal操作的示范性處理過(guò)程的流程圖。圖5給出了一個(gè)用于實(shí)現(xiàn)Store操作的示范性處理過(guò)程的流程圖。圖6給出了一個(gè)用于實(shí)現(xiàn)Seal操作的示范性處理過(guò)程的流程圖。圖7給出了一個(gè)用于實(shí)現(xiàn)Quote操作的示范性處理過(guò)程的流程圖。圖8給出了一個(gè)用于實(shí)現(xiàn)Verify操作的示范性處理過(guò)程的流程圖。圖9給出了一個(gè)用于實(shí)現(xiàn)Seal操作的示范性處理過(guò)程的流程圖。圖10給出了一個(gè)用于實(shí)現(xiàn)PKSeal操作的示范性處理過(guò)程的流程圖。圖11給出了一個(gè)用于實(shí)現(xiàn)GenSeal操作的示范性處理過(guò)程的流程圖。圖12說(shuō)明了一個(gè)通用計(jì)算機(jī)環(huán)境,其能夠被用于實(shí)現(xiàn)在此所描述的技術(shù)。具體實(shí)施例方式圖1說(shuō)明了一個(gè)示范性的訪問(wèn)控制模型100。委托人102能夠請(qǐng)求訪問(wèn)一個(gè)受保護(hù)的資源。由防護(hù)裝置104接收該請(qǐng)求,其中防護(hù)裝置104是一個(gè)控制對(duì)資源106的訪問(wèn)的組件。防護(hù)裝置104檢查該請(qǐng)求,并且基于用于該資源的訪問(wèn)策略以及其它信息、諸如發(fā)布該請(qǐng)求的委托人102的身份,來(lái)判斷是否準(zhǔn)許該請(qǐng)求。為了便于說(shuō)明,在圖1中舉例說(shuō)明了單個(gè)委托人102、防護(hù)裝置104、和資源106。然而,應(yīng)當(dāng)注意到,訪問(wèn)控制模型100能夠包含多個(gè)委托人102、多個(gè)防護(hù)裝置104、和/或多個(gè)資源106。委托人102是指請(qǐng)求訪問(wèn)受保護(hù)數(shù)據(jù)的組件或者模塊。這個(gè)請(qǐng)求可以是一條檢索受保護(hù)數(shù)據(jù)的請(qǐng)求(例如,一條用于檢索一個(gè)加密密鑰的請(qǐng)求),或者一條使用受保護(hù)數(shù)據(jù)來(lái)執(zhí)行操作的請(qǐng)求(例如,受保護(hù)數(shù)據(jù)能夠是一個(gè)加密密鑰,而該請(qǐng)求能夠是一條使用該加密密鑰來(lái)加密或者解密特定數(shù)據(jù)的請(qǐng)求)。委托人102可作為硬件、軟件、固件中的一個(gè)組件或者模塊,或者是硬件、軟件和/或固件的組合。防護(hù)裝置104是指可控制對(duì)受保護(hù)數(shù)據(jù)的訪問(wèn)的組件或者模塊。防護(hù)裝置104使用與受保護(hù)數(shù)據(jù)有關(guān)的訪問(wèn)策略、以及其它信息(諸如請(qǐng)求訪問(wèn)受保護(hù)內(nèi)容的委托人的身份),以確定是否允許委托人訪問(wèn)受保護(hù)的數(shù)據(jù)。如果防護(hù)裝置104決定允許請(qǐng)求委托人訪問(wèn)受保護(hù)數(shù)據(jù),則防護(hù)裝置104以適當(dāng)?shù)姆绞綄?duì)該請(qǐng)求做出響應(yīng)(例如,如果該請(qǐng)求是一條對(duì)受保護(hù)數(shù)據(jù)的請(qǐng)求,則把受保護(hù)數(shù)據(jù)返回給委托人;或者,如果該請(qǐng)求是一條對(duì)將要使用受保護(hù)數(shù)據(jù)進(jìn)行加密的特定數(shù)據(jù)的請(qǐng)求,則防護(hù)裝置104使用受保護(hù)數(shù)據(jù)來(lái)加密該特定數(shù)據(jù)并且將密文返回(加密的數(shù)據(jù))給委托人)。應(yīng)當(dāng)注意到,防護(hù)裝置104可以基于請(qǐng)求的特性限制委托人。例如,防護(hù)裝置104可以允許一特定委托人具有使用受保護(hù)數(shù)據(jù)簽名的特定數(shù)據(jù),但是可能不允許把受保護(hù)數(shù)據(jù)返回給特定委托人。防護(hù)裝置104還能夠被表示為一個(gè)公開(kāi)防護(hù)裝置和/或一個(gè)服務(wù)防護(hù)裝置。服務(wù)防護(hù)裝置應(yīng)委托人的請(qǐng)求用受保護(hù)數(shù)據(jù)(例如,加密密鑰)執(zhí)行某些操作(例如,加密、解密、數(shù)字簽名等)而不必公開(kāi)受保護(hù)的數(shù)據(jù)。另一方面,公開(kāi)防護(hù)裝置向授權(quán)的請(qǐng)求者揭示受保護(hù)數(shù)據(jù)。應(yīng)當(dāng)注意到,特定防護(hù)裝置104能夠是一個(gè)公開(kāi)防護(hù)裝置和一個(gè)服務(wù)防護(hù)裝置。資源106能夠是將要限制對(duì)其訪問(wèn)的任何類型的數(shù)據(jù)。資源106的例子包含加密密鑰、銀行帳戶號(hào)、信用卡號(hào)、諸如社會(huì)保險(xiǎn)號(hào)、口令等的個(gè)人信息。資源106實(shí)際上還可以是在一個(gè)計(jì)算設(shè)備中的其他東西。例如,資源106也可以是物理存儲(chǔ)器(例如,RAM或者ROM)、光或者磁盤(pán)或者盤(pán)驅(qū)動(dòng)器、視頻卡、聲卡、智能卡等。通過(guò)另一個(gè)例子,資源106也可以是操作系統(tǒng)抽象概念,諸如處理過(guò)程、文件、線程、信號(hào)量等等。在此處所公開(kāi)的,主要是就在單個(gè)計(jì)算設(shè)備上的實(shí)現(xiàn)來(lái)描述訪問(wèn)控制模型100。然而,應(yīng)當(dāng)理解,模型的不同部分能夠在不同的計(jì)算設(shè)備上實(shí)現(xiàn)。例如,委托人102可以在一個(gè)計(jì)算設(shè)備上,而防護(hù)裝置104和資源106可以在另一個(gè)計(jì)算設(shè)備上。一計(jì)算設(shè)備上的委托人和防護(hù)裝置能夠被分類成為任何數(shù)目n的分層ln。圖2顯示了一個(gè)使用四個(gè)不同分層的訪問(wèn)控制環(huán)境示例。在一個(gè)實(shí)現(xiàn)過(guò)程中,層l1是一個(gè)硬件或者安全核心層,層l2是一個(gè)基本輸入/輸出系統(tǒng)(BIOS)層,層l3是一個(gè)操作系統(tǒng)(OS)層,而層l4是一個(gè)應(yīng)用層。在圖2的環(huán)境示例中,最低層(層l1)保護(hù)一個(gè)根資源。中間層(層l2和l3)中的程序起到可請(qǐng)求訪問(wèn)從下一個(gè)較低層起的委托人的作用,而同時(shí)起到可保護(hù)下一個(gè)較高層中的委托人的作用。中間層因此能夠?yàn)樵谳^高層中的委托人増加功能。舉例來(lái)說(shuō),假定程序120希望檢索由防護(hù)裝置126保護(hù)的根資源128。程序120起到一個(gè)從模塊122請(qǐng)求訪問(wèn)根資源128的委托人的作用,其中模塊122起到資源防護(hù)裝置的作用。如果模塊122具有資源128的拷貝(例如,先前從防護(hù)裝置126中所獲得的以響應(yīng)先前的層l4中的程序120或者其它程序?qū)υ撡Y源的請(qǐng)求,或者當(dāng)模塊122在計(jì)算設(shè)備中被初始化和加載時(shí)),則模塊122檢查程序120是否被允許檢索該資源。如果程序120被允許檢索資源,則模塊122返回資源給程序120。然而,如果模塊122不具有資源128的拷貝,則模塊122起到一個(gè)從模塊124請(qǐng)求訪問(wèn)根資源的委托人的作用,其中模塊124起到該資源防護(hù)裝置的作用。如果模塊124具有資源128的拷貝(例如,先前從防護(hù)裝置126中所獲得的以響應(yīng)先前的層l3中的模塊122或者其它模塊對(duì)該資源的請(qǐng)求,或者當(dāng)模塊124在計(jì)算設(shè)備中被初始化和加載時(shí)),則模塊124檢查模塊122是否被允許檢索該資源。如果模塊122被允許檢索該資源,則模塊124返回資源給模塊122。如果程序120被允許檢索資源,則模塊122返回資源給程序120。然而,如果模塊122不具有資源128的拷貝,則模塊122起到一個(gè)從防護(hù)裝置126請(qǐng)求訪問(wèn)根資源的委托人的作用。防護(hù)裝置126檢查模塊124是否被允許檢索資源,并且如果模塊124被允許檢索資源則返回資源給模塊124。如果模塊122被允許檢索資源,則模塊124返回資源給模塊122,并且如果程序120被允許檢索資源,則模塊122返回資源給程序120。在此處的討論中,對(duì)使用圖1中的訪問(wèn)控制模型100以允許軟件的驗(yàn)證操作進(jìn)行了介紹。通常,在軟件的驗(yàn)證操作中受保護(hù)的資源是加密密鑰。然而,應(yīng)當(dāng)理解,軟件的驗(yàn)證操作僅僅使用訪問(wèn)控制模型100這一個(gè)例子。使用訪問(wèn)控制模型100的另一個(gè)例子是向一個(gè)計(jì)算機(jī)驗(yàn)證用戶。大多數(shù)的現(xiàn)代計(jì)算機(jī)都具有一個(gè)訪問(wèn)控制系統(tǒng)。用戶登錄到計(jì)算機(jī)上,以便使計(jì)算機(jī)知曉該用戶是誰(shuí)。在登錄之后,用戶運(yùn)行通常需要訪問(wèn)系統(tǒng)資源(例如讀文件、寫(xiě)入到屏幕上的窗口等)的程序。典型地,咨詢計(jì)算機(jī)中的訪問(wèn)控制系統(tǒng)(例如,“用戶x能夠在資源z上執(zhí)行操作y嗎?”)。如果答案為“否”,則程序不能訪問(wèn)資源。使用訪問(wèn)控制模型100的另一個(gè)例子是向一個(gè)遠(yuǎn)程服務(wù)驗(yàn)證用戶。諸如網(wǎng)站(例如,在線的經(jīng)紀(jì)人或者銀行)這樣的遠(yuǎn)程服務(wù)被認(rèn)為是可具有訪問(wèn)控制系統(tǒng)。資源是人們的銀行帳戶、他們的金錢(qián)和他們的股票。在用戶登錄到網(wǎng)站之后,訪問(wèn)控制系統(tǒng)將確定該用戶是否被授權(quán)以執(zhí)行由用戶所請(qǐng)求的訪問(wèn),諸如對(duì)資源“銀行帳戶數(shù)據(jù)”的“讀取”訪問(wèn)(以檢索最近的銀行結(jié)單)、或者對(duì)資源“在銀行賬戶12345中的$1000”的“轉(zhuǎn)帳”訪問(wèn)。使用訪問(wèn)控制模型100的還有另一個(gè)例子是限制對(duì)特定建筑物或者區(qū)域的物理訪問(wèn)。例如,當(dāng)用戶在上午到達(dá)工作地點(diǎn)時(shí),用戶顯示他或者她的徽章并且在資源“前門(mén)”上請(qǐng)求“打開(kāi)”操作。某些電子系統(tǒng)(防護(hù)裝置)基于存儲(chǔ)在徽章上的信息確定用戶是否被允許進(jìn)入該建筑物并且據(jù)此打開(kāi)該門(mén)。如果有可能使程序(從一個(gè)公開(kāi)防護(hù)裝置或者從一個(gè)服務(wù)防護(hù)裝置)獲得對(duì)至少一個(gè)加密資源的受保護(hù)的訪問(wèn),則計(jì)算設(shè)備啟用程序(軟件)的驗(yàn)證操作。在某些實(shí)施例中,如下所述,允許驗(yàn)證和隔離的一個(gè)計(jì)算設(shè)備允許驗(yàn)證操作。如果滿足以下兩點(diǎn),則程序C能夠被稱為與另一個(gè)程序D隔離(1)有能夠由程序C而不是程序D訪問(wèn)的存儲(chǔ)器;以及(2)程序D不能啟動(dòng)程序C的執(zhí)行(除了可能在由程序C確定的一個(gè)入口點(diǎn)處之外)。通過(guò)一個(gè)程序的轉(zhuǎn)移規(guī)則(可執(zhí)行代碼)和它的初始狀態(tài)(入口點(diǎn)或者指令指針I(yè)P的初始值)來(lái)給定該程序。由于數(shù)據(jù)能夠被保存在不能由程序D訪問(wèn)的存儲(chǔ)器中,所以即使存在程序D的對(duì)抗行為,第一點(diǎn)也保證了程序C的程序代碼和狀態(tài)信息的完整性。這一點(diǎn)也允許程序C保護(hù)機(jī)密數(shù)據(jù)(例如,加密密鑰)不被程序D觀察到。第二點(diǎn)保證D不能通過(guò)對(duì)抗性地選擇入口點(diǎn)來(lái)破壞C的行為。另外,能夠這樣說(shuō),如果程序C能夠標(biāo)識(shí)程序D的轉(zhuǎn)移規(guī)則(程序代碼)和初始狀態(tài),則程序C能夠驗(yàn)證程序D。就每一個(gè)小于i的層j來(lái)說(shuō),計(jì)算設(shè)備允許為任一程序C隔離除單個(gè)程序Ej之外的其它任何程序D,其中i是程序C的層。這保護(hù)程序不受除程序C請(qǐng)求通過(guò)其訪問(wèn)它的資源的防護(hù)裝置中的序列E1、E2、...、Ei-1之外的任何程序的觀察和干擾。此外,就任一層i來(lái)說(shuō),計(jì)算設(shè)備允許在層i中執(zhí)行的程序驗(yàn)證在層i+1中的至少某些程序。這個(gè)要求允許一個(gè)程序起到一個(gè)用于來(lái)自下一層中委托人的請(qǐng)求的防護(hù)裝置的作用。這兩個(gè)觀察得出一條歸納的結(jié)論在任一層中的程序能夠通過(guò)請(qǐng)求從它們的前一層訪問(wèn)資源、通過(guò)隔離保護(hù)它們的完整性和資源、和驗(yàn)證來(lái)自下一層中委托人的請(qǐng)求而起到資源防護(hù)裝置的作用。能夠通過(guò)使用物理存儲(chǔ)器保護(hù)來(lái)實(shí)現(xiàn)隔離。這種方法被稱為“在空間中隔離”或者“空間隔離”。例如,在許多現(xiàn)代微處理器中找到的環(huán)形和虛擬存儲(chǔ)器足以實(shí)現(xiàn)在空間中的隔離。在特權(quán)方式下運(yùn)行的操作系統(tǒng)核心(層i)能夠設(shè)置用于應(yīng)用程序(層i+1)的頁(yè)表,以便使任證用程序只能訪問(wèn)被操作系統(tǒng)核心選擇以映射到應(yīng)用程序的虛擬地址空間中的物理存儲(chǔ)器的那些部分。此外,核心限制應(yīng)用程序的特權(quán)以便使它們不能改變存儲(chǔ)器映像,并且確保應(yīng)用程序僅僅能夠在一個(gè)良好定義的入口點(diǎn)處啟動(dòng)核心代碼的執(zhí)行(系統(tǒng)調(diào)用)。在兩層之間實(shí)現(xiàn)隔離的另一種方法是按時(shí)間分開(kāi)它們的執(zhí)行。這種方法被稱為“在時(shí)間中隔離”或者“時(shí)間隔離”。在第一層i中的程序執(zhí)行到完成時(shí),使某些資源不可用,然后終止。隨后,把控制傳輸?shù)较乱粚觟+1。在隨后的層(j=i+1)之間進(jìn)行驗(yàn)征。程序C驗(yàn)證j的程序(轉(zhuǎn)移規(guī)則)和配置初始狀態(tài)。能夠通過(guò)讓程序C檢查在層j中的程序來(lái)驗(yàn)證該程序。即,典型地,程序C讀取包含用于層j的程序的存儲(chǔ)器,并且計(jì)算在這個(gè)存儲(chǔ)器區(qū)域上的加密摘要。應(yīng)當(dāng)注意到,此時(shí)目的僅僅是確定代碼的身份,不計(jì)算由其它委托人提出有關(guān)該代碼的結(jié)單。因此,此時(shí)證書(shū)是沒(méi)有必要的。程序C的第二個(gè)任務(wù)是標(biāo)識(shí)程序D的初始狀態(tài)。通常,在一個(gè)任意的執(zhí)行階段確定一個(gè)程序的初始狀態(tài)是很難的。因此,程序C控制程序D的初始狀態(tài)。實(shí)際上,這意味著如果程序C在σ處啟動(dòng)了程序D的執(zhí)行則程序C只能確定程序D的初始狀態(tài)σ。總之,為了驗(yàn)證程序D,程序C檢查它認(rèn)為相關(guān)的存儲(chǔ)器內(nèi)容(程序,可能還有數(shù)據(jù)),并且計(jì)算加密摘要。在那之后,程序C轉(zhuǎn)移執(zhí)行到程序D的一個(gè)定義明確的入口點(diǎn)處。在其中資源是加密密鑰的情況下,驗(yàn)證操作允許每個(gè)操作系統(tǒng)和應(yīng)用程序具有對(duì)一個(gè)或多個(gè)秘密的排它訪問(wèn)。上述討論的隔離保護(hù)每個(gè)秘密不受到對(duì)抗性代碼的攻擊。上述討論的程序驗(yàn)證允許程序被標(biāo)識(shí),以便使每個(gè)秘密僅僅向擁有它的程序公開(kāi)。通常,假定有來(lái)自一個(gè)程序(圖1中的委托人102)的一條請(qǐng)求,防護(hù)裝置104確定該程序的身份(即,防護(hù)裝置104驗(yàn)證該程序)。如果程序不是所請(qǐng)求的秘密(資源106)的所有者,則防護(hù)裝置104拒絕該請(qǐng)求。否則,防護(hù)裝置104計(jì)算該秘密的某些函數(shù)(其可以是秘密本身),而且可能地話,還計(jì)算由該程序提供的信息,并且返回結(jié)果。做為選擇,不是明確地接受或者拒絕請(qǐng)求,而是防護(hù)裝置104可以服務(wù)于該請(qǐng)求,但是把調(diào)用者的身份綁定到結(jié)果中。這種替換方法是適當(dāng)?shù)?,例如,如果由防護(hù)裝置返回的結(jié)果不包含機(jī)密信息(例如,使用秘密以產(chǎn)生一個(gè)數(shù)字簽名的請(qǐng)求)。此處使用了術(shù)語(yǔ)選通(gating)功能以指示這兩種情況。另外,不論是在哪種情況中,防護(hù)裝置104驗(yàn)證調(diào)用者(委托人102)。驗(yàn)證委托人102在此也被稱為函數(shù)ID(),其返回調(diào)用程序(調(diào)用防護(hù)裝置104的選通功能的程序)的摘要。能夠以多種傳統(tǒng)方式中的任何一種產(chǎn)生摘要,諸如使用多種加密散列函數(shù)(也稱為單向散列函數(shù))、諸如SHA1(SecureHashAlgorithm1,安全散列算法1)、MD5(MessageDigest5,消息摘要5)、MD2(MessageDigest2,消息摘要2)等中的任何一個(gè)或多個(gè);使用鍵入的MAC(MessageAuthenticationCode,消息驗(yàn)證碼);等諸如此類。在此描述的一類選通功能實(shí)現(xiàn)了密封存儲(chǔ)。密封存儲(chǔ)的目的是允許程序存儲(chǔ)秘密,以便使只有一特定組的一個(gè)或多個(gè)程序(由存儲(chǔ)該秘密的程序定義)能夠檢索該秘密。在一個(gè)實(shí)現(xiàn)中,只有最初保存(密封)該秘密的那個(gè)程序能夠恢復(fù)(啟封)該秘密。通常,這些秘密的使用斯限將超過(guò)該程序的單獨(dú)執(zhí)行時(shí)間。在一個(gè)程序的單次執(zhí)行期間使用的秘密能夠被保存(密封),或者隔離,并且隨機(jī)數(shù)發(fā)生器也允許一個(gè)程序在單次執(zhí)行期間保持秘密。密封存儲(chǔ)還允許一個(gè)程序在在時(shí)間上可能不重疊的不同執(zhí)行之上保持秘密。層li借助于下列接口(例如,使用“Seal”和“UnSeal”操作和/或PKSeal和PKUnseal操作)向下一層li+1暴露密封存儲(chǔ)。此處有關(guān)密封存儲(chǔ)的討論涉及被用來(lái)加密和解密數(shù)據(jù)的加密密鑰。這些加密密鑰是與保護(hù)資源訪問(wèn)的防護(hù)裝置(例如,圖1中的防護(hù)裝置104)有關(guān)的密鑰。此處的討論還涉及程序的標(biāo)識(shí)符(例如,調(diào)用或者啟用一個(gè)操作的程序的標(biāo)識(shí)符、或者被允許訪問(wèn)一個(gè)資源的一個(gè)目標(biāo)程序的標(biāo)識(shí)符)。在此這些標(biāo)識(shí)符通常被稱為摘要。然而,應(yīng)當(dāng)理解,摘要僅僅是程序標(biāo)識(shí)符的一個(gè)例子。能夠使用是程序的度量或者其它表示、并且允許對(duì)該程序的任何改變的其它類型的標(biāo)識(shí)符。如果對(duì)該程序進(jìn)行了任何改變(例如,由一個(gè)對(duì)手改變一個(gè)或多個(gè)指令以試圖惡意地訪問(wèn)和使用受保護(hù)的數(shù)據(jù)),則程序的標(biāo)識(shí)符應(yīng)當(dāng)反映那個(gè)改變(例如,用于未改變的程序的標(biāo)識(shí)符將不同于改變了的程序的標(biāo)識(shí)符)。Seal操作把將被密封的數(shù)據(jù)(例如,一個(gè)秘密)接收作為輸入。Seal操作還選擇性地把標(biāo)識(shí)了何時(shí)和/或向誰(shuí)可能揭示(啟封)秘密的條件接收作為輸入。在一個(gè)實(shí)現(xiàn)中,這個(gè)條件是被允許檢索(啟封)數(shù)據(jù)的一個(gè)目標(biāo)程序的摘要。做為選擇,將被允許檢索(啟封)數(shù)據(jù)的程序能夠以其它方式被標(biāo)識(shí)。例如,程序可以由驗(yàn)證一個(gè)或多個(gè)征書(shū)的一個(gè)公用密鑰進(jìn)行標(biāo)識(shí),其中每個(gè)證書(shū)與一個(gè)或多個(gè)程序有關(guān)。做為選擇,除了一個(gè)目標(biāo)程序的標(biāo)識(shí)符之外或者作為代替,可以使用其它條件。例如,該條件可以包含就何時(shí)能夠揭示(啟封)數(shù)據(jù)的特定時(shí)間限制,諸如在一周中的某天或某些天的特定時(shí)間,在這些時(shí)間期間能夠揭示(啟封)秘密。通過(guò)另一個(gè)例子,該條件可以包含為了使秘密被揭示(啟封)而必須提供的一個(gè)口令或者其它數(shù)據(jù)的標(biāo)識(shí)符--例如,秘密只能由已知該口令的程序啟封。通過(guò)還有的另一個(gè)例子,該條件能夠是一個(gè)邏輯公式(例如,以一階邏輯編寫(xiě)的任何語(yǔ)句、以判定邏輯編寫(xiě)的任何語(yǔ)句、等)。計(jì)算該邏輯公式(例如,由防護(hù)裝置),并且只有當(dāng)估算返回一個(gè)真的指示時(shí)才揭示(啟封)秘密。在還有的另一個(gè)例子中,該條件能夠是以某種語(yǔ)言(例如,Java、C*、Javascript、VBScript等)的一個(gè)可執(zhí)行程序(例如由防護(hù)裝置)執(zhí)行該程序,并且只有當(dāng)程序返回“真”或者“滿足”的某個(gè)指示時(shí)才揭示(啟封)秘密。在條件是目標(biāo)程序的摘要、而不是被提供目標(biāo)程序的摘要的情況下,Seal操作可以使用調(diào)用Seal操作的程序的摘要(由此隱含地輸入目標(biāo)程序的摘要)。另外,能夠把多個(gè)目標(biāo)程序的摘要輸入到Seal操作,借此允許多個(gè)目標(biāo)程序檢索(啟封)數(shù)據(jù)。Seal操作加密它的輸入(數(shù)據(jù)和允許檢索(啟封)數(shù)據(jù)的條件)連同調(diào)用者的標(biāo)識(shí)符。Seal操作以加密形式返回輸入數(shù)據(jù)(作為密文)。Seal操作還返回一個(gè)能夠被用于驗(yàn)證密封數(shù)據(jù)完整性的值(例如,消息驗(yàn)證碼(MAC)值)。這個(gè)返回的數(shù)據(jù)允許所存儲(chǔ)的數(shù)據(jù)在隨后的UnSeal操作中被引用,如以下更詳細(xì)討論的那樣。在表I中舉例說(shuō)明了用于Seal操作的偽代碼。在表I的偽代碼中,ID()是以上討論的ID()函數(shù),e是返回給調(diào)用者的值(例如,一個(gè)位串或者位序列),數(shù)據(jù)是將被密封的數(shù)據(jù),而[t1,...,tm]是被允許檢索(啟封)數(shù)據(jù)(或者一個(gè)或多個(gè)其它條件)的一個(gè)或多個(gè)(m個(gè))目標(biāo)程序的摘要。表I圖3是一個(gè)說(shuō)明了一個(gè)用于實(shí)現(xiàn)Seal操作的示范性處理過(guò)程200的流程圖。處理過(guò)程200由圖1中的防護(hù)裝置104執(zhí)行,并且可以以硬件、軟件、固件、或者它們的組合來(lái)實(shí)現(xiàn)。最初,從調(diào)用者接收將被密封的秘密(動(dòng)作202)。秘密被加密,以便使秘密只能由一特定目標(biāo)程序檢索(動(dòng)作204),或者是如果滿足了一個(gè)或多個(gè)特定條件才能檢索秘密。然后把包含被功密的秘密的密文返回給調(diào)用者(動(dòng)作206)。此外還可以把附加信息,諸如調(diào)用者的摘要和/或目標(biāo)程序的摘要,返回給調(diào)用者(作為密文的一部分或者從密文分離)。當(dāng)調(diào)用程序的密封數(shù)據(jù)(例如加密密鑰)現(xiàn)在希望檢索時(shí),UnSeal操作把由Seal操作返回的一個(gè)位串接收作為輸入。UnSeal操作獲得用于揭示數(shù)據(jù)的條件,并且檢查那些條件是否被滿足了。例如,如果條件包含被允許檢索(啟封)數(shù)據(jù)的一個(gè)或多個(gè)目標(biāo)程序的摘要,則UnSeal操作獲得那些摘要,并且檢查調(diào)用程序是否是一個(gè)或多個(gè)目標(biāo)程序其中之一。如果調(diào)用程序不是一個(gè)或多個(gè)目標(biāo)程序其中之一,則UnSeal操作失敗,并且所請(qǐng)求的數(shù)據(jù)不返回給調(diào)用者。然而,如果調(diào)用程序是一個(gè)或多個(gè)目標(biāo)程序其中之一,則UnSeal操作成功,并且把所請(qǐng)求的數(shù)據(jù)返回給調(diào)用者。密封數(shù)據(jù)的程序的摘要也由UnSeal操作選擇性地返回。在表II中舉例說(shuō)明了用于UnSeal操作的偽代碼。在表II的偽代碼中,數(shù)據(jù)是正被請(qǐng)求的數(shù)據(jù)(和先前已經(jīng)被密封的數(shù)據(jù)),[t1,...,tm]是被允許檢索(啟封)數(shù)據(jù)(或者一個(gè)或多個(gè)其它條件)的一個(gè)或多個(gè)(m個(gè))目標(biāo)程序的摘要,e是到UnSeal操作的輸入(通常是先前Seal操作的輸出),而d是密封數(shù)據(jù)的程序的摘要。表II圖4是一個(gè)說(shuō)明了一個(gè)用于實(shí)現(xiàn)UnSeal操作的示范性處理過(guò)程220的流程圖。處理過(guò)程220由圖1中的防護(hù)裝置104執(zhí)行,并且可以以硬件、軟件、固件、或者它們的組合來(lái)實(shí)現(xiàn)。最初,接收具有調(diào)用者希望檢索的加密數(shù)據(jù)的密文(動(dòng)作222)。就調(diào)用者是否被允許檢索數(shù)據(jù)進(jìn)行檢查(動(dòng)作224),并且基于調(diào)用者是否被允許檢索數(shù)據(jù)而繼續(xù)處理。如果調(diào)用者被允許檢索數(shù)據(jù),則(解密的)數(shù)據(jù)被返回給調(diào)用者(動(dòng)作228)。如果調(diào)用者沒(méi)有被允許檢索數(shù)據(jù),則處理失敗(動(dòng)作230),并且不把數(shù)據(jù)返回給調(diào)用者。能夠以不同的方式實(shí)現(xiàn)密封存儲(chǔ)。在一個(gè)實(shí)現(xiàn)中,使用物理上受保護(hù)的非易失性存儲(chǔ)器來(lái)實(shí)現(xiàn)密封存儲(chǔ)。在這個(gè)實(shí)現(xiàn)中,計(jì)算設(shè)備把不同的防護(hù)裝置與受保護(hù)的非易失性存儲(chǔ)器的不同部分相關(guān)聯(lián),并且允許每個(gè)防護(hù)裝置僅僅訪問(wèn)與那個(gè)防護(hù)裝置有關(guān)的那些部分。在這個(gè)實(shí)現(xiàn)中,在Seal和UnSeal操作中引用的Store和Retriev操作被調(diào)用,以使計(jì)算設(shè)備分別在與防護(hù)裝置有關(guān)的受保護(hù)的非易失性存儲(chǔ)器中存儲(chǔ)和檢索數(shù)據(jù)。舉例來(lái)說(shuō),存儲(chǔ)設(shè)備(諸如硬盤(pán)驅(qū)動(dòng)器)能夠?qū)崿F(xiàn)防護(hù)裝置。不是簡(jiǎn)單地向存儲(chǔ)設(shè)備無(wú)條件地執(zhí)行讀和寫(xiě)命令,而是存儲(chǔ)設(shè)備標(biāo)識(shí)試圖訪問(wèn)存儲(chǔ)設(shè)備的委托人(例如,基于委托人的摘要),并且僅僅允許一個(gè)特定委托人訪問(wèn)該存儲(chǔ)設(shè)備。做為選擇,不同的委托人可以被限于僅僅訪問(wèn)存儲(chǔ)設(shè)備的特定部分(例如,特定扇區(qū)或者地址區(qū)域)。在另一個(gè)實(shí)現(xiàn)中,使用密碼學(xué)實(shí)現(xiàn)密封存儲(chǔ)。對(duì)使用密碼學(xué)的密封存儲(chǔ)的一個(gè)示范性實(shí)現(xiàn)的說(shuō)明如下。當(dāng)使用密碼學(xué)實(shí)現(xiàn)密封存儲(chǔ)時(shí),資源是密鑰K而不是物理上受保護(hù)的存儲(chǔ)器。Store操作沒(méi)有在物理上存儲(chǔ)它的輸入。相反地,Store操作產(chǎn)生一個(gè)密碼保護(hù)的輸出c,其是以加密的和完整性受保護(hù)的形式的Store操作的輸入。加密是向輸入應(yīng)用對(duì)稱密碼的結(jié)果。后面的性質(zhì)是由于(在加密輸入之前或之后)向輸入應(yīng)用消息驗(yàn)證碼(MAC)而產(chǎn)生的。在表III中舉例說(shuō)明了用于Store操作的偽代碼。在表III的偽代碼中,b是輸入到Store操作的位串,c是由Store操作輸出的位串,K1是密鑰K的第一部分,而K2是密鑰K的第二部分。密鑰K是實(shí)現(xiàn)Seal和Store操作的防護(hù)裝置的對(duì)稱密鑰。表III因此,如在表III中看到的那樣,通過(guò)向輸入到Store操作的位串應(yīng)用MAC而產(chǎn)生一個(gè)值(m)。MAC被鍵入到密鑰K的一部分(K1)。輸入到Store操作的位串還使用密鑰K的第二部分(K2)進(jìn)行加密。通過(guò)向輸入位串應(yīng)用MAC和通過(guò)加密輸入位串而產(chǎn)生的值然后被返回給Store操作的調(diào)用者。密鑰K被劃分成為兩個(gè)獨(dú)立的密鑰K1和K2,以免為MAC和密碼使用相同的密鑰。這個(gè)劃分能夠以多種方式中的任何一種來(lái)實(shí)現(xiàn)。劃分可以使用密鑰K的不同位,或者可以使用一個(gè)或多個(gè)相同的位。例如,假定密鑰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(導(dǎo)致某些位被用于K1和K2),等等諸如此類。做為選擇,可以為MAC和密碼使用相同的密鑰K。在表III中舉例說(shuō)明的偽代碼通過(guò)在數(shù)據(jù)上計(jì)算MAC、加密數(shù)據(jù)、和輸出MAC和密文來(lái)實(shí)現(xiàn)Store操作。做為選擇,Store操作可以以不同的方式來(lái)實(shí)現(xiàn)。例如,Store操作可以首先加密數(shù)據(jù),然后在密文上計(jì)算MAC,并且輸出密文和MAC。通過(guò)另一個(gè)例子,Store操作可以在數(shù)據(jù)上計(jì)算MAC,然后加密數(shù)據(jù)和MAC,并且輸出密文。通過(guò)Store操作的密碼實(shí)現(xiàn)的加密能夠使用多種對(duì)稱加密算法中的任何一種來(lái)實(shí)現(xiàn)。通常,對(duì)稱加密算法使用相同的密鑰用于加密和解密。這樣的算法的示例包含三重DES(DataEncryptionStandard)、AES(AdvancedEncryptionStandard)、等等。類似地,MAC能夠是多個(gè)消息驗(yàn)證碼中的任意一個(gè),諸如在1996年、LectureNotesinCS中,AdvancesinCryptology-Cryto’96的1109號(hào),由M.Bellare,R.Canetti,和H.Krawczyk所著的“Keyinghashfunctionsformessageauthentication”中描述的MAC。作為選擇,能夠通過(guò)用一個(gè)公用密鑰數(shù)字簽名代替MAC來(lái)保護(hù)完整性。圖5是一個(gè)說(shuō)明了用于實(shí)現(xiàn)Store操作的示例處理過(guò)程250的流程圖。處理過(guò)程250由圖1中的防護(hù)裝置104執(zhí)行,并且可以以硬件、軟件、固件、或者它們的組合來(lái)實(shí)現(xiàn)。最初,接收要被存儲(chǔ)的數(shù)據(jù)(動(dòng)作252)。向該數(shù)據(jù)應(yīng)用一個(gè)對(duì)稱密碼(動(dòng)作254)以及向該數(shù)據(jù)應(yīng)用一個(gè)消息驗(yàn)征碼(MAC)(動(dòng)作256)。在動(dòng)作254中產(chǎn)生的加密數(shù)據(jù)和在動(dòng)作256中產(chǎn)生的MAC值然后被返回到調(diào)用者(動(dòng)作258)。檢索操作接收一個(gè)包含MAC值和密文的輸入位串。解密該密文以產(chǎn)生明文并且為該明文產(chǎn)生一個(gè)MAC值。如果為該明文產(chǎn)生的MAC值和作為該輸入位串一部分被接收的MAC值相同,則該明文被返回到調(diào)用者。然而,如果為該明文產(chǎn)生的MAC值和作為該輸入位串一部分被接收的MAC值不同,則Retrieve操作失敗而且該明文沒(méi)有返回到調(diào)用者??梢岳斫鈱?shí)現(xiàn)Retrieve操作以從輸入位串獲得MAC和明文的特定方式取決于實(shí)現(xiàn)Store操作的方式。在表IV中舉例說(shuō)明了用于Retrieve操作的偽代碼。在表IV的偽代碼中,c是輸入到Retrieve操作的位串,b是由Retrieve操作輸出的位串,m是輸入到Retrieve操作的位串的MAC值部分,d是輸入到Retrieve操作的位串的密文部分,K1是密鑰K的第一部分,而K2是密鑰K的第二部分。K1和K2密鑰是以上就Store操作討論的密鑰K的相同部分。表IV因此,如在表IV中看到的那樣,通過(guò)解密輸入到Retrieve操作的位串而產(chǎn)生一個(gè)值(b)。然后為值(b)產(chǎn)生一MAC值。如果由Retrieve操作產(chǎn)生的MAC值與被接收作為輸入到Retrieve操作的位串一部分的MAC值相同,則把值(b)返回給Retrieve操作的調(diào)用者,否則Retrieve操作失敗。表IV中的偽代碼基于Store操作的實(shí)現(xiàn),其中在Store操作中,在數(shù)據(jù)上計(jì)算MAC,加密數(shù)據(jù),并且輸出MAC連同密文(并且起到到Retrieve操作的輸入位串的作用)。如果Store操作被實(shí)現(xiàn)為首先加密數(shù)據(jù)、然后在密文上計(jì)算MAC、并且輸出密文和MAC,則Retrieve操作將被實(shí)現(xiàn)為計(jì)算密文的MAC并且把它與接收作為輸入位串一部分的MAC值進(jìn)行比較,然后解密密文,并且如果MAC值相匹配則返回解密的數(shù)據(jù)。如果Store操作被實(shí)現(xiàn)為在數(shù)據(jù)上計(jì)算MAC、然后加密數(shù)據(jù)和MAC,則Retrieve操作將被實(shí)現(xiàn)為解密輸入位串,然后在輸入位串中的數(shù)據(jù)上計(jì)算MAC,并且把計(jì)算的MAC和在解密串中的MAC值進(jìn)行比較,并且如果MAC值相匹配則返回?cái)?shù)據(jù)。類似于以上有關(guān)Store操作的討論,能夠由Retrieve操作使用多種解密算法中的任何一種。然而,解密算法應(yīng)當(dāng)對(duì)應(yīng)于加密算法,以便使被加密的數(shù)據(jù)能夠被解密。類似地,多種消息驗(yàn)證碼中的任何一種能夠被用作MAC,但是使用的消息驗(yàn)證碼應(yīng)當(dāng)與由Store操作使用的消息驗(yàn)證碼相同。圖6是一個(gè)說(shuō)明了一個(gè)用于實(shí)現(xiàn)Seal操作的示范性處理過(guò)程270的流程圖。處理過(guò)程270由圖1中的防護(hù)裝置104執(zhí)行,并且可以以硬件、軟件、固件、或者它們的組合來(lái)實(shí)現(xiàn)。最初,接收密文和MAC值(動(dòng)作272)。密文被解密以產(chǎn)生明文數(shù)據(jù)(動(dòng)作274)。向明文數(shù)據(jù)應(yīng)用消息驗(yàn)證碼(MAC)以產(chǎn)生一MAC值(動(dòng)作276),并且就在動(dòng)作276中產(chǎn)生的MAC值是否等于在動(dòng)作272中接收的MAC值進(jìn)行檢查(動(dòng)作278)。然后基于所產(chǎn)生的MAC值是否等于所接收的MAC值繼續(xù)進(jìn)行處理(動(dòng)作280)。如果所產(chǎn)生的MAC值等于所接收的MAC值,則把明文數(shù)據(jù)返回給調(diào)用者(動(dòng)作282)。然而,如果所產(chǎn)生的MAC值不等于所接收的MAC值,則處理過(guò)程失敗(動(dòng)作284),并且不把明文數(shù)據(jù)返回給調(diào)用者。因此,密封存儲(chǔ)的密碼學(xué)方法實(shí)質(zhì)上確保了值c(Store操作的輸出)的任何誤用都能夠被檢測(cè),而且值b(到Store操作的輸入)在不訪問(wèn)密鑰K2(由密碼使用以加密值b的密鑰)的情況下不能被檢索。另一類選通功能實(shí)現(xiàn)了遠(yuǎn)程驗(yàn)證。遠(yuǎn)程驗(yàn)證的目的是允許程序即使在缺少到驗(yàn)證人的堅(jiān)固物理連接的情況下也能夠被驗(yàn)證(例如,使用服務(wù)器或者智能卡)。在這種情況下,驗(yàn)征基于密碼學(xué)。即,兩個(gè)實(shí)體通過(guò)一種加密驗(yàn)證協(xié)議。這涉及具有對(duì)一個(gè)秘密訪問(wèn)的被驗(yàn)證了的配置,其中秘密取決于協(xié)議、典型地是一私有密鑰或者一對(duì)稱密鑰。另外,計(jì)算設(shè)備能夠把這些驗(yàn)證秘密的使用約束到請(qǐng)求它們的使用的配置身份(例如,處理器和/或軟件)。因此,驗(yàn)證人能夠確定計(jì)算設(shè)備的身份,以及在它上面執(zhí)行的軟件。兩個(gè)操作、Quote操作和PKUnseal操作是用于公用密鑰簽名和公用密鑰解密的相應(yīng)選通功能。實(shí)現(xiàn)這些選通功能的防護(hù)裝置具有對(duì)一個(gè)簽名密鑰Ks和一個(gè)解密鑰Kd的訪問(wèn)。簽名密鑰Ks和解密鑰Kd也被稱為公用/私有密鑰對(duì)中的私有密鑰。這個(gè)公用/私有密鑰對(duì)是實(shí)現(xiàn)Quote和PKUnseal操作的防護(hù)裝置的密鑰對(duì)。Quote操作在到Quote操作的輸入和標(biāo)識(shí)了何時(shí)和/或可以向誰(shuí)揭示秘密的條件的組合(例如,連接)上返回一個(gè)公用密鑰簽名。類似于以上討論的Seal和UnSeal操作,秘密的揭示能夠被限制到多種條件中的任何一種。在一個(gè)實(shí)現(xiàn)中,條件是調(diào)用程序的標(biāo)識(shí)符(例如摘要)。在簽名中固有的是應(yīng)所標(biāo)識(shí)調(diào)用程序的請(qǐng)求執(zhí)行操作的斷言。Quote操作連同Verify操作一起工作,其中Verify操作通常在不同于在其上執(zhí)行Quote操作的設(shè)備的一個(gè)設(shè)備上執(zhí)行(例如,在一遠(yuǎn)程服務(wù)器設(shè)備上、在一智能卡上等)。Verify操作執(zhí)行公用密鑰簽名驗(yàn)證,并且檢索和估算調(diào)用程序的標(biāo)識(shí)符(和/或用于揭示秘密的其它條件)。在表V中舉例說(shuō)明了用于Quote操作的偽代碼。在表V的偽代碼中,ID()是以上討論的ID()函數(shù),a是輸入到Quote操作的數(shù)據(jù),而Ks是簽名密鑰。表V因此,如在表V中看到的那樣,Quote操作獲得調(diào)用程序的摘要,并且接收一輸入值a。Quote操作使用簽名密鑰Ks產(chǎn)生輸入值a的一個(gè)數(shù)字簽名(MSN)和調(diào)用程序的摘要。輸入值a能夠由調(diào)用程序產(chǎn)生,或者可以是從另一組件或設(shè)備(例如,從將執(zhí)行Veiify操作的設(shè)備)接收的值。使用公用密鑰密碼學(xué)產(chǎn)生數(shù)字簽名。圖7是一個(gè)說(shuō)明了一個(gè)用于實(shí)現(xiàn)Quote操作的示范性處理過(guò)程300的流程圖。處理過(guò)程300由圖1中的防護(hù)裝置104執(zhí)行,并且可以以硬件、軟件、固件、或者它們的組合來(lái)實(shí)現(xiàn)。最初,從調(diào)用者接收輸入數(shù)據(jù)(動(dòng)作302)。獲得調(diào)用者的標(biāo)識(shí)符(用于檢索輸入數(shù)據(jù)的其它條件中的一個(gè)或多個(gè))(動(dòng)作304),并且生成在輸入數(shù)據(jù)和調(diào)用者標(biāo)識(shí)符(和/或一個(gè)或多個(gè)其它條件)的組合上的數(shù)字簽名(動(dòng)作306)。然后把所生成的數(shù)字簽名返回給調(diào)用者(動(dòng)作308)。Verify操作執(zhí)行公用密鑰簽名驗(yàn)證,并且檢索和估算調(diào)用程序的標(biāo)識(shí)符。Verify操作通常從一個(gè)不同于在其上執(zhí)行Verify操作的設(shè)備的一個(gè)設(shè)備中接收由Quote操作生成的數(shù)字簽名。Verify操作從所接收的數(shù)字簽名中提取調(diào)用Quote操作的程序(,應(yīng)用程序、操作系統(tǒng)、固件程序等)的摘要,并且計(jì)算那個(gè)摘要以確定如何進(jìn)行。在表VI中舉例說(shuō)明了用于Verify操作的偽代碼。在表VI的偽代碼中,d是調(diào)用Quote操作的程序的摘要,a是被輸入到Quote操作的值,而Sn是由Verify操作接收作為輸入的數(shù)字簽名。表VI因此,如在表VI中看到的那樣,Verify操作接收一數(shù)字簽名,并且使用驗(yàn)證密鑰Kv(其是包含簽名密鑰Ks的公用/私有密鑰對(duì)中的公用密鑰)從簽名中提取摘要d和值a。Verify程序因此能計(jì)算調(diào)用Quote操作的程序的摘要d。計(jì)算摘要d的方式能夠改變。例如,計(jì)算可能涉及把摘要d與“批準(zhǔn)的”或者“信賴的”應(yīng)用程序列表進(jìn)行比較。圖8是一個(gè)說(shuō)明了一個(gè)用于實(shí)現(xiàn)Verify操作的示范性處理過(guò)程320的流程圖。處理過(guò)程320由圖1中的防護(hù)裝置104執(zhí)行,并且可以以硬件、軟件、固件、或者它們的組合來(lái)實(shí)現(xiàn)。最初,接收數(shù)字簽名(動(dòng)作322)。(使用Quote操作)摘引一個(gè)輸入值的調(diào)用者的標(biāo)識(shí)符(和/或用于檢索輸入值的一個(gè)或多個(gè)其它條件)以及輸入值本身都是從數(shù)字簽名中提取的(動(dòng)作324)。然后計(jì)算調(diào)用者的標(biāo)識(shí)符(和/或一個(gè)或多個(gè)其它所提取條件)以確定如何利用輸入值繼續(xù)進(jìn)行(動(dòng)作326)。PKUnseal操作是公用密鑰解密方案,其基于調(diào)用者的身份(例如,調(diào)用程序的摘要)或者一個(gè)或多個(gè)其它條件被選通。到PKUnseal操作的輸入c的公用密鑰解密結(jié)果被解釋為一對(duì)(d,s),其中s是秘密,而d標(biāo)識(shí)了可以向其揭示s的配置(例如,調(diào)用程序的摘要)。如果PKUnseal的調(diào)用者不是d,則PKUnseal操作失敗。到PKUnseal操作的輸入c由第二操作PKSeal生成,其中PKSeal操作能夠在不同于在其上執(zhí)行PKUnseal操作的設(shè)備的一個(gè)設(shè)備上執(zhí)行(例如,在一個(gè)遠(yuǎn)程服務(wù)器設(shè)備上,在一個(gè)智能卡上等)。PKSeal操作執(zhí)行一對(duì)(d,s)的公用密鑰加密。PKUnseal和PKSeal操作也能夠被用來(lái)實(shí)現(xiàn)密封存儲(chǔ)。在表VII中舉例說(shuō)明了用于PKUnseal操作的偽代碼。在表VII的偽代碼中,ID()是以上討論的ID()函數(shù),c是到PKUnseal操作的輸入,[d1,...,dm]是能夠向其揭示s的一個(gè)或多個(gè)調(diào)用程序的摘要(或者一個(gè)或多個(gè)其它條件),s是受保護(hù)的數(shù)據(jù),而Kd是一個(gè)解密鑰(與正實(shí)現(xiàn)PKUnseal操作的防護(hù)裝置有關(guān)的公用/私有密鑰對(duì)中的私有密鑰)。表VII因此,如在表VII中看到的那樣,PKUnseal操作使用公用密鑰解密和解密鑰Kd來(lái)解密輸入值a。被解密的輸入值包含允許向其揭示受保護(hù)數(shù)據(jù)s的一個(gè)或多個(gè)調(diào)用程序的摘要[d1,...,dm](或者標(biāo)識(shí)了何時(shí)和/或允許向誰(shuí)揭示受保護(hù)數(shù)據(jù)s的一個(gè)或多個(gè)其它條件)。PKUnseal操作還生成調(diào)用程序的摘要。如果調(diào)用程序的摘要等于摘要[d1,...,dm]其中之一,則把受保護(hù)的數(shù)據(jù)s返回給調(diào)用程序。然而,如果調(diào)用程序的摘要不等于摘要[d1,...,dm]其中之一,則不把受保護(hù)的數(shù)據(jù)s返回給調(diào)用程序。圖9是一個(gè)說(shuō)明了一個(gè)用于PKUnseal操作的示范性處理過(guò)程340的流程圖。處理過(guò)程340由圖1中的防護(hù)裝置104執(zhí)行,并且可以以硬件、軟件、固件、或者它們的組合來(lái)實(shí)現(xiàn)。最初,接收具有調(diào)用者希望檢索的加密數(shù)據(jù)的密文(動(dòng)作342)。就調(diào)用者是否被允許檢索數(shù)據(jù)進(jìn)行檢查(動(dòng)作344),并且基于調(diào)用者是否被允許檢索數(shù)據(jù)而繼續(xù)處理(動(dòng)作346)。如果調(diào)用者被允許檢索數(shù)據(jù),則(使用公用密鑰解密而解密的)數(shù)據(jù)被返回給調(diào)用者(動(dòng)作348)。如果調(diào)用者沒(méi)有被允許檢索數(shù)據(jù),則處理失敗(動(dòng)作350),并且不把數(shù)據(jù)返回給調(diào)用者。PKSeal操作是公用密鑰加密方案,其基于調(diào)用者的身份(例如,調(diào)用程序或者一個(gè)或多個(gè)其它程序的摘要)被選通。PKSeal操作執(zhí)行一對(duì)(d,s)的公用密鑰加密,其中s是秘密,而d標(biāo)識(shí)了可以向其揭示s的一個(gè)或多個(gè)配置(例如,調(diào)用程序的摘要)。在表VIII中舉例說(shuō)明了用于PKSeal操作的偽代碼。在表VIII的偽代碼中,c是PKSeal操作的輸出,[d1,...,dm]是能夠向其揭示s的一個(gè)或多個(gè)調(diào)用程序的摘要,s是受保護(hù)的數(shù)據(jù),而Ke是加密鑰。表VIII因此,如在表VIII中看到的那樣,PKSeal操作把受保護(hù)數(shù)據(jù)s和能夠向其揭示受保護(hù)數(shù)據(jù)s的一個(gè)或多個(gè)程序的摘要[d1,...,dm]接收作為輸入。然后使用公用密鑰密碼學(xué)基于加密鑰Ke加密對(duì)([d1,...,dm],s)加密鑰Ke是能用來(lái)解密密文的防護(hù)裝置的公用密鑰。然后把由公用密鑰加密產(chǎn)生的密文返回給調(diào)用程序。圖10是一個(gè)說(shuō)明了一個(gè)用于實(shí)現(xiàn)PKSeal操作的示范性處理過(guò)程360的流程圖。處理過(guò)程360由圖1中的防護(hù)裝置104執(zhí)行,并且可以以硬件、軟件、固件、或者它們的組合來(lái)實(shí)現(xiàn)。最初,從調(diào)用者接收將被密封的秘密(動(dòng)作362)。使用公用密鑰加密把秘密加密,以便使秘密只能由一特定目標(biāo)程序檢索(動(dòng)作364),或者是只有當(dāng)滿足了一個(gè)或多個(gè)特定條件時(shí)才能檢索。然后把包含被加密的秘密的密文返回給調(diào)用者(動(dòng)作366)。此外還可以把附加信息返回給調(diào)用者(作為密文的一部分或者從密文中分離),諸如調(diào)用者的摘要和/或目標(biāo)程序的摘要。意圖使Quote和PKUnseal操作和公用密鑰驗(yàn)證協(xié)議一起使用。通過(guò)分別把對(duì)公用密鑰解密、公用密鑰加密、簽名、和簽名驗(yàn)證的然后調(diào)用替換為對(duì)RKUnseal、PKSeal、Quote、Verify的一個(gè)調(diào)用,能夠直接地采用大多數(shù)的公用密鑰驗(yàn)證協(xié)議。在某些情況中,能夠獲得一個(gè)隨機(jī)數(shù)(例如,作為用于產(chǎn)生加密密鑰的基礎(chǔ))是重要的。能夠以各種不同的方式獲得隨機(jī)數(shù)。在一種實(shí)現(xiàn)中,隨機(jī)數(shù)源是一個(gè)以計(jì)算設(shè)備的硬件實(shí)現(xiàn)的加密強(qiáng)隨機(jī)數(shù)發(fā)生器。上述Seal操作的一個(gè)替換是一個(gè)把該Seal操作和一個(gè)產(chǎn)生隨機(jī)數(shù)操作相組合的GenSeal操作。該GenSeal操作把應(yīng)當(dāng)能夠檢索秘密的目標(biāo)程序的摘要[t1,...,tm](及/或?yàn)榱艘粰z索的秘密而必須被滿足的其它條件)接收作為輸入。GenSeal操作產(chǎn)生一個(gè)隨機(jī)數(shù)并且密封該新產(chǎn)生的隨機(jī)數(shù)以便它僅僅能夠由具有目標(biāo)摘要[t1,...,tm]之一(及/或滿足的其它條件)的調(diào)用程序所檢索。在表IX中說(shuō)明了用于GenSeal操作的偽代碼。在表IX的偽代碼中,ID()指上述的ID()函數(shù),c指GenSeal操作的輸出,s指新產(chǎn)生的隨機(jī)數(shù),[t1,...,tm]指應(yīng)當(dāng)被允許檢索值s(其中的一個(gè)可以是調(diào)用GenSeal操作的程序)的一個(gè)或者多個(gè)目標(biāo)程序或者可選地是一個(gè)或者多個(gè)條件,以及GenRandom()指一個(gè)產(chǎn)生隨機(jī)數(shù)的函數(shù)。表IX圖11是一個(gè)說(shuō)明了一個(gè)用于實(shí)現(xiàn)GenSeal操作的示范性處理過(guò)程380的流程圖。處理過(guò)程380由圖1中的防護(hù)裝置104執(zhí)行,并且可以以硬件、軟件、固件、或者它們的組合來(lái)實(shí)現(xiàn)。最初,從一個(gè)調(diào)用者接收輸入(動(dòng)作382),其標(biāo)識(shí)了應(yīng)當(dāng)能夠檢索秘密的目標(biāo)程序、或者為了使秘密被檢索而將要滿足的一個(gè)或多個(gè)其它條件。然后生成秘密(動(dòng)作384),并且把秘密進(jìn)行加密,以便使秘密只能由標(biāo)識(shí)的目標(biāo)程序檢索(動(dòng)作386),或者是只有當(dāng)滿足了一個(gè)或多個(gè)其它條件時(shí)才能夠檢索秘密。然后把包含被加密的秘密的密文返回給調(diào)用者(動(dòng)作388)。此外還可以把附加信息返回給調(diào)用者(作為密文的一部分或者從密文中分離),諸如調(diào)用者的摘要和/或目標(biāo)程序的摘要。由公開(kāi)的防護(hù)裝置提供的服務(wù)能夠被用于通用的密封服務(wù)。例如,回過(guò)頭參見(jiàn)圖1和2,基于在初始化時(shí)層n的身份(例如,在重啟或者啟動(dòng)計(jì)算機(jī)之后,或者在開(kāi)始執(zhí)行一個(gè)程序時(shí)),層n-1向?qū)觧揭示單個(gè)密鑰。層n高速緩存這個(gè)密鑰,并且使用它以加密附加的秘密。在下次啟動(dòng)平臺(tái)到相同配置中時(shí),公開(kāi)的防護(hù)裝置提供相同的根密鑰(例如,通過(guò)UnSeal或者PKUnseal),并且所有先前加密了的秘密能夠由層n檢索。在某些實(shí)施例中,當(dāng)下一層被初始化時(shí)(例如,在重啟或者啟動(dòng)計(jì)算機(jī)之后,或者在開(kāi)始執(zhí)行一個(gè)程序時(shí)),較低層向下一層公開(kāi)一個(gè)或多個(gè)秘密。繼這個(gè)選通公開(kāi)之后,不再使用較低層(直到下一次啟動(dòng)或者重啟為止)。這個(gè)使用模型也被稱為公開(kāi)防護(hù)裝置模型。通過(guò)使用公開(kāi)防護(hù)裝置模型,減少了對(duì)較低層的訪問(wèn)。在此討論的選通功能能夠和使用時(shí)間隔離和空間隔離的服務(wù)防護(hù)裝置和公開(kāi)防護(hù)裝置一起使用。以下討論了四種用于已驗(yàn)證操作的服務(wù)模型實(shí)現(xiàn)(1)服務(wù)防護(hù)裝置-空間隔離;(2)公開(kāi)防護(hù)裝置-空間隔離;(3)公開(kāi)防護(hù)裝置-時(shí)間隔離;(4)服務(wù)防護(hù)裝置-時(shí)間隔離。在這些服務(wù)模型的討論中,假定較低級(jí)別的防護(hù)裝置已經(jīng)向在被考慮的層的防護(hù)裝置公開(kāi)了一個(gè)或多個(gè)密鑰。獲得這些密鑰的方式取決于以下的防護(hù)裝置以及該層的隔離模型。在同一個(gè)計(jì)算設(shè)備上的不同層能夠使用這些服務(wù)模型中的不同模型。(1)服務(wù)防護(hù)裝置-空間隔離防護(hù)裝置在請(qǐng)求程序被初始化時(shí)測(cè)定并且保存該程序的身份。防護(hù)裝置使用處理器服務(wù)(例如,CPU或者某些其它安全處理器或者協(xié)處理器)和一個(gè)暴露驗(yàn)證了的基本操作的系統(tǒng)調(diào)用接口來(lái)實(shí)現(xiàn)一個(gè)保護(hù)系統(tǒng)。(2)公開(kāi)防護(hù)裝置-空間隔離防護(hù)裝置獲得以加密塊形式、有關(guān)初始化的服務(wù)請(qǐng)求。該塊能夠被保存在存儲(chǔ)器中,或者是從外部存儲(chǔ)設(shè)備中獲得。防護(hù)裝置測(cè)定它初始化的程序的身份,并且依據(jù)以上描述的選通功能向程序公開(kāi)密鑰。在放棄到下一層的控制之前,防護(hù)裝置為它自己和它的秘密資源設(shè)立模式保護(hù)。(3)公開(kāi)防護(hù)裝置-時(shí)間隔離防護(hù)裝置獲得以加密塊(位組)形式、有關(guān)初始化的服務(wù)請(qǐng)求。該塊能夠被保存在存儲(chǔ)器中,或者是從外部存儲(chǔ)設(shè)備中獲得。防護(hù)裝置測(cè)定它初始化的程序的身份,并且依據(jù)以上描述的選通功能向程序公開(kāi)密鑰。在傳遞控制到這些程序之前,防護(hù)裝置刪除用于實(shí)現(xiàn)選通功能的密鑰(或者相反使其不可訪問(wèn))。(4)服務(wù)防護(hù)裝置-時(shí)間隔離在服務(wù)防護(hù)裝置-時(shí)間隔離模型中,計(jì)算設(shè)備在橫穿安全復(fù)位時(shí)安全地保持程序狀態(tài)。這個(gè)模型類似于模型(1)(服務(wù)防護(hù)裝置-空間隔離),然而,在傳遞控制到下一層之前,服務(wù)防護(hù)裝置刪除它的秘密(使它變得不起作用直到下一次重新啟動(dòng)為止)。下面通常將執(zhí)行下一層,直到需要從防護(hù)裝置請(qǐng)求服務(wù)為止。在那一點(diǎn),它把請(qǐng)求的參數(shù)存儲(chǔ)在存儲(chǔ)器中的某處,在那兒它們將經(jīng)受復(fù)位并且執(zhí)行復(fù)位。當(dāng)設(shè)備重新啟動(dòng)時(shí),服務(wù)防護(hù)裝置獲得它的秘密,查看請(qǐng)求,(使用它的密鑰)執(zhí)行它,破壞密鑰和任何有關(guān)信息,并且把計(jì)算的結(jié)果和控制傳遞到下一層(最初請(qǐng)求服務(wù)的那一層)。在某些實(shí)施例中,如果一個(gè)計(jì)算設(shè)備支持空間隔離,則該安全內(nèi)核應(yīng)當(dāng)暴露基本的Seal、Unseal、GetRandom(以獲得一個(gè)隨機(jī)數(shù))、以及PKUnseal(或者Quote)(操作)。該安全內(nèi)核能夠?qū)崿F(xiàn)一個(gè)公開(kāi)防護(hù)裝置或者一個(gè)服務(wù)防護(hù)裝置。在另一方面,如果該平臺(tái)支持時(shí)間隔離,則該安全內(nèi)核應(yīng)當(dāng)提供一個(gè)公開(kāi)防護(hù)裝置,而且應(yīng)當(dāng)實(shí)現(xiàn)基本的Unseal、GenSeal、和PKUnseal(或者Quote)(操作)。還應(yīng)當(dāng)注意到Quote和PKUnseal功能能夠建立在Seal和Unseal或者Unseal和GenSeal基本操作上。例如,制造商能夠建立一個(gè)實(shí)現(xiàn)了Quote或者PKUnseal、并且起一個(gè)用于在在l1中實(shí)現(xiàn)的GenSeal和Unseal上的更高級(jí)軟件(例如,操作系統(tǒng))的宿主作用的l2程序。該制造商能夠產(chǎn)生和封裝由服務(wù)層所需要的密鑰并且和設(shè)備或者CPU一起運(yùn)送它們(或者讓它們?cè)诰€可用)。在下面將進(jìn)行一系列將允許平臺(tái)支持驗(yàn)征操作的硬件實(shí)現(xiàn)的一個(gè)示例描述。和在該系統(tǒng)中的較高層類似,最低層(圖2中的l1)的特征在于(a)密鑰資源,(b)具有對(duì)這些密鑰訪問(wèn)的特權(quán)代碼,以及(c)該層的控制初始化。驗(yàn)證了的操作在程序和密鑰之間提供了一個(gè)強(qiáng)綁定。在較高層處,在較低層中的防護(hù)裝置保證這個(gè)綁定。在最低層處,沒(méi)有在下面的軟件防護(hù)裝置能夠守衛(wèi)對(duì)平臺(tái)秘密的訪問(wèn)。因此,使用了另一個(gè)機(jī)制來(lái)支持l1密鑰到l1程序的關(guān)聯(lián)。一種完成這個(gè)綁定的方法是讓l1軟件是在制造之后就不能改變的平臺(tái)微碼或者固件,并且讓l1軟件可無(wú)限制地訪問(wèn)l1密鑰。這個(gè)平臺(tái)微碼或者固件然后能夠被稱為安全內(nèi)核,而且該l1密鑰被稱為平臺(tái)密鑰。平臺(tái)被設(shè)計(jì)為僅僅傳遞控制到一個(gè)預(yù)定的安全核心。硬件行為還能夠被解釋為一個(gè)簡(jiǎn)單的資源防護(hù)裝置,其向預(yù)定義的安全核心公開(kāi)平臺(tái)密鑰。平臺(tái)密鑰和安全核心固件能夠是處理器的部分,或者能夠以計(jì)算設(shè)備中的一個(gè)或多個(gè)其它組件實(shí)現(xiàn)(例如,安全處理器或者協(xié)處理器,其還可以執(zhí)行動(dòng)密操作)。平臺(tái)密鑰和安全核心固件能夠以單個(gè)組件實(shí)現(xiàn),或者以計(jì)算設(shè)備中的多個(gè)組件實(shí)現(xiàn)。利用驗(yàn)證了的操作,以一種控制的初始狀態(tài)啟動(dòng)程序。在較高級(jí)別,在較低級(jí)別運(yùn)行的軟件能夠被委托為在校正入口點(diǎn)處啟動(dòng)執(zhí)行。然而,在l1,硬件執(zhí)行這個(gè)功能。典型地,在上電或者隨后的復(fù)位時(shí),當(dāng)前處理器通過(guò)下列的某些確定序列開(kāi)始執(zhí)行。例如,在最簡(jiǎn)單的情況下,處理器開(kāi)始從一個(gè)體系結(jié)構(gòu)上定義了的存儲(chǔ)單元取出和執(zhí)行代碼。就l1來(lái)說(shuō),能夠以一種受控制的初始狀態(tài)由硬件啟動(dòng)程序,其中該硬件確保安全核心是在啟動(dòng)時(shí)執(zhí)行的代碼(作為確定序列的一部分)。另外,應(yīng)當(dāng)沒(méi)有其它的平臺(tái)狀態(tài)能夠破壞安全核心的執(zhí)行。復(fù)位和上電為處理器提供了堅(jiān)固的和良好調(diào)試的狀態(tài)清除。如在這個(gè)例子中使用的那樣,用于啟動(dòng)或者調(diào)用安全核心的平臺(tái)狀態(tài)改變被稱為安全復(fù)位。此外,設(shè)備生產(chǎn)商應(yīng)當(dāng)準(zhǔn)備由l1使用的平臺(tái)密鑰的生成或者安裝、Seal和Unseal的實(shí)現(xiàn)。如果設(shè)備被認(rèn)為是PKI(PublicKeyInfrastructure,公用密鑰基礎(chǔ)結(jié)構(gòu))的一部分,則生產(chǎn)商應(yīng)當(dāng)還為平臺(tái)確認(rèn)一個(gè)公用密鑰。這能夠是一個(gè)由l1直接使用的平臺(tái)密鑰,或者是由一較高層使用的密鑰。密鑰生成和確認(rèn)能夠是CPU生產(chǎn)商或者其它方、諸如把CPU組裝成為一個(gè)設(shè)備的OEM的職責(zé)。做為選擇,該職責(zé)能夠由多個(gè)這樣的團(tuán)體分擔(dān)。一旦安全核心正在執(zhí)行,就能夠使用以上描述的隔離機(jī)構(gòu)以保護(hù)它自己不會(huì)在較高層進(jìn)行代碼執(zhí)行。在空間中的隔離通常將涉及特權(quán)方式支持,而在時(shí)間中的隔離通常將涉及隱瞞上層的秘密。在大多數(shù)的當(dāng)前處理器上不需要額外的平臺(tái)支持以支持空間隔離--已有的特權(quán)方式或者級(jí)別將足夠了(只要允許訪問(wèn)平臺(tái)密鑰的硬件資源能夠從較高層被保護(hù)起來(lái))。為了支持時(shí)間隔離,使用了硬件輔助設(shè)備以允許安全核心在傳遞控制到較高層之前隱藏平臺(tái)密鑰。在時(shí)間隔離模型中提供平臺(tái)密鑰安全的方法是使用一種被稱為復(fù)位鎖存器的有狀態(tài)的保護(hù)電路。復(fù)位鎖存器是一個(gè)硬件電路,它具有繼復(fù)位或者上電之后打開(kāi)的屬性,但是任何軟件隨時(shí)都能夠可編程地關(guān)閉鎖存器。一旦關(guān)閉了,鎖存器就保持關(guān)閉直到下一次復(fù)位或者上電為止。實(shí)現(xiàn)時(shí)間隔離的安全核心的平臺(tái)應(yīng)當(dāng)在復(fù)位鎖存器的狀態(tài)上選通平臺(tái)密鑰訪問(wèn),而且安全核心應(yīng)當(dāng)在傳遞控制到較高層之前關(guān)閉鎖存器。如上所述,安全核心還應(yīng)當(dāng)采取額外的動(dòng)作、諸如在傳遞控制之前清除存儲(chǔ)器和寄存器,但是這些動(dòng)作與在較高級(jí)別使用的那些動(dòng)作相同。如果平臺(tái)使用空間隔離,則安全核心使用特權(quán)方式以從它駐留的程序(例如操作系統(tǒng))中保護(hù)它自己和它的平臺(tái)密鑰。此外,安全核心為驗(yàn)證操作的調(diào)用建立一個(gè)系統(tǒng)調(diào)用接口。如果平臺(tái)使用空間隔離,則平臺(tái)還應(yīng)當(dāng)包含經(jīng)受安全復(fù)位以傳遞參數(shù)到服務(wù)例程的存儲(chǔ)器。為了調(diào)用服務(wù),操作系統(tǒng)在安全核心已知的一個(gè)存儲(chǔ)單元中準(zhǔn)備命令和參數(shù)塊,并且執(zhí)行安全復(fù)位。如果OS希望繼服務(wù)調(diào)用之后繼續(xù)執(zhí)行(與簡(jiǎn)單的重新啟動(dòng)相反),則它和安全核心應(yīng)當(dāng)進(jìn)行額外的測(cè)定以確保這能夠被可靠地和安全地進(jìn)行。在此討論的驗(yàn)證了的操作能夠以各種設(shè)置用于安全性,諸如保護(hù)個(gè)人數(shù)據(jù)抵抗病毒、保護(hù)機(jī)密的服務(wù)器數(shù)據(jù)免受網(wǎng)絡(luò)攻擊、網(wǎng)絡(luò)管理、拷貝保護(hù)、可信賴的分布計(jì)算等等。驗(yàn)證了的操作允許能夠在同一個(gè)計(jì)算機(jī)上執(zhí)行、而且不是一特定信托關(guān)系的不同程序保持它們的加密資源,不考慮其它軟件的動(dòng)作。以下的一些討論涉及SSP(SecureServiceProcessor,安全服務(wù)處理器)。在一個(gè)實(shí)施例中,SSP是向計(jì)算設(shè)備提供基本加密服務(wù)的處理器(用于在計(jì)算設(shè)備中使用)(例如,SSP支持在此描述的選通功能(例如圖2中的層l1))。SSP能夠使用加密鑰,并且通常具有一個(gè)或多個(gè)對(duì)那個(gè)SSP來(lái)說(shuō)是唯一的(或者希望是唯一的)的加密鑰。SSP能夠是設(shè)備的CPU或者一個(gè)或多個(gè)其它處理器的一部分。例如,SSP可以是在計(jì)算設(shè)備中的一個(gè)單獨(dú)的芯片或者集成電路(IC)。在一個(gè)不同的實(shí)施例中,SSP是一個(gè)適當(dāng)隔離的軟件程序,其向它的調(diào)用者公開(kāi)了與先前實(shí)施例相同的功能。SSP實(shí)施例(直接或者間接地)訪問(wèn)加密鑰。存在許多實(shí)現(xiàn)選項(xiàng)用于提供這樣的訪問(wèn)。例如,SSP可以調(diào)用在較低層中的服務(wù)或者公開(kāi)防護(hù)裝置?;蛘逽SP可以具有對(duì)包含所需加密鑰的持久性存儲(chǔ)器的某些部分(例如硬盤(pán)、閃速存儲(chǔ)器、ROM等)的排它訪問(wèn)??傊?,SSP由它向較高層中的委托人公開(kāi)的功能來(lái)定義。SSP是具有對(duì)加密鑰的(直接或者間接)訪問(wèn)的防護(hù)裝置(如上所述)。SSP使用這些密鑰以向它的調(diào)用者提供加密服務(wù)。以下部分將描述SSP公開(kāi)的示范性功能。操作示例以下是對(duì)密封存儲(chǔ)器操作和遠(yuǎn)程驗(yàn)證操作的實(shí)現(xiàn)示例的討論。這個(gè)部分舉例說(shuō)明了以上討論的SealUnSeaL、Quote、和PKUnseal操作的實(shí)現(xiàn)示例。在這個(gè)部分中使用了下列定義另外,在這個(gè)部分和以下的BoundKeyOperations(邊界密鑰操作)部分中涉及訪問(wèn)策略。訪問(wèn)策略描述了特定操作何時(shí)是起作用的(即,它們何時(shí)工作)。計(jì)算設(shè)備的用戶能夠有選擇地切斷某些功能。例如,計(jì)算設(shè)備(例如實(shí)現(xiàn)Seal操作的SSP)包含一個(gè)被稱作FeatureEnable的寄存器。在寄存器中的這些位其中之一被稱作MainEnable。如果用戶設(shè)置MainEnable為假,則在這些部分中的所有功能都將不再起作用。每個(gè)功能包含的訪問(wèn)策略描述說(shuō)明了該功能將在哪些FeatureEnable設(shè)置下面起作用。SealDefinifion(定義)SSP_STATUSSeal([in]SECRETS,[in]DIGESTTarget[2],[in]UINT32MaxLen,[out]UINT32*ActualLen,[out]BYTE*SealedBlob)Parameters(參數(shù))Seal-Input∷=SEQUENCE{ordinalINTEGER,secretSecrettargetDigestPair}Seal-Output∷=SEQUENCE{ordinalINTEGER,statusINTEGER,sealed-blobOCTETSTRING}ReturnValues(返回值)SSP_SUCCESSComments(注釋)Seal操作形成一個(gè)如果下列估算為真則只能由相應(yīng)的Unseal操作解密的加密塊(位組)●編碼是正確的?●MAC是正確的?●當(dāng)前運(yùn)行的SK/SL(SecurityKernel(安全核心)或者SecureLoader(安全加載程序))是在Seal操作期間被命名為T(mén)arget的那個(gè)?Seal增加了內(nèi)部的隨機(jī)性,以便使Seal操作在相同輸入上的輸出產(chǎn)生不同的結(jié)果。這確保了Seal不能被用作一個(gè)硬件設(shè)備標(biāo)識(shí)符。當(dāng)執(zhí)行密封以向啟封程序(unsealer)提供完整性信息時(shí),Seal還包含調(diào)用Seal操作的程序的標(biāo)識(shí)符(例如,保存在SSP的PCR寄存器中的調(diào)用程序的摘要,在此也被稱為PCR值)。AccessPolicy(訪問(wèn)策略)Allowed=FeatureEnable.MainEnable&(FeatureEnable.UseSymmKey=All|FeatureEnable.UseSymmKey=AuthSL&SLKnown&AuthPCR[CurrentSL].UseSymmKey)Actions(動(dòng)作)Seal操作實(shí)現(xiàn)下列動(dòng)作1.生成一個(gè)128位的隨機(jī)數(shù)R2.使D0是PCR的當(dāng)前值,D1=PCR[1]3.DIGESTM=HMAC[KM](R‖S‖target‖D0‖D1)4.C=AES[Ks](R‖S‖Target‖D0‖D1‖M)5.返回SSP_SUCCESS,且SealedBlob設(shè)置為CUnsealDefinition(定義)SSP_STATUSUnseat([in]BYTE*SealedBlob,[in]UINT32SealedBlobLen,[out]SECRETS,[out]DIGESTSource)Parameters(參數(shù))Unseal-Input∷=SEQUENCE{ordinalINTEGER,sealed-blobOCTETSTRING}Unseal-Output∷=SEQUENCE{ordinalINTEGER,statusINTEGER,secretSecret,sourceDigest}ReturnValues(返回值)SSP_SUCCESSSSP_UNSEAL_ERRORComments(注釋)Unseal操作在內(nèi)部解密由Seal操作生成的一塊,并且檢查下列條件●編碼是正確的?●PCR的當(dāng)前值是在Seal操作期間被命名為T(mén)arget的那個(gè)?如果所有的檢查成功了,則返回秘密和密封程序的PCR;否則返回UNSEAL_ERR0R。AccessPolicy(訪問(wèn)策略)Allowed=FeatureEnable.MainEnable&(FeatuTeEnable.UseSymmKey==All|FeatureEnable.UseSymmKey=AuthSL&SLKnown&AuthPCR[CurrentSL].UseSymmKey)Actions(動(dòng)作)Unseal操作實(shí)現(xiàn)下列動(dòng)作1.M=AES-1[Ks](SealedBlob).2.把M解釋為(BITS[128]R‖SECRETS1‖DIGESTTarget0‖DIGESTTarget1‖DIGESTSealer0‖DIGESTSealer1‖DIGESTN)。3.DIGESTD=HMAC[KM](R‖S1‖Target0‖Target1‖Sealer0‖Sealer1)。4.如果(Target0!=PCR‖Target1?。絇CR[1]),則返回SSP_UNSEAL_ERROR,且S、Source設(shè)置為0。5.如果D!=N,則返回SSP_UNSEAL_ERROR,且S、Source設(shè)置為0。6.否則,返回SSP_SUCCESS,且S設(shè)置為S1,Source設(shè)置為{Sealer0,Sealer1}。QuoteDefinition(定義)SSP_STATUSQuote([in]BITSTRINGd-ext,[out]PKSignatureSigBlob)Parameters(參數(shù))Quote-Input∷={ordinalINTEGER,d-extDigest}Quote-output∷-{ordinalINTEGER,statusINTEGER,sig-blobPKSignature}ReturnValues(返回值)SSP_SUCCESSSSP_CRYPTO_ERRORComments(注釋)Quote操作指示SSP為從外部提供的D-EXT和內(nèi)部PCR值的級(jí)聯(lián)簽名。AccessPolicy(訪問(wèn)策略)Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)Actiohs(動(dòng)作)Quote操作實(shí)現(xiàn)下列動(dòng)作1.SSP在DER(DistinguishedEncodingRules,分布式編碼規(guī)則)編碼下形成一條包含用于消息類型QuoteMessage的標(biāo)識(shí)符、D-EXT和PCR寄存器的內(nèi)容的級(jí)聯(lián)的消息MSEQUENCE{message-typePKMessageType,d-extDigest,pcrDigestpair}2.SSP然后依據(jù)在PKCS#1V2.1中規(guī)定的RSASSA-PSS-SIGN的缺省實(shí)現(xiàn)使用KQ、PRIV以生成一條在M上簽名的消息。如果函數(shù)返回錯(cuò)誤,則返回SSP_CRYPTO_ERROR,且SigBlob設(shè)置為0。3.SSP返回SSP_SUCCESS和剛好用signatureAlgorithm=rSASSA-PSS-Default-Identifier在SigBlob計(jì)算的簽名值。PKUnsealDefinition(定義)SSP_STATUSPK_Unseal([in]PKCiphertextSealedBlob,[out]SECRETSecret)Parameters(參數(shù))PkUnseal-Input∷={ordinalINTEGER,pk-sealed-blobPKCiphertext}PkUnseal-output∷={ordinalINTEGER,statusINTEGER,secretSecret}RetumValues(返回值)SSP_SUCCESSSSP_CRYPTO_ERRORSSP_BAD_DATA_ERRORComments(注釋)PKUnseal操作使用具有416位長(zhǎng)度、而且具有特定格式的一加密塊。解密該塊,并且如果解密和譯碼成功,則把416位消息解釋為一個(gè)秘密值和被允許接收解密值的PCR值的級(jí)聯(lián)。如果當(dāng)前的PCR值等于在加密塊中指定的那個(gè),則揭示秘密;否則返回錯(cuò)誤。AccessPolicy(訪問(wèn)策略)Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKe==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)Actions(動(dòng)作)PKUnseal操作實(shí)現(xiàn)下列動(dòng)作1.SSP測(cè)試在pk-sealed-blob中的Algorithmldentifier是否為sspV1BoundKey。2.SSP依據(jù)在PKCS#1V2.1中規(guī)定的RSAES-OAEP-DECRYPT的缺省實(shí)現(xiàn)內(nèi)部地解密SealedBlob,以獲得明文消息M。3.如果譯碼操作的輸出為“譯碼錯(cuò)誤”,則返回SSP_BAD_DATA_ERROR,且Secret設(shè)置為0。4.否則,在DER編碼下恢復(fù)的消息M應(yīng)當(dāng)是下列格式SEQUENCE{message-typePKMessageType,secretSecret,targetDigest}此外,Secret應(yīng)該包含256位(=32個(gè)八位字節(jié)),而且target應(yīng)該包含160位(=20個(gè)八位字節(jié))。messagetype(消息類型)應(yīng)當(dāng)是sspV1PKSealedMessage。如果不滿足這些條件,則返回SSP_BAD_DATA_ERROR,且Secret設(shè)置為0,否則1.如果target?。絇CR,則返回SSP_BAD_DATA_ERROR,且Secret設(shè)置為0。2.如果target=PCR則返回SSP_SUCCESS,且Secret設(shè)置為secret。BoundKeyOperations(邊界密鑰操作)另外,一組邊界密鑰函數(shù)或操作允許加密鑰在本地被創(chuàng)建和確認(rèn)(例如,由SSP),而且還允許加密鑰從可信賴的遠(yuǎn)程團(tuán)體進(jìn)行傳遞(例如,傳遞給SSP)。邊界密鑰的功能其特征如下1.服務(wù)防護(hù)裝置(例如SSP)在某一系統(tǒng)層直接訪問(wèn)邊界密鑰。每個(gè)邊界密鑰具有一個(gè)確定哪個(gè)防護(hù)裝置可以訪問(wèn)邊界密鑰的相關(guān)條件。條件被隱含地表示。即,加密邊界密鑰,以便使只有一組或某一組防護(hù)裝置具有解密它的密鑰。2.訪問(wèn)邊界密鑰的服務(wù)防護(hù)裝置向在較高層的委托人公開(kāi)需要使用邊界密鑰的功能(例如簽名、MAC、加密、解密)。每個(gè)邊界密鑰可以具有一個(gè)相關(guān)的使用條件,而在這種情況下防護(hù)裝置將服務(wù)于滿足該相關(guān)條件的請(qǐng)求。3.邊界密鑰被包含在加密保護(hù)的數(shù)據(jù)結(jié)構(gòu)(在此也被稱為邊界密鑰塊)中。邊界密鑰塊是自我保護(hù)的,并且能夠被存儲(chǔ)在信賴的環(huán)境之外。邊界密鑰具有下列好處●每個(gè)委托人能夠被允許具有它自己的邊界密鑰。此外,每個(gè)委托人能夠被允許具有任意多的邊界密鑰。這考慮到了更加精細(xì)的策略設(shè)置,并且改善在某些應(yīng)用程序中的保密性。因此,防護(hù)裝置沒(méi)有必要限于僅僅具有一個(gè)或者幾個(gè)用來(lái)服務(wù)于來(lái)自所有委托人的請(qǐng)求的密鑰。●邊界密鑰在授權(quán)的服務(wù)防護(hù)裝置之外是不公開(kāi)的。因此,委托人的泄密(例如由于程序設(shè)計(jì)錯(cuò)誤)不會(huì)導(dǎo)致任一邊界密鑰的泄密。在一個(gè)實(shí)施例中,服務(wù)防護(hù)裝置(SSP)以硬件實(shí)現(xiàn)。在這種情況下,邊界密鑰不能由于惡意的或者不正確的軟件被泄密。邊界密鑰函數(shù)為加密密鑰提供保護(hù)。邊界密鑰能夠由遠(yuǎn)程團(tuán)體生成,或者是它們能夠在本地通過(guò)GenBoundKey命令創(chuàng)建。在本地生成的邊界密鑰可以發(fā)出“quote(摘引)”證書(shū),其能夠被用來(lái)向遠(yuǎn)程團(tuán)體提供公用密鑰的類型證明、生成的密鑰類型、在生成期間機(jī)器的狀態(tài)、密鑰被綁定的(可選)條件(例如摘要)。邊界密鑰包含一個(gè)或多個(gè)下列要素●密鑰使用(例如,BoundSign、BoundQuote、BoundPkUnseal、BoundPkDecrypt、BoundMAC、BoundEncrypt或者BoundDecrypt)。這個(gè)要素是可選的。如果被包含了,則這個(gè)要素限制邊界密鑰僅僅和所標(biāo)識(shí)的函數(shù)類型一起使用?!駰l件要素(如上所述),其指定在哪些條件下邊界密鑰能被使用(也稱為邊界密鑰使用條件)。例如,條件可以被表示為程序的一個(gè)或多個(gè)摘要的形式。在這種情況下,邊界密鑰必須僅僅由指定了其摘要的程序使用或者以該程序的名義使用。如上所述,條件的其它例子包含時(shí)間限制、邏輯公式、和可執(zhí)行程序。這個(gè)要素是可選的。如果該要素被省略了,則適用某些缺省的條件。例如,缺省條件不能限制對(duì)邊界密鑰的訪問(wèn)(空條件)?!裨试S密鑰被計(jì)算的加密密鑰(邊界密鑰)或者某些數(shù)據(jù)?!裨谄湎旅婺軌蚋淖冞吔缑荑€使用條件的一個(gè)或多個(gè)條件(如上所述)。這種改變也被稱為邊界密鑰遷移,而該條件也被稱為遷移條件。這個(gè)要素是可選的。如果該要素被省略了,則適用某些缺省的條件。例如,缺席條件可以“總是假的”,以便使摘要(如果給出的話)不能被改變?!裨谄湎旅婺軌蚋淖兡苤苯釉L問(wèn)邊界密鑰的該組服務(wù)防護(hù)裝置的一個(gè)或多個(gè)條件。這種改變也被稱為邊界密鑰輸出,該條件也破稱為輸出條件。這個(gè)要素是可選的。邊界密鑰的密碼保護(hù)邊界密鑰具有與以上描述的密封存儲(chǔ)和驗(yàn)證功能(Seal、UnSeal、PKUnseal)相同的加密要求。特別是,在本地生成的邊界密鑰能夠由以上所述的Store和Retrieve功能的任何加密實(shí)現(xiàn)來(lái)保護(hù)。在每種情況下,邊界密鑰自身的機(jī)密性受到保護(hù),而且整個(gè)數(shù)據(jù)結(jié)構(gòu)的完整性受到保護(hù),以便確保管理邊界密鑰使用的不同條件沒(méi)有被破壞。如早先描述的那樣,這能夠由對(duì)稱密碼或者公用密鑰加密算法和MACs或者數(shù)字簽名的各種組合來(lái)實(shí)現(xiàn)。在一個(gè)實(shí)施例中,邊界密鑰數(shù)據(jù)結(jié)構(gòu)是公用密鑰加密的。函數(shù)在某些實(shí)施例中,邊界密鑰能夠被用在一個(gè)或多個(gè)的下列函數(shù)中●BoundSign●BoundQuote●BoundPkDecrypt●BoundPkUnseal●BoundMAC●BoundEncrypt●BoundDecrypt●GenBoundKey●BoundKeyMigrate●BoundKeyExport在這些函數(shù)的每一個(gè)中,把邊界密鑰塊(在數(shù)據(jù)結(jié)構(gòu)中的位組)和將由包含在邊界密鑰塊內(nèi)的密鑰在其上進(jìn)行運(yùn)算的數(shù)據(jù)作為參數(shù)提供給邊界密鑰函數(shù)。如果密鑰使用要素被包含在邊界密鑰塊中,則SSP確保邊界密鑰被用于正確的目的(例如,用類型“BoundQuoteKey”創(chuàng)建的密鑰只能被用在BoundQuote操作中)。在某些實(shí)現(xiàn)中,邊界密鑰是公用/私有密鑰對(duì)中的私有密鑰。在這種實(shí)現(xiàn)中,邊界密鑰塊能夠包含該私有密鑰,或者某些允許該密鑰被計(jì)算的數(shù)據(jù)。例如,一個(gè)私有密鑰片段可以被包含在邊界密鑰塊中,而且這個(gè)片段和相應(yīng)著公用密鑰一起能夠被用來(lái)重構(gòu)該公用/私有密鑰對(duì)中的私有密鑰。BoundSign操作接收一個(gè)將使用邊界密鑰進(jìn)行簽名的數(shù)據(jù)輸入,而且還接收一邊界密鑰塊。SSP從邊界密鑰塊中恢復(fù)私有簽名密鑰,然后使用所恢復(fù)的簽名密鑰生成一條在數(shù)據(jù)輸入上數(shù)字簽名的消息。SSP然后輸出該數(shù)字簽名的消息。如果邊界密鑰塊被破壞了或者如果有邊界密鑰使用條件而沒(méi)有滿足時(shí),則SSP不執(zhí)行該操作。因此能使用所恢復(fù)的私有密鑰而不是由SSP揭示的私有密鑰對(duì)數(shù)據(jù)輸入進(jìn)行數(shù)字簽名。BoundQuote操作把將被簽名的數(shù)據(jù)和邊界密鑰塊接收作為輸入。SSP從邊界密鑰塊中恢復(fù)私有密鑰,然后使用所恢復(fù)的簽名密鑰以在輸入到該操作的數(shù)據(jù)和當(dāng)前的PCR值(例如,調(diào)用BoundQuote操作的程序的標(biāo)識(shí)符、諸如摘要)上生成一個(gè)簽名,如在以上所述的Quote操作中那樣。SSP然后輸出該數(shù)字簽名的消息。如果邊界密鑰塊被破壞了或者如果有邊界密鑰使用條件而沒(méi)有滿足時(shí),則SSP不執(zhí)行該操作。在一個(gè)實(shí)現(xiàn)中,BoundQuote操作類似于BoundSign操作,但是在當(dāng)前PCR值被用在BoundQuote操作中該方面有所不同。BoundPkDecrypt操作把密文和邊界密鑰塊接收作為輸入。SSP從邊界密鑰塊中恢復(fù)私有密鑰,然后使用所恢復(fù)的私有邊界密鑰以解密輸入密文。然后由BoundPkDecrypt操作輸出解密的數(shù)據(jù)。如果邊界密鑰塊被破壞了或者如果有邊界密鑰使用條件而沒(méi)有滿足時(shí),則SSP不執(zhí)行該操作。BoundPkUnseal操作把密文和邊界密鑰塊接收作為輸入。SSP從邊界密鑰塊中恢復(fù)私有密鑰,然后使用該私有邊界密鑰以解密輸入密文,如在以下描述的PKUnseal操作中那樣。然后由BoundPkUnseal操作輸出解密的數(shù)據(jù)。如果邊界密鑰塊被破壞了或者如果有邊界密鑰使用條件而沒(méi)有滿足時(shí),則SSP不執(zhí)行該操作。BoundMAC操作接收一個(gè)將使用邊界密鑰在其上計(jì)算MAC的數(shù)據(jù)輸入,而且還接收一邊界密鑰塊。如果邊界密鑰塊被破壞了或者如果有邊界密鑰使用條件而沒(méi)有滿足時(shí),則SSP不執(zhí)行該操作。否則,SSP從邊界密鑰塊中恢復(fù)邊界密鑰,然后使用所恢復(fù)的邊界密鑰在輸入數(shù)據(jù)上生成一個(gè)消息驗(yàn)證碼(MAC)。然后SSP輸出所計(jì)算的MAC。因此,能夠使用所恢復(fù)的邊界密鑰而不是由SSP揭示的邊界密鑰來(lái)計(jì)算用于輸入數(shù)據(jù)的MAC。BoundEncrypt操作接收一個(gè)將使用邊界密鑰對(duì)其進(jìn)行加密的數(shù)據(jù)輸入,而且還接收一邊界密鑰塊。如果邊界密鑰塊被破壞了或者如果有邊界密鑰使用條件而沒(méi)有滿足時(shí),則SSP不執(zhí)行該操作。否則,SSP從邊界密鑰塊中恢復(fù)私有密鑰,然后使用所恢復(fù)的邊界密鑰加密輸入數(shù)據(jù)。SSP然后輸出所計(jì)算的密文。因此,能夠使用所恢復(fù)的邊界密鑰而不是由SSP揭示的邊界密鑰來(lái)加密輸入數(shù)據(jù)。BoundDecrypt操作接收一個(gè)將使用邊界密鑰對(duì)其進(jìn)行解密的數(shù)據(jù)輸入,而且還接收一邊界密鑰塊。如果邊界密鑰塊被破壞了或者如果有邊界密鑰使用條件而沒(méi)有滿足時(shí),則SSP不執(zhí)行該操作。否則,SSP從邊界密鑰塊中恢復(fù)私有密鑰,然后使用所恢復(fù)的邊界密鑰解密輸入數(shù)據(jù)。SSP然后輸出所計(jì)算的明文。因此,能夠使用所恢復(fù)的邊界密鑰而不是由SSP揭示的邊界密鑰來(lái)解密輸入數(shù)據(jù)。GenBoundKey操作使SSP創(chuàng)建一新的邊界密鑰。新的邊界密鑰是一個(gè)加密密鑰,而且生成包含最新生成的密鑰的新的邊界密鑰塊。應(yīng)當(dāng)理解,邊界密鑰塊并不總是必須包含該整個(gè)密鑰。例如,如果最新生成的密鑰是一公用/私有密鑰對(duì),則在邊界密鑰塊中包含私有密鑰可能就足夠了。新的邊界密鑰塊被綁定到一個(gè)或多個(gè)防護(hù)裝置上--通常是正在執(zhí)行操作的SSP(例如,類似于以上所述的Store函數(shù),通過(guò)密碼保護(hù)該新的邊界密鑰塊,或者相反,保護(hù)該新的邊界密鑰塊以便使它只能夠由SSP檢索)。GenBoundKey操作還可以具有確定新的邊界密鑰塊的各個(gè)特征的參數(shù),而且以某些完整性受保護(hù)的方式把描述了這些參數(shù)的數(shù)據(jù)附加到最新生成的私有密鑰上(例如,使數(shù)據(jù)是新的邊界密鑰塊的一部分)。如上所討論的那樣,這個(gè)數(shù)據(jù)的例子包含遷移條件、邊界密鑰使用條件等等。然后由GenBoundKey操作輸出新的邊界密鑰塊??傊吔缑荑€可以是任何類型的加密密鑰,包含對(duì)稱密鑰或者公用—私有密鑰對(duì)。準(zhǔn)確的密鑰類型取決于它將被使用的邊界密鑰操作。例如,將被用在BoundMAC中的邊界密鑰通常是對(duì)稱密鑰,而將被用在BoundSign中的邊界密鑰通常是公用/私有簽名密鑰對(duì)。密鑰類型可以被指定為GenBoundKey的一個(gè)參數(shù)。BoundKeyMigrate操作允許邊界密鑰的使用條件被改變。SSP驗(yàn)證該一個(gè)或多個(gè)遷移條件被滿足了。多種條件中的任何一種可以和BoundKeyMigrate操作一起使用(例如,任何標(biāo)識(shí)了何時(shí)和/或能夠向誰(shuí)轉(zhuǎn)移數(shù)據(jù)的條件,類似于以上就Seal和UnSeal操作討論的那些條件)。如果驗(yàn)證沒(méi)有成功進(jìn)行,則該操作失敗。如果驗(yàn)證成功地進(jìn)行了,則防護(hù)裝置生成一個(gè)新的邊界密鑰塊,其中邊界密鑰使用條件已經(jīng)按照要求被改變了。BoundKeyExport操作指示SSP改變能夠直接訪問(wèn)邊界密鑰的該組防護(hù)裝置(SSPs)。SSP驗(yàn)證該一個(gè)或多個(gè)條件被滿足了。多種條件中的任何一種可以和BoundKeyExport操作一起使用(例如,任何標(biāo)識(shí)了何時(shí)和/或能夠向誰(shuí)輸出數(shù)據(jù)的條件,類似于以上就Seal和UnSeal操作討論的那些條件)。如果驗(yàn)證沒(méi)有成功進(jìn)行,則該操作失敗。如果驗(yàn)證成功地進(jìn)行了,則SSP按照要求改變?cè)谶吔缑荑€塊上的密碼保護(hù)。在一個(gè)實(shí)施例中,SSP用一個(gè)或多個(gè)新的密鑰加密邊界密鑰數(shù)據(jù)結(jié)構(gòu)。邊界密鑰的(本地或者遠(yuǎn)程)創(chuàng)建者能夠指定的一類條件的一個(gè)例子是僅僅可以以其程序摘要具有特定值的委托人的名義使用邊界密鑰。在這種情況下,邊界密鑰操作在邊界密鑰塊的內(nèi)部檢索之后檢查請(qǐng)求委托人的摘要,并且如果摘要不是如在邊界密鑰塊中指定的那樣,則操作失敗,不執(zhí)行額外的計(jì)算。通常借助于要求特定SSP的唯一密鑰以繼續(xù)進(jìn)行的加密操作把邊界密鑰塊約束或綁定到一特定的SSP。這種操作的例子是MAC、數(shù)字簽名、加密、和加密以及完整性驗(yàn)證函數(shù)的組合。邊界密鑰操作示例在一個(gè)實(shí)現(xiàn)中,通過(guò)由授權(quán)實(shí)體發(fā)出的本地遷移證書(shū)或者輸出證書(shū)來(lái)授權(quán)遷移。本地遷移證書(shū)是RSASSA-PSS-SIGN操作在下列數(shù)據(jù)結(jié)構(gòu)上的缺省值Bound-migration-info∷=SEQUENCE{source-bound-blob-digestDigest,dest-PCRDigestPair}使用BoundKeyMigrate操作請(qǐng)求本地的SSP-migration(遷移)。為了授權(quán)本地遷移,SSP具有一個(gè)涉及這個(gè)邊界密鑰的Bound-migration-info結(jié)構(gòu),并且由授權(quán)的實(shí)體在這個(gè)結(jié)構(gòu)上提供一個(gè)正確形成的證書(shū)。如果遷移授權(quán)是可接受的,則SSP為新的PCR重新綁定密鑰,并且使所有的其它密鑰屬性保持不變(例如,如果密鑰最初沒(méi)有被綁定到一個(gè)PCR值,則它將不會(huì)是何時(shí)重新綁定)。source-bound-blob-digest是邊界密鑰的加密外部形式的摘要。通過(guò)具有例如由授權(quán)實(shí)體簽名的Bound-export-info結(jié)構(gòu)的BoundKeyExport函數(shù)來(lái)實(shí)現(xiàn)遠(yuǎn)程遷移Bound-export-info∷=SEQUENCE{source-bound-blob-digestDigest,dest-pubkeyRSAPublicKey,dest-PCRDigestPair}當(dāng)密鑰被標(biāo)記為可輸出時(shí),授權(quán)實(shí)體在密鑰被重新綁定到的設(shè)備或者軟件模塊的完全控制中。邊界密鑰操作使用PKCiphertext,其是用平臺(tái)公用加密密鑰加密的Bound-key-blob類型的序列,其中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-keyPKCompressedPrivateKey}其中Bound-key-type∷=INTEGER{BoundSignKey,BoundQuoteKey,BoundDecryptKey,BoundPkUnsealKey}bound-to-PCR成員是一個(gè)指示為了使邊界密鑰被使用bound-to-Digest字段是否必須與當(dāng)前PCR隨匹配的標(biāo)記。{migrateable,migrate-auth}指示密鑰是否為可遷移的,而且如果是這樣的話,在什么權(quán)限的控制下(如果migrateable為假,則migrate-auth值是不重要的)。{exportable,export-auth}指示密鑰是否為可輸出的,而且如果是這樣的話,在什么權(quán)限的控制下(如果exportable為假,則export-auth值是不重要的)。Pub-key-digest是用以在PKCompressedPrivateKey和恢復(fù)私有密鑰所必需的公用密鑰之間提供堅(jiān)固綁定的相應(yīng)公用密鑰的摘要。在一個(gè)實(shí)現(xiàn)中,如果邊界密鑰是用GenBoundKey函數(shù)本地創(chuàng)建的,則SSP在一個(gè)詳述了剛剛生成的密鑰的公用屬性、以及在邊界密鑰輸出期間的系統(tǒng)配置的數(shù)據(jù)結(jié)構(gòu)上創(chuàng)建一個(gè)簽名。Bound-key-pub-info∷=SEQUENCE{message-typePKMessageType,//sspV1BoundKeyGenMessagesig-nonceDigest,key-typeBound-key-type,bound-to-PCRBOOL,bound-toDigestPair,migrateableBool,migrate-authDigest,exportableBool,export-authDigest,creator-PCRDigestPair,bound-pub-keyDigest}在這個(gè)數(shù)據(jù)結(jié)構(gòu)中,key-type、bound-to-PCR、bound-to、migrateable、migrate-auth、exportable、和export-auth是最新生成的密鑰的邊界密鑰特性。Creator-PCR是在輸出密鑰時(shí)有效的PCR,而bound-pub-key是最新創(chuàng)建的公用密鑰的摘要。sig-nonce是在請(qǐng)求生成邊界密鑰時(shí)傳遞的摘要大小的值。BoundSign、BoundQuote、BoundPkDecrypt、BoundPkUnseal、GenBoundKey、BoundKeyMigrate、和BoundKeyExkport操作的示范性定義如下。BoundSignDefinition(定義)SSP_STATUSBoundSign([in]PKCiphertextBoundKeyBlob,[in]RSAPublicKeyPubPartOfBoundKey,[in]BITSTRINGDataToBeSigned[out]PKSignaturesig-blob)Parameters(參數(shù))Boundsign-Input∷={ordinalINTERGER,bound-keyBoundKeyBlob,bound-pub-keyRSAPublicKey,data-to-be-signedOCTETSTRING}BoundSign-output∷={ordinalINTEGER,StatusINTEGER,Sig-blobPKSignature}ReturnValues(返回值)SSP_SUCCESSSSP_CRYPTO_ERRORSSP_BAD_DATA_ERRORSSP_UNSEAL_ERRORComments(注釋)BoundSign操作采用包含BoundSignKey類型的BoundKeyBlob的sspV1BoundKey類型的PKciphertext和相應(yīng)的公用密鑰。如果這些條件中任何一個(gè)都不滿足,或者如果序列未能譯碼,則操作失敗,返回SSP_CRYPTO_ERROR。如果Bound-to-PCR被設(shè)置了,則SSP檢查當(dāng)前PCR值是否如Bound-key-blob序列中指定的那樣。如果不是這樣,則SSP返回SSP_CRYPTO_ERROR。最后,SSP用解密的私有密鑰簽名輸入消息。AccessPolicy(訪問(wèn)策略)Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)Actions(動(dòng)作)BoundSign操作實(shí)現(xiàn)下列動(dòng)作1.SSP測(cè)試在pk-sealed-blob中的Algorithmldentifier是否為sspV1BoundKey。2.SSP依據(jù)在PKCS#1V2.1中規(guī)定的RSAES-OAEP-DECRYPT的缺省實(shí)現(xiàn)內(nèi)部地解密SealedBlob,以獲得明文消息M。3.如果譯碼操作的輸出為“譯碼錯(cuò)誤”,則返回SSP_CRYPTO_ERROR,且Secret設(shè)置為0。4.否則,恢復(fù)的消息M應(yīng)當(dāng)是利用BoundSignKey類型的Bound-key-blob形式的DER編碼。如果不是,則SSP應(yīng)當(dāng)發(fā)出SSP_CRYPTO_ERROR。5.如果bound-to-PCR為真,則應(yīng)當(dāng)把bound-to與當(dāng)前PCR值進(jìn)行比較。如果值不相同,則SSP應(yīng)當(dāng)輸出SSP_CRYPTO_ERROR。6.SSP然后使用所提供的相關(guān)公用密鑰恢復(fù)邊界私有密鑰。如果這失敗了,則SSP返回SSP_CRYPTO_ERROR。如果它成功了,則SSP依據(jù)如PKCS#1V2.1中規(guī)定的RSASSA-PSS-SIGN的缺省實(shí)現(xiàn),使用所恢復(fù)的私有密鑰bound-key以在輸入言息DataToBeSigned上生成簽名的消息。如果函數(shù)返回錯(cuò)誤,則返回SSP_CRYPTO_ERROR,且SigBlob設(shè)置為0。7.返回SSP_SUCCESS。BoundQuoteDefinition(定義)SSP_STATUSBoundQuote([in]PKCiphertextBoundKeyBlob,[in]DIGESTDataToBeSigned[out]PKSignaturesig-blob)Parameters(參數(shù))BoundQuote-Input∷={ordinalINTEGER,bound-keyBoundKeyBlob,bound-pub-keyRSAPublicKey,data-to-be-quotedDigest}BoundQuote-output∷={ordinalINTEGER,statusINTEGER,sig-blobPKSignature}ReturnValues(返回值)SSP_SUCCESSSSP_CRYPTO_ERRORSSP_BAD_DATA_ERRORSSP_UNSEAL_ERRORComments(注釋)BoundQuote操作采用包含BoundQuoteKey類型的BoundKeyBlob的sspVlBoundKey類型的PKciphertext。如果這些條件中任何一個(gè)都不滿足,或者如果序列未能譯碼,則操作失敗,返回SSP_CRYPTO_ERROR。如果Bound-to-PCR被設(shè)置了,則SSP檢查當(dāng)前PCR值是否如Bound-key-blob序列中指定的那樣。如果不是,則SSP返回SSP_CRYPTO_ERROR。最后,SSP用解密的私有密鑰摘引輸入消息。AccessPolicy(訪問(wèn)策略)Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)Actions(動(dòng)作)BoundQuote操作實(shí)現(xiàn)下列動(dòng)作1.SSP測(cè)試在pk-sealed-blob中的Algorithmldentifier是否為sspV1BoundKey。2.SSP依據(jù)在PKCS#1V2.1中規(guī)定的RSAES-OAEP-DECRYPT的缺省實(shí)現(xiàn)內(nèi)部地解密SealedBlob,以獲得明文消息M。3.如果譯碼操作的輸出為“譯碼錯(cuò)誤”,則返回SSP_CRYPTO_ERROR,且Secret設(shè)置為0。4.否則,恢復(fù)的消息M應(yīng)當(dāng)是利用BoundSignKey類型的Bound-key-blob形式的DER編碼。如果不是,則SSP應(yīng)當(dāng)發(fā)出SSP_CRYPTO_ERROR。5.如果bound-to-PCR為真,則應(yīng)當(dāng)把bound-to與當(dāng)前PCR值進(jìn)行比較。如果值不相同,則SSP應(yīng)當(dāng)輸出SSP_CRYPTO_ERROR。6.SSP然后使用所恢復(fù)的私有密鑰片段和公用密鑰以重構(gòu)私有密鑰。私有密鑰能夠被重構(gòu)如下??傊琑SA密鑰是由數(shù)字N=p*q(N是兩個(gè)素?cái)?shù)p和q的乘積)、和兩個(gè)指數(shù)e(加密指數(shù))和d(解密指數(shù))構(gòu)成。N和e形成公用密鑰;d是私有密鑰。總之,d與N一樣長(zhǎng)(例如2048位)。如果N的因式分解是已知的(即,如果p和q是已知的),則私有密鑰d能夠被很容易地確定下來(lái)。注意到,p和q僅僅是N的一半長(zhǎng)。所以,不是d存儲(chǔ)作為私有密鑰,而是存儲(chǔ)p。然后,給定公用密鑰N、e和p,能夠計(jì)算值q=N/p,任何給定p和q確定值d。然后依據(jù)在以上定義的Quote操作中的說(shuō)明,使用私有密鑰以在輸入消息DataToBeSigned和當(dāng)前PCR值上生成一個(gè)簽名。如果函數(shù)返回錯(cuò)誤,則返回SSP_CRYPTO_ERROR,且SigBlob設(shè)置為0。7.返回SSP_SUCCESS。BnupdPkDecrvntDefinition(定義)SSP_STATUSBoundPkDecrypt([in]PKCiphertextBoundKeyBlob,[in]RSAPublicKeyBoundPubKey,[in]PKCiphertextDataToBeDecrypted,[out]SecretdecryptedData)Parameters(參數(shù))BoundPkDecrypt-Input∷={ordinalINTEGER,bound-keyBoundKeyBlob,bound-pub-keyRSAPublicKey,pk-sealed-blobPKCiphertext}BoundPkDecrypt-output∷={ordinalINTEGER,statusINTEGER,d-blobSecret}ReturnValues(返回值)SSP_SUCCESSSSP_UNSEAL_ERRORSSP_CRYPTO_ERRORSSP_BAD_DATA_ERRORComments(注釋)BoundPkDecrypt操作采用包含BoundDecryptKey類型的BoundKeyBlob的sspVlBoundKey類型的PKciphertext。如果這些條件中任何一個(gè)都不滿足,或者如果序列未能譯碼,則操作失敗,返回SSP_CRYPTO_ERROR。如果Bound-to-PCR被設(shè)置了,則SSP檢查當(dāng)前PCR值是否如Bound-key-blob序列中指定的那樣。如果不是這樣,則SSP返回SSP_CRYPTO_ERROR。最后,SSP用從bound-blob中解密的私有密鑰解密輸入消息。AccessPolicy(訪問(wèn)策略)Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnable.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)Actions(動(dòng)作)BoundPkDecrypt操作實(shí)現(xiàn)下列動(dòng)作1.SSP測(cè)試在pk-sealed-blob中的Algorithmldentifier是否為sspV1BoundKey。2.SSP依據(jù)在PKCS#1V2.1中規(guī)定的RSAES-OAEP-DECRYPT的缺省實(shí)現(xiàn)內(nèi)部地解密SealedBlob,以獲得明文消息M。3.如果譯碼操作的輸出為“譯碼錯(cuò)誤”,則返回SSP_CRYPTO_ERROR,且Secret設(shè)置為0。4.否則,恢復(fù)的消息M應(yīng)當(dāng)是利用BoundSignKey類型的Bound-key-blob形式的DER編碼。如果不是,則SSP應(yīng)當(dāng)發(fā)出SSP_CRYPTO_ERROR。5.如果bound-to-PCR為真,則應(yīng)當(dāng)把bound-to與當(dāng)前PCR值進(jìn)行比較,如果值不相同,則SSP應(yīng)當(dāng)輸出SSP_CRYPTO_ERROR。6.SSP使用所提供的公用密鑰恢復(fù)私有密鑰。能夠如以上在BoundQuote操作中討論的那樣恢復(fù)私有密鑰。它然后通過(guò)使用在PKCS#1V2.1中規(guī)定的RSAES-OAEP-DECRYPT的缺省實(shí)現(xiàn),使用所恢復(fù)的私有邊界密鑰以解密pk-sealed-blob,以獲得明文消息M。7.SSP設(shè)置d-blob為M。8.返回SSP_SUCCESS。RoundPkUnsealDefinition(定義)SSP_STATUSBoundPKUnseal([in]PKCiphertextBoundKeyBlob,[in]RSAPublicKeyBoundPubKey,[in]PKCiphertextDataToBeUnsealed,[out]SecretdecryptedData)Parameters(參數(shù))BoundPKUnseal-Input∷={ordinalINTEGER,bound-keyBoundKeyBlob,bound-pub-keyRSAPublicKey,pk-sealed-blobPKCiphertext}BoundPKUnseal-output∷={ordinalINTEGER,statusINTEGER,d-blobSecrgt}ReturnValues(返回值)SSP_SUCCESSSSP_UNSEAL_ERRORSSP_CRYPTO_ERRORSSP_BAD_DATA_ERRORComments(注釋)BoundPkUnseal操作采用包含BoundPKUnsealKey類型的BoundKeyBlob的sspVlBoundKey類型的PKciphertext。如果這些條件中任何一個(gè)都不滿足,或者如果序列未能譯碼,則操作失敗,返回SSP_CRYPTO_ERROR。如果Bound-to-PCR被設(shè)置了,則SSP檢查當(dāng)前PCR值是否如Bound-key-blob序列中指定的那樣。如果不是,則SSP返回SSP_CRYPTO_ERROR。最后,SSP使用PK_Unseal以用從bound-blob中解密的私有密鑰啟封輸入消息。AccessPolicy(訪問(wèn)策略)Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey==All|FeatureEnabte.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)Actions(動(dòng)作)BoundPkUnseal操作必須實(shí)現(xiàn)下列步驟1.SSP測(cè)試在pk-sealed-blob中的Algorithmldentifier是否為sspV1BoundKey。2.SSP依據(jù)在PKCS#1V2.1中規(guī)定的RSAES-OAEP-DECRYPT的缺省實(shí)現(xiàn)內(nèi)部地解密SealedBlob,以獲得明文消息M。3.如果譯碼操作的輸出為“譯碼錯(cuò)誤”,則返回SSP_CRYPTO_ERROR,且Secret設(shè)置為0。4.否則,恢復(fù)的消息M應(yīng)當(dāng)是利用BoundSignKey類型的Bound-key-blob形式的DER編碼。如果不是,則SSP應(yīng)當(dāng)發(fā)出SSP_CRYPTO_ERROR。5.如果bound-to-PCR為真,則應(yīng)當(dāng)把bound-to與當(dāng)前PCR值進(jìn)行比較。如果值不相同,則SSP應(yīng)當(dāng)輸出SSP_CRYPTO_ERROR。6.SSP使用邊界密鑰塊重新創(chuàng)建私有密鑰。能夠如以上在BoundQuote操作中討論的那樣恢復(fù)私有密鑰。它然后通過(guò)使用在PK_Unseal命令中描述的步驟使用所恢復(fù)的私有邊界密鑰以啟封pk-sealed-blob。7.如果在啟封的塊中定義的PCR與當(dāng)前PCR不匹配,則SSP返回SSP_CRYPTO_ERROR。8.否則,SSP設(shè)置d-blob為M。9.返回SSP_SUCCESS。GenBoundKevDefinition(定義)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)Parameters(參數(shù))GenBoundKey-Input∷={ordinalINTEGER,key-typeBound-key-type,bound-to-pcrBOOL,bound-toDigestPair,migrateableBOOL,exportableBOOL,export-authDigest,sig-nonceDigest}GenBoundKey-output∷={ordinalINTEGER,statusINTEGER,bound-blobPKCiphertext,bound-pubRSAPublicKey,sig-blobPKSignature}ReturnValues(返回值)SSP_SUCCESSSSP_BAD_DATA_ERRORComments(注釋)GenBoundKey操作使SSP生成一個(gè)包含最新生成的私有密鑰的新的bound-keyblob(邊界密鑰塊)。用SSP自己的公用密鑰對(duì)邊界密鑰塊進(jìn)行加密。GenBoundKey還輸出最新生成的密鑰對(duì)中的公用密鑰、指示SSP生成密鑰的quote-signature(摘引簽名)、它的特性、和在生成密鑰時(shí)的PCR值。GenBoundKey的調(diào)用者還指示將被創(chuàng)建的bound-key類型它是否用于簽名、摘引、用BoundPkUnseal啟封、或者用BoundPkDecrypt解密。調(diào)用者還指定邊界密鑰是否應(yīng)當(dāng)被綁定到PCR上,而且如果是這樣的話,還指定它要被綁定到的PCR值。AccessPolicy(訪問(wèn)策略)Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey=All|FearureEnabIe.UsePrivKey==AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)Actions(動(dòng)作)GenBoundKey操作實(shí)現(xiàn)下列動(dòng)作1.SSP生成新的公用/私有RSA密鑰對(duì)。當(dāng)SSP空閑時(shí),SSP能夠有選擇性地生成密鑰對(duì),并且在非易失性存儲(chǔ)器中存儲(chǔ)一個(gè)小的密鑰高速緩存用于快速檢索。2.SSP內(nèi)部地生成一個(gè)包含了最新生成的私有密鑰和由調(diào)用者提供的邊界密鑰類型及其它參數(shù)的邊界密鑰結(jié)構(gòu)。3.SSP用平臺(tái)公用加密密鑰加密邊界密鑰塊。4.SSP生成包含最新創(chuàng)建的密鑰的屬性、在密鑰生成和提供時(shí)的PCR值的bound-key-pub-info的簽名塊。5.SSP輸出加密的邊界密鑰塊、最新生成的公用密鑰、和摘引密鑰塊。6.返回SSP_SUCCESS。BoundKevMigrateDefinition(定義)SSP_STATUSBoundKeyMigrate([in]PKCiphertextBoundKeyBlob,[in]RSAPublicKeyPubPartOfBoundKey,[in]BOUND_MIGRATION_INFOMigrationInfo,[in]RSA_SIGSigOnMigrationInfo)Parameters(參數(shù))GenBoundKey-Input∷={ordinalINTEGER,migration-infoBound-migration-info,migration-pubkeyRSAPublicKey,migration-authPKSignature}GenBoundKey-output∷={ordinalINTEGER,statusINTEGER,re-bound-blobPKCiphertext,}RetumValues(返回值)SSP_SUCCESSSSP_BAD_DATA_ERRORComments(注釋)BoundKeyMigrate操作指示SSP以受控制的方式把密鑰重新綁定到一個(gè)不同的PCR值上。本地或者遠(yuǎn)程的初始密鑰創(chuàng)建者指定遷移授權(quán)實(shí)體。只有標(biāo)記為migrateable的邊界密鑰才能夠被遷移,而且如果SSP具有一個(gè)適當(dāng)簽名的Boundmigration-info結(jié)構(gòu),則只有這些密鑰將被遷移。適當(dāng)簽名是指用其摘要被包含在邊界密鑰塊之內(nèi)的公用密鑰進(jìn)行簽名。其它邊界密鑰屬性沒(méi)有改變。AccessPolicy(訪問(wèn)策略)Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey=All|FeatureEnable.UsePrivKey=AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)Actions(動(dòng)作)BoundKeyMigrate操作實(shí)現(xiàn)下列動(dòng)作1.SSP內(nèi)部地解密bound-key(邊界密鑰)結(jié)構(gòu),并且把它解釋為Bound-key-blob。如果譯碼失敗了,則SSP返回SSP_CRYPTO_ERROR。2.SSP驗(yàn)證Bound-export-info引用相同的密鑰、簽名是正確形成的、以及簽名人的公用密鑰的摘要如在Bound-key-blob的“migrateable”字段中指定的那樣。3.SSP檢查密鑰是migrateable(可遷移的)。如果不是,則SSP返回SSP_CRYPO_ERROR。4.如果密鑰被綁定到一個(gè)PCR上,則SSP檢查當(dāng)前PCR是在key-blob中定義的那個(gè)。5.SSP用在Bound-migration-info的dest-PCR字段中定義的那個(gè)代替PCR值。6.SSP重新加密bound-key-blob,并且輸出重新加密的結(jié)構(gòu)。7.返回SSP_SUCCESS。BoundKeyExportDefinition(定義)SSP_STATUSBoundKeyExport([in]PKCiphertextBoundKeyBlob,[in]RSAPublicKeyPubPartOfBoundKey,[in]BOUND_EXPORT_INFOExportlnfo,[in]RSA_SIGSigOnExportlnfoInfo,[out]PKCipherTextReBoundBlob}Parameters(參數(shù))BoundKeyExport-Input∷={ordinalINTEGER,bound-keyPKCipherText,bound-pub-heyRSAPublicKey,export-infoBound-export-infoexport-authPKSignature,}GenBoundKey-output∷={ordinalINTEGER,statusINTEGER,re-bound-blobPKCiphertext,}ReturnValues(返回值)SSP_SUCCESSSSP_BAD_DATA_ERRORComments(注釋)BoundKeyExport操作指示SSP以受控制的方式在電源設(shè)備上以與邊界密鑰一致的格式把邊界密鑰的私有部分輸出到一遠(yuǎn)程實(shí)體。本地或者遠(yuǎn)程的初始密鑰創(chuàng)建者指定export-authorization(輸出授權(quán))實(shí)體。只有標(biāo)記為exportable的邊界密鑰才能夠被輸出,而且如果SSP具有一個(gè)適當(dāng)簽名的Bound-export-info結(jié)構(gòu),則只有這些密鑰將被輸出。適當(dāng)簽名是指用其摘要被包含在初始的邊界密鑰塊之內(nèi)的公用密鑰進(jìn)行簽名。BoundKeyExport允許適當(dāng)授權(quán)的調(diào)用者指定公用密鑰和密鑰應(yīng)當(dāng)被重新綁定到的目標(biāo)實(shí)體的PCR值。對(duì)外部實(shí)體是SSP沒(méi)有特定要求,都是最新的邊界塊遵循bound-key約定以允許遠(yuǎn)程SSP直接使用輸出的邊界密鑰。AccessPolicy(訪問(wèn)策略)Allowed=FeatureEnable.MainEnable&(FeatureEnable.UsePrivKey=All|FeatureEnable.UsePrivKey=AuthSL&SLKnown&AuthPCR[CurrentSL].UsePrivKey)Actions(動(dòng)作)BoundKeyExport操作實(shí)現(xiàn)下列動(dòng)作1.SSP內(nèi)部地解密bound-key結(jié)構(gòu),并且把它解釋為Bound-key-blob。如果譯碼失敗了,則SSP返回SSP_CRYPTO_ERROR。2.SSP驗(yàn)證Bound-export-info引用相同的密鑰、簽名是正確形成的、以及簽名人的公用密鑰的摘要如在Bound-key-blob的“export”字段中指定的那樣。3.SSP檢查密鑰是exportable(可輸出的)。如果不是,則SSP返回SSP_CRYPO_ERROR。4.如果密鑰被綁定到一個(gè)PCR上,則SSP檢查當(dāng)前PCR是在key-blob中定義的那個(gè)。5.SSP內(nèi)部地生成一個(gè)包含了來(lái)自初始bound-key-blob結(jié)構(gòu)的參數(shù)和在Bound-export-info中提供的新PCR值的新的bound-key-blob結(jié)構(gòu)。所有其它參數(shù)保存相同。6.SSP用在Bound-export-info中提供的公用加密密鑰加密新的bound-key-blob。7.輸出最新的邊界密鑰。8.返回SSP_SUCCESS。GeneralComputerEnvironment(通用計(jì)算機(jī)環(huán)境)圖12說(shuō)明了一個(gè)通用計(jì)算機(jī)環(huán)境400,其能夠被用于實(shí)現(xiàn)在此描述的技術(shù)。計(jì)算機(jī)環(huán)境400僅僅是計(jì)算環(huán)境的一個(gè)例子,而且不打算提出任何關(guān)于計(jì)算機(jī)和網(wǎng)絡(luò)體系結(jié)構(gòu)的使用范圍或功能的極限。計(jì)算機(jī)環(huán)境400不應(yīng)當(dāng)被解釋為具有與在示范性計(jì)算機(jī)環(huán)境400中舉例說(shuō)明的任何一個(gè)組件或其組合有關(guān)的任何相關(guān)性或者要求。計(jì)算機(jī)環(huán)境400包含以計(jì)算機(jī)402形式的通用計(jì)算設(shè)備。例如,計(jì)算機(jī)402能夠被用來(lái)實(shí)現(xiàn)圖1中的委托人102和防護(hù)裝置104、或者圖2中的層。計(jì)算機(jī)402的部件能夠包含,但不局限于,一個(gè)或者更多的處理器或者處理單元404(可選地包含一個(gè)或者更多的安全處理器或者協(xié)處理器(諸如SSP)及/或一個(gè)或者更多的加密處理器或者協(xié)處理器)、一個(gè)系統(tǒng)存儲(chǔ)器406、以及把包含處理器404的各個(gè)系統(tǒng)部件連接到系統(tǒng)存儲(chǔ)器406的系統(tǒng)總線408。系統(tǒng)總線408代表幾種類型總線結(jié)構(gòu)中任意的一個(gè)或者多個(gè),這些總線結(jié)構(gòu)包含存儲(chǔ)器總線或者存儲(chǔ)器控制器、外圍總線、加速圖形端口、以及使用多種總線結(jié)構(gòu)中任意一種的處理器或者局部總線。舉例來(lái)說(shuō),這樣的結(jié)構(gòu)能夠包含IndustryStandardArchitecture(ISA)總線、MicroChannelArchitecture(MCA)總線、EnhancedISA(EISA)總線、以及也被稱為Mezzanine總線的PeripheralComponentInterconnects(PCI)總線計(jì)算機(jī)402一般包含多個(gè)計(jì)算機(jī)可讀介質(zhì)。這樣的介質(zhì)能夠是可由計(jì)算機(jī)402訪問(wèn)的任何可得到介質(zhì),并且包含易失生和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。系統(tǒng)存儲(chǔ)器406包含以易失性存儲(chǔ)器形式、諸如隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)410,及/或非易失性存儲(chǔ)器形式、諸如只讀存儲(chǔ)器(ROM)412的計(jì)算機(jī)可讀介質(zhì)。一個(gè)基本輸入輸出系統(tǒng)(BIOS)414被存儲(chǔ)在ROM412中,BIOS包含在啟動(dòng)期間幫助在計(jì)算機(jī)402內(nèi)的各個(gè)單元之間傳輸信息的基本例程。RAM410一般包含由處理單元404立即訪問(wèn)及/或當(dāng)前由其操作的數(shù)據(jù)及/或程序。計(jì)算機(jī)402還可以包含其它可移動(dòng)的/固定的、易失性/非易失性的計(jì)算機(jī)存儲(chǔ)介質(zhì)。舉例來(lái)說(shuō),圖12說(shuō)明了一個(gè)用于從固定、非易失性磁介質(zhì)(未顯示)中讀取和寫(xiě)入到其中的硬盤(pán)驅(qū)動(dòng)器416、一個(gè)用于從一個(gè)可移動(dòng)、非易失性磁盤(pán)420(例如,“軟盤(pán)”)中讀取和寫(xiě)入到其中的磁盤(pán)驅(qū)動(dòng)器418、以及一個(gè)用于從一個(gè)諸如CD-ROM、DVD-ROM、或者其它光介質(zhì)的可移動(dòng)、非易失性光盤(pán)424中讀取和/或?qū)懭氲狡渲械墓獗P(pán)驅(qū)動(dòng)器422。硬盤(pán)驅(qū)動(dòng)器416、磁盤(pán)驅(qū)動(dòng)器418、和光盤(pán)驅(qū)動(dòng)器422每個(gè)都通過(guò)一個(gè)或多個(gè)數(shù)據(jù)介質(zhì)接口426連接到系統(tǒng)總線408。做為選擇,硬盤(pán)驅(qū)動(dòng)器416、磁盤(pán)驅(qū)動(dòng)器418、和光盤(pán)驅(qū)動(dòng)器422能夠通過(guò)一個(gè)或多個(gè)接口(未顯示)連接到系統(tǒng)總線408。這些磁盤(pán)驅(qū)動(dòng)器以及它們的相關(guān)計(jì)算機(jī)可讀介質(zhì)為計(jì)算機(jī)402提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、及其它數(shù)據(jù)的的非易失性存儲(chǔ)。雖然該示例說(shuō)明了硬盤(pán)416、可移動(dòng)磁盤(pán)420、以及可移動(dòng)光盤(pán)424,將要理解能夠存儲(chǔ)可由一臺(tái)計(jì)算機(jī)訪問(wèn)的數(shù)據(jù)的其它類型的計(jì)算機(jī)可讀介質(zhì),諸如磁帶或者其它磁存儲(chǔ)設(shè)備、快擦寫(xiě)存儲(chǔ)卡、CD-ROM、數(shù)字通用磁盤(pán)(DVD)或者其他的光存儲(chǔ)器、隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦可編程只讀存儲(chǔ)器(EEPROM)、等等,也能夠被用來(lái)實(shí)現(xiàn)該示范性的計(jì)算系統(tǒng)和環(huán)境。能夠把任意數(shù)目的程序模塊存儲(chǔ)在硬盤(pán)416、磁盤(pán)420、光盤(pán)424、ROM412、和/或RAM410上,該程序模塊包含例如操作系統(tǒng)426、一個(gè)或多個(gè)應(yīng)用程序428、其它程序機(jī)模塊430、和程序數(shù)據(jù)432。這種操作系統(tǒng)426、一個(gè)或多個(gè)應(yīng)用程序428、其它程序模塊430、和程序數(shù)據(jù)432中的每一個(gè)(或者它們的某些組合)可以實(shí)現(xiàn)支持分布式文件系統(tǒng)的所有或者部分的常駐組件。用戶能夠經(jīng)由輸入設(shè)備諸如鍵盤(pán)434和指示設(shè)備436(例如“鼠標(biāo)”)輸入命令和信息到計(jì)算機(jī)402中。其它輸入設(shè)備438(未具體顯示)可以包含麥克風(fēng)、操縱桿、游戲墊、衛(wèi)星反射器、串行端口、掃描儀、和/或類型設(shè)備。這些及其它輸入設(shè)備經(jīng)由與系統(tǒng)總線408相連的輸入/輸出接口440連接到處理單元404,但是也可以通過(guò)其它接口和總線結(jié)構(gòu)、諸如并行端口、游戲端口、或者通用串行總線(USB)連接。此外,一個(gè)監(jiān)視器442或其它類型的顯示設(shè)備能夠經(jīng)由一個(gè)接口、諸如視頻適配器444連接到系統(tǒng)總線408。除了監(jiān)控器442之外,其它輸出外圍設(shè)備能夠包含諸如揚(yáng)聲器(未顯示)和打印機(jī)446之類的、能夠經(jīng)由輸入/輸出接口440連接到計(jì)算機(jī)402的組件。計(jì)算機(jī)402能夠在使用到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)、諸如遠(yuǎn)程計(jì)算設(shè)備448的邏輯連接聯(lián)網(wǎng)的環(huán)境下操作。舉例來(lái)說(shuō),遠(yuǎn)程計(jì)算設(shè)備448能夠是個(gè)人計(jì)算機(jī)、便攜式計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)計(jì)算機(jī)、監(jiān)視設(shè)備或者其它公用網(wǎng)絡(luò)節(jié)點(diǎn)等。遠(yuǎn)程計(jì)算設(shè)備448被舉例說(shuō)明為一個(gè)便攜式計(jì)算機(jī),它能夠包含在此關(guān)于計(jì)算機(jī)402描述的許多或者所有元件和特征。在計(jì)算機(jī)402和遠(yuǎn)程計(jì)算機(jī)448之間的邏輯連接被描述為局域網(wǎng)(LAN)450和普通廣域網(wǎng)(WAN)452。這種聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍的計(jì)算機(jī)網(wǎng)絡(luò)、企業(yè)內(nèi)部局域網(wǎng)和Internet中是很平常的。當(dāng)在LAN聯(lián)網(wǎng)環(huán)境中實(shí)現(xiàn)時(shí),計(jì)算機(jī)402經(jīng)由網(wǎng)絡(luò)接口或者適配器454連接到局域網(wǎng)絡(luò)450。當(dāng)在WAN聯(lián)網(wǎng)環(huán)境中實(shí)現(xiàn)時(shí),計(jì)算機(jī)402通常包含調(diào)制解調(diào)器456或者其它用于在廣域網(wǎng)上建立通訊的裝置。調(diào)制解調(diào)器456能夠經(jīng)由輸入/輸出接口440或者其它適當(dāng)機(jī)構(gòu)連接到系統(tǒng)總線408,其中調(diào)制解調(diào)器456能夠在計(jì)算機(jī)402的內(nèi)部或外部。應(yīng)當(dāng)理解,舉例說(shuō)明的網(wǎng)絡(luò)連接是示范性的,而且能夠使用在計(jì)算機(jī)402和448之間建立通訊的其它裝置。在聯(lián)網(wǎng)環(huán)境、諸如用計(jì)算環(huán)境400舉例說(shuō)明的環(huán)境中,關(guān)于計(jì)算機(jī)402描述的程序模塊或者它的部分可以被保存在一個(gè)遠(yuǎn)程存儲(chǔ)設(shè)備中。舉例來(lái)說(shuō),遠(yuǎn)程應(yīng)用程序458駐留在遠(yuǎn)程計(jì)算機(jī)448的一個(gè)存儲(chǔ)設(shè)備上。為了舉例說(shuō)明起見(jiàn),盡管應(yīng)用程序及其它可執(zhí)行程序組件諸如操作系統(tǒng)在此被舉例說(shuō)明為離散程序塊,但是應(yīng)當(dāng)認(rèn)識(shí)到,這種程序和組件在不同時(shí)間駐留在計(jì)算設(shè)備402的不同存儲(chǔ)部件中,并且由計(jì)算機(jī)的數(shù)據(jù)處理器來(lái)執(zhí)行。在此在由一個(gè)或多個(gè)計(jì)算機(jī)或者其它設(shè)備執(zhí)行的計(jì)算機(jī)可執(zhí)行指令、諸如程序模塊的總體環(huán)境中描述了各種模塊和技術(shù)。通常,程序模塊包含執(zhí)行特定任務(wù)或者實(shí)現(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等。典型地,可以依照要求在各個(gè)實(shí)施例中組合或者分配程序模塊的功能。這些模塊和技術(shù)的實(shí)現(xiàn)可以被存儲(chǔ)在某種形式的計(jì)算機(jī)可讀介質(zhì)上或者在其上進(jìn)行傳輸。計(jì)算機(jī)可讀介質(zhì)能夠是任何可用的、能夠由計(jì)算機(jī)訪問(wèn)的介質(zhì)。例如,而不是限制,計(jì)算機(jī)可讀介質(zhì)可以包含“計(jì)算機(jī)存儲(chǔ)介質(zhì)”和“通信介質(zhì)”?!坝?jì)算機(jī)存儲(chǔ)介質(zhì)”包含以任何用于存儲(chǔ)信息、諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或者其它數(shù)據(jù)的方法或者技術(shù)實(shí)現(xiàn)的易失性和非易失生的、可移動(dòng)的和固定的介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包含但不局限于RAM、ROM、EEPROM、閃速存儲(chǔ)器或者其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字通用磁盤(pán)(DVD)或者其它光存儲(chǔ)器、磁帶盒、磁帶、磁盤(pán)存儲(chǔ)器或者其它磁存儲(chǔ)設(shè)備、或者任何其它能夠被用來(lái)存儲(chǔ)所希望的信息并且能夠由計(jì)算機(jī)訪問(wèn)的介質(zhì)。“通信介質(zhì)”通常體現(xiàn)為在已調(diào)制數(shù)據(jù)信號(hào)、諸如載波或者其它傳送機(jī)構(gòu)中的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、或者其它數(shù)據(jù)。通信介質(zhì)還包含任何言息傳送介質(zhì)。術(shù)語(yǔ)“已調(diào)制數(shù)據(jù)信號(hào)”是指使一個(gè)或多個(gè)它的特性以這樣一種方式設(shè)置或改變以編碼在信號(hào)中的信息的信號(hào)。例如,而不是限制,通信介質(zhì)包含諸如有線網(wǎng)或者直接有線連接的有線媒介、和諸如聲學(xué)、RF、紅外、及其它無(wú)線媒介的無(wú)線媒介。以上任何一個(gè)的組合也被包含在計(jì)算機(jī)可讀介質(zhì)的范圍之內(nèi)。盡管以上的描述使用了對(duì)結(jié)構(gòu)特征和/或方法作用來(lái)說(shuō)特定的語(yǔ)言,但是應(yīng)當(dāng)理解,在附加權(quán)利要求中定義的本發(fā)明不局限于描述的該特定特征或者作用相反地,該特定特征和作用被公開(kāi)作為實(shí)現(xiàn)本發(fā)明的示范性形式。權(quán)利要求1.一個(gè)系統(tǒng),包含多個(gè)分層,其包括保護(hù)根資源的一個(gè)最低層;其中多個(gè)分層進(jìn)一步包括一個(gè)或多個(gè)中間層,其起到從下一較低層請(qǐng)求訪問(wèn)根資源的委托人的作用,并且起到向在下一較高層中的委托人保護(hù)根資源的防護(hù)裝置的作用;以及僅僅允許被授權(quán)訪問(wèn)根資源的委托人訪問(wèn)根資源。2.如權(quán)利要求1所述的系統(tǒng),其特征在于多個(gè)分層包含四層,其中最低層包含一個(gè)安全內(nèi)核層,下一最低層包含一個(gè)基本輸入/輸出系統(tǒng)層,下一最低層包含一個(gè)操作系統(tǒng)層,并且最高層包含一個(gè)應(yīng)用層。3.如權(quán)利要求1所述的系統(tǒng),其特征在于允許包含使用Seal操作以安全地密封根資源,并且使用UnSeal操作以檢索根資源。4.如權(quán)利要求1所述的系統(tǒng),其特征在于根資源包含一個(gè)加密密鑰。5.一個(gè)系統(tǒng),包含多個(gè)分層,其包括保護(hù)根資源的一個(gè)最低層;包含在多個(gè)分層中每一層的多個(gè)防護(hù)裝置,其中每個(gè)防護(hù)裝置是一個(gè)服務(wù)防護(hù)裝置或者一個(gè)公開(kāi)防護(hù)裝置;其中每個(gè)服務(wù)防護(hù)裝置允許在下一較高層中的委托人請(qǐng)求用受保護(hù)的數(shù)據(jù)執(zhí)行操作,并且只有當(dāng)滿足一個(gè)條件時(shí)服務(wù)防護(hù)裝置才執(zhí)行該操作;以及其中每個(gè)公開(kāi)防護(hù)裝置允許在下另一個(gè)較高層中的委托人請(qǐng)求向委托人公開(kāi)受保護(hù)的數(shù)據(jù),并且只有當(dāng)滿足另一個(gè)條件時(shí)公開(kāi)防護(hù)裝置才公開(kāi)受保護(hù)的數(shù)據(jù)。6.如權(quán)利要求5所述的系統(tǒng),其特征在于在下一較高層中的每一委托人是一個(gè)服務(wù)防護(hù)裝置或者一個(gè)公開(kāi)防護(hù)裝置。7.如權(quán)利要求5所述的系統(tǒng),其特征在于一個(gè)或多個(gè)防護(hù)裝置是通過(guò)從在它以下的層中的一個(gè)防護(hù)裝置獲得受保護(hù)的數(shù)據(jù)而實(shí)現(xiàn)的。8.如權(quán)利要求5所述的系統(tǒng),其特征在于一個(gè)或多個(gè)防護(hù)裝置是通過(guò)從在它以下的層中的一個(gè)防護(hù)裝置請(qǐng)求服務(wù)而實(shí)現(xiàn)的。9.如權(quán)利要求5所述的系統(tǒng),其特征在于受保護(hù)的數(shù)據(jù)是加密密鑰。10.如權(quán)利要求5所述的系統(tǒng),其特征在于一個(gè)或多個(gè)服務(wù)防護(hù)裝置在受保護(hù)數(shù)據(jù)上公開(kāi)加密、解密、數(shù)字簽名、消息驗(yàn)證碼、以及組合的數(shù)字簽名和完整性驗(yàn)證中的一個(gè)或多個(gè)。11.一個(gè)系統(tǒng),包含多個(gè)分層,其包括保護(hù)根資源的一個(gè)最低層;其中多個(gè)分層進(jìn)一步包括一個(gè)或多個(gè)中間層,其起到從下一較低層請(qǐng)求使用根資源執(zhí)行操作的委托人的作用,并且起到向在下一較高層中的委托人保護(hù)根資源的防護(hù)裝置的作用;以及僅權(quán)允許被授權(quán)訪問(wèn)根資源的委托人使用根資源執(zhí)行操作。12.如權(quán)利要求11所述的系統(tǒng),其特征在于多個(gè)分層包含四層,其中最低層包含一個(gè)安全內(nèi)核層,下一最低層包含一個(gè)基本輸入/輸出系統(tǒng)層,下一最低層包含一個(gè)操作系統(tǒng)層,并且最高層包含一個(gè)應(yīng)用層。13.如權(quán)利要求11所述的系統(tǒng),其特征在于根資源包含一個(gè)加密密鑰。全文摘要依據(jù)某些方面,從一個(gè)調(diào)用程序中接收數(shù)據(jù)。使用一個(gè)對(duì)稱密碼,以僅僅允許一個(gè)或多個(gè)目標(biāo)程序能夠從密文中獲得數(shù)據(jù)的方式,生成包含該數(shù)據(jù)的密文。依據(jù)其它方面,從一個(gè)調(diào)用程序中接收一個(gè)位串。檢查調(diào)用程序的標(biāo)識(shí)符,以確定調(diào)用程序是否被允許訪問(wèn)在位串的密文中加密的數(shù)據(jù)。還驗(yàn)證教據(jù)的完整性,并且使用一個(gè)對(duì)稱密鑰解密數(shù)據(jù)。只有當(dāng)調(diào)用程序被允許訪問(wèn)數(shù)據(jù)以及數(shù)據(jù)的完整性被成功地驗(yàn)證時(shí),才向調(diào)用程序返回?cái)?shù)據(jù)。文檔編號(hào)G06F7/00GK1822016SQ200610059598公開(kāi)日2006年8月23日申請(qǐng)日期2003年4月17日優(yōu)先權(quán)日2002年4月17日發(fā)明者P·英格蘭,M·佩納達(dá)申請(qǐng)人:微軟公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
青田县| 文化| 北流市| 濉溪县| 淄博市| 明星| 新竹市| 施甸县| 洪洞县| 丹寨县| 慈溪市| 鞍山市| 杨浦区| 巴彦淖尔市| 健康| 甘孜县| 建阳市| 清原| 化德县| 油尖旺区| 洛川县| 东乡族自治县| 工布江达县| 临沧市| 鹤壁市| 宜兰市| 平定县| 登封市| 子洲县| 湘乡市| 鄄城县| 鹰潭市| 同江市| 佳木斯市| 庆阳市| 大丰市| 临西县| 昌都县| 沙田区| 荣昌县| 饶阳县|