背景技術(shù):
當(dāng)用戶(hù)將個(gè)人數(shù)據(jù)提交給遠(yuǎn)程服務(wù)(例如,基于云的服務(wù))時(shí),不保證個(gè)人數(shù)據(jù)將保持安全或者甚至服務(wù)將產(chǎn)生正確的結(jié)果。在最好的情況下,服務(wù)可能具有隱私政策,并在數(shù)據(jù)泄露的情況下限制服務(wù)的責(zé)任。然而,最近的頭條已經(jīng)提供在操作系統(tǒng)、庫(kù)或應(yīng)用(例如軟件應(yīng)用)中的易受攻擊性如何可以使得個(gè)人數(shù)據(jù)被訪(fǎng)問(wèn)的示例。
技術(shù)實(shí)現(xiàn)要素:
提供本發(fā)明內(nèi)容以簡(jiǎn)化的形式介紹概念的選擇,其在下面的具體實(shí)施方式中被進(jìn)一步描述。本發(fā)明內(nèi)容不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵或基本特征;也不用于確定或限制所要求保護(hù)的主題的范圍。
一些實(shí)現(xiàn)可以包括用于驗(yàn)證軟件代碼符合相應(yīng)規(guī)范的技術(shù)??梢允褂镁幾g器來(lái)編譯軟件系統(tǒng)的高級(jí)語(yǔ)言實(shí)現(xiàn)以創(chuàng)建匯編語(yǔ)言實(shí)現(xiàn)。軟件系統(tǒng)可以具有對(duì)應(yīng)的高級(jí)規(guī)范。可以被表達(dá)為有限狀態(tài)機(jī)的高級(jí)規(guī)范可以轉(zhuǎn)換為低級(jí)規(guī)范。匯編語(yǔ)言實(shí)現(xiàn)的屬性可以被驗(yàn)證為符合低級(jí)規(guī)范。以這種方式,可以在低水平(例如,匯編語(yǔ)言水平)上驗(yàn)證系統(tǒng)作為整體的正確性(例如,完整的軟件棧)。
附圖說(shuō)明
參考附圖描述具體實(shí)施方式。在附圖中,附圖標(biāo)記的最左邊的數(shù)字標(biāo)識(shí)參考數(shù)字在其中首次出現(xiàn)的圖形。不同圖中相同的參考數(shù)字標(biāo)識(shí)相似或相同的項(xiàng)目。
圖1是根據(jù)一些實(shí)現(xiàn)的包括規(guī)范轉(zhuǎn)換器的說(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īng)用的說(shuō)明性架構(gòu)。
圖5是根據(jù)一些實(shí)現(xiàn)的已驗(yàn)證軟件系統(tǒng)的說(shuō)明性架構(gòu)。
圖6是根據(jù)一些實(shí)現(xiàn)的可信計(jì)算基礎(chǔ)(tcb)的說(shuō)明性架構(gòu)。
圖7是根據(jù)一些實(shí)現(xiàn)的包括確定與軟件代碼相關(guān)聯(lián)的屬性的示例過(guò)程的流程圖。
圖8是根據(jù)一些實(shí)現(xiàn)的包括驗(yàn)證軟件代碼的屬性符合對(duì)應(yīng)的規(guī)范的示例過(guò)程的流程圖。
圖9是根據(jù)一些實(shí)現(xiàn)的包括執(zhí)行初步驗(yàn)證的示例過(guò)程的流程圖。
圖10是包括已驗(yàn)證的軟件系統(tǒng)的說(shuō)明性架構(gòu)。
具體實(shí)施方式
理論上,服務(wù)的軟件代碼的完整形式驗(yàn)證可以提供一個(gè)服務(wù)精確匹配正式指定的安全標(biāo)準(zhǔn)的數(shù)學(xué)保證。不幸的是,雖然軟件驗(yàn)證可以提供關(guān)于軟件代碼的可靠性的強(qiáng)有力的保證,但是計(jì)算成本可能會(huì)很高,以至于服務(wù)提供商可能無(wú)法執(zhí)行他們的整個(gè)系統(tǒng)的軟件驗(yàn)證。因此,服務(wù)提供商最多可以提供關(guān)于以通過(guò)大量未驗(yàn)證的軟件代碼圍繞的高級(jí)語(yǔ)言編寫(xiě)的小程序的強(qiáng)大的保證。例如,已驗(yàn)證的傳輸層安全協(xié)議實(shí)現(xiàn)可以依賴(lài)于未驗(yàn)證的操作系統(tǒng)和未驗(yàn)證的軟件庫(kù)。作為另一個(gè)例子,針對(duì)rsa密碼系統(tǒng)的正確性的機(jī)器檢查的證明可以假定實(shí)現(xiàn)rsa密碼系統(tǒng)的加密庫(kù)、對(duì)應(yīng)的運(yùn)行時(shí)庫(kù)和操作系統(tǒng)的正確性。作為另一示例,依賴(lài)于可信匯編代碼的微內(nèi)核可能不會(huì)對(duì)應(yīng)用級(jí)語(yǔ)義的正確性租出任何聲明。因此,服務(wù)可能無(wú)法執(zhí)行服務(wù)的軟件代碼的完整的形式驗(yàn)證,并且因此可能不能提供服務(wù)精確地匹配正式指定的安全標(biāo)準(zhǔn)的數(shù)學(xué)保證。
本文所描述的系統(tǒng)和技術(shù)可以被用于創(chuà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)程序。因此,在一些示例中,不需要假設(shè)在一個(gè)或多個(gè)服務(wù)器上執(zhí)行的軟件的任何部分是正確的。經(jīng)過(guò)驗(yàn)證的代碼是被執(zhí)行的匯編代碼,而不是在其中可以編寫(xiě)代碼的任何(一種或多種)高級(jí)語(yǔ)言。驗(yàn)證過(guò)程可以假設(shè)硬件是正確的,但是不對(duì)編譯器的正確性或代碼的運(yùn)行時(shí)執(zhí)行做出任何假設(shè)。因此,驗(yàn)證過(guò)程可以證明整個(gè)系統(tǒng)實(shí)現(xiàn)代碼的高級(jí)抽象狀態(tài)機(jī)的功能正確的版本。驗(yàn)證過(guò)程可以證明安全的遠(yuǎn)程等效,例如,遠(yuǎn)程用戶(hù)可以建立到代碼的安全信道,其輸出不能與高級(jí)抽象狀態(tài)機(jī)的輸出區(qū)分開(kāi)。
驗(yàn)證在服務(wù)器上執(zhí)行的代碼是功能上正確的并且證明遠(yuǎn)程等效可以使驗(yàn)證過(guò)程能夠?yàn)檎麄€(gè)系統(tǒng)的行為提供完整的規(guī)范和證明,詳細(xì)描述系統(tǒng)(例如,軟件代碼和硬件)將如何在每個(gè)可能的情況下表現(xiàn)。證明遠(yuǎn)程等效可以包括(i)證明屬性的功能正確性和(ii)非干擾證明,其涉及證明代碼的關(guān)系屬性(例如,關(guān)于具有不同輸入的相同代碼的兩次運(yùn)行如何相互關(guān)聯(lián)的屬性)。此外,經(jīng)由可信計(jì)算(trustedcomputing)(例如,由可信計(jì)算組(trustedcomputinggroup,開(kāi)發(fā)和公布由行業(yè)實(shí)現(xiàn)的規(guī)范的國(guó)際行業(yè)標(biāo)準(zhǔn)組織)規(guī)定)遠(yuǎn)程等同性可以被加強(qiáng)以提供安全的遠(yuǎn)程等效。例如,諸如可信平臺(tái)模塊(tpm)的安全硬件可用于(例如,通過(guò)認(rèn)證)證明公共密鑰對(duì)應(yīng)于僅對(duì)正在(一個(gè)或多個(gè))服務(wù)器上被執(zhí)行的代碼已知的私有密鑰。遠(yuǎn)程用戶(hù)可以使用公鑰創(chuàng)建到代碼的安全通道,從而實(shí)現(xiàn)與代碼的抽象狀態(tài)機(jī)的直接通信相稱(chēng)的安全性。因此,將認(rèn)證與完全驗(yàn)證的代碼相結(jié)合可以提供端到端安全性的極高保證。
與使用常規(guī)技術(shù)相比,本文描述的技術(shù)和系統(tǒng)可以使軟件開(kāi)發(fā)人員能夠以適度的開(kāi)發(fā)者努力開(kāi)發(fā)可驗(yàn)證的安全應(yīng)用。例如,常規(guī)技術(shù)通常需要幾十個(gè)人年來(lái)驗(yàn)證單個(gè)軟件層,因此使用常規(guī)技術(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)證。
為了在匯編級(jí)(例如,以適度的開(kāi)發(fā)者努力)正確地驗(yàn)證代碼,軟件開(kāi)發(fā)者可以使用本文所描述的兩個(gè)新工具。第一,規(guī)范轉(zhuǎn)換器可以使軟件開(kāi)發(fā)人員以高級(jí)語(yǔ)言有效地寫(xiě)入規(guī)范,并且然后驗(yàn)證對(duì)應(yīng)的匯編代碼是否符合規(guī)范。例如,規(guī)范轉(zhuǎn)換器可以將高級(jí)規(guī)范(例如,有限狀態(tài)機(jī))轉(zhuǎn)換為低級(jí)規(guī)范以使得驗(yàn)證能夠被執(zhí)行。第二,可以使用將高級(jí)語(yǔ)言中的可驗(yàn)證代碼編譯成可驗(yàn)證匯編語(yǔ)言的編譯器將代碼和相應(yīng)的證明從高級(jí)語(yǔ)言轉(zhuǎn)換為低級(jí)匯編代碼(或機(jī)器代碼)。這樣的編譯器可以使軟件開(kāi)發(fā)人員能夠快速地寫(xiě)入和檢查高級(jí)代碼并且證明與可執(zhí)行的匯編代碼相關(guān)聯(lián)的屬性。例如,整個(gè)系統(tǒng)(或其任何子集)的軟件(包括應(yīng)用、庫(kù)、驅(qū)動(dòng)程序和操作系統(tǒng))可以被編譯為包括可驗(yàn)證匯編代碼的單個(gè)程序。整個(gè)系統(tǒng)代碼(例如,作為整體)的正確性被驗(yàn)證,使得在整個(gè)系統(tǒng)代碼中不存在未驗(yàn)證的代碼,并且系統(tǒng)的不同組件之間沒(méi)有未驗(yàn)證的間隙。作為間隙的示例,假設(shè)第一分量x被描述為執(zhí)行q,并且將第二分量y被描述為使用執(zhí)行q的另一分量(x)執(zhí)行r。如果x表示與y不同的q,則y保證y執(zhí)行r可能不成立,從而造成間隙。驗(yàn)證過(guò)程驗(yàn)證系統(tǒng)的兩個(gè)(或多個(gè))組件之間沒(méi)有未驗(yàn)證的間隙。
此外,驗(yàn)證過(guò)程驗(yàn)證系統(tǒng)的每個(gè)組件不能破壞系統(tǒng)的另一個(gè)組件的規(guī)范。例如,可以驗(yàn)證應(yīng)用以不破壞操作系統(tǒng)的存儲(chǔ)器管理子系統(tǒng),并且可以驗(yàn)證操作系統(tǒng)的存儲(chǔ)器管理子系統(tǒng)以不破壞應(yīng)用。
此外,本文描述的系統(tǒng)和技術(shù)包括提供增量驗(yàn)證、不透明功能和自動(dòng)需求生成的驗(yàn)證工具。除了驗(yàn)證工具之外,本文中描述了還可以使用用于操作比特、字節(jié)和單詞的數(shù)組的正確庫(kù)、用于證明系統(tǒng)編程中常見(jiàn)的數(shù)學(xué)表述的工具(例如,關(guān)于如何在將字節(jié)轉(zhuǎn)換為字時(shí)價(jià)值增長(zhǎng)的推理)、以及用于加密圖形操作的工具,諸如加密(例如,rsa最優(yōu)非對(duì)稱(chēng)加密填充(oaep))、簽名(例如,rsa概率簽名方案(pss))、認(rèn)證(例如散列消息認(rèn)證碼(hmac))和散列(例如,安全散列算法(sha))在此描述。
作為可驗(yàn)證軟件代碼的示例,提供了各自用作獨(dú)立服務(wù)的幾個(gè)軟件應(yīng)用。例如,描述了將邏輯時(shí)間戳安全地分配給對(duì)象(例如,文件,文檔等)以使得它們可以被最終排序的公證應(yīng)用。公證應(yīng)用包括包含單調(diào)遞增計(jì)數(shù)器的狀態(tài),以及響應(yīng)于通過(guò)遞增計(jì)數(shù)器、對(duì)鏈接計(jì)數(shù)器值到該請(qǐng)求的狀態(tài)進(jìn)行簽名(例如,使用簽名)并且響應(yīng)該語(yǔ)句和簽名的公證請(qǐng)求的狀態(tài)。其他三個(gè)應(yīng)用包括密碼散列器、由多個(gè)用戶(hù)使用的可信計(jì)數(shù)器、以及在最小化標(biāo)識(shí)數(shù)據(jù)庫(kù)記錄的機(jī)會(huì)時(shí)最大化對(duì)數(shù)據(jù)庫(kù)查詢(xún)的準(zhǔn)確性的差異化專(zhuān)用數(shù)據(jù)庫(kù)。
因此,以下參考附圖描述了技術(shù)和系統(tǒng),其通過(guò)自動(dòng)全系統(tǒng)驗(yàn)證,在匯編級(jí)提供外部可檢查的完全驗(yàn)證的軟件。還描述了用于構(gòu)建相對(duì)較大規(guī)模的端到端驗(yàn)證系統(tǒng)的示例工具、技術(shù)和軟件工程的集合。另外,描述了證明經(jīng)由關(guān)系屬性的驗(yàn)證的基于信息流的匯編級(jí)代碼的示例方法和用于系統(tǒng)開(kāi)發(fā)者針對(duì)正式驗(yàn)證使用的示例技術(shù)。
說(shuō)明性架構(gòu)
圖1是根據(jù)一些實(shí)現(xiàn)的包括規(guī)范轉(zhuǎn)換器的說(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è)備可以被確保接收與遠(yuǎn)程設(shè)備通過(guò)不可信網(wǎng)絡(luò)與對(duì)應(yīng)的(例如對(duì)應(yīng)于應(yīng)用)狀態(tài)機(jī)通信將接收的消息序列相同的消息序列。例如,公證應(yīng)用的規(guī)范可能指示公證應(yīng)用簽署單調(diào)增加的計(jì)數(shù)器。知道系統(tǒng)與本規(guī)范相匹配,遠(yuǎn)程設(shè)備可以被提供保證,例如,運(yùn)行系統(tǒng)(i)不允許將計(jì)數(shù)器回滾,(ii)不共享私鑰,(iii)不提供除公證之外針對(duì)任何事情的簽名聲明,(iv)正確計(jì)算簽名,以及(v)不受緩沖區(qū)溢出、整數(shù)溢出或其他實(shí)現(xiàn)級(jí)漏洞的影響。
架構(gòu)100可以使遠(yuǎn)程設(shè)備能夠建立到應(yīng)用的安全信道。建立到應(yīng)用的安全通道可能會(huì)消除不可信網(wǎng)絡(luò)干擾遠(yuǎn)程設(shè)備與應(yīng)用之間通信的能力。例如,公證應(yīng)用的規(guī)范可以指出,公證應(yīng)用使用可信平臺(tái)的隨機(jī)性來(lái)計(jì)算密鑰對(duì),然后從可信平臺(tái)獲得公開(kāi)密鑰和應(yīng)用代碼的證明。因此,接收證明的遠(yuǎn)程設(shè)備可以確定通過(guò)公證應(yīng)用的代碼在可信賴(lài)的平臺(tái)上生成用對(duì)應(yīng)私鑰簽名的公證,并且因此可以被對(duì)待為猶如對(duì)應(yīng)的私鑰簽名的公證是由對(duì)應(yīng)于公證申請(qǐng)的狀態(tài)機(jī)產(chǎn)生。
除了安全保證之外,在系統(tǒng)上運(yùn)行的任何軟件應(yīng)用中都沒(méi)有隱含的信任。因此,每個(gè)軟件部件(i)被驗(yàn)證為安全的,或(ii)在防止軟件部件影響系統(tǒng)其他部件的安全性的已驗(yàn)證的沙盒環(huán)境中執(zhí)行。
此外,不是僅僅獨(dú)立地驗(yàn)證系統(tǒng)中的每個(gè)組件,而是整個(gè)系統(tǒng)作為整體可以被驗(yàn)證。通過(guò)這樣做,系統(tǒng)的安全性可以避免關(guān)于系統(tǒng)的軟件部件如何交互的不正確的假設(shè)。在用于生成要執(zhí)行的軟件的編譯器中沒(méi)有隱含的信任。因此,待執(zhí)行的指令(例如,匯編代碼)被驗(yàn)證,而不僅僅是要被編譯以創(chuàng)建指令的高級(jí)源代碼。
用于系統(tǒng)的代碼可以用被設(shè)計(jì)為支持驗(yàn)證的語(yǔ)言(例如,而不是常規(guī)的計(jì)算機(jī)語(yǔ)言)來(lái)編寫(xiě)。當(dāng)設(shè)計(jì)代碼時(shí),促進(jìn)正確性證明(例如而不是性能)的算法和代碼模式可以被選擇以提供易于驗(yàn)證的系統(tǒng)。代碼可以被優(yōu)化而不用擔(dān)心優(yōu)化可能會(huì)引入錯(cuò)誤,這是因?yàn)轵?yàn)證工具被設(shè)計(jì)以捕獲通過(guò)優(yōu)化技術(shù)可能引入的任何錯(cuò)誤。
已驗(yàn)證的系統(tǒng)可以提供針對(duì)基于軟件的攻擊的安全性。例如,對(duì)手可以在驗(yàn)證的應(yīng)用執(zhí)行之前和/或驗(yàn)證的應(yīng)用終止之后在服務(wù)器上執(zhí)行軟件。對(duì)手可能會(huì)損害服務(wù)器的固件、基本輸入/輸出系統(tǒng)(bios)或外圍設(shè)備(例如網(wǎng)卡)。在一些情況下,系統(tǒng)可以假設(shè)中央處理單元(cpu)、存儲(chǔ)器、芯片組和可信平臺(tái)模塊的行為正確,并且假定對(duì)手不會(huì)發(fā)生物理攻擊(例如,電探測(cè)存儲(chǔ)器總線(xiàn)等)。
架構(gòu)100可以包括高級(jí)規(guī)范102、規(guī)范轉(zhuǎn)換器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。例如,用戶(hù)可以創(chuàng)建高級(jí)規(guī)范102和高級(jí)語(yǔ)言實(shí)現(xiàn)112。規(guī)范轉(zhuǎn)換器104可以將高級(jí)規(guī)范102(例如,有限狀態(tài)機(jī))轉(zhuǎn)換成低級(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已被驗(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ǔ)言是用于計(jì)算機(jī)或其他可編程設(shè)備的低級(jí)語(yǔ)言的示例,其中由硬件處理器執(zhí)行的匯編語(yǔ)言和機(jī)器代碼指令之間通常具有一對(duì)一的對(duì)應(yīng)關(guān)系。
可以使用驗(yàn)證棧(例如,基于floyd-hoare或類(lèi)似推理)來(lái)證明代碼的功能正確。高級(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可以是可用于驗(yàn)證以高級(jí)語(yǔ)言編寫(xiě)的軟件程序的功能正確的靜態(tài)程序驗(yàn)證器。高級(jí)語(yǔ)言可以被設(shè)計(jì)以支持程序的靜態(tài)驗(yàn)證。高級(jí)語(yǔ)言可能包括各種特征,例如強(qiáng)制性、順序性,支持通用類(lèi),提供動(dòng)態(tài)分配和歸納數(shù)據(jù)類(lèi)型,并具有內(nèi)置的規(guī)范構(gòu)造。高級(jí)語(yǔ)言規(guī)范可以使用戶(hù)能夠指定前置條件、后置條件、幀規(guī)范(讀取和寫(xiě)入集合)和終止度量。高級(jí)語(yǔ)言可以提供可更新的重構(gòu)變量、遞歸函數(shù)和類(lèi)型,諸如集合和序列。在驗(yàn)證期間,通過(guò)驗(yàn)證器108可以使用規(guī)范和重構(gòu)構(gòu)造,并且當(dāng)編譯器114創(chuàng)建匯編語(yǔ)言實(shí)現(xiàn)116時(shí),通過(guò)編譯器114可以省略規(guī)范和重構(gòu)構(gòu)造。
在一些實(shí)現(xiàn)中,驗(yàn)證器108可以作為編譯器114的一部分運(yùn)行。程序員可以以類(lèi)似于靜態(tài)類(lèi)型檢查器的方式與驗(yàn)證器108交互,例如,當(dāng)驗(yàn)證器108產(chǎn)生錯(cuò)誤時(shí),程序員可以通過(guò)更改高級(jí)實(shí)現(xiàn)112中的類(lèi)型聲明、規(guī)范或描述中的一個(gè)或多個(gè)進(jìn)行響應(yīng)。驗(yàn)證器108可以自動(dòng)填充低級(jí)證明細(xì)節(jié)。
編譯器114可以采用對(duì)應(yīng)于高級(jí)規(guī)范102的高級(jí)語(yǔ)言實(shí)現(xiàn)112并且自動(dòng)地(例如,沒(méi)有人工交互)將高級(jí)語(yǔ)言實(shí)現(xiàn)112轉(zhuǎn)換為可驗(yàn)證的匯編語(yǔ)言實(shí)現(xiàn)116。匯編語(yǔ)言實(shí)現(xiàn)116可以使用用來(lái)描述證明義務(wù)的中間驗(yàn)證語(yǔ)言(ivl)以通過(guò)推理引擎被放出,諸如可滿(mǎn)足性模理論(smt)求解器。ivl可以包括將匯編語(yǔ)言實(shí)現(xiàn)116作為輸入、生成用于證明義務(wù)的驗(yàn)證條件以及將vc傳遞給推理引擎的驗(yàn)證引擎(例如驗(yàn)證器108)。整個(gè)系統(tǒng)的代碼可以使用驗(yàn)證器108在匯編級(jí)別(例如,匯編語(yǔ)言實(shí)現(xiàn)116)進(jìn)行驗(yàn)證。在高級(jí)語(yǔ)言實(shí)現(xiàn)112或編譯器114中的任何錯(cuò)誤可由驗(yàn)證器108標(biāo)識(shí)。由于一些安全屬性不能通過(guò)功能正確倍表達(dá),所以描述了用于驗(yàn)證代碼的關(guān)系屬性(例如,高級(jí)語(yǔ)言實(shí)現(xiàn)112)的技術(shù)。當(dāng)驗(yàn)證結(jié)果110指示匯編語(yǔ)言實(shí)現(xiàn)116已被驗(yàn)證為正確時(shí),可信匯編器118可用于將匯編語(yǔ)言實(shí)現(xiàn)116轉(zhuǎn)換為機(jī)器代碼實(shí)現(xiàn)120(例如,可執(zhí)行代碼)。
使用推理來(lái)驗(yàn)證代碼
驗(yàn)證器108可以使用一種類(lèi)型的推理(例如,floyd-hoare推理或其他類(lèi)似推理)來(lái)執(zhí)行匯編語(yǔ)言實(shí)現(xiàn)116的驗(yàn)證。高級(jí)語(yǔ)言實(shí)現(xiàn)112可以關(guān)于程序可能進(jìn)入的狀態(tài)的斷定而被注釋?zhuān)⑶裔槍?duì)到程序的所有可能的輸入,當(dāng)程序運(yùn)行時(shí),驗(yàn)證過(guò)程可以證明斷定是有效的。作為第一示例,以下程序用關(guān)于在最終的程序狀態(tài)(例如,后置條件狀態(tài))被注釋有斷定,指示輸出o必須是偶數(shù):
proceduremain(s,i)returns(o)ensureseven(o);
{o:=(s+s)+(i+i);}
在第一示例中,驗(yàn)證器108可以驗(yàn)證后置條件“even(o)”對(duì)于所有可能的輸入s和i保持真實(shí)。相反,如果計(jì)算“o:=(s+s)+(i+i)”被替換為“o:=s+i“,則驗(yàn)證結(jié)果110可以指示驗(yàn)證失敗,這是因?yàn)閷?duì)于一些輸入i和s,輸出o可以是奇數(shù)。
對(duì)于生成多個(gè)輸出的程序,可以使用多個(gè)輸出通過(guò)使用前置條件注釋輸出方法來(lái)驗(yàn)證程序的規(guī)范,該前置條件在執(zhí)行程序代碼的任保時(shí)間必須是真的。作為第二個(gè)例子:
在第二示例中,“不變量偶數(shù)(計(jì)數(shù))”針對(duì)待信任的輸出指定輸出是偶數(shù)。斷定“不變量(計(jì)數(shù))”(例如,循環(huán)不變量)提供信息以使驗(yàn)證器108能夠驗(yàn)證程序。如果沒(méi)有提供這樣的信息(例如,循環(huán)不變),則驗(yàn)證器108可能不會(huì)將有效程序自動(dòng)識(shí)別為正確。因此,為了使驗(yàn)證器108能夠驗(yàn)證匯編語(yǔ)言實(shí)現(xiàn)116,高級(jí)語(yǔ)言實(shí)現(xiàn)112可以指定一個(gè)或多個(gè)前置條件、后置條件、循環(huán)不變量或其任何組合。高級(jí)語(yǔ)言實(shí)現(xiàn)中的前置條件、后置條件、循環(huán)不變量可能是高級(jí)規(guī)范102中被包括的前置條件和后置條件的補(bǔ)充。
撰寫(xiě)可信賴(lài)規(guī)范
為了實(shí)現(xiàn)系統(tǒng)的端到端驗(yàn)證,可以使用兩種類(lèi)型的規(guī)范,例如硬件規(guī)范和軟件規(guī)范。對(duì)于硬件規(guī)范,指定了可執(zhí)行的每個(gè)匯編指令,以啟用低級(jí)驗(yàn)證。硬件規(guī)范描述了系統(tǒng)上的該指令的期望(例如,將多個(gè)寄存器相加的add可能期望對(duì)多個(gè)寄存器求和不會(huì)引起溢出),以及指令的影響(例如,add將多個(gè)寄存器的和寫(xiě)回到目標(biāo)寄存器)。
軟件規(guī)范可以包括對(duì)應(yīng)軟件應(yīng)用的期望行為的抽象描述。抽象描述可以根據(jù)較低級(jí)別的庫(kù)規(guī)范被模塊化編寫(xiě)。例如,公證申請(qǐng)的軟件規(guī)范可以描述:(i)公證申請(qǐng)的狀態(tài)機(jī)如何前進(jìn),以及(ii)每個(gè)狀態(tài)中允許的輸出。為了說(shuō)明,規(guī)范可以指示特定狀態(tài)中的一個(gè)輸出是被定義為用于rsa簽名的簽名消息。
由驗(yàn)證器108執(zhí)行的驗(yàn)證過(guò)程可以通過(guò)證明tcb滿(mǎn)足對(duì)應(yīng)的高級(jí)規(guī)范來(lái)從可信計(jì)算基礎(chǔ)(tcb)中移除實(shí)現(xiàn)代碼。然而,規(guī)范可能是tcb的一部分,因此規(guī)范本身必須被驗(yàn)證為可信賴(lài)。因此,系統(tǒng)的設(shè)計(jì)可以利用規(guī)范開(kāi)始,通過(guò)參考應(yīng)用規(guī)范,應(yīng)用慣用規(guī)范和/或應(yīng)用規(guī)范檢查。因此,可以在開(kāi)始高級(jí)語(yǔ)言實(shí)現(xiàn)112之前寫(xiě)入高級(jí)規(guī)范102。
高級(jí)規(guī)范102可以使用慣用類(lèi)型的規(guī)范,其指定由系統(tǒng)使用的那些特征子集,例如,而不需要指定未使用的特征。例如,可信平臺(tái)模塊(tpm)可能具有數(shù)百頁(yè)的相關(guān)文檔。然而,使用tpm的功能的子集的特定系統(tǒng)可以指定tpm的功能的子集,而不需要指定在特定系統(tǒng)中未使用的tpm的功能。編寫(xiě)高級(jí)規(guī)范102以包括由系統(tǒng)使用的功能,同時(shí)排除未使用的功能可能導(dǎo)致針對(duì)高級(jí)規(guī)范102的更小的大小(例如,與如果包括未使用的功能相比較),從而使得能夠更容易和更準(zhǔn)確地進(jìn)行規(guī)范的人員審核。
可以使用各種附加技術(shù)來(lái)減少規(guī)范(例如,高級(jí)規(guī)范102)中的錯(cuò)誤/問(wèn)題。例如,包括由系統(tǒng)使用的功能的較小規(guī)范可以被更容易和更快地驗(yàn)證。作為另一個(gè)例子,以比實(shí)現(xiàn)代碼更抽象、聲明性方式編寫(xiě)的規(guī)范可能使規(guī)范錯(cuò)誤不太可能發(fā)生,并且當(dāng)它們發(fā)生時(shí)更容易找到。
產(chǎn)生可驗(yàn)證的匯編語(yǔ)言
為了在低級(jí)別驗(yàn)證軟件代碼的同時(shí)例得能夠快速、大規(guī)模的軟件開(kāi)發(fā),可以相互驗(yàn)證規(guī)范和相應(yīng)的匯編語(yǔ)言。例如,高級(jí)規(guī)范102可以被轉(zhuǎn)換成低級(jí)規(guī)范106,高級(jí)語(yǔ)言實(shí)現(xiàn)112可以被編譯成匯編語(yǔ)言實(shí)現(xiàn)116,并且驗(yàn)證器108可以驗(yàn)證匯編語(yǔ)言實(shí)現(xiàn)116表現(xiàn)為由低級(jí)規(guī)范106指定。這使得能夠?qū)⒏呒?jí)語(yǔ)言用于高級(jí)實(shí)現(xiàn)112而不需要信任編譯器114,并且不需要信任運(yùn)行時(shí)環(huán)境(例如,可以使用各種庫(kù)、運(yùn)行時(shí)組件、操作系統(tǒng)實(shí)用程序等)。
編譯器114可以是或可以不是可信組件。例如,如果編譯器114不是可信組件,則編譯器114可能不保證匯編語(yǔ)言實(shí)現(xiàn)116對(duì)應(yīng)于高級(jí)語(yǔ)言實(shí)現(xiàn)112(例如,以100%的準(zhǔn)確性)。編譯器114可以將高級(jí)別語(yǔ)言實(shí)現(xiàn)112和任何包含的證明轉(zhuǎn)換成驗(yàn)證器108自動(dòng)驗(yàn)證的匯編語(yǔ)言實(shí)現(xiàn)116。因?yàn)橛沈?yàn)證器108驗(yàn)證由編譯器114創(chuàng)建的匯編語(yǔ)言實(shí)現(xiàn)116,編譯器114可能不是可信部件。這使得軟件開(kāi)發(fā)人員能夠增加復(fù)雜的功能和優(yōu)化,而不會(huì)影響安全保證。相反,驗(yàn)證器108可以用于標(biāo)識(shí)編譯器114中的錯(cuò)誤。
當(dāng)將高級(jí)語(yǔ)言實(shí)現(xiàn)112轉(zhuǎn)換成匯編語(yǔ)言實(shí)現(xiàn)時(shí),編譯器114可以執(zhí)行代碼優(yōu)化。例如,以下高級(jí)語(yǔ)言代碼可能會(huì)將一個(gè)數(shù)組復(fù)制到另一個(gè)數(shù)組:
編譯器114可以為上述生成匯編語(yǔ)言代碼,其中匯編語(yǔ)言代碼不在數(shù)組循環(huán)內(nèi)執(zhí)行數(shù)組邊界檢查,這是因?yàn)椴蛔兞?<=k<=n提供每個(gè)數(shù)組中的索引k是在0和n的范圍內(nèi)。
在軟件開(kāi)發(fā)期間的初步驗(yàn)證
為了減少軟件開(kāi)發(fā)者的驗(yàn)證負(fù)擔(dān),高級(jí)規(guī)范102和高級(jí)語(yǔ)言實(shí)現(xiàn)112可以被寫(xiě)入執(zhí)行初步驗(yàn)證124的軟件開(kāi)發(fā)環(huán)境122。例如,初步驗(yàn)證124可以將具有高級(jí)規(guī)范102的高級(jí)語(yǔ)言實(shí)現(xiàn)112驗(yàn)證為正在被寫(xiě)入的高級(jí)語(yǔ)言代碼。為了說(shuō)明,當(dāng)它根據(jù)高級(jí)語(yǔ)言規(guī)范被寫(xiě)入時(shí)(例如,在寫(xiě)入之后立即),在高級(jí)語(yǔ)言實(shí)現(xiàn)112被轉(zhuǎn)換為可驗(yàn)證的匯編語(yǔ)言實(shí)現(xiàn)116之前,高級(jí)語(yǔ)言開(kāi)發(fā)環(huán)境可以檢查高級(jí)語(yǔ)言實(shí)現(xiàn)112的代碼。
此外,初步驗(yàn)證124可以執(zhí)行驗(yàn)證結(jié)果高速緩存,使得對(duì)高級(jí)語(yǔ)言實(shí)現(xiàn)112的編輯導(dǎo)致對(duì)編輯的代碼的重新驗(yàn)證。軟件開(kāi)發(fā)環(huán)境122可以包括諸如visualstudioide的集成開(kāi)發(fā)環(huán)境(ide),以提供關(guān)于驗(yàn)證的接近實(shí)時(shí)反饋。隨著開(kāi)發(fā)人員輸入和編輯用于高級(jí)語(yǔ)言實(shí)現(xiàn)112的代碼,軟件開(kāi)發(fā)環(huán)境122可以標(biāo)識(shí)錯(cuò)誤并使得開(kāi)發(fā)者能夠查看與每個(gè)錯(cuò)誤相關(guān)聯(lián)的詳細(xì)錯(cuò)誤消息。例如,選擇錯(cuò)誤消息可能導(dǎo)致突出顯示失敗的前置條件和初步驗(yàn)證124已經(jīng)確定不滿(mǎn)足前置條件的具體條款。這種詳細(xì)的反饋可以使得開(kāi)發(fā)者在編寫(xiě)針對(duì)高級(jí)語(yǔ)言實(shí)現(xiàn)112的代碼時(shí)作出反應(yīng),而不是在寫(xiě)入高級(jí)語(yǔ)言實(shí)現(xiàn)112之后嘗試更正問(wèn)題,類(lèi)似于事后拼寫(xiě)檢查和連續(xù)拼寫(xiě)檢查之間的差異。在通過(guò)高級(jí)語(yǔ)言實(shí)現(xiàn)112的代碼傳播錯(cuò)誤之前,這樣的開(kāi)發(fā)環(huán)境可以使開(kāi)發(fā)人員能夠快速識(shí)別和解決錯(cuò)誤,推理錯(cuò)誤等。此外,當(dāng)初步驗(yàn)證124請(qǐng)求開(kāi)發(fā)者提供信息以證明為高級(jí)語(yǔ)言實(shí)現(xiàn)112編寫(xiě)的代碼與高級(jí)規(guī)范102匹配時(shí),開(kāi)發(fā)者可能會(huì)被警告潛在的問(wèn)題。開(kāi)發(fā)人員可以提供信息,例如,不變量的內(nèi)聯(lián)斷定,以及初步驗(yàn)證驗(yàn)證124可以提供即時(shí)反饋,其指示所提供的信息是否使得能夠根據(jù)高級(jí)規(guī)范102對(duì)所寫(xiě)入的代碼進(jìn)行驗(yàn)證。
軟件開(kāi)發(fā)環(huán)境122可以提供模塊驗(yàn)證,其中第一代碼文件可以導(dǎo)入先前驗(yàn)證的第二代碼文件的接口,而不會(huì)導(dǎo)致第二文件中的代碼被重新驗(yàn)證。在開(kāi)發(fā)者之間的層級(jí),軟件開(kāi)發(fā)環(huán)境122可以通過(guò)諸如基于云的存儲(chǔ)設(shè)施的公共存儲(chǔ)設(shè)施來(lái)共享驗(yàn)證結(jié)果。例如,開(kāi)發(fā)人員可能會(huì)改變代碼,運(yùn)行驗(yàn)證并提交更改后的代碼。當(dāng)另一個(gè)開(kāi)發(fā)人員檢出代碼時(shí),可以根據(jù)高速緩存的結(jié)果立即驗(yàn)證代碼。
軟件開(kāi)發(fā)環(huán)境122可以包括自動(dòng)需求傳播。例如,寫(xiě)入高級(jí)規(guī)范102的用戶(hù)可以將特定功能指定為自動(dòng)請(qǐng)求(autoreq)。該指定指示軟件開(kāi)發(fā)環(huán)境122自動(dòng)添加前置條件以使得特定功能能夠滿(mǎn)足被叫方的要求(例如,該特定功能所呼叫的其他功能)。
驗(yàn)證關(guān)系屬性
除了功能正確性之外,驗(yàn)證器108可以驗(yàn)證應(yīng)用不提供關(guān)于秘密數(shù)據(jù)的信息(例如,要保持為私有的或被限制訪(fǎng)問(wèn)的數(shù)據(jù))的信息(“不泄漏”),如私鑰。關(guān)于秘密數(shù)據(jù)的不泄露信息的屬性被稱(chēng)為不干擾。假設(shè)變量s表示應(yīng)用內(nèi)的秘密數(shù)據(jù),而i代表到應(yīng)用的公共輸入。如先前所述,聲明o:=(s+s)+(i+i)滿(mǎn)足功能正確性規(guī)范,例如even(0)。然而,輸出o使得外部(例如,未經(jīng)授權(quán)的程序)能夠確定秘密s,例如通過(guò)計(jì)算o/2-i。在該示例中,秘密s泄漏到外部。相反,聲明o:=(s-s)+(i+i),滿(mǎn)足even(o),但不提供在輸出o中關(guān)于s的信息,這是因?yàn)楸淮鎯?chǔ)在o中的值取決于i中的值但是獨(dú)立于s。為了驗(yàn)證程序不提供關(guān)于秘密數(shù)據(jù)的信息,驗(yàn)證器108可以分析程序的多個(gè)執(zhí)行并比較程序的執(zhí)行的輸出以確定輸出依賴(lài)于哪個(gè)值。假設(shè)公共輸入i被傳遞給程序的所有執(zhí)行,但秘密s在程序的執(zhí)行中是不同的。如果程序的所有執(zhí)行都產(chǎn)生與s無(wú)關(guān)的相同的輸出o,則o獨(dú)立于s,并且程序不提供關(guān)于s的信息。如果程序的至少一次執(zhí)行產(chǎn)生與剩余程序的執(zhí)行不同的輸出程序,那么程序可以提供關(guān)于s的信息。因此,通過(guò)證明當(dāng)給定相同的i但是不同的s時(shí),程序的兩次執(zhí)行不產(chǎn)生不同的o,可以證明o獨(dú)立于s。數(shù)學(xué)上,想法是證明對(duì)于所有可能的執(zhí)行對(duì)(在每個(gè)對(duì)l和r中調(diào)用兩個(gè)執(zhí)行,用于左和右),如果公共輸入i相等但是秘密s可能不同,則輸出o可以是相等的,例如,
為了確定應(yīng)用不公開(kāi)秘密數(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確定是否il=ir,無(wú)論在哪兒test被調(diào)用,并且關(guān)系后條件left(o)==right(o)指示驗(yàn)證器108確定是否il=ir=>ol=or。對(duì)于我們的代碼的大多數(shù),驗(yàn)證器108可以利用現(xiàn)有的功能正確性注釋?zhuān)虼碎_(kāi)發(fā)者可能不提供關(guān)系注釋。例如,驗(yàn)證器108可以使用代碼中的功能后置條件:
programcomputeipchecksum(i)returens(o)ensureso==ipchecksum(i);
以確定如果il=ir,則ipchecksum(il)=ipchecksum(ir),因此ol=or。
提供安全屬性
程序的輸出不依賴(lài)于程序中的秘密數(shù)據(jù)的要求(和驗(yàn)證)對(duì)于大多數(shù)現(xiàn)實(shí)世界系統(tǒng)來(lái)說(shuō)可能過(guò)于嚴(yán)格(例如,不實(shí)際和不必要的)條件。通常,程序可以允許秘密數(shù)據(jù)對(duì)輸出的有限影響,例如使用秘密密鑰對(duì)輸出進(jìn)行簽名。這種程序的安全策略可以明確地解密某些值(例如簽名),使得簽名可以包含在輸出中。
圖2是根據(jù)一些實(shí)現(xiàn)方式的包括客戶(hù)端、網(wǎng)絡(luò)、應(yīng)用和解密器的說(shuō)明性架構(gòu)200。架構(gòu)200圖示了已驗(yàn)證的系統(tǒng)的架構(gòu),包括客戶(hù)端202、網(wǎng)絡(luò)204、應(yīng)用206和解密器208。解密器208可以授權(quán)從秘密數(shù)據(jù)獲得的所選擇的輸出的釋放。應(yīng)用的解密策略可以被表示為對(duì)應(yīng)于由應(yīng)用規(guī)范指定的高級(jí)行為的狀態(tài)機(jī)??蛻?hù)端202可以通過(guò)網(wǎng)絡(luò)204與(已驗(yàn)證的)應(yīng)用206通信。例如,客戶(hù)端202可以通過(guò)網(wǎng)絡(luò)204發(fā)送輸入數(shù)據(jù)i。網(wǎng)絡(luò)204可以丟棄、延遲、復(fù)制或篡改輸入數(shù)據(jù)i。網(wǎng)絡(luò)204可以不具有對(duì)應(yīng)用206的秘密數(shù)據(jù)的訪(fǎng)問(wèn)。應(yīng)用206可以接收輸入數(shù)據(jù)i的被破壞版本i*,并且跨網(wǎng)絡(luò)204發(fā)送輸出o來(lái)進(jìn)行響應(yīng)。網(wǎng)絡(luò)204可以破壞輸出o并向客戶(hù)端提供一個(gè)破壞版本的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)證,期望的解密輸出d將等于根據(jù)指定:d=statemachineoutput(s;i)的狀態(tài)機(jī)的解密策略的輸出。當(dāng)驗(yàn)證器108執(zhí)行靜態(tài)驗(yàn)證并確定狀態(tài)機(jī)的解密策略被滿(mǎn)足時(shí),解密器208產(chǎn)生應(yīng)用206可以用作輸出o的一部分的解密輸出o。
在一些實(shí)現(xiàn)中,o可以等于d,使得解密器208在運(yùn)行時(shí)期間是無(wú)操作(沒(méi)有操作)。然而,解密器208是無(wú)操作的信息可能不會(huì)被公開(kāi)給驗(yàn)證器108,使得可以在不公開(kāi)dl=dr的情況下公開(kāi)ol=or。在某些情況下,例如,可以使用d上的暴力破解(例如,通過(guò)分解rsa公開(kāi)密鑰)來(lái)確定秘密數(shù)據(jù)s,dl=dr可能意味著sl=sr,這是不期望的。
安全應(yīng)用示例
討論了驗(yàn)證的安全應(yīng)用(例如,稱(chēng)為ironclad應(yīng)用)的四個(gè)示例。每個(gè)應(yīng)用的證明建立在以前已證明的較低級(jí)別的庫(kù)、驅(qū)動(dòng)程序和操作系統(tǒng)上。每個(gè)應(yīng)用可以編譯為經(jīng)由諸如例如用戶(hù)數(shù)據(jù)報(bào)協(xié)議(udp)的協(xié)議與其他機(jī)器通信的獨(dú)立系統(tǒng)映像。每個(gè)示例應(yīng)用都是一個(gè)有用和完整的應(yīng)用,其可以在數(shù)據(jù)中心中至少使用一臺(tái)專(zhuān)用機(jī)器。對(duì)細(xì)粒度安全執(zhí)行環(huán)境的硬件支持可以使得能夠復(fù)用多個(gè)ironclad應(yīng)用。
公證應(yīng)用
公證應(yīng)用將邏輯時(shí)間戳安全地分配給文檔,以便可以最終排序文檔。在常規(guī)系統(tǒng)中,這樣的時(shí)間戳服務(wù)的用戶(hù)假設(shè)機(jī)器正在執(zhí)行正確的軟件。本文所描述的公證應(yīng)用不需要這樣的假設(shè)。
公證遠(yuǎn)程等效。公證應(yīng)用相當(dāng)于具有以下?tīng)顟B(tài)的狀態(tài)機(jī):
·a(publickey,privatekey)對(duì),其使用從tpm讀取的第一個(gè)連續(xù)的隨機(jī)字節(jié)序列中的rsa密鑰生成算法來(lái)被計(jì)算。
·tpm,其中平臺(tái)配置寄存器(例如pcr19)已經(jīng)與密鑰對(duì)的公共部分一起被擴(kuò)展;和
·計(jì)數(shù)器,被初始化為0;
和以下轉(zhuǎn)換:
·給定輸入(connect,nonce),tpm狀態(tài)通過(guò)經(jīng)過(guò)pcr17-19獲取的引用quote和外部隨機(jī)數(shù)nonce被改變。輸出是(publickey;quote)。
·給定輸入(notarize,hash),遞增計(jì)數(shù)器counter并返回sigprivatekey(op-ctr-adv||rfc4251encode(counter)||hash)。
pcr是允許安全存儲(chǔ)和報(bào)告安全相關(guān)度量的寄存器。針對(duì)公證應(yīng)用的規(guī)范的一部分可能包括在out_sig被解密之前要滿(mǎn)足的斷定(否則由于依賴(lài)于秘密數(shù)據(jù)而無(wú)法輸出)。這種斷定的簡(jiǎn)化示例是:
證明公證等價(jià)可以包括(1)輸入不干擾、(2)程序的連接操作的功能正確性、(3)程序的公證操作的功能正確性、以及(4)輸出不干擾的證明。(1)輸入不干擾:公證應(yīng)用傳遞給解密器208的隨機(jī)數(shù)和消息基于公共數(shù)據(jù)。(2)連接的功能正確性:應(yīng)用從隨機(jī)性正確地獲得密鑰,tpm引用應(yīng)用獲取來(lái)自tpm,當(dāng)它的pcrs處于所需狀態(tài)時(shí)。(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。
被稱(chēng)為trinc302的可信增量應(yīng)用將一般化為公證應(yīng)用。trinc302維護(hù)每個(gè)用戶(hù)(例如,每應(yīng)用)計(jì)數(shù)器,使得每個(gè)用戶(hù)(例如,每個(gè)應(yīng)用)接收連續(xù)的值,其間沒(méi)有間隙。trinc302是分布式系統(tǒng)中的通用工具,trinc302可用于各種功能,諸如例如防篡改審核日志,拜占庭容錯(cuò)復(fù)制狀態(tài)機(jī),驗(yàn)證不受信任的文件服務(wù)器正常運(yùn)行等。trinc302可以包括創(chuàng)建計(jì)數(shù)器304模塊以使得能夠創(chuàng)建計(jì)數(shù)器306。計(jì)數(shù)器306可以包括n個(gè)計(jì)數(shù)器(其中n>0),諸如第一計(jì)數(shù)器308到第n計(jì)數(shù)器310。trinc302可以包括私鑰模塊312、公鑰證書(shū)模塊314、密碼處理模塊316、元計(jì)數(shù)器318和trinc狀態(tài)指示符320。
trinc遠(yuǎn)程等效。trinc應(yīng)用302遠(yuǎn)程等同于諸如公證應(yīng)用之類(lèi)的狀態(tài)機(jī),除了trinc具有多個(gè)計(jì)數(shù)器,每個(gè)元組(ki;vi)和最初設(shè)置為0的元計(jì)數(shù)器。代替公證過(guò)渡trinc具有:
·給定輸入(creat,k),
ο設(shè)置i:=meta_counter,
ο遞增meta_counter,以及
ο設(shè)置(ki,vi)=(k,0)。
·g定輸入(advance;i,vnew,msg,usersig),令vold=計(jì)數(shù)器tuplei中的vi。
ο如果vold<=vnew且verifysigki(vnew||msg,usersig),則設(shè)置vi:=vnew并且輸出sigprivatekey(op-ctr-adv||encode(i)||encode(vold)||encode(vnew)||msg)。
密碼散列(“passhash”)應(yīng)用
密碼散列應(yīng)用可能致使密碼數(shù)據(jù)庫(kù)的丟失成為無(wú)害的。例如,攻擊者可能會(huì)竊取數(shù)據(jù)庫(kù)并掛載脫機(jī)攻擊。即使數(shù)據(jù)庫(kù)被正確地散列和鹽化,低熵密碼也使數(shù)據(jù)庫(kù)變得脆弱。通過(guò)使用密碼散列,未經(jīng)授權(quán)的訪(fǎng)問(wèn)散列密碼不會(huì)危及安全性。
密碼散列遠(yuǎn)程等效。passhash應(yīng)用遠(yuǎn)程等同于以下?tīng)顟B(tài)機(jī)。狀態(tài)由一個(gè)字節(jié)字符串secret組成,初始化為從tpm讀取的第一32個(gè)隨機(jī)字節(jié)。給定輸入(哈希、鹽、密碼),passhash應(yīng)用輸出sha256(secret||salt||password)。
基于該規(guī)范,散列密碼對(duì)于脫機(jī)攻擊者是無(wú)用的,這是因?yàn)闆](méi)有秘密,即使對(duì)低熵密碼的強(qiáng)力猜測(cè)攻擊是不可行的。
差異隱私(“diffpriv”)服務(wù)
圖4是根據(jù)一些實(shí)現(xiàn)的包括差分隱私應(yīng)用402的說(shuō)明性架構(gòu)400。差分隱私應(yīng)用402可以包括密鑰對(duì)404、一個(gè)或多個(gè)數(shù)據(jù)庫(kù)406和隱私預(yù)算408。
差分保密應(yīng)用402提供差分隱私服務(wù),并且是具有更長(zhǎng)和更復(fù)雜的抽象規(guī)范的較大應(yīng)用(例如,與trinc等相比)的示例。差分隱私應(yīng)用402可以從貢獻(xiàn)者收集敏感數(shù)據(jù),并允許分析者研究聚合數(shù)據(jù)庫(kù)406。差分隱私應(yīng)用402可以保證每個(gè)貢獻(xiàn)者的差異隱私,例如,如果貢獻(xiàn)者的數(shù)據(jù)被省略,則提供給分析者的答案幾乎與本來(lái)已經(jīng)被回答的答案無(wú)法區(qū)分。算法a是具有隱私∈的差異隱私,如果對(duì)于任何一組答案s和通過(guò)單行不同的任何對(duì)數(shù)據(jù)庫(kù)d1和d2,則p[a(d1)∈s]<=λ●[a(d2)∈s],其中隱私參數(shù)λ=e∈。
具有小隱私參數(shù)的多個(gè)查詢(xún)可以等同于具有參數(shù)的乘積的單個(gè)查詢(xún)。開(kāi)始具有到貢獻(xiàn)者保證的隱私預(yù)算408b=λ,具有參數(shù)λq的每個(gè)查詢(xún)q劃分預(yù)算b':=b/λq(例如,具有λq>b的查詢(xún)可能被拒絕)。對(duì)于噪聲計(jì)算,計(jì)算查詢(xún)的靈敏度δ,如果單個(gè)數(shù)據(jù)庫(kù)行發(fā)生變化,則查詢(xún)結(jié)果可能會(huì)改變最多。分析人員收到正確答案的總和通過(guò)δ從參數(shù)化的分布中抽取的隨機(jī)噪聲值??梢允褂脙H包括有理數(shù)的噪聲分布,這是因?yàn)榭梢允褂弥噶罴?例如,x86指令集)精確地采樣噪聲分布。
diffpriv遠(yuǎn)程等效。diffpriv應(yīng)用遠(yuǎn)程等效于具有如下?tīng)顟B(tài)的狀態(tài)機(jī):
·密鑰對(duì)和tpm被初始化為類(lèi)似于公證應(yīng)用;
·剩余預(yù)算b,實(shí)數(shù);以及
·一系列行,每行由重復(fù)檢測(cè)的隨機(jī)數(shù)和整數(shù)列值的列表組成;并且包括連接到應(yīng)用、初始化數(shù)據(jù)庫(kù)、添加行和執(zhí)行查詢(xún)的轉(zhuǎn)換。
靈敏度。在規(guī)范的噪聲計(jì)算公式中用作靈敏度參數(shù)的值δ可以是查詢(xún)結(jié)果的實(shí)際靈敏度。例如,如果我們將a(d)定義為應(yīng)用在數(shù)據(jù)庫(kù)為d時(shí)計(jì)算的答案,則對(duì)于任何兩個(gè)數(shù)據(jù)庫(kù)d1和d2,|a(d1)-a(d2)|δ。
為了可驗(yàn)證,可以使用查詢(xún),其中每個(gè)查詢(xún)是將行轉(zhuǎn)換為單個(gè)值的映射器,以及聚合結(jié)果集合的減速器(reducer),使得只有減速器影響敏感度。分析人員可以提供任意的映射器,diffpriv可以為單個(gè)減速器總和提供靈敏度屬性。diffpriv應(yīng)用可能會(huì)采用rowmin和rowmax參數(shù),將每個(gè)映射器輸出值剪切到一個(gè)范圍。例如:
diffpriv應(yīng)用被驗(yàn)證以滿(mǎn)足將減速器輸出靈敏度與噪聲產(chǎn)生中使用的δ相關(guān)聯(lián)的斷定。
全系統(tǒng)驗(yàn)證
圖5是根據(jù)一些實(shí)現(xiàn)的已驗(yàn)證的軟件系統(tǒng)500的說(shuō)明性體系架構(gòu)。軟件系統(tǒng)500包括一個(gè)或多個(gè)應(yīng)用502、一個(gè)或多個(gè)通用應(yīng)用庫(kù)504、用戶(hù)數(shù)據(jù)報(bào)協(xié)議/因特網(wǎng)(udp/ip)508協(xié)議模塊、以太網(wǎng)510協(xié)議模塊、網(wǎng)絡(luò)驅(qū)動(dòng)器512、一個(gè)或多個(gè)數(shù)據(jù)類(lèi)型514、安全散列(sha)516模塊、可信平臺(tái)模塊(tpm)驅(qū)動(dòng)器518、rsa520庫(kù)、bignum庫(kù)522(例如,用于執(zhí)行加密功能))、coremath庫(kù)524(例如,執(zhí)行科學(xué),工程或計(jì)算密集型計(jì)算)和操作系統(tǒng)526(例如,已驗(yàn)證的微內(nèi)核)。應(yīng)用502可以包括在已驗(yàn)證(例如,沙箱)環(huán)境532中執(zhí)行的已驗(yàn)證應(yīng)用528和未驗(yàn)證應(yīng)用530。
應(yīng)用502可以包括passhash、notary、trinc、diffpriv、另一應(yīng)用或其任何組合。操作系統(tǒng)526可以包括對(duì)后期啟動(dòng)、iommu、分段、頁(yè)表、另一操作系統(tǒng)實(shí)用程序或其任何組合的支持。軟件代碼可以包括注釋?zhuān)缪h(huán)不變量,前置條件和后置條件以使得能夠驗(yàn)證軟件代碼。注釋可以被看作是建立在高級(jí)定理上的引理。
為了說(shuō)明系統(tǒng)500的端到端驗(yàn)證的步驟,描述了若干命題。為了易于理解下面這些命題簡(jiǎn)單地用簡(jiǎn)單的英文說(shuō)明。應(yīng)當(dāng)理解,實(shí)際命題可以采用高級(jí)語(yǔ)言實(shí)現(xiàn)112中的注釋的形式。下面描述的命題是在驗(yàn)證系統(tǒng)500時(shí)可以使用的幾個(gè)關(guān)鍵命題。
iommu配置。已驗(yàn)證的應(yīng)用(例如,ironclad應(yīng)用)可以配置輸入-輸出存儲(chǔ)器管理單元(iommu),以將存儲(chǔ)器劃分為設(shè)備可訪(fǎng)問(wèn)和應(yīng)用專(zhuān)用私有存儲(chǔ)器,使得非設(shè)備操作訪(fǎng)問(wèn)應(yīng)用專(zhuān)用私有存儲(chǔ)器。匯編語(yǔ)言指令規(guī)范可以用于確定非設(shè)備存儲(chǔ)器操作僅訪(fǎng)問(wèn)通過(guò)硬件設(shè)備專(zhuān)用向量(簡(jiǎn)單iommu)保護(hù)的應(yīng)用專(zhuān)用存儲(chǔ)器。
一些中央處理單元(cpu)可以提供諸如用于測(cè)量的動(dòng)態(tài)信任根(drtm)的特征,也稱(chēng)為后期啟動(dòng)。drtm可以重置cpu為已知狀態(tài),存儲(chǔ)由指令的參數(shù)指向的存儲(chǔ)器內(nèi)代碼的測(cè)量(例如,哈希代碼),并跳轉(zhuǎn)到該代碼。在后期啟動(dòng)之后,硬件可以提供cpu的軟件程序控制連同受保護(hù)的存儲(chǔ)器的64千字節(jié)(kb)。為了使用超過(guò)64kb,軟件程序可以基于與iommu的配置相關(guān)聯(lián)的規(guī)范,首先擴(kuò)展iommu的保護(hù)。在擴(kuò)展iommu的保護(hù)之后,程序可能滿(mǎn)足針對(duì)匯編語(yǔ)言指令的前置條件以訪(fǎng)問(wèn)64kb區(qū)域以外的存儲(chǔ)器器。
設(shè)備看不到秘密數(shù)據(jù),例如,只有非秘密數(shù)據(jù)可以被傳遞到設(shè)備。匯編語(yǔ)言指令規(guī)范可以指示將數(shù)據(jù)存儲(chǔ)到設(shè)備可訪(fǎng)問(wèn)存儲(chǔ)器,即iommu允許設(shè)備訪(fǎng)問(wèn)的存儲(chǔ)器,只能存儲(chǔ)非秘密數(shù)據(jù)o(例如,ol=or)。更具體地,左和右執(zhí)行可以產(chǎn)生相同的設(shè)備存儲(chǔ)序列:與相同地址相同的值、模數(shù)定時(shí)和活動(dòng)性。非正式地,活動(dòng)是在系統(tǒng)或算法(即,系統(tǒng)“進(jìn)步”)中“好事情最終發(fā)生”的要求。數(shù)據(jù)庫(kù)的最終一致性就是一個(gè)活性的屬性的示例。
為了證明ol=or,實(shí)現(xiàn)代碼的輸入路徑和輸出路徑可以用關(guān)系注釋來(lái)注釋。輸入路徑和輸出路徑可以包括應(yīng)用事件循環(huán)和網(wǎng)絡(luò)棧。例如,以太網(wǎng)、因特網(wǎng)協(xié)議(ip)和udp層可以維持?jǐn)?shù)據(jù)包的關(guān)系屬性。
tpm中的密鑰。應(yīng)用可以將公鑰正確地?cái)U(kuò)展到tpm的pcr(例如pcr19)中。私鑰可以使用tpm隨機(jī)來(lái)生成并且不離開(kāi)平臺(tái)。
認(rèn)證。應(yīng)用可以在將其公鑰擴(kuò)展到pcr后產(chǎn)生正確的tpm認(rèn)證。
推論2-安全通道。如果客戶(hù)端接收到公鑰和證明,并且證明的pcr代碼值(例如pcr17、pcr18)與已驗(yàn)證的應(yīng)用的代碼值相匹配,并且所證實(shí)的pcr數(shù)據(jù)值(例如,pcr19)與公鑰匹配,并且證書(shū)顯示證明來(lái)自合法的硬件tpm制造商,則客戶(hù)端可以使用公共密鑰直接建立到已驗(yàn)證的應(yīng)用的安全通道。
加密庫(kù)
散列。sha514可以符合各種標(biāo)準(zhǔn)(例如,fips180-4和fips198-1)。
rsa操作。rsa518可以使用來(lái)自tpm的連續(xù)隨機(jī)性(例如,未選擇性地采樣)來(lái)生成rsa密鑰,并且通過(guò)原始測(cè)試(例如,miller-rabin原始或類(lèi)似測(cè)試)。rsa518可以包括rsa加密、rsa解密、rsa符號(hào)和rsa驗(yàn)證,包括填充,并且可以產(chǎn)生符合標(biāo)準(zhǔn)(例如,pkcs1.5和rsa標(biāo)準(zhǔn))的字節(jié)數(shù)組。
對(duì)于諸如散列函數(shù)的一些類(lèi)型的加密原語(yǔ)(primitives),驗(yàn)證器108可以驗(yàn)證功能正確性。從rfc2313派生的rsa規(guī)范將加密和簽名操作定義為由理想整數(shù)構(gòu)成的密鑰上的模冪運(yùn)算。密鑰生成規(guī)范可以使用從兩個(gè)隨機(jī)素?cái)?shù)獲得的密鑰。大數(shù)(bignum)520庫(kù)可能用于實(shí)現(xiàn)加密原語(yǔ)。大數(shù)520庫(kù)可以使用32位字的數(shù)組來(lái)實(shí)現(xiàn)任意精度整數(shù),提供諸如用于rsa等的劃分和模數(shù)等的操作。大數(shù)520庫(kù)可能包括大鼠(bigrat),它將提供的操作擴(kuò)展為有理數(shù),其可被用于差異隱私。
大數(shù)/大鼠正確性。每個(gè)大數(shù)/大鼠操作可以產(chǎn)生一個(gè)表示正確的無(wú)限精度整數(shù)或?qū)崝?shù)的值。
在一些實(shí)現(xiàn)中,編譯器114可以不被包括在可信計(jì)算庫(kù)(tcb)中。如果編譯器114不是tcb的一部分,則可以由驗(yàn)證器108驗(yàn)證匯編語(yǔ)言實(shí)現(xiàn)116。驗(yàn)證器108可以使用由編譯器114產(chǎn)生的若干不變量,諸如類(lèi)型安全性、數(shù)組邊界安全性和傳遞棧安全。
類(lèi)型安全??梢则?yàn)證每個(gè)值和堆對(duì)象的內(nèi)容以根據(jù)由高級(jí)語(yǔ)言所使用的類(lèi)型系統(tǒng)準(zhǔn)確地表示預(yù)期內(nèi)容,使得對(duì)每個(gè)值和堆對(duì)象的操作不會(huì)導(dǎo)致運(yùn)行時(shí)類(lèi)型錯(cuò)誤。
陣列邊界安全。數(shù)組操作可以使用位于數(shù)組邊界內(nèi)的索引。
過(guò)渡堆疊安全。當(dāng)一個(gè)特定程序被調(diào)用時(shí),棧有足夠的棧空間用于由特定程序調(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í)行可以恢復(fù)。
即使高級(jí)語(yǔ)言是類(lèi)型安全的語(yǔ)言,驗(yàn)證器108也可以不假定編譯器114保持類(lèi)型安全性。因此,驗(yàn)證器108可以通過(guò)建立表示高級(jí)語(yǔ)言值的數(shù)據(jù)結(jié)構(gòu)的類(lèi)型不變量來(lái)在匯編語(yǔ)言級(jí)別驗(yàn)證類(lèi)型安全性。例如,數(shù)據(jù)結(jié)構(gòu)中的指針可以指向預(yù)期類(lèi)型的值,并且任意整數(shù)可以不被用作指針。這種類(lèi)型不變量可以在整個(gè)匯編語(yǔ)言代碼中被維持并且可以在循環(huán)不變量、前置條件、后置條件或其任何它們的組合中存在。因此,可以不使用外部匯編語(yǔ)言類(lèi)型檢查器來(lái)檢查編譯的匯編語(yǔ)言實(shí)現(xiàn)116。相反,針對(duì)手動(dòng)編寫(xiě)的匯編語(yǔ)言代碼和編譯代碼(例如,匯編語(yǔ)言實(shí)現(xiàn)116),可以使用單個(gè)驗(yàn)證過(guò)程(例如,由驗(yàn)證器108執(zhí)行)。
高級(jí)屬性保護(hù)。每個(gè)程序證明輸出棧狀態(tài)和給定高級(jí)語(yǔ)言前置條件的寄存器滿(mǎn)足高級(jí)語(yǔ)言后置條件。編譯器114可以保持高級(jí)語(yǔ)言注釋?zhuān)缜爸脳l件、后置條件和循環(huán)不變量。此外,編譯器114可以將高級(jí)注釋連接到低級(jí)棧和寄存器值,使得對(duì)棧和寄存器值的操作滿(mǎn)足與高級(jí)語(yǔ)言實(shí)現(xiàn)112和相應(yīng)的高級(jí)規(guī)范102相關(guān)聯(lián)的正確性定理。
操作系統(tǒng)不變量。可以維護(hù)操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)不變量。
垃圾收集正確性。操作系統(tǒng)526的存儲(chǔ)器管理器可以創(chuàng)建符合高級(jí)語(yǔ)言語(yǔ)義的高級(jí)語(yǔ)言中的對(duì)象的表示。操作系統(tǒng)526的垃圾收集器可以保持正確的對(duì)象數(shù)據(jù),并且即使當(dāng)垃圾收集器在對(duì)象周?chē)拇鎯?chǔ)器中移動(dòng)對(duì)象時(shí),也可能不會(huì)留下懸掛的指針。垃圾收集器可以回收被存儲(chǔ)在存儲(chǔ)器中的垃圾,例如已經(jīng)被分配但不再使用的存儲(chǔ)器中的對(duì)象。例如,如果系統(tǒng)沒(méi)有指向分配的存儲(chǔ)器部分的任何指針,則分配的存儲(chǔ)器部分可以被垃圾收集器回收以供另一程序使用。
圖6是根據(jù)一些實(shí)現(xiàn)的包括可信計(jì)算基礎(chǔ)(tcb)602的說(shuō)明性架構(gòu)600。用于tcb602的各種組件的規(guī)范可以包括服務(wù)規(guī)范604、一個(gè)或多個(gè)驅(qū)動(dòng)器規(guī)范606、一個(gè)或多個(gè)庫(kù)規(guī)范608、操作系統(tǒng)規(guī)范和硬件規(guī)范612或其任何組合。服務(wù)規(guī)范604可以提供針對(duì)由tcb602提供的服務(wù)的規(guī)范,例如輸入/輸出操作,通信實(shí)用程序,文件系統(tǒng)操作實(shí)用程序,資源分配實(shí)用程序等。驅(qū)動(dòng)器規(guī)范606可以指定由tcb602提供的各種驅(qū)動(dòng)器的功能。庫(kù)規(guī)范608可以指定由tcb602提供的各種庫(kù)的功能,諸如運(yùn)行時(shí)庫(kù)。操作系統(tǒng)規(guī)范610可以指定與由tcb602提供的操作系統(tǒng)相關(guān)聯(lián)的操作。硬件規(guī)范612可以提供關(guān)于硬件的操作的信息。
驗(yàn)證器(例如,圖1的驗(yàn)證器108)可以使用證明來(lái)驗(yàn)證軟件代碼符合規(guī)范604、606、608、610和612。例如,驗(yàn)證器可以驗(yàn)證服務(wù)代碼和證明614符合服務(wù)規(guī)范604,驅(qū)動(dòng)程序代碼和證明616符合驅(qū)動(dòng)程序規(guī)范606,庫(kù)代碼和證明618符合庫(kù)規(guī)范608,微內(nèi)核(例如,操作系統(tǒng))代碼和證明620符合操作系統(tǒng)規(guī)范610和可信硬件符合硬件規(guī)范612。
示例過(guò)程
在圖7,8和圖9的流程圖中,每個(gè)塊表示可以以硬件,軟件或其組合來(lái)實(shí)現(xiàn)的一個(gè)或多個(gè)操作。在軟件的上下文中,塊表示計(jì)算機(jī)可執(zhí)行指令,當(dāng)由一個(gè)或多個(gè)處理器執(zhí)行時(shí),指令使處理器執(zhí)行所描述操作。通常,計(jì)算機(jī)可執(zhí)行指令包括執(zhí)行特定功能或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類(lèi)型的例程、程序、對(duì)象、模塊、組件、數(shù)據(jù)結(jié)構(gòu)等。描述塊的順序不旨在被解釋為限制,并且任何數(shù)量的所描述的操作可以以任何順序和/或并行組合來(lái)實(shí)現(xiàn)該過(guò)程。為了討論的目的,如上面所描述的,參考架構(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)的包括確定與軟件代碼相關(guān)聯(lián)的屬性的示例過(guò)程700的流程圖。過(guò)程700可以由軟件開(kāi)發(fā)環(huán)境的一個(gè)或多個(gè)組件執(zhí)行,諸如圖1的軟件開(kāi)發(fā)環(huán)境122。
在702,可以創(chuàng)建指定軟件代碼的屬性的規(guī)范。例如,在圖1中,高級(jí)規(guī)范102可以指定高級(jí)語(yǔ)言實(shí)現(xiàn)112的屬性,諸如高級(jí)語(yǔ)言實(shí)現(xiàn)112如何表現(xiàn)。
在704,軟件代碼的屬性可以被驗(yàn)證為符合規(guī)范。在706,可以提供軟件代碼已經(jīng)被驗(yàn)證為符合相應(yīng)規(guī)范的指示。例如,如圖1所示,驗(yàn)證器108可以驗(yàn)證匯編語(yǔ)言實(shí)現(xiàn)116符合低級(jí)規(guī)范106。為了說(shuō)明,驗(yàn)證器108可以將有限狀態(tài)機(jī)(例如,低級(jí)規(guī)范106)的行為與匯編語(yǔ)言實(shí)現(xiàn)116相比較,并且在給定的(一個(gè)或多個(gè))輸入x時(shí)確定有限狀態(tài)機(jī)和匯編語(yǔ)言實(shí)現(xiàn)116是否進(jìn)入相同的狀態(tài)。如果驗(yàn)證器108確定有限狀態(tài)機(jī)和匯編語(yǔ)言實(shí)現(xiàn)116在給出(一個(gè)或多個(gè))輸入x之后進(jìn)入相同狀態(tài),則驗(yàn)證器108可以指示匯編語(yǔ)言實(shí)現(xiàn)116已經(jīng)通過(guò)驗(yàn)證。如果驗(yàn)證器108確定有限狀態(tài)機(jī)和匯編語(yǔ)言實(shí)現(xiàn)116在給定(一個(gè)或多個(gè))輸入x之后進(jìn)入不同的狀態(tài),則驗(yàn)證器108可以指示驗(yàn)證失敗。
因此,驗(yàn)證器可以執(zhí)行驗(yàn)證以確定匯編語(yǔ)言代碼是否符合諸如有限狀態(tài)機(jī)的低級(jí)規(guī)范。
圖8是根據(jù)一些實(shí)現(xiàn)的包括驗(yàn)證軟件代碼的屬性符合相應(yīng)規(guī)范的示例過(guò)程的流程圖。過(guò)程800可以由軟件開(kāi)發(fā)環(huán)境的一個(gè)或多個(gè)組件執(zhí)行,諸如圖1中的軟件開(kāi)發(fā)環(huán)境122。
在802,可以執(zhí)行初步驗(yàn)證以驗(yàn)證高級(jí)語(yǔ)言實(shí)現(xiàn)符合高級(jí)語(yǔ)言規(guī)范。例如,在圖1中,當(dāng)其依據(jù)高級(jí)規(guī)范102正被編寫(xiě)(例如,直接在其寫(xiě)入之后)時(shí),例如在高級(jí)語(yǔ)言實(shí)現(xiàn)112被轉(zhuǎn)換成可驗(yàn)證的匯編語(yǔ)言實(shí)現(xiàn)116之前,初步驗(yàn)證124可以檢查高級(jí)語(yǔ)言實(shí)現(xiàn)112的代碼。
在804,高級(jí)語(yǔ)言實(shí)現(xiàn)可以被編譯以創(chuàng)建匯編語(yǔ)言實(shí)現(xiàn)。例如,在圖1中,編譯器114可以通過(guò)編譯高級(jí)語(yǔ)言實(shí)現(xiàn)112來(lái)創(chuàng)建匯編語(yǔ)言實(shí)現(xiàn)116。高級(jí)語(yǔ)言實(shí)現(xiàn)112可以是單個(gè)應(yīng)用、兩個(gè)或更多應(yīng)用或整個(gè)軟件系統(tǒng)(例如,包括應(yīng)用、驅(qū)動(dòng)程序、庫(kù)、操作系統(tǒng)等)。
在806,高級(jí)規(guī)范102可以被轉(zhuǎn)換成低級(jí)規(guī)范。例如,在圖1中,高級(jí)規(guī)范102可以由規(guī)范轉(zhuǎn)換器104轉(zhuǎn)換以創(chuàng)建低級(jí)規(guī)范106。低級(jí)規(guī)范106可以包括至少一個(gè)有限狀態(tài)機(jī),其行為基于高級(jí)規(guī)范102。
在808,匯編語(yǔ)言實(shí)現(xiàn)的屬性可以被驗(yàn)證以符合低級(jí)規(guī)范。例如,在圖1中,驗(yàn)證器108可以驗(yàn)證匯編語(yǔ)言實(shí)現(xiàn)116符合低級(jí)規(guī)范106。為了說(shuō)明,驗(yàn)證器108可以將有限狀態(tài)機(jī)(例如,低級(jí)規(guī)范106)的行為與匯編語(yǔ)言實(shí)現(xiàn)116的行為相比較,并且在給定特定輸入時(shí)確定有限狀態(tài)機(jī)和匯編語(yǔ)言實(shí)現(xiàn)116是否進(jìn)入相同的狀態(tài)。如果驗(yàn)證器108確定有限狀態(tài)機(jī)和匯編語(yǔ)言實(shí)現(xiàn)116進(jìn)入相同狀態(tài),則驗(yàn)證器108可以指示匯編語(yǔ)言實(shí)現(xiàn)116已經(jīng)通過(guò)驗(yàn)證。如果驗(yàn)證器108確定有限狀態(tài)機(jī)和匯編語(yǔ)言實(shí)現(xiàn)116進(jìn)入不同的狀態(tài),則驗(yàn)證器108可以指示驗(yàn)證失敗。
在810,可以使用匯編器來(lái)創(chuàng)建基于匯編語(yǔ)言實(shí)現(xiàn)的機(jī)器代碼實(shí)現(xiàn)。例如,如圖1所示,匯編器118可以基于匯編語(yǔ)言實(shí)現(xiàn)116來(lái)創(chuàng)建機(jī)器代碼實(shí)現(xiàn)120。
因此,高級(jí)語(yǔ)言開(kāi)發(fā)環(huán)境可以提供各種工具。例如,可以在基本相同的時(shí)間指定高級(jí)語(yǔ)言實(shí)現(xiàn)和高級(jí)語(yǔ)言規(guī)范,并且可以執(zhí)行初步驗(yàn)證以驗(yàn)證高級(jí)語(yǔ)言實(shí)現(xiàn)符合高級(jí)語(yǔ)言規(guī)范。高級(jí)規(guī)范可以被轉(zhuǎn)換成低級(jí)規(guī)范,例如有限狀態(tài)機(jī),并且高級(jí)語(yǔ)言實(shí)現(xiàn)可以被編譯為匯編語(yǔ)言實(shí)現(xiàn)。驗(yàn)證器可以驗(yàn)證匯編語(yǔ)言實(shí)現(xiàn)的行為符合低級(jí)規(guī)范。通過(guò)這樣做,可以驗(yàn)證包括應(yīng)用、庫(kù)、驅(qū)動(dòng)程序、操作系統(tǒng)等的整個(gè)軟件系統(tǒng)以根據(jù)軟件系統(tǒng)的高級(jí)規(guī)范來(lái)執(zhí)行。
圖9是包括根據(jù)一些實(shí)現(xiàn)執(zhí)行初步驗(yàn)證的示例過(guò)程的流程圖。過(guò)程900可以由軟件開(kāi)發(fā)環(huán)境的一個(gè)或多個(gè)組件執(zhí)行,諸如圖1的軟件開(kāi)發(fā)環(huán)境122。
示例計(jì)算設(shè)備和環(huán)境
圖10圖示了可以用于實(shí)現(xiàn)本文所描述的模塊和功能的計(jì)算設(shè)備1000和環(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)總線(xiàn)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)器、可移動(dòng)介質(zhì)、包括外部和可移動(dòng)驅(qū)動(dòng)器、存儲(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ēng)為存儲(chǔ)器或計(jì)算機(jī)存儲(chǔ)介質(zhì),并且可以是能夠存儲(chǔ)計(jì)算機(jī)可讀、處理器可執(zhí)行的程序指令非暫時(shí)介質(zhì),所述計(jì)算機(jī)程序指令作為由處理器1002執(zhí)行的計(jì)算機(jī)程序代碼作為特定機(jī)器的被配置用于執(zhí)行本文實(shí)現(xiàn)中所描述的操作和功能。
計(jì)算設(shè)備1000還可以包括用于與其他設(shè)備交換數(shù)據(jù)的一個(gè)或多個(gè)通信接口1006,例如經(jīng)由網(wǎng)絡(luò)、直接連接等,如上所述。通信接口1006可以促進(jìn)在各種各樣的網(wǎng)絡(luò)和協(xié)議類(lèi)型內(nèi)通信,包括有線(xiàn)網(wǎng)絡(luò)(例如,lan,電纜等)和無(wú)線(xiàn)網(wǎng)絡(luò)(例如,wlan、蜂窩、衛(wèi)星等)、因特網(wǎng)等。通信接口1006還可以提供與外部存儲(chǔ)器(未示出)的通信,諸如存儲(chǔ)陣列、網(wǎng)絡(luò)附加存儲(chǔ)器、存儲(chǔ)區(qū)域網(wǎng)絡(luò)等。
顯示設(shè)備1008,包括諸如監(jiān)視器,可以被包括在用于向用戶(hù)顯示信息和圖像的一些實(shí)現(xiàn)中。其他i/o設(shè)備1010可以是從用戶(hù)接收各種輸入并向用戶(hù)提供各種輸出的設(shè)備,并且可以包括鍵盤(pán)、遙控器、鼠標(biāo)、打印機(jī)、音頻輸入/輸出設(shè)備等。
存儲(chǔ)器1004可以包括可用于創(chuàng)建經(jīng)過(guò)驗(yàn)證的軟件系統(tǒng)的模塊和軟件部件。例如,在已經(jīng)被驗(yàn)證的軟件系統(tǒng)中,存儲(chǔ)器1004可以包括應(yīng)用502、公共應(yīng)用504、udp/ip508、以太網(wǎng)510、網(wǎng)絡(luò)驅(qū)動(dòng)器512、數(shù)據(jù)類(lèi)型514、sha516、tpm驅(qū)動(dòng)器518、rsa520、大數(shù)522、核心數(shù)學(xué)524和操作系統(tǒng)526。在軟件開(kāi)發(fā)系統(tǒng)中,存儲(chǔ)器1004還可以包括來(lái)自圖1中的高級(jí)規(guī)范102、規(guī)范轉(zhuǎn)換器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)中操作,并且可以在通用和專(zhuān)用計(jì)算系統(tǒng)或具有處理能力的其他設(shè)備中被實(shí)現(xiàn)。通常,參考附圖描述的功能的任何一個(gè)功能可以使用軟件、硬件(例如,固定邏輯電路)或這些實(shí)現(xiàn)的組合來(lái)實(shí)現(xiàn)。本文所使用的術(shù)語(yǔ)“模塊”、“機(jī)制”或“部件”通常表示軟件、硬件或軟件和硬件的組合,其可被配置為實(shí)現(xiàn)規(guī)定的功能。例如,在軟件實(shí)現(xiàn)的情況下,術(shù)語(yǔ)“模塊”、“機(jī)制”或“組件”可以表示當(dāng)在處理設(shè)備上執(zhí)行時(shí)執(zhí)行指定任務(wù)或操作的程序代碼(和/或聲明型指令)設(shè)備(例如,cpu或處理器)。程序代碼可以被存儲(chǔ)在一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)設(shè)備或其他計(jì)算機(jī)存儲(chǔ)設(shè)備中。因此,本文描述的過(guò)程、部件和模塊可以通過(guò)計(jì)算機(jī)程序產(chǎn)品來(lái)實(shí)現(xiàn)。
如本文所使用的,“計(jì)算機(jī)可讀介質(zhì)”包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括在用于諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)的信息的存儲(chǔ)的任何方法或技術(shù)中實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、電可擦除可編程rom(eeprom)、閃速存儲(chǔ)器或其它存儲(chǔ)器技術(shù)、光盤(pán)rom(cd-rom)、數(shù)字通用盤(pán)(dvd)或其他光存儲(chǔ)器、磁帶盒、磁帶、磁盤(pán)存儲(chǔ)器或其他磁存儲(chǔ)設(shè)備、或可用于存儲(chǔ)由計(jì)算設(shè)備訪(fǎng)問(wèn)的信息的任何其它非傳輸介質(zhì)。
相反,通信介質(zhì)可以實(shí)施諸如載波的調(diào)制數(shù)據(jù)信號(hào)中的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)。如本文所定義的,計(jì)算機(jī)存儲(chǔ)介質(zhì)不包括通信介質(zhì)。
此外,本公開(kāi)提供了各種示例實(shí)現(xiàn),如圖所圖示的和所描述的。然而,本公開(kāi)不限于本文所描述的和所圖示的實(shí)現(xiàn),而是可以擴(kuò)展到其他實(shí)現(xiàn),如對(duì)于本領(lǐng)域技術(shù)人員將是已知的或?qū)⒆兂梢阎摹T诒菊f(shuō)明書(shū)中對(duì)“一個(gè)實(shí)現(xiàn)”、“該實(shí)現(xiàn)”、“這些實(shí)現(xiàn)”、“一個(gè)示例”、“一些示例”、“一些實(shí)現(xiàn)”等的引用意味著所描述的特定特征、架構(gòu)或特性被包括在至少一個(gè)實(shí)現(xiàn)或示例中,并且在說(shuō)明書(shū)中的各個(gè)地方的這些短語(yǔ)的出現(xiàn)不必都指代相同的實(shí)現(xiàn)。除非另有說(shuō)明,所提供的各種實(shí)現(xiàn)和示例不旨在相互排斥的,并且可以單獨(dú)使用或彼此組合使用。
示例
可以創(chuàng)建包括包含多個(gè)應(yīng)用中的一個(gè)應(yīng)用、一個(gè)或多個(gè)設(shè)備驅(qū)動(dòng)器和操作系統(tǒng)的軟件棧的屬性的規(guī)范??梢则?yàn)證軟件棧的屬性符合規(guī)范??梢蕴峁┸浖R呀?jīng)被驗(yàn)證為符合規(guī)范的指示??梢蕴峁┸浖5膶傩苑弦?guī)范的證明。例如,證明可能證明軟件棧的功能正確性。作為另一個(gè)例子,證明可以證明軟件棧的關(guān)系屬性。該規(guī)范可以包括被表達(dá)為有限狀態(tài)機(jī)的高級(jí)規(guī)范。高級(jí)語(yǔ)言代碼可以被編譯成匯編語(yǔ)言代碼??梢则?yàn)證匯編語(yǔ)言代碼的屬性以符合規(guī)范。在驗(yàn)證軟件代碼的屬性符合規(guī)范之前,可以將規(guī)范轉(zhuǎn)換為低級(jí)規(guī)范。
軟件系統(tǒng)的高級(jí)語(yǔ)言實(shí)現(xiàn)可以被編譯以創(chuàng)建匯編語(yǔ)言實(shí)現(xiàn)。對(duì)應(yīng)于軟件系統(tǒng)的高級(jí)規(guī)范可以轉(zhuǎn)換為低級(jí)規(guī)范。匯編語(yǔ)言實(shí)現(xiàn)的屬性可以被驗(yàn)證為符合低級(jí)規(guī)范??梢曰趨R編語(yǔ)言實(shí)現(xiàn)來(lái)創(chuàng)建機(jī)器代碼實(shí)現(xiàn)??梢栽谥T如可信硬件平臺(tái)的可信或安全硬件上執(zhí)行機(jī)器碼實(shí)現(xiàn)??梢詧?zhí)行初步驗(yàn)證以驗(yàn)證高級(jí)語(yǔ)言實(shí)現(xiàn)符合高級(jí)規(guī)范。高級(jí)規(guī)范可以表示為至少一個(gè)有限狀態(tài)機(jī)。驗(yàn)證匯編語(yǔ)言實(shí)現(xiàn)的屬性符合低級(jí)規(guī)范可能包括確定匯編語(yǔ)言實(shí)現(xiàn)實(shí)現(xiàn)了低級(jí)規(guī)范的功能正確版本。軟件系統(tǒng)的部件可以被驗(yàn)證為不能破壞軟件系統(tǒng)的其他部件。
可以編譯軟件系統(tǒng)的高級(jí)語(yǔ)言實(shí)現(xiàn)以創(chuàng)建匯編語(yǔ)言實(shí)現(xiàn)。軟件系統(tǒng)可以包括操作系統(tǒng)、一個(gè)或多個(gè)驅(qū)動(dòng)器以及一個(gè)或多個(gè)應(yīng)用??梢则?yàn)證軟件系統(tǒng)的功能正確性??梢则?yàn)證匯編語(yǔ)言實(shí)現(xiàn)的關(guān)系屬性。驗(yàn)證軟件系統(tǒng)的功能正確性可能包括驗(yàn)證軟件系統(tǒng)的信息流性質(zhì)。證明可以保證:(1)公鑰對(duì)應(yīng)于私鑰,(2)私鑰僅對(duì)已驗(yàn)證的軟件系統(tǒng)已知??梢酝ㄟ^(guò)驗(yàn)證軟件系統(tǒng)的每個(gè)部件來(lái)驗(yàn)證軟件系統(tǒng)的正確性。軟件系統(tǒng)的匯編語(yǔ)言實(shí)現(xiàn)可以包括作為整體被驗(yàn)證的單個(gè)軟件程序。軟件系統(tǒng)的第一部件可以被驗(yàn)證為不能干擾軟件系統(tǒng)的第二部件的第二規(guī)范??梢宰C明軟件系統(tǒng)的遠(yuǎn)程等同性。
結(jié)論
已經(jīng)用特定于架構(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)被解釋為限于說(shuō)明書(shū)中公開(kāi)的特定實(shí)現(xiàn)。