當(dāng)用戶向遠(yuǎn)程服務(wù)(例如,基于云的服務(wù))提交個(gè)人數(shù)據(jù)時(shí),不能保證個(gè)人數(shù)據(jù)將保持安全,或者甚至不能保證該服務(wù)將產(chǎn)生正確的結(jié)果。最多,服務(wù)可以具有隱私策略并且在數(shù)據(jù)泄露的情況下限制服務(wù)的責(zé)任。然而,最近的標(biāo)題已經(jīng)提供了操作系統(tǒng)、庫(kù)或應(yīng)用(例如,軟件應(yīng)用)的脆弱性如何使得個(gè)人數(shù)據(jù)能夠被訪問(wèn)的示例。
技術(shù)實(shí)現(xiàn)要素:
提供本發(fā)明內(nèi)容以便以簡(jiǎn)化的形式介紹將在以下具體實(shí)施方式中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵或必要特征;也不用于確定或限制所要求保護(hù)的主題的范圍。
已驗(yàn)證軟件系統(tǒng)可以在安全硬件(例如,可信硬件)上執(zhí)行。在被執(zhí)行之前,軟件系統(tǒng)的屬性可以被驗(yàn)證為符合軟件規(guī)范。證明軟件系統(tǒng)的身份的第一憑證可以被發(fā)送給外部應(yīng)用。由安全硬件的提供方(例如,制造商)簽名的第二憑證可以被發(fā)送給外部應(yīng)用。第二憑證可以證明安全硬件的身份。以這種方式,可以在低級(jí)(例如,匯編語(yǔ)言級(jí))驗(yàn)證作為整體的系統(tǒng)(例如,完整軟件棧),并且然后將其引導(dǎo)到安全硬件并由安全硬件執(zhí)行以提供安全系統(tǒng)。第一憑證和第二憑證可以使得外部應(yīng)用能夠以如下方式與軟件系統(tǒng)的軟件應(yīng)用通信:發(fā)送給軟件應(yīng)用或從軟件應(yīng)用接收的消息被加密并且可以由外部應(yīng)用和軟件應(yīng)用解密,但是不能由其他實(shí)體解密或修改。
附圖說(shuō)明
參考附圖描述詳細(xì)描述。在附圖中,附圖標(biāo)記的一個(gè)或多個(gè)最左邊的數(shù)字標(biāo)識(shí)附圖標(biāo)記首次出現(xiàn)的附圖。不同附圖中的相同的附圖標(biāo)記指示相似或相同的項(xiàng)目。
圖1是根據(jù)一些實(shí)現(xiàn)的包括規(guī)范翻譯器的說(shuō)明性架構(gòu)。
圖2是根據(jù)一些實(shí)現(xiàn)的包括應(yīng)用的說(shuō)明性架構(gòu)。
圖3是根據(jù)一些實(shí)現(xiàn)的包括可信增量(TrInc)應(yīng)用的說(shuō)明性架構(gòu)。
圖4是根據(jù)一些實(shí)現(xiàn)的包括已驗(yàn)證軟件棧(例如,系統(tǒng))的說(shuō)明性架構(gòu)。
圖5是根據(jù)一些實(shí)現(xiàn)的在安全硬件上執(zhí)行的已驗(yàn)證軟件的說(shuō)明性架構(gòu)。
圖6是根據(jù)一些實(shí)現(xiàn)的包括離線和運(yùn)行時(shí)的說(shuō)明性架構(gòu)。
圖7是根據(jù)一些實(shí)現(xiàn)的包括從軟件應(yīng)用接收公鑰的示例過(guò)程的流程圖。
圖8是根據(jù)一些實(shí)現(xiàn)的包括執(zhí)行已經(jīng)被驗(yàn)證為符合軟件規(guī)范的軟件系統(tǒng)的示例過(guò)程的流程圖。
圖9是根據(jù)一些實(shí)現(xiàn)的包括執(zhí)行軟件系統(tǒng)的已驗(yàn)證引導(dǎo)的示例過(guò)程的流程圖。
圖10是包括已驗(yàn)證軟件系統(tǒng)的說(shuō)明性架構(gòu)。
具體實(shí)施方式
服務(wù)的軟件代碼的正式驗(yàn)證可以提供服務(wù)與正式規(guī)定的安全標(biāo)準(zhǔn)精確匹配的數(shù)學(xué)保證。遺憾的是,盡管軟件驗(yàn)證可以提供關(guān)于軟件代碼的可信賴性的有力保證,但是計(jì)算成本可能如此高,以至于服務(wù)提供方可能無(wú)法執(zhí)行其整個(gè)系統(tǒng)的軟件驗(yàn)證。因此,服務(wù)提供方最多可以提供關(guān)于被大量未驗(yàn)證軟件代碼包圍的、用高級(jí)語(yǔ)言編寫(xiě)的小程序的有力保證。例如,已驗(yàn)證傳輸層安全協(xié)議實(shí)現(xiàn)可以依賴于未驗(yàn)證操作系統(tǒng)和未驗(yàn)證軟件庫(kù)。作為另一示例,針對(duì)公鑰加密系統(tǒng)(例如,RSA或類似系統(tǒng))的機(jī)器檢查的正確性證明可以假定實(shí)現(xiàn)公鑰加密系統(tǒng)、對(duì)應(yīng)運(yùn)行時(shí)庫(kù)和操作系統(tǒng)的加密庫(kù)的正確性。作為另一示例,依賴于可信匯編代碼的微內(nèi)核可以不對(duì)應(yīng)用級(jí)語(yǔ)義的正確性進(jìn)行聲明。因此,服務(wù)可能不能執(zhí)行服務(wù)的軟件代碼的完整形式驗(yàn)證,并且因此可能不能提供服務(wù)與正式規(guī)定的安全標(biāo)準(zhǔn)精確匹配的數(shù)學(xué)保證。
本文中所描述的系統(tǒng)和技術(shù)可以用于執(zhí)行已經(jīng)被驗(yàn)證為端到端安全的應(yīng)用,使得驗(yàn)證能夠覆蓋可以被執(zhí)行的所有軟件代碼(“代碼”),例如,已驗(yàn)證代碼不僅包括應(yīng)用,還包括操作系統(tǒng)、庫(kù)(運(yùn)行時(shí)庫(kù)、程序庫(kù)、動(dòng)態(tài)庫(kù))和可以執(zhí)行的驅(qū)動(dòng)器。因此,在一些情況下,不需要假定在一個(gè)或多個(gè)服務(wù)器上執(zhí)行的軟件的任何部分是正確的。經(jīng)歷驗(yàn)證的代碼是被執(zhí)行的匯編代碼,而不是可以編寫(xiě)代碼的一個(gè)或多個(gè)任何高級(jí)語(yǔ)言。驗(yàn)證過(guò)程可以假定硬件是正確的,但不對(duì)編譯器的正確性或代碼的運(yùn)行時(shí)執(zhí)行進(jìn)行假定。驗(yàn)證過(guò)程因此可以證明(demonstrate)整個(gè)系統(tǒng)實(shí)現(xiàn)代碼的高級(jí)抽象狀態(tài)機(jī)的功能正確版本。驗(yàn)證過(guò)程可以證明安全遠(yuǎn)程等效性,例如,遠(yuǎn)程用戶可以建立到其輸出不能與高級(jí)抽象狀態(tài)機(jī)的輸出區(qū)分開(kāi)的代碼的安全通道。
驗(yàn)證在一個(gè)或多個(gè)服務(wù)器上執(zhí)行的代碼在功能上正確并且證明遠(yuǎn)程等效性可以使得驗(yàn)證過(guò)程能夠?yàn)檎麄€(gè)系統(tǒng)的行為提供完全的規(guī)范和證明,詳細(xì)描述系統(tǒng)(例如,軟件代碼和硬件)將在每種可能的情況下如何表現(xiàn)。證明遠(yuǎn)程等效性可以包括(i)證明屬性的功能正確性和(ii)非干擾的證明,其涉及證明代碼的關(guān)系屬性(例如,關(guān)于具有不同輸入的相同代碼的兩個(gè)運(yùn)行如何彼此相關(guān)的屬性)。此外,可以加強(qiáng)遠(yuǎn)程等效性以經(jīng)由可信計(jì)算來(lái)提供安全遠(yuǎn)程等效性(例如,如由可信計(jì)算組規(guī)定的,可信計(jì)算組是開(kāi)發(fā)和發(fā)布用于由行業(yè)實(shí)現(xiàn)的規(guī)范的國(guó)際行業(yè)標(biāo)準(zhǔn)組)。例如,可以使用諸如可信平臺(tái)模塊(TPM)的安全硬件來(lái)證實(shí)(例如,經(jīng)由證明)公鑰對(duì)應(yīng)于私鑰,私鑰僅對(duì)在一個(gè)或多個(gè)服務(wù)器上執(zhí)行的代碼已知。遠(yuǎn)程用戶可以使用公鑰來(lái)創(chuàng)建到代碼的安全信道,從而實(shí)現(xiàn)和與代碼的抽象狀態(tài)機(jī)的直接通信相稱的安全性。將證明與完全驗(yàn)證的代碼組合因此可以提供端到端安全性的極高保證。
與使用傳統(tǒng)技術(shù)相比,本文中所描述的技術(shù)和系統(tǒng)可以使得軟件開(kāi)發(fā)者能夠以適度的開(kāi)發(fā)人員努力來(lái)開(kāi)發(fā)可驗(yàn)證安全應(yīng)用。例如,傳統(tǒng)技術(shù)通??赡苄枰獛资畟€(gè)人花幾年來(lái)驗(yàn)證單個(gè)軟件層,因此使用傳統(tǒng)技術(shù)來(lái)驗(yàn)證完整軟件棧(例如,應(yīng)用、操作系統(tǒng)、驅(qū)動(dòng)器等)可能在計(jì)算上是禁止的。為了減少開(kāi)發(fā)者努力,本文中所描述的技術(shù)和系統(tǒng)可以用于執(zhí)行系統(tǒng)軟件的快速、自動(dòng)化、端到端軟件驗(yàn)證。術(shù)語(yǔ)“軟件?!笔侵刚麄€(gè)軟件系統(tǒng),例如,諸如操作系統(tǒng)、設(shè)備驅(qū)動(dòng)器、軟件庫(kù)、應(yīng)用以及其間的任何層。
為了在匯編級(jí)正確地驗(yàn)證代碼(例如,通過(guò)適度的開(kāi)發(fā)者努力),軟件開(kāi)發(fā)者可以使用本文中所描述的兩個(gè)新工具。首先,規(guī)范翻譯器可以使得軟件開(kāi)發(fā)者能夠用高級(jí)語(yǔ)言有效地編寫(xiě)規(guī)范,并且然后驗(yàn)證對(duì)應(yīng)匯編代碼滿足規(guī)范,因?yàn)橐?guī)范翻譯器可以將高級(jí)規(guī)范(例如,被表達(dá)為狀態(tài)機(jī))翻譯成低級(jí)規(guī)范。第二,將以高級(jí)語(yǔ)言的可驗(yàn)證代碼編譯為可驗(yàn)證匯編語(yǔ)言的編譯器可以用于將代碼和對(duì)應(yīng)證明從高級(jí)語(yǔ)言翻譯為低級(jí)匯編代碼(或機(jī)器代碼)。這樣的編譯器可以使得軟件開(kāi)發(fā)者能夠快速地編寫(xiě)和檢查高級(jí)代碼并且證明與可執(zhí)行匯編代碼相關(guān)聯(lián)的屬性。例如,針對(duì)整個(gè)系統(tǒng)(包括應(yīng)用、庫(kù)、驅(qū)動(dòng)器和操作系統(tǒng))(或其任何子集)的軟件可以被編譯成由可驗(yàn)證匯編代碼組成的單個(gè)程序。驗(yàn)證整個(gè)系統(tǒng)代碼(例如,作為整體)的正確性,使得在整個(gè)系統(tǒng)代碼中沒(méi)有未驗(yàn)證的代碼,并且在系統(tǒng)的不同部件之間沒(méi)有未驗(yàn)證的間隙。作為間隙的示例,假定第一部件X被描述為執(zhí)行Q,并且第二部件Y被描述為使用進(jìn)行Q的另一部件(X)來(lái)執(zhí)行R。如果X表示的Q與Y表示的Q是不同的東西,則Y執(zhí)行R的Y的保證不能成立,從而產(chǎn)生間隙。驗(yàn)證過(guò)程驗(yàn)證在系統(tǒng)的兩個(gè)(或更多)部件之間沒(méi)有未驗(yàn)證的間隙。
此外,驗(yàn)證過(guò)程驗(yàn)證系統(tǒng)的每個(gè)部件不能破壞系統(tǒng)的另一部件的規(guī)范。例如,應(yīng)用可以被驗(yàn)證為不破壞操作系統(tǒng)的存儲(chǔ)器管理子系統(tǒng),并且操作系統(tǒng)的存儲(chǔ)器管理子系統(tǒng)可以被驗(yàn)證為不破壞應(yīng)用。
每個(gè)可用作獨(dú)立服務(wù)的若干軟件應(yīng)用被提供作為可驗(yàn)證軟件代碼的示例。例如,描述了一種公證(notary)應(yīng)用,其用于向?qū)ο?例如,文件、文檔等)安全地分配邏輯時(shí)間戳以使得它們可以最終被排序。公證應(yīng)用包括如下?tīng)顟B(tài):狀態(tài)包括單調(diào)遞增計(jì)數(shù)器并且通過(guò)遞增計(jì)數(shù)器、簽名(例如使用簽名)將計(jì)數(shù)器值與請(qǐng)求鏈接的語(yǔ)句以及用語(yǔ)句和簽名進(jìn)行回復(fù)來(lái)對(duì)公證請(qǐng)求進(jìn)行響應(yīng)。其他三個(gè)應(yīng)用包括密碼散列器、用于由多個(gè)用戶使用的可信計(jì)數(shù)器、以及差異隱私數(shù)據(jù)庫(kù),差異隱私數(shù)據(jù)庫(kù)最大化對(duì)數(shù)據(jù)庫(kù)的查詢的準(zhǔn)確性,同時(shí)最小化標(biāo)識(shí)數(shù)據(jù)庫(kù)的記錄的機(jī)會(huì)。
因此,下面參考附圖描述技術(shù)和系統(tǒng),技術(shù)和系統(tǒng)經(jīng)由自動(dòng)化完全系統(tǒng)驗(yàn)證在匯編級(jí)提供外部可檢查的完全驗(yàn)證軟件。還描述了用于構(gòu)建相對(duì)大規(guī)模的端到端已驗(yàn)證系統(tǒng)的示例工具、技術(shù)和軟件工程原則的集合。此外,提供了用于經(jīng)由關(guān)系屬性的驗(yàn)證來(lái)證明匯編級(jí)代碼的基于信息流的安全屬性的示例方法和用于系統(tǒng)開(kāi)發(fā)人員用于形式驗(yàn)證的示例技術(shù)。軟件和硬件各自可以提供證明其相應(yīng)的身份的憑證,以驗(yàn)證與軟件的通信是安全的。
說(shuō)明性架構(gòu)
圖1是根據(jù)一些實(shí)現(xiàn)的包括規(guī)范翻譯器的說(shuō)明性架構(gòu)100。在一些實(shí)現(xiàn)中,架構(gòu)100可以用于提供遠(yuǎn)程等效性和端到端驗(yàn)證。
遠(yuǎn)程等效性提供關(guān)于每個(gè)應(yīng)用及其對(duì)應(yīng)狀態(tài)機(jī)之間的等效性的保證。例如,可以保證通過(guò)不可信網(wǎng)絡(luò)與應(yīng)用通信的遠(yuǎn)程設(shè)備接收與通過(guò)不可信網(wǎng)絡(luò)與對(duì)應(yīng)(例如,對(duì)應(yīng)于應(yīng)用)狀態(tài)機(jī)通信的遠(yuǎn)程設(shè)備所接收的相同的消息序列。例如,公證應(yīng)用的規(guī)范可以指示公證應(yīng)用對(duì)單調(diào)增加的計(jì)數(shù)器簽名。已知系統(tǒng)匹配該規(guī)范,則可以向遠(yuǎn)程設(shè)備提供如下保證:例如運(yùn)行系統(tǒng)(i)不允許計(jì)數(shù)器回滾,(ii)不共享私鑰,(iii)不提供針對(duì)除公證外的任何事物的簽名的語(yǔ)句,(iv)正確地計(jì)算簽名,(v)不易受緩沖器溢出、整數(shù)溢出或其他實(shí)現(xiàn)級(jí)漏洞的影響。
架構(gòu)100可以使得遠(yuǎn)程設(shè)備能夠建立到應(yīng)用的安全信道。建立到應(yīng)用的安全信道可以消除不可信網(wǎng)絡(luò)干擾遠(yuǎn)程設(shè)備和應(yīng)用之間的通信的能力。例如,公證應(yīng)用的規(guī)范可以聲明公證應(yīng)用使用來(lái)自可信平臺(tái)的隨機(jī)性來(lái)計(jì)算密鑰對(duì),然后從可信平臺(tái)獲得公鑰和應(yīng)用的代碼的證明。因此,接收證明的遠(yuǎn)程設(shè)備可以確定用對(duì)應(yīng)私鑰簽名的公證由公證應(yīng)用的代碼在可信平臺(tái)上生成,并且因此可以被認(rèn)為好像用對(duì)應(yīng)私鑰簽名的公證由與公證應(yīng)用對(duì)應(yīng)的狀態(tài)機(jī)生成。
除了安全保證之外,在系統(tǒng)上運(yùn)行的任何軟件應(yīng)用中不放置隱式信任。因此,每個(gè)軟件部件(i)被驗(yàn)證為是安全的或(ii)在已驗(yàn)證沙箱環(huán)境中執(zhí)行,已驗(yàn)證沙箱環(huán)境防止軟件部件影響系統(tǒng)的其他部件的安全性。
另外,不是僅獨(dú)立地驗(yàn)證系統(tǒng)中的每個(gè)部件,而是可以作為整體驗(yàn)證整個(gè)系統(tǒng)。通過(guò)這樣做,系統(tǒng)的安全性可以避免關(guān)于系統(tǒng)的軟件部件如何交互的不正確的假定。在用于生成要執(zhí)行的軟件的編譯器中不放置隱式信任。因此,驗(yàn)證要執(zhí)行的指令(例如,匯編代碼),而不僅是驗(yàn)證將被編譯以創(chuàng)建指令的高級(jí)源代碼。
針對(duì)系統(tǒng)的代碼可以用被設(shè)計(jì)為支持驗(yàn)證(例如,而不是以傳統(tǒng)計(jì)算機(jī)語(yǔ)言)的語(yǔ)言來(lái)編寫(xiě)。當(dāng)設(shè)計(jì)代碼時(shí),可以選擇支持正確性(例如,而不是性能)的證明的算法和代碼模式,以提供容易可驗(yàn)證系統(tǒng)??梢詢?yōu)化代碼而不用擔(dān)心優(yōu)化可能引入錯(cuò)誤,因?yàn)轵?yàn)證工具被設(shè)計(jì)為捕獲可能由優(yōu)化技術(shù)引入的任何錯(cuò)誤。
已驗(yàn)證系統(tǒng)可以提供針對(duì)基于軟件的攻擊的安全性。例如,對(duì)手可以在已驗(yàn)證應(yīng)用執(zhí)行之前和/或在已驗(yàn)證應(yīng)用終止之后在服務(wù)器上執(zhí)行軟件。對(duì)手可能損害服務(wù)器的固件、基本的輸入/輸出系統(tǒng)(BIOS)或外圍設(shè)備(例如,網(wǎng)卡)。在一些情況下,系統(tǒng)可以假定中央處理單元(CPU)、存儲(chǔ)器、芯片組和可信平臺(tái)模塊正確地表現(xiàn),并且假定對(duì)手不發(fā)動(dòng)物理攻擊(例如,電探測(cè)存儲(chǔ)器總線等)。
架構(gòu)100可以包括高級(jí)規(guī)范102、規(guī)范翻譯器104、低級(jí)規(guī)范106、驗(yàn)證器108、驗(yàn)證結(jié)果110、高級(jí)語(yǔ)言實(shí)現(xiàn)112、編譯器114、匯編件語(yǔ)言實(shí)現(xiàn)116、匯編器118和機(jī)器代碼實(shí)現(xiàn)120。例如,用戶可以創(chuàng)建高級(jí)規(guī)范102和高級(jí)語(yǔ)言實(shí)現(xiàn)112。規(guī)范翻譯器104可以將高級(jí)規(guī)范102(例如,有限狀態(tài)機(jī))翻譯為低級(jí)規(guī)范106。
編譯器112可以將高級(jí)語(yǔ)言實(shí)現(xiàn)112編譯成匯編語(yǔ)言實(shí)現(xiàn)114。驗(yàn)證器108可以自動(dòng)(例如,在沒(méi)有人類交互的情況下)執(zhí)行各種功能,諸如驗(yàn)證匯編語(yǔ)言實(shí)現(xiàn)116對(duì)應(yīng)于低級(jí)規(guī)范106。在匯編語(yǔ)言實(shí)現(xiàn)114已經(jīng)被驗(yàn)證器108驗(yàn)證為對(duì)應(yīng)于低級(jí)規(guī)范106之后,匯編語(yǔ)言實(shí)現(xiàn)116可以由匯編器118轉(zhuǎn)換為機(jī)器代碼實(shí)現(xiàn)116形式的可執(zhí)行代碼。匯編語(yǔ)言是針對(duì)計(jì)算機(jī)或其他可編程設(shè)備的低級(jí)語(yǔ)言的示例,其中在匯編語(yǔ)言和由硬件處理器執(zhí)行的機(jī)器代碼指令之間通常存在一一對(duì)應(yīng)的關(guān)系。
驗(yàn)證棧(例如,基于Floyd-Hoare或類似推理)可以用于證明代碼的功能正確性。高級(jí)規(guī)范102和高級(jí)語(yǔ)言實(shí)現(xiàn)112可以使用被設(shè)計(jì)為可驗(yàn)證的高級(jí)語(yǔ)言來(lái)實(shí)現(xiàn)。高級(jí)語(yǔ)言可以具有內(nèi)置的規(guī)范構(gòu)造。驗(yàn)證器108可以是靜態(tài)程序驗(yàn)證器,其可以用于驗(yàn)證用高級(jí)語(yǔ)言編寫(xiě)的軟件程序的功能正確性。高級(jí)語(yǔ)言可以被設(shè)計(jì)為支持程序的靜態(tài)驗(yàn)證。高級(jí)語(yǔ)言可以包括各種特征,諸如是命令式的(imperative)、順序的、支持通用類、提供動(dòng)態(tài)分配和歸納數(shù)據(jù)類型、并且具有內(nèi)置的規(guī)范構(gòu)造。高級(jí)語(yǔ)言規(guī)范可以使得用戶能夠規(guī)定前置條件、后置條件、框架規(guī)范(讀和寫(xiě)集合)和終止度量。高級(jí)語(yǔ)言可以提供可更新的虛擬(ghost)變量、遞歸函數(shù)和類型,例如集合和序列。規(guī)范和虛擬構(gòu)造可以由驗(yàn)證器108在驗(yàn)證期間使用,并且當(dāng)編譯器114正在創(chuàng)建匯編語(yǔ)言實(shí)現(xiàn)116時(shí)可以被編譯器114省略。
在一些實(shí)現(xiàn)中,驗(yàn)證器108可以作為編譯器114的一部分運(yùn)行。編程器可以以類似于靜態(tài)類型檢查器的方式與驗(yàn)證器108交互,例如,當(dāng)驗(yàn)證器108產(chǎn)生錯(cuò)誤時(shí),編程器可以通過(guò)改變高級(jí)實(shí)現(xiàn)112中的類型聲明、規(guī)范或語(yǔ)句中的一個(gè)或多個(gè)來(lái)進(jìn)行響應(yīng)。驗(yàn)證器108可以自動(dòng)填充低級(jí)證明細(xì)節(jié)。
編譯器114可以采用與高級(jí)規(guī)范102對(duì)應(yīng)的高級(jí)語(yǔ)言實(shí)現(xiàn)112并且自動(dòng)(例如,在沒(méi)有人類交互的情況下)將高級(jí)語(yǔ)言實(shí)現(xiàn)112翻譯成可驗(yàn)證匯編語(yǔ)言實(shí)現(xiàn)116。匯編語(yǔ)言實(shí)現(xiàn)116可以使用中間驗(yàn)證語(yǔ)言(IVL)以用于描述要由推理引擎(諸如可滿足性模理論(SMT)求解器)免除的證明義務(wù)。IVL可以包括如下驗(yàn)證引擎(例如,驗(yàn)證器108):其以匯編語(yǔ)言實(shí)現(xiàn)116作為輸入,為證明義務(wù)生成驗(yàn)證條件(VC),并且將VC傳遞到推理引擎。可以使用驗(yàn)證器108在匯編級(jí)(例如,匯編語(yǔ)言實(shí)現(xiàn)116)驗(yàn)證針對(duì)整個(gè)系統(tǒng)的代碼。高級(jí)語(yǔ)言實(shí)現(xiàn)112或編譯器114中的任何錯(cuò)誤可以由驗(yàn)證器108來(lái)標(biāo)識(shí)。因?yàn)橐恍┌踩珜傩圆荒芙?jīng)由功能正確性來(lái)表達(dá),所以描述用于驗(yàn)證代碼的關(guān)系屬性的技術(shù)(例如,高級(jí)語(yǔ)言實(shí)現(xiàn)112)。當(dāng)驗(yàn)證結(jié)果110指示匯編語(yǔ)言實(shí)現(xiàn)116已經(jīng)被驗(yàn)證為正確時(shí),可信匯編器118可以用于將匯編語(yǔ)言實(shí)現(xiàn)116轉(zhuǎn)換為機(jī)器代碼實(shí)現(xiàn)120(例如,可執(zhí)行代碼)。
使用推理驗(yàn)證代碼
驗(yàn)證器108可以使用某種類型的推理(例如,F(xiàn)loyd-Hoare推理或其他類似推理)來(lái)執(zhí)行匯編語(yǔ)言實(shí)現(xiàn)116的驗(yàn)證。高級(jí)語(yǔ)言實(shí)現(xiàn)112可以用關(guān)于程序可以進(jìn)入的狀態(tài)的斷言來(lái)注釋,并且驗(yàn)證過(guò)程可以證明當(dāng)程序正在運(yùn)行時(shí)斷言對(duì)于到程序的所有可能輸入都是有效的。對(duì)于生成多個(gè)輸出的程序,可以使用多個(gè)輸出通過(guò)用前置條件注釋輸出方法來(lái)驗(yàn)證程序的規(guī)范,其在程序代碼被執(zhí)行的任何時(shí)候必須為真。
因此,為了使得驗(yàn)證器108能夠驗(yàn)證匯編語(yǔ)言實(shí)現(xiàn)116,高級(jí)語(yǔ)言實(shí)現(xiàn)112可以規(guī)定一個(gè)或多個(gè)前置條件、后置條件、循環(huán)不變量或其任何組合。除了被包括在高級(jí)規(guī)范102中的前置條件和后置條件之外,還有高級(jí)語(yǔ)言實(shí)現(xiàn)中的前置條件、后置條件、循環(huán)不變性之外。
編寫(xiě)可信賴規(guī)范
為了使能系統(tǒng)的端到端驗(yàn)證,可以使用兩種類型的規(guī)范,例如硬件規(guī)范和軟件規(guī)范。對(duì)于硬件規(guī)范,規(guī)定可以執(zhí)行的每個(gè)匯編指令,以使能低級(jí)驗(yàn)證。硬件規(guī)范描述了指令的期望(例如,對(duì)多個(gè)寄存器求和的ADD可以期望多個(gè)寄存器的求和不引起溢出)、以及指令對(duì)系統(tǒng)的一個(gè)或多個(gè)影響(例如,ADD將多個(gè)寄存器的和寫(xiě)回到目的地寄存器)。
軟件規(guī)范可以包括對(duì)應(yīng)軟件應(yīng)用的期望行為的抽象描述。抽象描述可以按照較低級(jí)庫(kù)規(guī)范來(lái)模塊化地編寫(xiě)。例如,針對(duì)公證應(yīng)用的軟件規(guī)范可以描述(i)公證應(yīng)用的狀態(tài)機(jī)如何進(jìn)行以及(ii)在每種狀態(tài)下允許的輸出。為了說(shuō)明,規(guī)范可以指示特定狀態(tài)中的一個(gè)輸出是被定義用于在公鑰加密系統(tǒng)(例如,RSA)簽名中使用的簽名消息。
高級(jí)規(guī)范102可以使用規(guī)定由系統(tǒng)使用的那些特征子集的慣用類型的規(guī)范,例如,而不規(guī)定未使用的特征。例如,安全硬件(例如,可信硬件,諸如可信平臺(tái)模塊(TPM))可以具有數(shù)百頁(yè)的相關(guān)聯(lián)的文檔。然而,使用可信硬件的功能的子集的特定系統(tǒng)可以規(guī)定可信硬件的功能的子集,而不規(guī)定在特定系統(tǒng)中未使用的可信硬件的功能。編寫(xiě)高級(jí)規(guī)范102以包括由系統(tǒng)使用的功能同時(shí)排除未使用的功能可以導(dǎo)致針對(duì)高級(jí)規(guī)范102的更小的大小(例如,與在包括未使用的功能的情況下相比),從而使能更容易和更準(zhǔn)確的規(guī)范的人工審查。
可以使用各種附加技術(shù)來(lái)減少規(guī)范(例如,高級(jí)規(guī)范102)中的故障/錯(cuò)誤。例如,可以更容易和更快地驗(yàn)證包括由系統(tǒng)使用的功能的更小規(guī)范。作為另一示例,以比實(shí)現(xiàn)代碼更抽象的、聲明性的方式編寫(xiě)的規(guī)范可以使規(guī)范錯(cuò)誤不太可能發(fā)生并且當(dāng)規(guī)范錯(cuò)誤確實(shí)發(fā)生時(shí)更容易找到。
產(chǎn)生可驗(yàn)證匯編語(yǔ)言
為了在低級(jí)驗(yàn)證軟件代碼的同時(shí)使能快速、大規(guī)模軟件開(kāi)發(fā),可以彼此驗(yàn)證規(guī)范和對(duì)應(yīng)匯編語(yǔ)言。例如,高級(jí)規(guī)范102可以被翻譯為低級(jí)規(guī)范106,高級(jí)語(yǔ)言實(shí)現(xiàn)112可以被編譯成匯編語(yǔ)言實(shí)現(xiàn)116,并且驗(yàn)證器108可以驗(yàn)證匯編語(yǔ)言實(shí)現(xiàn)116如低級(jí)規(guī)范106規(guī)定地表現(xiàn)。這使得高級(jí)語(yǔ)言能夠用于高級(jí)實(shí)現(xiàn)112而不信任編譯器114并且不信任運(yùn)行時(shí)環(huán)境(例如,其可以使用各種庫(kù)、運(yùn)行時(shí)部件、操作系統(tǒng)實(shí)用程序等)。
驗(yàn)證關(guān)系屬性
除了功能正確性之外,驗(yàn)證器108可以驗(yàn)證應(yīng)用不提供(“泄漏”)關(guān)于秘密數(shù)據(jù)(例如,要被保持隱私或被限制訪問(wèn)的數(shù)據(jù))的信息,諸如私鑰。不泄露關(guān)于秘密數(shù)據(jù)的信息的屬性被稱為非干擾。假定變量S表示應(yīng)用內(nèi)部的秘密數(shù)據(jù),I表示到應(yīng)用的公共輸入。如前所述,語(yǔ)句O:=(S+S)+(I+I)滿足功能正確性規(guī)范,例如even(O)。然而,輸出O可以使得外部方(例如,未授權(quán)的程序)能夠例如通過(guò)計(jì)算O/2-I來(lái)確定秘密S。在該示例中,秘密S被泄漏到外部。相反,語(yǔ)句O:=(S-S)+(I+I)滿足even(O),但不提供關(guān)于輸出O中的S的信息,因?yàn)榇鎯?chǔ)在O中的值取決于I中的值,但是獨(dú)立于S。為了驗(yàn)證程序不提供關(guān)于秘密數(shù)據(jù)的信息,驗(yàn)證器108可以分析程序的多個(gè)執(zhí)行并且比較程序的執(zhí)行的輸出以確定輸出取決于哪些值。假定公共輸入I被傳遞給程序的所有執(zhí)行,但是秘密S在程序的執(zhí)行中是不同的。如果程序的所有執(zhí)行產(chǎn)生相同的輸出O而與S無(wú)關(guān),則O獨(dú)立于S并且程序不提供關(guān)于S的信息。如果程序的至少一個(gè)執(zhí)行產(chǎn)生與程序的其余執(zhí)行不同的輸出,則程序可以提供關(guān)于S的信息。因此,可以通過(guò)證明當(dāng)給定相同的I但不同的S時(shí),程序的兩個(gè)執(zhí)行不產(chǎn)生不同的O,來(lái)證明O與S無(wú)關(guān)。在數(shù)學(xué)上,想法是,證明對(duì)于所有可能的執(zhí)行對(duì)(稱為每對(duì)L和R(用于左和右)中的兩個(gè)執(zhí)行),如果公共輸入I相等但秘密S可以不同,則輸出O可以相等,例如,當(dāng)語(yǔ)句O:=(S-S)+(I+I)滿足條件時(shí),O:-(S+S)+(I+I)不滿足條件(例如,反例,IL=IR=1且SL=2且SR=3)。
為了確定應(yīng)用不暴露秘密數(shù)據(jù),開(kāi)發(fā)者可以用顯式關(guān)系注釋來(lái)注釋代碼。例如,xL可以寫(xiě)為left(x),并且xR可以寫(xiě)為right(x):
在該示例中,關(guān)系前置條件left(I)==right(I)指令驗(yàn)證器108確定在調(diào)用Test的任何地方是否IL=IR,并且關(guān)系后置條件left(O)==right(O)指令驗(yàn)證器108確定是否IL=IR=>OL=OR。對(duì)于大多數(shù)代碼,驗(yàn)證器108可以利用現(xiàn)有的功能正確性注釋,并且因此開(kāi)發(fā)者可以不提供關(guān)系注釋。例如,驗(yàn)證器108可以使用代碼中的功能后置條件:
program ComputeIpChecksum(I)returns(O)ensures O==IpChecksum(I);
以確定如果IL=IR,則IpChecksum(IL)=IpChecksum(IR),因此OL=OR。
證明安全屬性
要求(和驗(yàn)證)程序的輸出獨(dú)立于程序中的秘密數(shù)據(jù)可能對(duì)于大多數(shù)真實(shí)世界系統(tǒng)來(lái)說(shuō)是太嚴(yán)格的(例如,不切實(shí)際和不必要的)條件。通常,程序可以允許秘密數(shù)據(jù)對(duì)輸出的有限影響,諸如使用秘密密鑰來(lái)對(duì)輸出進(jìn)行簽名。針對(duì)這樣的程序的安全策略可以明確地解密某些值,例如簽名,使得簽名可以被包括在輸出中。
圖2是根據(jù)一些實(shí)現(xiàn)的包括客戶端、網(wǎng)絡(luò)、應(yīng)用和解密器的說(shuō)明性架構(gòu)200。架構(gòu)200示出了已驗(yàn)證系統(tǒng)的結(jié)構(gòu),包括客戶端202、網(wǎng)絡(luò)204、應(yīng)用206和解密器208。解密器208可以授權(quán)從秘密數(shù)據(jù)導(dǎo)出的所選擇的輸出的釋放。應(yīng)用的解密策略可以被表示為與由應(yīng)用的規(guī)范規(guī)定的高級(jí)行為對(duì)應(yīng)的狀態(tài)機(jī)。客戶端202可以跨網(wǎng)絡(luò)204與(已驗(yàn)證)應(yīng)用206通信。例如,客戶端202可以通過(guò)網(wǎng)絡(luò)204發(fā)送輸入數(shù)據(jù)I。網(wǎng)絡(luò)204可以丟棄、延遲、復(fù)制或者損壞輸入數(shù)據(jù)I。網(wǎng)絡(luò)204可以不訪問(wèn)應(yīng)用206的秘密數(shù)據(jù)。應(yīng)用206可以接收輸入數(shù)據(jù)I的被損壞的版本I*,并且通過(guò)跨網(wǎng)絡(luò)204發(fā)送輸出O來(lái)進(jìn)行響應(yīng)。網(wǎng)絡(luò)204可以損壞輸出O并且向客戶端提供被損壞的版本O*。
當(dāng)計(jì)算輸出O時(shí),應(yīng)用206可以調(diào)用解密器208策略一次或多次。每次調(diào)用解密器208時(shí),應(yīng)用206可以將秘密數(shù)據(jù)S、輸入i和期望的解密輸出d傳遞給解密器208。為了成功驗(yàn)證,根據(jù)規(guī)定d=StateMachineOutput(S;i)的狀態(tài)機(jī)的解密策略,期望的解密輸出d將等于輸出。當(dāng)驗(yàn)證器108執(zhí)行靜態(tài)驗(yàn)證并且確定滿足狀態(tài)機(jī)的解密策略時(shí),解密器208產(chǎn)生應(yīng)用206可以用作輸出O的一部分的解密輸出o。
在一些實(shí)現(xiàn)中,o可以等于d,使得解密器208在運(yùn)行時(shí)期間無(wú)操作(no-op)(沒(méi)有操作)。然而,解密器208無(wú)操作的信息可以不被公開(kāi)給驗(yàn)證器108,使得可以公開(kāi)oL=oR而不公開(kāi)dL=dR。在一些情況下,例如,如果秘密數(shù)據(jù)S可以使用對(duì)d的暴力搜索(例如通過(guò)對(duì)公鑰進(jìn)行分解)來(lái)確定,則dL=dR可能表示SL=SR,這是不期望的。
安全應(yīng)用示例
討論了已驗(yàn)證安全應(yīng)用(例如,被稱為堅(jiān)固(Ironclad)應(yīng)用)的四個(gè)示例。針對(duì)每個(gè)應(yīng)用的證明基于先前證明的低級(jí)庫(kù)、驅(qū)動(dòng)器和操作系統(tǒng)的證明。每個(gè)應(yīng)用可以編譯為經(jīng)由諸如例如用戶數(shù)據(jù)報(bào)協(xié)議(UDP)的協(xié)議與其他機(jī)器通信的獨(dú)立系統(tǒng)圖像。每個(gè)示例應(yīng)用是有用的和完整的應(yīng)用,其可能值得數(shù)據(jù)中心中的至少一個(gè)專用機(jī)器。對(duì)細(xì)粒度安全執(zhí)行環(huán)境的硬件支持可以使能復(fù)用多個(gè)堅(jiān)固應(yīng)用。
公證應(yīng)用
公證應(yīng)用向文檔安全地分配邏輯時(shí)間戳,使得文檔可以被最終排序。在傳統(tǒng)系統(tǒng)中,這種時(shí)間戳服務(wù)的用戶假定機(jī)器正在執(zhí)行正確的軟件。本文中所描述的公證應(yīng)用不需要這樣的假定。
公證遠(yuǎn)程等效性。公證應(yīng)用等效于如下?tīng)顟B(tài)機(jī),該狀態(tài)機(jī)具有以下?tīng)顟B(tài):
·使用加密系統(tǒng)(例如,RSA)密鑰生成算法根據(jù)從可信硬件讀取的隨機(jī)字節(jié)的第一連續(xù)序列來(lái)計(jì)算(PublicKey(公鑰),PrivateKey(私鑰))對(duì)。
·其中平臺(tái)配置寄存器(例如,PCR 19)已經(jīng)用密鑰對(duì)的公共部分被擴(kuò)展的可信硬件平臺(tái);以及
·被初始化為0的計(jì)數(shù)器Counter(計(jì)數(shù)器);
并且該狀態(tài)機(jī)具有以下轉(zhuǎn)換:
·給定輸入(connect(連接),Nonce(隨機(jī)數(shù))),通過(guò)獲取PCR 17-19上的引用Quote和外部隨機(jī)數(shù)Nonce來(lái)改變可信硬件狀態(tài)。輸出是(PublicKey;Quote(引用))。
·給定輸入(notarize(公證),Hash(散列)),遞增Counter并且返回SigPrivateKey(OP-CTR-ADV||RFC4251Encode(Counter)||Hash)。
PCR是允許安全存儲(chǔ)和報(bào)告安全相關(guān)度量的寄存器。用于公證應(yīng)用的規(guī)范的一部分可以包括要在out_sig被解密之前被滿足的謂詞(其否則由于對(duì)秘密數(shù)據(jù)的依賴性而不能被輸出):
datatype NotaryState=NotaryState_c(keys:RSAKeyPair,cntr:nat);
predicate NotarizeOpCorrect(in_st:NotaryState,out_st:NotaryState,in_msg:seq<int>,out_stmt:seq<int>,out_sig:seq<int>)
{
ByteSeq(in_msg)
&&out_st.keys==in_st.keys
&&out_st.cntr==in_st.cntr+1
&&out_stmt==[OP_COUNTER_ADV]
+rfc4251_encode(out_st.cntr)+in_msg
&&out_sig==RSASign(in_st.keys,out_stmt)
}
證明公證等效性可以包括以下各項(xiàng)的證明:(1)輸入非干擾,(2)Connect程序的功能正確性,(3)公證程序的功能正確性和(4)輸出非干擾。(1)輸入非干擾:公證應(yīng)用傳遞給解密器208的隨機(jī)數(shù)和消息基于公共數(shù)據(jù)。(2)連接的功能正確性:應(yīng)用正確地從隨機(jī)性導(dǎo)出密鑰,并且當(dāng)可信硬件的PCR處于所需狀態(tài)時(shí),應(yīng)用獲得的可信硬件引用來(lái)自可信硬件。(3)公證的功能正確性:應(yīng)用遞增計(jì)數(shù)器并且正確地計(jì)算簽名。(4)輸出非干擾:寫(xiě)入不受保護(hù)的存儲(chǔ)器僅依賴于公共數(shù)據(jù)和計(jì)算的狀態(tài)機(jī)輸出。
TRINC應(yīng)用
圖3是根據(jù)一些實(shí)現(xiàn)的包括TrInc應(yīng)用302的說(shuō)明性架構(gòu)300。
被稱為T(mén)rInc 302的可信增量應(yīng)用概括了公證應(yīng)用。TrInc 302維護(hù)每個(gè)用戶的(例如,每個(gè)應(yīng)用的)計(jì)數(shù)器,使得每個(gè)用戶(例如,每個(gè)應(yīng)用)接收其間沒(méi)有間隙的連續(xù)值。TrInc 302是分布式系統(tǒng)中的通用工具,因?yàn)門(mén)rInc 302可以用于各種功能,諸如例如防篡改審核日志、拜占庭容錯(cuò)復(fù)制狀態(tài)機(jī)、驗(yàn)證不可信文件服務(wù)器正確地表現(xiàn)等。TrInc 302可以包括用于使得能夠創(chuàng)建計(jì)數(shù)器306的創(chuàng)建計(jì)數(shù)器304模塊。計(jì)數(shù)器306可以包括N個(gè)計(jì)數(shù)器(其中N>0),諸如第一計(jì)數(shù)器308到第N計(jì)數(shù)器310。TrInc 302可以包括私鑰模塊312、公鑰證書(shū)模塊314、加密處理模塊316、元計(jì)數(shù)器318和TrInc狀態(tài)指示器320。
TRINC遠(yuǎn)程等效性。除了TrInc具有多個(gè)計(jì)數(shù)器(每個(gè)計(jì)數(shù)器具有元組(Ki;vi))和初始被設(shè)置為0的元計(jì)數(shù)器之外,TrInc應(yīng)用302遠(yuǎn)程等效于如公證應(yīng)用的狀態(tài)機(jī)。代替公證轉(zhuǎn)換,TrInc具有:
·給定輸入(create(創(chuàng)建),K),
o設(shè)i:=meta_counter,
o增量mcta_countcr,以及
o設(shè)(Ki,vi)=(K,0)。
·給定輸入(advance;i,vnew,Msg,UserSig),設(shè)vold=計(jì)數(shù)器元組i中的vi。
o如果vold<=vnew和VerifySigKi(vnew||Msg,UserSig),則設(shè)vi:=vnew且輸出SigPrivateKey(OP-CTR-ADV||encodc(i)||encode(Vold)||encode(Vnew)||Msg)。
密碼散列(“PASSHASH”)應(yīng)用。密碼散列應(yīng)用可以使密碼數(shù)據(jù)庫(kù)的丟失無(wú)害。例如,攻擊者可能會(huì)竊取數(shù)據(jù)庫(kù)并且發(fā)動(dòng)離線攻擊。即使數(shù)據(jù)庫(kù)被正確地散列和鹽化,低熵密碼也會(huì)使數(shù)據(jù)庫(kù)變得脆弱。通過(guò)使用密碼散列,散列密碼的未授權(quán)訪問(wèn)不會(huì)損害安全性。
PASSHASH遠(yuǎn)程等效性。PassHash應(yīng)用遠(yuǎn)程等效于以下?tīng)顟B(tài)機(jī)。狀態(tài)由字節(jié)串Secret(秘密)組成,Secret被初始化為從可信硬件讀取的前32個(gè)隨機(jī)字節(jié)。給定輸入(hash,Salt(鹽化),Password(密碼)),passhash應(yīng)用輸出SHA256(Secret||Salt||Password)。這里,SHA256僅用作散列算法的示例。應(yīng)當(dāng)理解,可以使用其他類似的散列技術(shù)來(lái)代替SHA。
基于該規(guī)范,在沒(méi)有秘密的窮開(kāi)心散列密碼對(duì)于離線攻擊者是無(wú)用的,對(duì)即使低熵密碼的暴力猜測(cè)攻擊也是不可行的。
差異隱私(“DIFFPRIV”)服務(wù)。差異隱私應(yīng)用提供差異隱私服務(wù),并且是具有更抽象規(guī)范的更大應(yīng)用(例如,與TrInc等相比)的示例。差異隱私應(yīng)用可以從貢獻(xiàn)方收集敏感數(shù)據(jù),并且允許分析者研究聚合數(shù)據(jù)庫(kù)。差異隱私應(yīng)用可以保證每個(gè)貢獻(xiàn)方的差異隱私,例如,提供給分析者的答案不能與在省略貢獻(xiàn)方的數(shù)據(jù)的情況下提供的答案區(qū)分開(kāi)。如果對(duì)于任何一組答案S和差異為單行的任何一對(duì)數(shù)據(jù)庫(kù)D1和D2存在P[A(D1)∈S]<=λ·[A(D2)∈S],其中隱私參數(shù)λ=eε,則算法A有差異地隱私,隱私為ε。
具有小的隱私參數(shù)的多個(gè)查詢可以等效于具有參數(shù)的乘積(product)的單個(gè)查詢。開(kāi)始于向貢獻(xiàn)方保證的隱私預(yù)算b=λ,具有參數(shù)λQ的每個(gè)查詢Q除以預(yù)算b′:=b/λQ(例如,可以拒絕具有λQ>b的查詢)。對(duì)于噪聲計(jì)算,計(jì)算查詢的靈敏度Δ,其是在單個(gè)數(shù)據(jù)庫(kù)行改變的情況下,查詢結(jié)果可以改變的最多量。分析者接收真實(shí)答案和從由Δ參數(shù)化的分布中得到的隨機(jī)噪聲值的和??梢允褂脙H包括有理數(shù)的噪聲分布,因?yàn)榭梢允褂弥噶罴?例如,x86指令集)精確地采樣噪聲分布。
DIFFPRIV遠(yuǎn)程等效性。DiffPriv應(yīng)用遠(yuǎn)程等效于具有以下?tīng)顟B(tài)的狀態(tài)機(jī):
·密鑰對(duì)和可信硬件類似于公證應(yīng)用被初始化;
·剩余預(yù)算b,實(shí)數(shù);以及
·行序列,每個(gè)行由重復(fù)檢測(cè)隨機(jī)數(shù)和整數(shù)列值的列表組成;
并且包括連接到應(yīng)用、初始化數(shù)據(jù)庫(kù)、添加行和執(zhí)行查詢的轉(zhuǎn)換。
靈敏度。用作規(guī)范的噪聲計(jì)算公式中的靈敏度參數(shù)的值Δ可以是查詢結(jié)果的實(shí)際靈敏度。例如,如果定義A(D)作為應(yīng)用在數(shù)據(jù)庫(kù)為D時(shí)計(jì)算的答案,則對(duì)于任何兩個(gè)數(shù)據(jù)庫(kù)D1和D2,|A(D1)A(D2)|Δ。
對(duì)于可驗(yàn)證性,可以使用Airavat類型查詢,其中每個(gè)查詢是將行轉(zhuǎn)換為單個(gè)值的映射器、以及聚合結(jié)果集合的縮減器,使得僅縮減器影響靈敏度。分析者可以提供任意的映射器;DiffPriv可以提供針對(duì)單個(gè)縮減器和的靈敏度屬性。DiffPriv應(yīng)用可以獲取RowMin(行最小)和RowMax(行最大)參數(shù),以將每個(gè)映射器輸出值修剪到某個(gè)范圍。例如:
DiffPriv應(yīng)用被驗(yàn)證為滿足將縮減器輸出靈敏度與在噪聲生成中使用的D相關(guān)聯(lián)的謂詞。
完全系統(tǒng)驗(yàn)證
圖4是根據(jù)一些實(shí)現(xiàn)的已驗(yàn)證軟件棧(例如,系統(tǒng))400的說(shuō)明性架構(gòu)。軟件棧400包括一個(gè)或多個(gè)應(yīng)用402、一個(gè)或多個(gè)公共應(yīng)用404、標(biāo)準(zhǔn)庫(kù)406、用戶數(shù)據(jù)報(bào)協(xié)議/因特網(wǎng)(UDP/IP)408協(xié)議模塊、以太網(wǎng)410協(xié)議模塊、網(wǎng)絡(luò)驅(qū)動(dòng)器412、一個(gè)或多個(gè)數(shù)據(jù)類型414、散列算法416模塊、可信硬件驅(qū)動(dòng)器418、公鑰加密系統(tǒng)420加密系統(tǒng)、BigNum(大數(shù))庫(kù)422(例如,用于執(zhí)行加密功能)、CoreMath(核心數(shù)學(xué))庫(kù)424(例如,用于執(zhí)行科學(xué)、工程或計(jì)算密集型計(jì)算)、和操作系統(tǒng)426(例如,已驗(yàn)證微內(nèi)核)。在一些情況下,散列算法416可以使用安全散列算法(SHA)。當(dāng)然,不同的實(shí)現(xiàn)可以使用其他不同的散列算法。應(yīng)用402可以包括已驗(yàn)證應(yīng)用428和未驗(yàn)證應(yīng)用430。未驗(yàn)證應(yīng)用430可以在已驗(yàn)證環(huán)境(例如沙箱)432中執(zhí)行,已驗(yàn)證環(huán)境432防止未驗(yàn)證應(yīng)用430惡意地傷害(例如,破壞)軟件棧400的剩余部分,諸如已驗(yàn)證應(yīng)用428、操作系統(tǒng)426等。
應(yīng)用402可以包括PassHash、公證、TrInc、DiffPriv、另一應(yīng)用或其任何組合。操作系統(tǒng)426可以包括延遲啟動(dòng)、IOMMU、分段、頁(yè)表、另一操作系統(tǒng)實(shí)用程序或其任何組合。當(dāng)計(jì)算機(jī)在可信狀態(tài)下運(yùn)行時(shí),例如,已驗(yàn)證軟件在可信硬件上執(zhí)行時(shí),加載未驗(yàn)證軟件可能導(dǎo)致整個(gè)計(jì)算機(jī)的狀態(tài)變得不可信。因此,計(jì)算機(jī)可以在可信狀態(tài)和不可信狀態(tài)之間切換。硬件的中央處理單元(CPU)可以提供硬件指令,其將存儲(chǔ)器位置作為參數(shù),重置硬件平臺(tái),原子地測(cè)量位于該存儲(chǔ)器位置的未驗(yàn)證軟件,將未驗(yàn)證軟件擴(kuò)展到計(jì)算機(jī)的PCR中的一個(gè)中,并且在硬件保護(hù)的環(huán)境中開(kāi)始執(zhí)行未驗(yàn)證軟件。在硬件保護(hù)的環(huán)境中執(zhí)行未驗(yàn)證軟件的這個(gè)過(guò)程被稱為延遲啟動(dòng)。作為延遲啟動(dòng)的一部分,CPU可以禁用對(duì)包含安全引導(dǎo)加載程序的物理存儲(chǔ)器頁(yè)的直接存儲(chǔ)器(DMA)訪問(wèn),禁用中斷和硬件調(diào)試器以防止先前執(zhí)行的代碼重新獲得控制,將PCR17到PCR23的動(dòng)態(tài)寄存器重置為0,并且在保護(hù)模式下執(zhí)行未驗(yàn)證軟件。延遲啟動(dòng)可以提供類似于重新引導(dǎo)計(jì)算機(jī)(例如,從清潔狀態(tài)(clean-slate)開(kāi)始)的安全性優(yōu)點(diǎn),同時(shí)繞過(guò)完全重新引導(dǎo)的開(kāi)銷(即,外圍設(shè)備保持啟用,BIOS和引導(dǎo)加載程序不被調(diào)用,存儲(chǔ)器內(nèi)容保持完整,等等)。
軟件代碼可以包括注釋,例如循環(huán)不變量、前置條件和后置條件,以使得能夠驗(yàn)證軟件代碼。注釋可以被視為構(gòu)建到高級(jí)定理的引理。
為了說(shuō)明針對(duì)系統(tǒng)400的端到端驗(yàn)證的步驟,描述了若干命題。為了便于理解,這些命題在下面用簡(jiǎn)單的英語(yǔ)簡(jiǎn)要說(shuō)明。應(yīng)當(dāng)理解,實(shí)際命題可以采用高級(jí)語(yǔ)言實(shí)現(xiàn)112中的注釋的形式。下面描述的命題是可以在驗(yàn)證系統(tǒng)400時(shí)使用的幾個(gè)關(guān)鍵命題。
IOMMU配置。已驗(yàn)證應(yīng)用(例如,堅(jiān)固應(yīng)用)可以配置輸入輸出存儲(chǔ)器管理單元(IOMMU)以將存儲(chǔ)器劃分為設(shè)備可訪問(wèn)和應(yīng)用專用的私有存儲(chǔ)器,使得非設(shè)備操作訪問(wèn)應(yīng)用專用的私有存儲(chǔ)器。匯編語(yǔ)言指令規(guī)范可用于確定非設(shè)備存儲(chǔ)器操作僅訪問(wèn)已經(jīng)被硬件的設(shè)備排除向量(簡(jiǎn)單IOMMU)保護(hù)的應(yīng)用專用的私有存儲(chǔ)器。
一些中央處理單元(CPU)可以提供諸如用于測(cè)量的動(dòng)態(tài)信任根源(DRTM)的特征,也稱為延遲啟動(dòng)。DRTM可以將CPU重置為已知狀態(tài),存儲(chǔ)由指令的引數(shù)(argument)指向的存儲(chǔ)器內(nèi)代碼的測(cè)量(例如,散列代碼),并且跳轉(zhuǎn)到該代碼。在延遲啟動(dòng)之后,硬件可以提供CPU的軟件程序控制以及64千字節(jié)(KB)的受保護(hù)存儲(chǔ)器。為了使用大于64KB,軟件程序可以首先基于與IOMMU的配置相關(guān)聯(lián)的規(guī)范來(lái)擴(kuò)展IOMMU的保護(hù)。在擴(kuò)展IOMMU的保護(hù)之后,程序可以滿足用于匯編語(yǔ)言指令訪問(wèn)64KB區(qū)域外部的存儲(chǔ)器的前置條件。
設(shè)備看不到秘密數(shù)據(jù),例如,只有非秘密數(shù)據(jù)可以被傳遞到設(shè)備。匯編語(yǔ)言指令規(guī)范可以指示將數(shù)據(jù)存儲(chǔ)到設(shè)備可訪問(wèn)存儲(chǔ)器,即IOMMU允許設(shè)備訪問(wèn)的存儲(chǔ)器只能存儲(chǔ)非秘密數(shù)據(jù)O(例如,OL-OR)。更具體地,左和右執(zhí)行可以生成將相同值存儲(chǔ)到相同地址、模定時(shí)和活性的相同的設(shè)備序列。非正式地,活性(liveness)是在系統(tǒng)或算法中“最終發(fā)生好的東西”的要求(即,系統(tǒng)“進(jìn)步”)。數(shù)據(jù)庫(kù)的最終一致性是活性屬性的示例。
為了證明OL=OR,可以用關(guān)系注釋來(lái)注釋實(shí)現(xiàn)代碼的輸入路徑和輸出路徑。輸入路徑和輸出路徑可以包括應(yīng)用事件循環(huán)和網(wǎng)絡(luò)棧。例如,以太網(wǎng)、互聯(lián)網(wǎng)協(xié)議(IP)和UDP層可以維護(hù)分組上的關(guān)系屬性。
TPM中的密鑰。應(yīng)用可以將公鑰正確地?cái)U(kuò)展到可信硬件的PCR(例如,PCR 19)中。私鑰可以使用隨機(jī)數(shù)生成器(例如,TPM隨機(jī)性)來(lái)生成,并且從不離開(kāi)可信硬件平臺(tái)。
證明。應(yīng)用可以在將其公鑰擴(kuò)展到PCR之后生成正確的可信硬件證明。
推論2-安全信道。如果客戶端接收到公鑰和證明,并且已驗(yàn)證PCR代碼值(例如,PCR 17、PCR 18)與已驗(yàn)證應(yīng)用的PCR代碼值匹配,并且已驗(yàn)證PCR數(shù)據(jù)值(例如PCR 19)匹配公鑰,并且憑證(例如,證書(shū)、令牌等)示出證明來(lái)自可信硬件提供方,則客戶端可以使用公鑰來(lái)建立直接到已驗(yàn)證應(yīng)用的安全信道。
加密庫(kù)
散列。散列算法416可以符合各種標(biāo)準(zhǔn)(例如,F(xiàn)IPS 180-4和FIPS 198-1)。
引理11——加密系統(tǒng)操作。公鑰加密系統(tǒng)420可以使用來(lái)自可信硬件的連續(xù)隨機(jī)性(例如,未被選擇性地采樣)來(lái)生成密鑰,并且通過(guò)素性測(cè)試(例如,Miller-Rabin素性或類似測(cè)試)。公鑰加密系統(tǒng)420可以包括加密、解密、簽名和驗(yàn)證(包括填充)的命令,并且可以產(chǎn)生符合標(biāo)準(zhǔn)(例如,PKCS 1.5和RSA標(biāo)準(zhǔn))的字節(jié)數(shù)組。
對(duì)于諸如散列函數(shù)的一些類型的加密原語(yǔ),驗(yàn)證器108可以驗(yàn)證功能正確性。從RFC 2313導(dǎo)出的加密系統(tǒng)規(guī)范(例如RSA規(guī)范)將加密和簽名操作定義為由理想整數(shù)構(gòu)成的密鑰上的模冪運(yùn)算。密鑰生成規(guī)范可以使用從兩個(gè)隨機(jī)素?cái)?shù)導(dǎo)出的密鑰。BigNum 420庫(kù)可以用于實(shí)現(xiàn)加密原語(yǔ)。BigNum 420庫(kù)可以使用32位字的數(shù)組來(lái)實(shí)現(xiàn)任意精度的整數(shù),提供用于公鑰加密系統(tǒng)(例如RSA等)的操作,諸如除法和按模計(jì)算。BigNum 420庫(kù)可以包括BigRat(大有理數(shù)),其將提供的操作擴(kuò)展到有理數(shù),其可以用于差異隱私。
BIGNUM/BIGRAT正確性。每個(gè)BigNum/BigRat操作可以產(chǎn)生表示正確的無(wú)限精度整數(shù)或?qū)崝?shù)的值。
在一些實(shí)現(xiàn)中,編譯器114可以不被包括在可信計(jì)算基礎(chǔ)(TCB)中。如果編譯器114不是TCB的一部分,則匯編語(yǔ)言實(shí)現(xiàn)116可以由驗(yàn)證器108驗(yàn)證。驗(yàn)證器108可以使用由編譯器114產(chǎn)生的若干不變量,諸如類型安全性、數(shù)組邊界安全性和傳遞棧安全性。
類型安全性。可以根據(jù)由高級(jí)語(yǔ)言使用的類型系統(tǒng)來(lái)驗(yàn)證每個(gè)值和堆對(duì)象的內(nèi)容以準(zhǔn)確地表示期望的內(nèi)容,使得對(duì)每個(gè)值和堆對(duì)象的操作不會(huì)引起運(yùn)行時(shí)類型錯(cuò)誤。
數(shù)組邊界安全性。數(shù)組操作可以使用在數(shù)組邊界內(nèi)的索引。
傳遞棧安全性。當(dāng)調(diào)用特定程序時(shí),堆棧具有足夠的堆??臻g剩余用于由特定程序和特定程序可能調(diào)用的任何附加程序調(diào)用的堆棧操作。堆??梢园ㄓ糜诖鎯?chǔ)關(guān)于程序的信息的數(shù)據(jù)結(jié)構(gòu)。例如,當(dāng)程序調(diào)用子程序(例如,子例程)時(shí),可以在調(diào)用子程序之前將該程序的快照存儲(chǔ)在堆棧中。例如,快照可以包括由程序使用的變量的值等。當(dāng)子程序已經(jīng)完成執(zhí)行時(shí),可以使用存儲(chǔ)在堆棧中的快照來(lái)恢復(fù)程序的狀態(tài),使得程序的執(zhí)行可以繼續(xù)。術(shù)語(yǔ)“堆?!笔侵复鎯?chǔ)在數(shù)據(jù)結(jié)構(gòu)中的一個(gè)或多個(gè)實(shí)體的集合。對(duì)集合的操作可以包括用于向集合添加實(shí)體的CALL操作(也稱為推送)和用于從集合中去除實(shí)體的RET操作(也稱為彈出)。推送和彈出操作之間的關(guān)系使得堆??梢员粚?shí)現(xiàn)為后進(jìn)先出(LIFO)數(shù)據(jù)結(jié)構(gòu)。在LIFO數(shù)據(jù)結(jié)構(gòu)中,添加到結(jié)構(gòu)的最后實(shí)體可以是要去除的第一實(shí)體。這等效于在順序集合中僅在存儲(chǔ)集合的數(shù)據(jù)結(jié)構(gòu)的一端處(其被稱為堆棧的頂部)執(zhí)行推送和彈出操作。
即使高級(jí)語(yǔ)言是類型安全的語(yǔ)言,驗(yàn)證器108也可以不假定編譯器114保留類型安全性。因此,驗(yàn)證器108可以通過(guò)為表示高級(jí)語(yǔ)言值的數(shù)據(jù)結(jié)構(gòu)建立類型不變量來(lái)驗(yàn)證匯編語(yǔ)言級(jí)的類型安全性。例如,數(shù)據(jù)結(jié)構(gòu)中的指針可以指向期望類型的值,并且任意整數(shù)不可以用作指針。這種類型不變量可以在整個(gè)匯編語(yǔ)言代碼中維護(hù),并且可以存在于循環(huán)不變量、前置條件、后置條件或其任何組合中。因此,外部匯編語(yǔ)言類型檢查器可以不用于檢查編譯的匯編語(yǔ)言實(shí)現(xiàn)116。相反,單個(gè)驗(yàn)證過(guò)程(例如,由驗(yàn)證器108執(zhí)行)可以用于手動(dòng)編寫(xiě)匯編語(yǔ)言代碼和編譯代碼(例如,匯編語(yǔ)言實(shí)現(xiàn)116)。
高級(jí)屬性保留。給定高級(jí)語(yǔ)言前置條件,每個(gè)程序證明輸出堆棧狀態(tài)和寄存器滿足高級(jí)語(yǔ)言后置條件。編譯器114可以維護(hù)高級(jí)語(yǔ)言注釋,諸如前置條件、后置條件和循環(huán)不變量。此外,編譯器114可以將高級(jí)注釋連接到低級(jí)堆棧和寄存器值,使得對(duì)堆棧和寄存器值的操作滿足與高級(jí)語(yǔ)言實(shí)現(xiàn)112和對(duì)應(yīng)高級(jí)規(guī)范102相關(guān)聯(lián)的正確性定理。
操作系統(tǒng)不變量??梢跃S護(hù)操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)不變量。
垃圾收集正確性。操作系統(tǒng)426的存儲(chǔ)器管理器可以創(chuàng)建符合高級(jí)語(yǔ)言的語(yǔ)義的高級(jí)語(yǔ)言的對(duì)象表示。操作系統(tǒng)426的垃圾收集器可以維護(hù)正確的對(duì)象數(shù)據(jù),并且可以不留下懸垂指針,即使垃圾收集器在存儲(chǔ)器中移動(dòng)對(duì)象。垃圾收集器可以回收存儲(chǔ)在存儲(chǔ)器中的垃圾,例如,已經(jīng)分配但不再使用的存儲(chǔ)器中的對(duì)象。例如,如果系統(tǒng)不具有指向存儲(chǔ)器的已分配部分的任何指針,則存儲(chǔ)器的已分配部分可以由垃圾收集器回收以供另一程序使用。
圖5是根據(jù)一些實(shí)現(xiàn)的在安全硬件上執(zhí)行的已驗(yàn)證軟件的說(shuō)明性架構(gòu)500??尚庞布?02可以包括提供基于硬件的信任根源的硬件,例如可信平臺(tái)模塊(TPM)。例如,可信硬件502可以以能夠經(jīng)由證明協(xié)議被安全地報(bào)告給遠(yuǎn)程方的方式在引導(dǎo)周期期間在可信硬件502上記錄與軟件執(zhí)行相關(guān)聯(lián)的信息??尚庞布?02可以以在平臺(tái)配置寄存器(PCR)中維護(hù)的散列鏈的形式來(lái)維護(hù)關(guān)于當(dāng)前引導(dǎo)周期的記錄。在可信硬件502上執(zhí)行的軟件應(yīng)用可以經(jīng)由擴(kuò)展操作向PCR添加新信息。擴(kuò)展操作可以更新PCR以包括與新信息級(jí)聯(lián)的先前PCR值的散列??尚庞布梢员3植浑x開(kāi)可信硬件并且可以通過(guò)對(duì)PCR中的值進(jìn)行簽名來(lái)用于證明可信硬件的當(dāng)前狀態(tài)的私鑰552(例如,RSA密鑰)??尚庞布梢宰C實(shí)對(duì)應(yīng)公鑰由真實(shí)硬件可信硬件保持,以防止軟件的假冒。
架構(gòu)500可以使用延遲啟動(dòng),也稱為用于測(cè)量的動(dòng)態(tài)信任根源(DRTM)。為了幫助從安全操作系統(tǒng)和管理程序的可信計(jì)算基礎(chǔ)(TCB)中去除引導(dǎo)代碼,中央處理單元(CPU)可以提供將CPU重置為已知狀態(tài)的指令,在可信硬件中存儲(chǔ)由指令的引數(shù)指向的存儲(chǔ)器中代碼的測(cè)量(散列),并且跳轉(zhuǎn)到該代碼。該“延遲啟動(dòng)”或DRTM允許不可信軟件在新重置的CPU上引導(dǎo)、配置設(shè)備、加載軟件、并且然后可驗(yàn)證地引導(dǎo)可信軟件。CPU指令可以使CPU進(jìn)入良好地規(guī)定的重置狀態(tài),使設(shè)備和存儲(chǔ)器保持原樣。CPU指令可以禁用中斷,配置CPU的設(shè)備排除向量(DEV)和基于位向量的IOMMU,以防止設(shè)備訪問(wèn)存儲(chǔ)器的一部分,將可信硬件的PCR 17重置為固定值,以及用存儲(chǔ)器的一部分的散列擴(kuò)展寄存器。最后,執(zhí)行可以跳轉(zhuǎn)到代碼。因此,軟件應(yīng)用可以利用在其執(zhí)行之前的任何引導(dǎo),同時(shí)保護(hù)軟件應(yīng)用不受其他軟件應(yīng)用和其他設(shè)備的影響。以這種方式,可信硬件可以向遠(yuǎn)程驗(yàn)證器證明該代碼在受保護(hù)的環(huán)境中運(yùn)行。
硬件502可以執(zhí)行已驗(yàn)證低級(jí)代碼506(例如,微內(nèi)核或低級(jí)操作系統(tǒng))的已驗(yàn)證引導(dǎo)504。硬件502可以執(zhí)行和記錄已驗(yàn)證低級(jí)代碼506的已驗(yàn)證啟動(dòng)508。已驗(yàn)證低級(jí)代碼506可以包括已驗(yàn)證設(shè)備接口510、已驗(yàn)證中斷處理程序512、已驗(yàn)證線程514和已驗(yàn)證垃圾收集器516。已驗(yàn)證設(shè)備接口510可以提供各種類型的輸入/輸出(I/O)以使得架構(gòu)500能夠與其他設(shè)備通信。當(dāng)接收到中斷時(shí),已驗(yàn)證中斷處理程序512可以用于執(zhí)行各種動(dòng)作。已驗(yàn)證線程514可以是已驗(yàn)證微內(nèi)核或其他低級(jí)操作系統(tǒng)的一部分。已驗(yàn)證垃圾收集器516可以收集不再使用(例如,不再被引用)的并且可以被回收和重新使用的存儲(chǔ)器的已分配部分。
已驗(yàn)證高級(jí)代碼518(例如,應(yīng)用、實(shí)用程序、庫(kù)等)可以在已驗(yàn)證低級(jí)代碼506之上執(zhí)行。已驗(yàn)證高級(jí)代碼518可以包括散列算法(例如,SHA或類似算法)模塊520、用于修改位和數(shù)組的代碼522、用于執(zhí)行加密系統(tǒng)(例如,RSA)加密和簽名的代碼524、大整數(shù)模塊526、數(shù)學(xué)模塊528、可信硬件驅(qū)動(dòng)器530、UDP/IP模塊532、以太網(wǎng)模塊534和網(wǎng)絡(luò)驅(qū)動(dòng)器536。應(yīng)當(dāng)理解,散列算法模塊520僅是可以使用的一種類型的散列算法的示例,并且其他實(shí)現(xiàn)可以使用其他類型的散列算法。
各種應(yīng)用可以在已驗(yàn)證高級(jí)代碼518之上執(zhí)行,諸如可信部件538(例如TrInc等)、密碼保險(xiǎn)庫(kù)(vault)540和隱私數(shù)據(jù)庫(kù)542(例如,提供差異隱私)。
在運(yùn)行時(shí),應(yīng)用544可以向用戶(或第二應(yīng)用)提供公鑰546和憑證548(例如,證書(shū)、令牌等)。憑證548可以由可信硬件502簽名(例如,使用散列550)以示出公鑰546由具有特定散列的二進(jìn)制文件(例如,對(duì)應(yīng)于整個(gè)軟件系統(tǒng))提供。用戶(或第二應(yīng)用)可以檢查散列550與先前觀察到的散列(例如,在離線步驟中觀察到的散列)匹配。可信硬件502可以提供由硬件提供方簽名的憑證548,其指示公鑰546由可信硬件平臺(tái)(例如,可信硬件502)排他地保持。如果憑證548有效并且散列550正確,則包括應(yīng)用544的已驗(yàn)證(例如,可驗(yàn)證安全的)二進(jìn)制文件創(chuàng)建公鑰546,并且接收方(例如,用戶或第二應(yīng)用)可以信任地交互并且信任用公鑰546簽名的消息來(lái)自應(yīng)用544,并且信任發(fā)送給應(yīng)用544的用公鑰546加密的消息將僅被應(yīng)用544看到。
因此,在運(yùn)行時(shí),用戶(或第二應(yīng)用)信任核心硬件502未被篡改但不需要信任與硬件502相關(guān)聯(lián)的軟件或外圍設(shè)備。來(lái)自應(yīng)用544的消息可以用應(yīng)用544的公鑰546簽名??尚庞布?02可以證明公鑰546來(lái)自具有加密散列代碼(例如,SHA1、SHA256等)的可執(zhí)行體,加密散列代碼應(yīng)當(dāng)匹配先前獲得的(例如,從離線步驟)散列代碼。可信硬件502的提供方可以證實(shí)公鑰546由硬件502保持,例如可信硬件平臺(tái)。
被包括在已驗(yàn)證低級(jí)代碼506中的操作系統(tǒng)(例如,圖4的操作系統(tǒng)426)可以被修改和/或擴(kuò)展以消除未驗(yàn)證引導(dǎo)代碼并且提供面向安全性的存儲(chǔ)器模型。操作系統(tǒng)還可以可驗(yàn)證地遵守在較高級(jí)執(zhí)行的應(yīng)用的安全規(guī)范。例如,傳統(tǒng)操作系統(tǒng)可以取決于用于系統(tǒng)配置(例如,設(shè)備枚舉,設(shè)備配置、存儲(chǔ)器分段、存儲(chǔ)器分頁(yè)等)的未驗(yàn)證引導(dǎo)加載程序和未驗(yàn)證的基本輸入/輸出系統(tǒng)(BIOS)。在一些實(shí)現(xiàn)中,可以提供已驗(yàn)證BIOS和引導(dǎo)加載程序。在其他實(shí)現(xiàn)中,不是驗(yàn)證現(xiàn)有BIOS和引導(dǎo)加載程序,而是可以使用延遲啟動(dòng)(例如,DRTM)來(lái)可驗(yàn)證地將架構(gòu)500置于安全狀態(tài),并且開(kāi)始執(zhí)行已驗(yàn)證低級(jí)代碼506和已驗(yàn)證高級(jí)代碼518。雖然延遲啟動(dòng)簡(jiǎn)化了引導(dǎo)過(guò)程,但是延遲啟動(dòng)可以使用已驗(yàn)證代碼在啟動(dòng)之后來(lái)配置CPU。
在延遲啟動(dòng)之后,應(yīng)用可以具有對(duì)CPU和存儲(chǔ)器的一部分(例如,64kb)的控制。然而,在延遲啟動(dòng)之前運(yùn)行的代碼在理論上可能替換設(shè)備固件或惡意配置設(shè)備直接存儲(chǔ)器訪問(wèn)(DMA)緩沖器?;贑PU的輸入/輸出存儲(chǔ)器管理單元(IOMMU)可以保護(hù)存儲(chǔ)器的該部分不被未授權(quán)實(shí)體訪問(wèn)。
ESP可以是指向堆棧頂部的寄存器。EAX可以是累加器寄存器。在x86處理器架構(gòu)的示例中,存儲(chǔ)器地址可以用被稱為段和偏移的兩個(gè)部分規(guī)定。段可以規(guī)定由系統(tǒng)分配的存儲(chǔ)器塊的開(kāi)始,并且偏移可以是到存儲(chǔ)器塊中的索引。段值可以存儲(chǔ)在段寄存器中,諸如包括當(dāng)前指令的段的CS寄存器和可以包括堆棧段的SS寄存器。可以使用隱式或顯式段描述符來(lái)訪問(wèn)存儲(chǔ)器。段描述符可以包括基地址和限制。如果嘗試使用具有基址B和限制L的描述符來(lái)訪問(wèn)存儲(chǔ)器地址M,則被訪問(wèn)的實(shí)際存儲(chǔ)器地址是B+M,除非B+M>L。在后一種情況下,可能發(fā)生段故障。對(duì)堆棧的訪問(wèn)(例如,經(jīng)由推送和彈出指令)可以使用SS段,并且對(duì)代碼的訪問(wèn)(例如,以讀取下一指令)可以使用CS段。
架構(gòu)500的形式規(guī)范可以規(guī)定在引導(dǎo)到已驗(yàn)證低級(jí)代碼518時(shí),EAX可以指向已驗(yàn)證低級(jí)代碼518,ESP可以包括EAX+64KB,并且SS和CS可以描述平坦段。DEV可以被配置為保護(hù)EAX和ESP免受外部設(shè)備的影響。EAX模式是針對(duì)加密塊密碼的操作模式,其被設(shè)計(jì)為同時(shí)提供具有兩遍方案的消息(認(rèn)證加密)的認(rèn)證和隱私,一遍用于實(shí)現(xiàn)隱私,一遍用于針對(duì)每個(gè)塊的真實(shí)性。
慣用規(guī)范可以描述如何導(dǎo)航存儲(chǔ)器和保護(hù)存儲(chǔ)器中的大部分。例如,滿足規(guī)范可以提供應(yīng)用可以訪問(wèn)的存儲(chǔ)器的上限和下限覆蓋存儲(chǔ)器的更大部分。DEV是一種IOMMU,其可以被配置為防止設(shè)備讀取或?qū)懭胍?guī)定的存儲(chǔ)器范圍,諸如(EAX,EAX+64KB)。
慣用表示規(guī)定可以不描述PCI或DEV的所有行為,而是可以描述特定操作序列的效果;例如,而不是示出到特定目的地的完整路線圖(例如,具有所有可能的路徑)和逐步指向。盡管硬件502可以支持其他配置,但是嘗試使用硬件502的代碼可能無(wú)法驗(yàn)證。使用慣用規(guī)范可以降低規(guī)范的復(fù)雜性,使得規(guī)范更快和更容易驗(yàn)證。例如,x86分段的慣用規(guī)范可以規(guī)定段描述符可以具有任何基址,但是長(zhǎng)度為232并且特權(quán)級(jí)(DPL)為0。
微內(nèi)核或操作系統(tǒng)規(guī)范可以規(guī)定段訪問(wèn)的效果,包括用于CALL和RET指令的SS。CALL和RET指令影響堆棧,例如,CALL將先前的指令指針值推送到堆棧上,并且RET從堆棧彈出存儲(chǔ)的指令指針值,以知道應(yīng)該在何處繼續(xù)執(zhí)行。CALL和RET都可以經(jīng)由SS訪問(wèn)存儲(chǔ)器。
規(guī)范還可以規(guī)定描述符影子緩存行為;例如,當(dāng)使用選擇器寄存器而不是存儲(chǔ)器中的描述符時(shí),段行為可以取決于緩存在處理器中的陰影值。這樣的規(guī)范使得能夠驗(yàn)證在延遲啟動(dòng)之后,軟件代碼訪問(wèn)正確的存儲(chǔ)器區(qū)域,并且未授權(quán)的應(yīng)用和/或設(shè)備不能篡改(例如,訪問(wèn))存儲(chǔ)器區(qū)域。例如,在一些實(shí)現(xiàn)中,DEV可以被配置為向已驗(yàn)證操作系統(tǒng)(例如,微內(nèi)核)暴露128MB的受保護(hù)存儲(chǔ)器,并且存儲(chǔ)器的剩余部分可以用于到設(shè)備的I/O。
為了提供關(guān)于應(yīng)用的信息流保證(例如,為了證明應(yīng)用不能確定秘密數(shù)據(jù)),可以定義已驗(yàn)證代碼與外部世界之間的邊界(例如,未驗(yàn)證代碼)。例如,由DEV保護(hù)的存儲(chǔ)器區(qū)域可以被視為在內(nèi)部,而其他存儲(chǔ)器區(qū)域(例如,I/O和存儲(chǔ)器映射的設(shè)備區(qū)域)被視為未驗(yàn)證,因?yàn)閻阂庠O(shè)備可以在任何時(shí)間讀取或?qū)懭氪鎯?chǔ)器,并且即使良性設(shè)備(例如,網(wǎng)卡)也可以通過(guò)設(shè)計(jì)將數(shù)據(jù)暴露給未驗(yàn)證代碼和未驗(yàn)證設(shè)備。已驗(yàn)證和未驗(yàn)證代碼之間的邊界可以在匯編代碼級(jí)規(guī)定。
對(duì)于可以被證明由DEV保護(hù)的存儲(chǔ)器區(qū)域,規(guī)范可以規(guī)定加載和存儲(chǔ)的標(biāo)準(zhǔn)模型,例如,經(jīng)由存儲(chǔ)指令寫(xiě)入存儲(chǔ)器的值以后可以經(jīng)由加載指令被讀回。相反,當(dāng)讀取和寫(xiě)入未被DEV保護(hù)的存儲(chǔ)器時(shí),沒(méi)有這樣的保證,因?yàn)槔碚撋蠍阂庠O(shè)備可以在任何時(shí)間改變存儲(chǔ)器中的值。規(guī)范可以規(guī)定對(duì)不可信存儲(chǔ)器造成可見(jiàn)影響的軟件指令具有被提供給指令的引數(shù)是公共的前置條件。例如,存儲(chǔ)指令的引數(shù)(例如,地址和值)可以具有引數(shù)是公共的前置條件。作為另一示例,加載指令的地址引數(shù)可以具有引數(shù)是公共的前置條件,因?yàn)槠渌O(shè)備可以能夠觀察正被訪問(wèn)的地址。公共值可以經(jīng)由來(lái)自不可信存儲(chǔ)器的負(fù)載,代碼中的常數(shù)值或由可信應(yīng)用專用策略(例如,使得加密的秘密被傳輸?shù)牟呗?解密的值來(lái)獲得。不是源自外部世界的任何值(例如從用于生成密鑰的可信硬件獲得的隨機(jī)值)可以不被標(biāo)記為公共的,并且因此除了經(jīng)由解密策略之外,可以不離開(kāi)系統(tǒng)。
因?yàn)樾畔⒘骺梢栽诩虞d和存儲(chǔ)指令上在機(jī)器代碼級(jí)執(zhí)行,所以針對(duì)網(wǎng)卡或其他網(wǎng)絡(luò)層的正確性的規(guī)范可以不用于可信計(jì)算基礎(chǔ)(TCB)。相反,架構(gòu)500可以重復(fù)證明與網(wǎng)絡(luò)的交互產(chǎn)生公共數(shù)據(jù)。例如,驅(qū)動(dòng)器可以通過(guò)網(wǎng)絡(luò)棧傳播從網(wǎng)卡接收的公共輸入,其中分組由以太網(wǎng)、IP和UDP層處理。每個(gè)層可以證明該層沒(méi)有用非公開(kāi)數(shù)據(jù)污染分組,使得應(yīng)用最終接收到公共分組流。當(dāng)傳輸時(shí),網(wǎng)絡(luò)棧實(shí)現(xiàn)的頂部(例如,UDP層)可以請(qǐng)求從應(yīng)用接收的數(shù)據(jù)已經(jīng)被規(guī)定為公共數(shù)據(jù)。這允許網(wǎng)絡(luò)棧實(shí)現(xiàn)證明提供給IP層的數(shù)據(jù)是公共的,等等,直到網(wǎng)絡(luò)驅(qū)動(dòng)器最終證明網(wǎng)絡(luò)驅(qū)動(dòng)器存儲(chǔ)到不可信存儲(chǔ)器的個(gè)體字是公共數(shù)據(jù)并且因此安全釋放。
為了使得應(yīng)用能夠提供遠(yuǎn)程證明并且獲得安全隨機(jī)性,使用慣用規(guī)范用于可信硬件和已驗(yàn)證可信硬件驅(qū)動(dòng)器530??尚庞布?guī)范可以包括驅(qū)動(dòng)兩級(jí)(例如,低級(jí)和高級(jí))模型的可信硬件的狀態(tài)機(jī)的偽指令。在低級(jí)狀態(tài)機(jī)中,指令可以一次一個(gè)字節(jié)地向數(shù)據(jù)緩沖器寫(xiě)入或讀取,并且執(zhí)行使用數(shù)據(jù)和控制寄存器加載的命令。在更高級(jí)的狀態(tài)機(jī)中,命令執(zhí)行可以根據(jù)可信硬件語(yǔ)義來(lái)解釋命令。例如,可以被慣用規(guī)定的命令可以包括可信硬件命令,諸如擴(kuò)展(例如,向PCR添加數(shù)據(jù))、對(duì)象獨(dú)立授權(quán)協(xié)議(OIAP)、LoadKey(例如,將密鑰加載到可信硬件中)、Quote2(例如,執(zhí)行引用操作)和GetRand(例如,隨機(jī)數(shù)生成器)。
擴(kuò)展、OIAP、LoadKey和Quote2可以被包括在標(biāo)準(zhǔn)庫(kù)(例如,圖4的標(biāo)準(zhǔn)庫(kù)406)中,并且可以用于證明由已驗(yàn)證應(yīng)用保持的私鑰將私鑰視為安全數(shù)據(jù)(例如,通過(guò)使得不能夠確定私鑰)。GetRand命令可以提供用于生成加密密鑰的強(qiáng)隨機(jī)性的源。規(guī)范可以規(guī)定可以由GetRand依序地顯示的隨機(jī)值流。例如,用于創(chuàng)建使用隨機(jī)輸入的公鑰(例如,RSA)的庫(kù)例程的規(guī)范可以從由GetRand提供的隨機(jī)值流依序地繪制,從而防止惡意隨意選取。
圖6是根據(jù)一些實(shí)現(xiàn)的包括離線操作602和運(yùn)行時(shí)操作604的說(shuō)明性架構(gòu)600。離線操作602可以包括驗(yàn)證軟件系統(tǒng)(例如,軟件棧)符合對(duì)應(yīng)系統(tǒng)規(guī)范。運(yùn)行時(shí)操作604可以包括使得外部應(yīng)用606或用戶608能夠驗(yàn)證在硬件(例如,可信硬件)上執(zhí)行的軟件系統(tǒng)是安全的和不受損害的證明。例如,運(yùn)行時(shí)操作604可以使得外部應(yīng)用606(或用戶608)能夠向已驗(yàn)證軟件系統(tǒng)的應(yīng)用發(fā)送消息和從已驗(yàn)證軟件系統(tǒng)的應(yīng)用接收消息,而沒(méi)有其他方(例如,其他應(yīng)用或其他硬件設(shè)備)能夠訪問(wèn)被發(fā)送和接收的消息的內(nèi)容。例如,可以使用使得應(yīng)用和外部應(yīng)用能夠解密消息的密鑰來(lái)對(duì)發(fā)送和接收的消息加密。其他實(shí)體(例如,其他軟件或其他硬件)可能無(wú)法解密消息。
在離線操作602中,外部應(yīng)用606或用戶608可以接受正式的高級(jí)規(guī)范102,可以信任驗(yàn)證工具(例如,驗(yàn)證器108),可以信任服務(wù)提供方不會(huì)物理地改變硬件502,并且可以信任硬件規(guī)范(例如,指令集和可信硬件的硬件規(guī)范)對(duì)硬件502建模。其他任何事物(諸如應(yīng)用(例如,應(yīng)用544)、加密庫(kù)、序列和數(shù)學(xué)庫(kù)、操作系統(tǒng)(例如,操作系統(tǒng)426)和編譯器中的一個(gè)或多個(gè))可以被認(rèn)為是不可信的,因?yàn)樗鼈儍H針對(duì)高級(jí)規(guī)范102被驗(yàn)證。
在圖1的高級(jí)實(shí)現(xiàn)112已經(jīng)被編譯到匯編語(yǔ)言實(shí)現(xiàn)116并且由驗(yàn)證器108針對(duì)低級(jí)規(guī)范106驗(yàn)證之后,匯編器118可以用于創(chuàng)建機(jī)器代碼實(shí)現(xiàn)120。機(jī)器代碼實(shí)現(xiàn)120可以用于創(chuàng)建二進(jìn)制文件(例如,由可信硬件的一個(gè)或多個(gè)處理器可執(zhí)行),諸如軟件系統(tǒng)二進(jìn)制文件612。散列函數(shù)(例如,加密散列函數(shù)或其他散列函數(shù))可以用于基于軟件系統(tǒng)二進(jìn)制文件612創(chuàng)建散列代碼550(例如,加密散列代碼)。軟件系統(tǒng)二進(jìn)制文件612可以包括已驗(yàn)證軟件棧400。
在運(yùn)行時(shí)操作604期間,應(yīng)用544可以向外部應(yīng)用606或用戶608發(fā)送公鑰546和第一憑證548。第一憑證548可以包括可信硬件簽名614(例如,由可信硬件502簽名)以指示公鑰546由軟件系統(tǒng)二進(jìn)制文件612提供。外部應(yīng)用606(或用戶608)可以驗(yàn)證與可信硬件簽名614相關(guān)聯(lián)的散列代碼616與在離線操作602期間生成的散列代碼550匹配。
可信硬件502可以提供包括由可信硬件502的提供方簽名的可信硬件提供方的簽名620的第二憑證618。第二憑證618可以指示由合法硬件可信硬件(例如可信硬件502)排他地保持的可信硬件密鑰622。
外部應(yīng)用606(或用戶608)可以認(rèn)證(例如,驗(yàn)證)憑證548和618是有效的。外部應(yīng)用606(或用戶608)可以驗(yàn)證散列代碼616與散列代碼550匹配,例如指示已驗(yàn)證軟件系統(tǒng)二進(jìn)制文件612用于創(chuàng)建公鑰546。在認(rèn)證第一憑證548、第二憑證618和散列代碼616之后,外部應(yīng)用606(或用戶608)可以安全地與已驗(yàn)證軟件棧400的應(yīng)用交互。例如,當(dāng)外部應(yīng)用606(或用戶608)接收到消息(諸如包括公鑰546的第一消息624)時(shí),接收方可以將第一消息624認(rèn)證為由應(yīng)用544使用公鑰546發(fā)送。外部應(yīng)用606(或用戶608)可以信任第一消息624的內(nèi)容不能被其他實(shí)體訪問(wèn),諸如其他應(yīng)用626、其他外部應(yīng)用、其他外部硬件等。作為另一示例,當(dāng)外部應(yīng)用606(或用戶608)發(fā)送消息(諸如包括公鑰546的第二消息628)時(shí),外部應(yīng)用606(或用戶608)可以解密第二消息628,而其他實(shí)體(例如,其他應(yīng)用626、其他外部應(yīng)用、其他外部硬件等)不解密第二消息628。以這種方式,外部應(yīng)用606(或用戶608)可以以如下方式安全地與在可信硬件502上執(zhí)行的已驗(yàn)證軟件棧400交互:該方式使得消息(例如消息624和628)的內(nèi)容能夠被發(fā)送方和接收方可訪問(wèn)但不能被其他實(shí)體訪問(wèn)(例如,其他軟件應(yīng)用、外部硬件等)。
示例過(guò)程
在圖7、8和9的流程圖中,每個(gè)框表示可以用硬件、軟件或其組合實(shí)現(xiàn)的一個(gè)或多個(gè)操作。在軟件的上下文中,框表示在由一個(gè)或多個(gè)處理器執(zhí)行時(shí)引起處理器執(zhí)行所述操作的計(jì)算機(jī)可執(zhí)行指令。通常,計(jì)算機(jī)可執(zhí)行指令包括執(zhí)行特定功能或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、模塊、部件、數(shù)據(jù)結(jié)構(gòu)等。描述框的順序不旨在被解釋為限制,并且可以以任何順序和/或并行地組合任何數(shù)量的所描述的操作以實(shí)現(xiàn)處理。為了討論的目的,如上所述,參考架構(gòu)100、200、300、400或500來(lái)描述過(guò)程700、800和900,但是其他模型、框架、系統(tǒng)和環(huán)境可以實(shí)現(xiàn)這些過(guò)程。
圖7是根據(jù)一些實(shí)現(xiàn)的包括從軟件應(yīng)用接收公鑰的示例過(guò)程700的流程圖。過(guò)程700可以由圖6的外部應(yīng)用606執(zhí)行。
在702,可以從在可信硬件上執(zhí)行的軟件應(yīng)用接收公鑰。例如,在圖6中,外部應(yīng)用606可以從應(yīng)用544接收公鑰546。公鑰546可以基于應(yīng)用544的私鑰552來(lái)生成。
在704,可以接收由可信硬件簽名的第一憑證(例如,證書(shū)、令牌等)。第一憑證可以標(biāo)識(shí)公鑰由與特定散列代碼相關(guān)聯(lián)的二進(jìn)制文件提供。在706,可以認(rèn)證第一憑證。例如,在圖6中,外部應(yīng)用606可以接收第一憑證548并且認(rèn)證第一憑證548(例如,使用可信硬件簽名614)。
在708,可以從可信硬件接收第二憑證。在710,可以認(rèn)證第二憑證。例如,在圖6中,外部應(yīng)用606可以接收第二憑證618并且認(rèn)證可信硬件提供方的簽名620。
在712,可以做出該特定散列與離線提供的第二散列匹配的確定(例如,在包括軟件應(yīng)用的軟件系統(tǒng)的執(zhí)行之前)。例如,在圖6中,外部應(yīng)用606可以確定在運(yùn)行時(shí)操作604期間接收的散列代碼616匹配在離線操作602期間接收的散列代碼550。
在714,可以從軟件應(yīng)用接收用公鑰簽名的第一消息。例如,在圖6中,外部應(yīng)用606可以接收用公鑰546簽名的第一消息624。公鑰546可以指示第一消息624的內(nèi)容對(duì)于應(yīng)用544和外部應(yīng)用606可訪問(wèn),但是對(duì)于其它應(yīng)用和其他設(shè)備不可訪問(wèn)。
在716,可以將用公鑰簽名的第二消息發(fā)送給軟件應(yīng)用。例如,在圖6中,外部應(yīng)用606可以發(fā)送用公鑰546簽名的第二消息628。公鑰546可以指示第二消息628的內(nèi)容對(duì)于應(yīng)用544和外部應(yīng)用606可訪問(wèn),但是對(duì)于其他應(yīng)用和其他設(shè)備不可訪問(wèn)。
因此,在接收到證明已驗(yàn)證軟件的身份和在其上執(zhí)行已驗(yàn)證軟件的可信硬件的身份的憑證548和618之后,外部應(yīng)用可以使用公鑰發(fā)送和接收消息。發(fā)送和接收的消息的內(nèi)容可以對(duì)于發(fā)送方和接收方可訪問(wèn),但是對(duì)其他實(shí)體不可訪問(wèn),從而提供安全的交互。
圖8是根據(jù)一些實(shí)現(xiàn)的包括執(zhí)行已經(jīng)被驗(yàn)證為符合軟件規(guī)范的軟件系統(tǒng)的示例過(guò)程800的流程圖。過(guò)程800可以由可信硬件執(zhí)行,諸如圖5和6的可信硬件502。
在802,可以執(zhí)行已驗(yàn)證軟件系統(tǒng)。例如,在圖6中,已驗(yàn)證軟件棧400可以由可信硬件502執(zhí)行。
在804,可以由軟件應(yīng)用發(fā)送公鑰。在806,可以發(fā)送由可信硬件簽名的第一憑證(例如,證書(shū)、令牌等)。第一憑證可以將公鑰標(biāo)識(shí)為與二進(jìn)制文件(例如,系統(tǒng)軟件的二進(jìn)制文件)相關(guān)聯(lián)。因此,第一憑證可以證明軟件的身份。在808,可以發(fā)送由可信硬件的提供方簽名的第二憑證。第二憑證可以證明軟件正在其上執(zhí)行的硬件(例如,可信硬件)的身份。例如,在圖6中,應(yīng)用544可以向外部應(yīng)用606發(fā)送公鑰546、第一憑證548和第二憑證618。第一憑證548可以證明已驗(yàn)證軟件棧400的身份,并且第二憑證618可證明可信硬件502的身份。以這種方式,保證外部應(yīng)用606正在與應(yīng)用544交互,而不是與假冒應(yīng)用544的身份的其他軟件和/或其他硬件交互。
在810,可以發(fā)送用公鑰簽名的第一消息。在812,可以接收用公鑰簽名的第二消息。應(yīng)用544可以向外部應(yīng)用606發(fā)送第一消息624。外部應(yīng)用606可以向應(yīng)用544發(fā)送第二消息628。憑證548、618和公鑰546可以使得外部應(yīng)用606和應(yīng)用544能夠在知道消息624和628的內(nèi)容對(duì)于外部應(yīng)用606和應(yīng)用544可訪問(wèn)但是對(duì)于其他實(shí)體(包括已驗(yàn)證軟件棧400的其他應(yīng)用626以及其他軟件應(yīng)用和/或硬件)不可訪問(wèn)的情況下交互。
因此,憑證548和618可以用于分別證明已驗(yàn)證軟件系統(tǒng)(例如,已驗(yàn)證軟件棧)和可信硬件的身份。軟件系統(tǒng)的應(yīng)用和外部應(yīng)用可以使用公鑰交換消息。交換的消息的內(nèi)容可以對(duì)于應(yīng)用和外部應(yīng)用可訪問(wèn),但是對(duì)于其他實(shí)體不可訪問(wèn),從而提供安全的交互。
圖9是根據(jù)一些實(shí)現(xiàn)的包括執(zhí)行軟件系統(tǒng)的已驗(yàn)證引導(dǎo)的示例過(guò)程900的流程圖。過(guò)程900可以由可信硬件執(zhí)行,諸如圖5和6的可信硬件502。
在902,可以執(zhí)行軟件系統(tǒng)的已驗(yàn)證引導(dǎo)。軟件系統(tǒng)可以先前(例如,在離線操作期間)被驗(yàn)證為符合軟件規(guī)范。例如,在圖5中,可信硬件設(shè)備502可以執(zhí)行至少已驗(yàn)證低級(jí)代碼506的已驗(yàn)證引導(dǎo)504。
在904,可以從軟件應(yīng)用發(fā)送公鑰。公鑰可以基于僅對(duì)軟件應(yīng)用已知的私鑰來(lái)生成。例如,在圖6中,應(yīng)用544可以基于私鑰552生成公鑰546,并且將公鑰546發(fā)送給外部應(yīng)用606。
在906,可以發(fā)送由可信平臺(tái)模塊簽名的第一憑證。第一憑證可以標(biāo)識(shí)公鑰與二進(jìn)制文件相關(guān)聯(lián)(例如,使用二進(jìn)制文件創(chuàng)建)。例如,在圖6中,應(yīng)用544可以將第一憑證548發(fā)送給外部應(yīng)用606。第一憑證548可以例如通過(guò)確定散列代碼616(在運(yùn)行時(shí)操作604期間接收的)匹配散列代碼550(在離線操作602期間提供的)來(lái)證明軟件系統(tǒng)二進(jìn)制文件612的身份。
在908,可以發(fā)送由可信硬件的提供方簽名的第二憑證。第二憑證可以證明可信硬件的身份。例如,應(yīng)用544可以發(fā)送證明可信硬件502的身份的第二憑證618。
在910,可以發(fā)送用公鑰簽名的第一消息。公鑰可以指示第一消息由軟件應(yīng)用發(fā)送。在912,公鑰可以經(jīng)由證明被證實(shí)公鑰對(duì)應(yīng)于僅對(duì)軟件系統(tǒng)已知的私鑰。在914,可以接收使用公鑰簽名的第二消息。第二消息可以由軟件應(yīng)用可讀取,但不由其他實(shí)體可讀取。例如,在圖6中,應(yīng)用544可以將第一消息624發(fā)送給外部應(yīng)用606。第一消息可以包括公鑰546。公鑰546可以經(jīng)由證明被證實(shí)公鑰546對(duì)應(yīng)于私鑰552。應(yīng)用544可以接收使用公鑰546簽名的第二消息628。第一消息624和第二消息628的內(nèi)容可以對(duì)于應(yīng)用544和外部應(yīng)用606可訪問(wèn),但是對(duì)于其他應(yīng)用626和其他外部軟件和/或外部設(shè)備不可訪問(wèn)。
因此,第一憑證548可以證明已驗(yàn)證軟件棧400的身份,并且第二憑證618可以證明可信硬件的身份。軟件系統(tǒng)的應(yīng)用和外部應(yīng)用可以使用從僅對(duì)應(yīng)用已知的私鑰導(dǎo)出的公鑰來(lái)交換消息。交換的消息的內(nèi)容可以對(duì)于應(yīng)用和外部應(yīng)用可訪問(wèn),但是對(duì)于其他實(shí)體不可訪問(wèn),從而提供安全的交互。
示例計(jì)算設(shè)備和環(huán)境
圖10示出了可以用于實(shí)現(xiàn)本文中所描述的模塊和功能的計(jì)算設(shè)備1000(例如,可信計(jì)算基礎(chǔ)或可信平臺(tái)模塊)和環(huán)境的示例配置。計(jì)算設(shè)備1000可以包括至少一個(gè)處理器1002、存儲(chǔ)器1004、通信接口1006、顯示設(shè)備1008、其他輸入/輸出(I/O)設(shè)備1010、和一個(gè)或多個(gè)大容量存儲(chǔ)設(shè)備1012,這些部件能夠諸如經(jīng)由系統(tǒng)總線1014或其他合適的連接彼此通信。
處理器1002可以是單個(gè)處理單元或多個(gè)處理單元,其全部可以包括單個(gè)或多個(gè)計(jì)算單元或多個(gè)核。處理器1002可以被實(shí)現(xiàn)為一個(gè)或多個(gè)微處理器、微計(jì)算機(jī)、微控制器、數(shù)字信號(hào)處理器、中央處理單元、狀態(tài)機(jī)、邏輯電路、和/或基于操作指令來(lái)操縱信號(hào)的任何設(shè)備。在其他能力中,處理器1002可以被配置為取回和執(zhí)行存儲(chǔ)在存儲(chǔ)器1004、大容量存儲(chǔ)設(shè)備1012或其它計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)可讀指令。
存儲(chǔ)器1004和大容量存儲(chǔ)設(shè)備1012是用于存儲(chǔ)由處理器1002執(zhí)行用以執(zhí)行上述各種功能的指令的計(jì)算機(jī)存儲(chǔ)介質(zhì)的示例。例如,存儲(chǔ)器1004通??梢园ㄒ资源鎯?chǔ)器和非易失性存儲(chǔ)器(例如,RAM、ROM等)。此外,大容量存儲(chǔ)設(shè)備1012通??梢园ㄓ脖P(pán)驅(qū)動(dòng)器、固態(tài)驅(qū)動(dòng)器、包括外部和可移除驅(qū)動(dòng)器的可移除介質(zhì)、存儲(chǔ)卡、閃存、軟盤(pán)、光盤(pán)(例如CD、DVD)、存儲(chǔ)陣列、網(wǎng)絡(luò)附接存儲(chǔ)裝置、存儲(chǔ)區(qū)域網(wǎng)絡(luò)等。存儲(chǔ)器1004和大容量存儲(chǔ)設(shè)備1012兩者在本文中可以統(tǒng)稱為存儲(chǔ)器或計(jì)算機(jī)存儲(chǔ)介質(zhì),并且可以是能夠存儲(chǔ)計(jì)算機(jī)可讀、處理器可執(zhí)行程序指令作為可以由處理器1002執(zhí)行的計(jì)算機(jī)程序代碼的非暫態(tài)介質(zhì),處理器1002作為被配置用于執(zhí)行本文中的實(shí)現(xiàn)中描述的操作和功能的特定機(jī)器。
計(jì)算設(shè)備1000還可以包括用于諸如經(jīng)由網(wǎng)絡(luò)、直接連接與其他設(shè)備交換數(shù)據(jù)的一個(gè)或多通信接口1006,如上所述。通信接口1006可以促進(jìn)在各種各樣的網(wǎng)絡(luò)和協(xié)議類型內(nèi)的通信,包括有線網(wǎng)絡(luò)(例如,LAN、電纜等)和無(wú)線網(wǎng)絡(luò)(例如,WLAN、蜂窩、衛(wèi)星等)、因特網(wǎng)等。通信接口1006還可以提供與外部存儲(chǔ)裝置(未示出)的通信,諸如在存儲(chǔ)陣列、網(wǎng)絡(luò)附接存儲(chǔ)裝置、存儲(chǔ)區(qū)域網(wǎng)絡(luò)等中。
在一些實(shí)現(xiàn)中,可以包括顯示設(shè)備1008,例如監(jiān)視器,用于向用戶顯示信息和圖像。其他I/O設(shè)備1010可以是從用戶接收各種輸入并且向用戶提供各種輸出的設(shè)備,并且可以包括鍵盤(pán)、遙控器、鼠標(biāo)、打印機(jī)、音頻輸入/輸出設(shè)備等。
存儲(chǔ)器1004可以包括可以用于創(chuàng)建已驗(yàn)證軟件系統(tǒng)的模塊和軟件部件。例如,在包括已經(jīng)被驗(yàn)證的軟件系統(tǒng)的可信計(jì)算環(huán)境中,存儲(chǔ)器1004可以包括應(yīng)用402、公共應(yīng)用404、標(biāo)準(zhǔn)庫(kù)406、UDP/IP 408、以太網(wǎng)410、網(wǎng)絡(luò)驅(qū)動(dòng)器412、數(shù)據(jù)類型414、散列算法416、可信硬件驅(qū)動(dòng)器418、公鑰加密系統(tǒng)420、BigNum 422、CoreMath 424和操作系統(tǒng)426。在軟件開(kāi)發(fā)系統(tǒng)中,如圖1所示,存儲(chǔ)器1004還可以包括高級(jí)規(guī)范102、規(guī)范翻譯器104、低級(jí)規(guī)范106、驗(yàn)證器108、驗(yàn)證結(jié)果110、高級(jí)實(shí)現(xiàn)112、編譯器114、匯編語(yǔ)言實(shí)現(xiàn)116、匯編器118、以及機(jī)器代碼實(shí)現(xiàn)120。
本文中所描述的示例系統(tǒng)和計(jì)算設(shè)備僅是適合于一些實(shí)現(xiàn)的示例,而不旨在對(duì)可以實(shí)現(xiàn)這里描述的過(guò)程、部件和特征的環(huán)境、架構(gòu)和框架的使用或功能的范圍提出任何限制。因此,本文中的實(shí)現(xiàn)可以與很多環(huán)境或架構(gòu)一起操作,并且可以在通用和專用計(jì)算系統(tǒng)或具有處理能力的其他設(shè)備中實(shí)現(xiàn)。通常,可以使用軟件、硬件(例如,固定邏輯電路)或這些實(shí)現(xiàn)的組合來(lái)實(shí)現(xiàn)參考附圖描述的任何功能。如本文中所使用的術(shù)語(yǔ)“模塊”、“機(jī)制”或“部件”通常表示可以被配置為實(shí)現(xiàn)規(guī)定功能的軟件、硬件或軟件和硬件的組合。例如,在軟件實(shí)現(xiàn)的情況下,術(shù)語(yǔ)“模塊”、“機(jī)制”或“部件”可以表示當(dāng)在一個(gè)或多個(gè)處理設(shè)備(例如,CPU或處理器)上執(zhí)行時(shí)執(zhí)行規(guī)定任務(wù)或操作的程序代碼(和/或聲明性類型指令)。程序代碼可以存儲(chǔ)在一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)器設(shè)備或其他計(jì)算機(jī)存儲(chǔ)設(shè)備中。因此,本文中所描述的過(guò)程、部件和模塊可以由計(jì)算機(jī)程序產(chǎn)品來(lái)實(shí)現(xiàn)。
如本文中所使用的,“計(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)的易失性和非易失性、可移除和不可移除介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程ROM(EEPROM)、閃存或其他存儲(chǔ)器技術(shù)、光盤(pán)ROM(CD-ROM)、數(shù)字通用盤(pán)(DVD)或其它光存儲(chǔ)裝置、磁帶盒、磁帶、磁盤(pán)存儲(chǔ)裝置或其他磁存儲(chǔ)設(shè)備、或可以用于存儲(chǔ)信息以供計(jì)算設(shè)備訪問(wèn)的任何其它非傳輸介質(zhì)。
相反,通信介質(zhì)可以在諸如載波的調(diào)制數(shù)據(jù)信號(hào)中實(shí)施計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)。如本文中所定義的,計(jì)算機(jī)存儲(chǔ)介質(zhì)不包括通信介質(zhì)。
此外,本公開(kāi)提供了如在附圖中所描述和說(shuō)明的各種示例實(shí)現(xiàn)。然而,本公開(kāi)不限于本文中所描述和示出的實(shí)現(xiàn),而是可以擴(kuò)展到如本領(lǐng)域技術(shù)人員已知或?qū)⒆兊靡阎钠渌鼘?shí)現(xiàn)。在說(shuō)明書(shū)中對(duì)“一個(gè)實(shí)現(xiàn)”、“該實(shí)現(xiàn)”、“這些實(shí)現(xiàn)”、“示例”、“一些示例”、“一些實(shí)現(xiàn)”等的引用表示包括所描述的特定特征、結(jié)構(gòu)或特性被包括在至少一個(gè)實(shí)現(xiàn)或示例中,并且這些短語(yǔ)在說(shuō)明書(shū)中的各種地方的出現(xiàn)不一定都指代相同的實(shí)現(xiàn)。除非另有說(shuō)明,所提供的各種實(shí)現(xiàn)和示例不旨在是相互排斥的,而是可以個(gè)體地使用或彼此組合使用。
示例
作為第一示例,已經(jīng)被驗(yàn)證為符合軟件規(guī)范的軟件系統(tǒng)可以由安全硬件執(zhí)行。軟件系統(tǒng)可以包括操作系統(tǒng)和軟件應(yīng)用。公鑰可以從軟件應(yīng)用被發(fā)送給在軟件系統(tǒng)外部的外部應(yīng)用。由安全硬件簽名的第一憑證可以被發(fā)送給外部應(yīng)用。第一憑證可以標(biāo)識(shí)公鑰與軟件系統(tǒng)相關(guān)聯(lián)。由安全硬件的提供方簽名的第二憑證可以被發(fā)送給外部應(yīng)用。第二憑證可以證明安全硬件的身份。公鑰可以基于對(duì)軟件系統(tǒng)已知但是對(duì)其他軟件系統(tǒng)未知的私鑰來(lái)生成。第二憑證可以由安全硬件使用第二密鑰來(lái)簽名??梢园l(fā)送用公鑰簽名的第一消息。公鑰可以指示第一消息由軟件系統(tǒng)發(fā)送。可以接收使用公鑰簽名的第二消息。第二消息可以由軟件系統(tǒng)可讀取但其它軟件系統(tǒng)不可讀取。通過(guò)確定軟件系統(tǒng)的匯編語(yǔ)言實(shí)現(xiàn)能夠?qū)崿F(xiàn)軟件規(guī)范的功能正確版本,可以將軟件系統(tǒng)驗(yàn)證為符合軟件規(guī)范。驗(yàn)證軟件系統(tǒng)符合軟件規(guī)范可以包括證明遠(yuǎn)程等效性。證明遠(yuǎn)程等效性可以包括確定在軟件規(guī)范中描述的屬性的功能正確性并且證明軟件系統(tǒng)的至少兩個(gè)部件之間的非干擾。作為第二示例,可以執(zhí)行軟件系統(tǒng)的已驗(yàn)證引導(dǎo)。軟件系統(tǒng)可以被驗(yàn)證為符合軟件規(guī)范。軟件系統(tǒng)可以包括軟件應(yīng)用。公鑰可以從軟件應(yīng)用發(fā)送給在軟件系統(tǒng)外部的外部應(yīng)用。公鑰可以基于對(duì)軟件應(yīng)用已知但是對(duì)其他軟件系統(tǒng)未知的私鑰來(lái)生成。由安全硬件簽名的第一證書(shū)可以被發(fā)送給外部應(yīng)用。第一證書(shū)可以標(biāo)識(shí)公鑰由軟件系統(tǒng)的二進(jìn)制文件提供。由安全硬件的提供方簽名的第二證書(shū)可以被發(fā)送給外部應(yīng)用。第二證書(shū)可以證明安全硬件的身份。將由安全硬件的提供方簽名的第二證書(shū)發(fā)送給外部應(yīng)用可以包括:(1)使用第二密鑰簽名第二證書(shū)以創(chuàng)建簽名的第二證書(shū),以及(2)發(fā)送簽名的第二證書(shū)。可以發(fā)送用公鑰簽名的第一消息。公鑰可以指示第一消息由軟件系統(tǒng)發(fā)送。證明可以證實(shí)(1)公鑰對(duì)應(yīng)于私鑰以及(2)私鑰僅對(duì)軟件系統(tǒng)已知。可以發(fā)送使用公鑰簽名的第二消息。第二消息可以由軟件系統(tǒng)可讀取但其它軟件系統(tǒng)不可讀取。在執(zhí)行軟件系統(tǒng)的已驗(yàn)證引導(dǎo)之前,可以將軟件系統(tǒng)驗(yàn)證為符合軟件規(guī)范。例如,可以通過(guò)證明遠(yuǎn)程等效性來(lái)將軟件系統(tǒng)驗(yàn)證為符合軟件規(guī)范。服務(wù)器可以包括安全硬件。驗(yàn)證可以包括證明安全遠(yuǎn)程等效性。軟件系統(tǒng)的第一部件可以被驗(yàn)證為不能破壞軟件系統(tǒng)的第二部件。作為第三示例,可以從由安全硬件執(zhí)行的軟件系統(tǒng)接收公鑰。可以接收由安全硬件簽名的第一憑證。第一憑證可以證明公鑰由軟件系統(tǒng)的二進(jìn)制文件提供。可以從安全硬件接收證明安全硬件的身份的第二憑證??梢哉J(rèn)證第一憑證和第二憑證以確定公鑰是否由正由安全硬件執(zhí)行的軟件系統(tǒng)提供。公鑰可以基于僅對(duì)軟件系統(tǒng)已知的私鑰。第二憑證可以由安全硬件的提供方簽名。可以確定與軟件系統(tǒng)相關(guān)聯(lián)的系統(tǒng)散列,以匹配在軟件應(yīng)用開(kāi)始在安全硬件上執(zhí)行之前提供的在先散列??梢詮能浖到y(tǒng)接收用公鑰簽名的第一消息。公鑰可以用于認(rèn)證第一消息由軟件應(yīng)用發(fā)送。用公鑰簽名的第二消息可以被發(fā)送給軟件系統(tǒng)。第二消息可以使用由軟件應(yīng)用維護(hù)的私鑰來(lái)解密。
結(jié)論
盡管已經(jīng)用特定于結(jié)構(gòu)特征和/或方法動(dòng)作的語(yǔ)言描述了主題,但是所附權(quán)利要求中限定的主題不限于上述具體特征或動(dòng)作。相反,上面描述的具體特征和動(dòng)作被公開(kāi)作為實(shí)現(xiàn)權(quán)利要求的示例形式。本公開(kāi)旨在覆蓋所公開(kāi)的實(shí)現(xiàn)的任何和所有修改或變化,并且所附權(quán)利要求不應(yīng)當(dāng)被解釋為限于說(shuō)明書(shū)中公開(kāi)的具體實(shí)現(xiàn)。