初識機密計算(Confidential Computing)
機密計算是什么?
在云計算時代,云上數據按照數據所處狀態被分為三大類。它們分別是:
- Data in Transit,網絡傳輸過程中的數據,傳輸狀態
- Data at Rest,數據在磁盤和處于存儲過程中的數據,存儲狀體
- Data in use,處于內存中,處于計算中的數據,其為使用狀態
對于數據的安全,專家和業界在過去幾十年的努力使得傳輸過程中的數據安全得到了保障,比如數據鏈路層加密,各種各樣的傳輸協議加密的使用,對于存儲中的數據安全,很多數據庫,文件系統或者磁盤也是可以直接加密的,但是不管數據是在傳輸狀態中還是在存儲的時候加密,數據在最終使用的時候,在CPU和內存里的數據都是明文。這些使用中的明文要不要保護,答案是肯定的,而且是迫切的,因為針對網絡和存儲設備的安全威脅,越來越多的安全技術被開發出來應對和保護,基于這種阻礙,攻擊者已轉向以使用中的數據為目標,機密計算就是針對這種威脅模型而來的,
來對數據在使用狀態中的保護。
隨著云計算的大規模部署,機密計算旨在允許將云提供商從可信計算基礎(TCB)中移除,以便只有硬件和受保護的應用程序本身在可信邊界內。這使得云客戶放心的,安全的把業務負載轉移到公有云上去。而機密計算正在迅速發展,為企業和最終用戶不斷提供新的工具以保護敏感數據和代碼免受執行期間發生威脅。同時機密計算解決方案提供商為機密計算開發了不同的方法,例如把應用程序的代碼劃分為受信任和不受信任的組件,再到幾乎不做更改的情況下實現現有應用程序的遷移。這些不同的方法支持不同的應用場景,但最終目標都是希望幫助確保敏感數據,代碼、工作負載的機密性,和完整性。
機密計算依賴硬件
實現機密計算,硬件輔助是必要的。
說到機密計算(Confidential Computing), 不得不先說可信執行環境(Trust Execution Environment), 簡稱TEE。TEE被定義為提供一定級別的數據完整性、數據機密性和代碼完整性保證的環境,具有運算和儲存功能。其基本思想是:在硬件中為敏感數據單獨分配一塊隔離的內存,確保敏感數據的計算在這塊內存中進行,并且除了經過授權的接口訪問之外,硬件中的其他部分并不能夠訪問這塊內存中的數據,以此來實現敏感數據的隱私計算。機密計算是通過在基于硬件的可信執行環境中執行計算來保護使用中的數據,對以下三個屬性提供一定程度的保證:
- 數據機密性:未經授權的實體無法查看在TEE內使用中的數據。
- 數據完整性:未經授權的實體不能添加、刪除或更改在TEE中使用中的數據。
- 代碼完整性:未經授權的實體不能添加、刪除或更改TEE中執行的代碼。
根據具體TEE的技術實現情況,它還可以提供代碼機密性、經過身份驗證的啟動、可編程性、可認證性和可恢復性。在機密計算定義范疇中,未經授權的實體可能包括主機(Host)上的其他應用程序、主機操作系統(Host OS)和虛擬機監控程序 (VMM)、系統管理員、云服務提供商、基礎設施所有者或對硬件具有物理訪問權限的任何其他人。
基于硬件的TEE使用硬件支持技術,為該環境中的代碼執行和數據保護能夠提供更高的安全保障。構建基于硬件的TEE,對其基本的硬件需求有三個方面:
其一,要實現基于硬件隔離的空間。隔離的目的有兩個,一個是保證數據的機密性,另一個是保證數據的完整性。要保證數據不能被他人獲取,同時也要保證數據不能被他人修改,而這兩種目的都是靠硬件來實現的。
其二,隔離之后,還必須要有硬件可信根。比如在硬件出廠的時候燒錄一些硬件的關鍵登記信息,唯一的設備密鑰和相應證書,所有的安全啟動和驗證等過程都是從硬件可信根開始的。如果沒有把信任根植入到受保護的硬件里面去,就達不到TEE的基本需求。
其三,驗證(attestation ), 在做完隔離和硬件可信根之后,對于系統部署在云上的,還需要把業務負載如代碼,數據等上傳到云上運行,如何確保代碼和數據是運行在TEE里面,是需要一個基于密碼學的證明方式的,必須通過獲取相關的證據去驗證代碼和數據確實是運行在TEE里的,這就是TEE驗證的需求。
基于硬件的TEE技術方案
基于硬件的虛擬機隔離技術要解決的是保護來自客戶機Guest 對云主機host的安全威脅,而機密計算要應對的是來自云主機和基礎設施對客戶機Guest以及運行在上面的容器業務的安全威脅。為此,Intel開發了對應的基于硬件的技術來滿足市場的需求,比如Intel虛擬化技術VT-x(Virtualization Technology),應用它可以讓一個物理的CPU工作起來像多個CPU在并行運行,從而使得在一臺物理服務器內可以同時運行多個Guest,實現虛擬機之間的隔離。而對于基于硬件的TEE解決方案,Intel公司創新開發了 Intel? Software Guard Extensions (Intel? SGX), Intel? Trust DomainExtensions (Intel? TDX) 等技術, 如下是一個完整的機密計算容器方案,如圖所示:
在此方案中,應用安全容器kata containers 來支持容器業務的隔離,使用 Intel? SGX 來做基于硬件的TEE并支持整個kata containers虛擬機運行其中。同時借助 Intel? TDX 的遠程驗證能力做TEE的驗證。本文不打算花篇幅來解釋這個基于硬件的TEE完整方案,只介紹兩個基于硬件技術的TEE: Intel? SGX 和 Intel? TDX
- Intel軟件防護擴展技術Intel? SGX
Intel? SGX 的設計主旨是為用戶應用程序提供可信的執行環境,使得應用程序有能力在用戶地址空間中開辟一段特別的,受保護的內存空間,并對這段受保護的內存空間實行嚴格的訪問控制和加密操作來保障數據機密性和代碼完整性,確保即使是Hypervisor、BIOS,操作系統等特權應用都不能隨意訪問這段地址空間,這一段地址空間被稱之為Enclave(稱之為飛地)。
按照文章的前部分介紹,把應用程序部署在云上,需要驗證程序確實運行在TEE里,具體更多的SGX技術細節,請參見Intel官方的技術文檔:??https://www.intel.com/content/dam/develop/external/us/en/documents/332680-002-600685.pdf?? 以及Intel架構開發者手冊。驗證包括本地驗證和遠程驗證。本地驗證指在同一個平臺上,讓不同的Enclave互相驗證Trusted Computing Base(TCB)。遠程驗證指讓一個平臺中運行的Enclave向遠端的信賴憑證者RelyingParty證明自己的TCB,證明自己運行在SGX TEE中,并且沒有被篡改,同時證明當前的CPU SGX 安全版本信息。
SGX應用程序涉及兩部分:安全區和非安全區。開發者或者用戶可以把涉及敏感數據的處理,Key的保護等都放在Enclave里面。從而將應用程序的代碼,數據劃分為受信任和不受信任的組件,因此開發者或者用戶需要決定哪些組件應該置于 Enclave 內部,哪些置于 Enclave 外部。
- Intel 信任域擴展技術 Intel? TDX
Intel? TDX 旨在將虛擬機(VM)與平臺上的虛擬機管理程序(VMM)和任何其他非信任域Trust Domain (TD) 的軟件隔離,以保護 TD VM 免受各種軟件的安全威脅。TDX的設計思路是將整個虛擬機VM放在一個TEE可信執行環境里,這樣不管應用在私有云還是公有云上,不需要再對應用程序和數據做受信任和不受信任的劃分和修改,只要操作系統支持就行。TDX基本思路就是引入新的CPU工作模式,然后通過對內存加密技術,將兩個虛擬機用不同的key加密,同時key由CPU來直接進行管理。本質上講,TDX是通過兩種技術方式來配合實現,一種就是新的CPU模式,叫做安全仲裁模式Secure Arbitration Mode(SEAM),第二種是多密鑰內存加密技術方式Multi-key Total-Memory-Encryption(MKTME)。SEAM模式使用新的指令,例如SEAMCALL,SEAMRET, SEAMOPS, TDCALL等來實現和TD OS,以及Host/VMM交互。同時提供特定區域的物理內存來保護Intel TDX Module代碼模塊,通過Intel Authenticated Code Module (SEAMLDR)來裝載。多密鑰內存加密MKTME技術中,MKTMEiengine通過PCONFIG 指令來分配和設置各個TD VM的內存加密Keys。TDX將內存分為兩個部分,私有和共享內存。在TDX下還是需要在外部加固的,加固的時候需要共享內存,這部分內存外部是可以讀取的,因為有些虛擬化或半虛擬化設備需要和外部通信時,是需要host操作系統有能力訪問來提供網絡等服務的。當前的 Intel? TDX 認證的本質原理和SGX認證類似,也需要提供遠程證明來驗證其運行在TEE環境里。
更多詳細的TDX技術說明,請參見Intel官方網站的 Intel? TDX 技術規范和白皮書:https://www.intel.com/content/www/us/en/developer/articles/technical/intel-trust-domain-extensions.html。
Intel? TDX 和 Intel? SGX 是用來解決不同問題的。TDX是把整個軟件包不做修改直接放到虛擬機上就能實現安全,而SGX關注應用層面,通過對飛地Enclave 來保障機密性和完整性的,用戶根據業務場景需求可以選擇不同的技術。
機密計算的使用場景
機密計算技術正在迅速發展,為企業和最終用戶提供新的工具,保護敏感數據和代碼免受數據執行期間受到安全威脅,這些威脅以前很難得到保護,尤其伴隨公有云,云邊協同以及區塊鏈的規模應用,機密計算的應用場景也越來越多,如下是幾個比較常用用例:
- 密鑰(Keys)、秘密(Secrets)、憑證(Credentials)和令牌(Tokens )的安全存儲和處理
云計算關鍵信息資產的存儲和處理需要一個符合安全標準的硬件安全模塊如Hardware Security Module (HSM),但是傳統HSM硬件的專有性質增加了它們的成本,限制了它的可擴展性,并為在云計算和邊緣計算環境中部署帶來了成本和兼容性挑戰。不管是獨立軟件供應商(ISV)云計算提供商(CSP),機密計算都已經在被使用,在數據中心、私有云,公共/混合云中,甚至在物聯網用例的網絡邊緣存儲和處理加密和機密信息使用標準化的計算基礎設施。使得密鑰管理應用程序在基于硬件的TEE中存儲和處理加密密鑰、機密和令牌,提供數據機密性、數據完整性和代碼完整性更加靈活。
- 公有云Public Cloud
在公有云場景中,信任必須放在云提供商的多個層面上:硬件,核心和外圍設備的固件;主機操作系統、虛擬機管理器程序和云編排系統本身。雖然公有云提供商在竭盡全力保護該堆棧的所有層,但機密計算提供了額外的保護保證,并通過基于硬件的TEE保護正在使用的應用程序和數據,顯著減少了最終用戶必須信任的層數,對于未經授權的參與者來說,要獲得對受保護的應用程序代碼和數據的訪問權限變得更加困難,即使他們擁有對硬件的物理訪問權限、對主機操作系統或虛擬機監控程序的root訪問權限,或對編排系統的特權訪問權限。機密計算旨在允許將云提供商從可信計算基礎中移除,以便只有硬件和受保護的應用程序本身才在攻擊邊界內。這使得許多工作負載能夠轉移到公共云上,而以前由于安全問題或法規遵從性要求,這些工作負載無法轉移到公共云上。
- 區塊鏈Blockchain
區塊鏈是一個共享的、不變的分類賬,記錄參與者網絡之間的數據、數字資產或貨幣交換。區塊鏈提供了記錄和驗證交易的基礎設施,而無需集中的第三方。區塊鏈可以為供應鏈活動提供透明度,促進數字資產的交換,或支持合規流程,如實名認證Know Your Customer(KYC)。區塊鏈的一個關鍵特征是,它確保應該有一段共同數據的參與者確信他們看到的是相同的東西,并且一旦進入區塊鏈,數據是不變的。應由應用程序開發人員確保PII等敏感數據不存儲在不可變的區塊鏈上。機密計算可用于增強基于區塊鏈的系統的實施。通過結合機密計算和區塊鏈技術的能力,用戶可以利用基于硬件的TEE提供認證和驗證服務,優化可擴展性、隱私和安全性。區塊鏈用戶之間數據一致性的保證通常取決于各方獨立驗證所有當前數據有效性所依賴的歷史數據。這需要了解這些歷史數據集,這是一個潛在的可擴展性或隱私問題。用戶可以在基于硬件的TEE中執行智能合約,而不是自己獨立訪問和驗證歷史數據和相關智能合約。一旦交易完成,TEE將提供認證服務,以證明交易的可靠性,這意味著后續參與者無需再次為自己進行驗證。基于TEE的認證服務還可以幫助解決協商一致協議帶來的一些計算和通信效率低下的問題
- 邊緣云與物聯網 Edge and IOT
在家庭路由器中進行DDoS檢測的情況下進行本地搜索和過濾,這些都是機密計算環境非常適合的例子。在大多數情況下,TCP/IP數據包元數據需要保密,因為可能會推斷出敏感的用戶行為。其他示例包括邊緣機密機器學習處理,例如用于減少后端網絡延遲和/或帶寬的視頻元數據生成;攝像頭監控,供應商需要加載相關人員的模板,如果泄露可能會造成傷害;機密計算技術可用于幫助緩解依賴于對設備的物理訪問的攻擊。