什麼是可信執行環境?瞭解它的起源、重要概念與對區塊鏈隱私保護的價值。

原文標題:《起源故事:甕城、沙盒與可信計算》
撰文:佟林

甕城

公元 1268 年,忽必烈派劉整與阿術率軍攻打襄陽,發起元滅宋之戰。史稱襄樊之戰。擁有「上帝之鞭」稱號之一的蒙古軍隊,在襄陽打了整整六年。1269 年,忽必烈又派丞相史天澤助戰。蒙古軍在襄、樊二城四周修築城圍,並封鎖了漢水,多次打退南宋援軍。蒙古決定不惜一切代價奪取襄陽,各地的軍隊也是源源不斷地開往襄陽,在短短一年之內圍困襄陽的蒙軍就增至了 10 萬。

但是,呂文德所建立的守城軍隊也不容小視。他們憑藉襄陽夾漢水,地險城固的有利地形,特別是守備措施充分、物資儲備豐富,使得蒙軍雖然急切但也在短時間內拿不下襄陽。直到 1274,宋朝多次援救襄樊均被擊潰且城內糧草耗盡的前提下,守將呂文煥才最終投降。1279 年,陸秀夫揹着南宋最後一個皇帝跳海,南宋滅亡。

襄陽能守住 6 年之久的關鍵,除了蒙古自身因爲蒙哥身亡(被楊過擊殺)導致的戰略不穩、襄陽乃至南宋人民同仇敵愾、南宋戰略佈局多次出動救圍戰役外,還有個很有意思的原因:襄陽本身固若金湯,不僅圍繞漢水天塹而建,且擁有最寬的護城河,還有繼承自北宋開始的「甕城」設計。

從甕城與沙盒談起,瞭解可信計算對區塊鏈隱私保護的價值

很多人不理解,爲什麼戰爭片裏不直接攻打城門?通過城門進入城市不就勝利了?

古代人雖然知識水平有限,但是智商和我們是一致的(甚至更高),他們這麼做是因爲在上千年的攻守經驗中演化出了一套硬件、軟件層的防禦系統。即使你攻入了城門,還有這樣的景象等着你,你會深刻理解「甕中之鱉」的含義:

從甕城與沙盒談起,瞭解可信計算對區塊鏈隱私保護的價值

先民們爲了防止城門被突破,又在城內設置了一圈「內城」,因此你打開門後會發現進了一個牢籠。甕城內部的空間一般都極其有限,隊伍在圓形一圈厚厚的城牆裏動彈不得,而且弓箭手已經圍一圈比賽射擊了。

甕城的設計思路可以總結爲:

  • 針對易被攻破的模塊,設計單獨的雙重保護機制
  • 限制不信任對象的行爲
  • 構建易於清理不信任對象的結構

這個設計後來應用在計算機防禦系統設計中,稱爲「沙盒模型」。

沙盒

在計算機安全領域,沙盒(英語:sandbox,又譯爲沙箱)是一種安全機制,爲運行中的程序提供的隔離環境。其運用流程是:讓疑似病毒文件的可疑行爲在虛擬的「沙盒」裏充分表演,「沙盒」會記下它的每一個動作;當疑似病毒充分暴露了其病毒屬性後,「沙盒」就會執行「回滾」機制:將病毒的痕跡和動作抹去,恢復系統到正常狀態。

因此,和甕城類似,其設計理論上保障了以下幾點:

  • 針對易於感染惡意程序的對象,設計雙重保護:通過虛擬化環境,能夠實現包括系統級別的沙箱和容器級別的沙箱
  • 嚴格限制不信任對象的行爲:沙盒提供用後即回收的磁盤及內存空間,網絡訪問、對真實系統的訪問、對輸入設備的讀取通常被禁止或是嚴格限制
  • 一旦發現惡意程序,通過重定向,可以把文件、註冊表等路徑重定向到其他位置(沙箱指定位置),這樣軟件本來想操作的資源就不會被訪問或者操作,保證資源的安全性。

這種將「假定不信任」模塊約束的模型,可以簡化爲:

從甕城與沙盒談起,瞭解可信計算對區塊鏈隱私保護的價值

但是這種模型依賴檢測能力。只要惡意程序能夠做到充分掩飾,或以某種方式規避了安全掃描,它們就能自由感染用戶的設備,最終侵入到公司網絡和關鍵業務系統。

隨着惡意用戶的攻擊手段變化多端,防護者只能把防火牆越砌越高、入侵檢測越做越複雜、惡意代碼庫越做越大,誤報率也隨之增多,使得安全的投入不斷增加,維護與管理變得更加複雜和難以實施,信息系統的使用效率大大降低,而對新的攻擊毫無防禦能力。對於檢測-響應式的安全策略,只要惡意程序能夠騙過甕城守衛軍,他們就能自由入內。

因此,計算機系統還衍生了一種新的安全模型,一般稱爲「可信執行環境」技術(Trusted Execution Environment,簡稱 TEE)。與 「Sandbox」模型恰恰相反,可信計算假定「信任」是稀缺的。TEE 是從邏輯正確驗證、計算體系結構和計算模式等方面的技術創新,以解決邏輯缺陷不被攻擊者所利用的問題,形成攻防矛盾的統一體,確保完成計算任務的邏輯組合不被篡改和破壞。

從甕城與沙盒談起,瞭解可信計算對區塊鏈隱私保護的價值

可信計算技術

可信計算技術的發展

1983 年,美國國防部制定了世界上第一個《可信計算機系統評價標準》(TCSEC),第一次提出了可信計算機和可信計算基(Trusted Computing Base,TCB)的概念,並把 TCB 作爲系統系統安全的基礎。

1990 年,國際標準化組織與國際電子技術委員會 ISO/IEC 在其發佈的目錄服務系列標準中基於行爲預期性定義了可信性:如果第 2 個實體完全按照第 1 個實體的預期行動時,則第 1 個實體認爲第 2 個實體 是可信的。

1999 年,IBM、HP、Intel 和微軟等著名 IT 企業發起成立了可信計算平臺聯盟(TCPA, Trusted Computing Platform Alliance),這標誌着可信計算進入產業界。

2003 年,TCPA 改組爲可信計算組織(TCG, Trusted Computing Group)。目前,TCG 已經制定了一系列的可信計算技術規範,如可信 PC、可信平臺模塊(TPM)、可信軟件棧(TSS)、可信網絡連接(TNC)、可信手機模塊等,且不斷地對這些技術規範進行修改完善和版本升級。

2009 年 ,OMTP (Open Mobile Terminal Platform)在《omtpadvancedtrustedenvironmentomtptr1v11.pdf》中定義了 TEE,定義爲「一組軟硬件組件,可以爲應用程序提供必要的設施」,需要滿足兩種定義的安全級別中的一種。第一個安全級別目標是應對軟件攻擊,第二個安全級別目標是同時應對軟件和硬件攻擊。

下面我們講幾個 TEE 計算機理論中的重要概念。

信任根與信任鏈

可信計算的思想是在計算機系統中先建立一個信任根:從信任根開始,到硬件平臺、操作系統、應用,一級度量一級,一級信任一級,把這種信任擴展到整個計算機系統,並採取防護措施,確保計算資源的數據完整性和行爲的預期性,從而提高計算機系統的可信性。

可信根

通常是可信硬件芯片可信計算通過芯片廠家植入在可信硬件中的算法和祕鑰,以及集成的專用微控制器對軟件棧進行度量和驗證來確保可信。根據安全芯片和其上運行的可信軟件基(Trusted Software Stack)分類,業界目前主流的可信計算標準主要有三種:Trusted Platform Module (TPM)、Trusted Cryptography Module (TCM)和 Trusted Platform Control Module (TPCM)。

信任鏈

主要作用是將信任關係擴展到整個計算機平臺,它建立在信任根的基礎上。信任鏈可以通過可信度量機制來獲取各種各樣影響平臺可信性的數據,並通過將這些數據與預期數據進行比較,來判斷平臺的可信性。

可信主要通過度量和驗證的技術手段實現。

  • 度量就是採集所檢測的軟件或系統的狀態
  • 驗證是將度量結果和參考值比對看是否一致,如果一致表示驗證通過,如果不一致則表示驗證失敗。

建立信任鏈時遵循以下 3 條規則:

  • 所有模塊或組件,除了 CRTM (信任鏈構建起點,第一段運行的用於可信度量的代碼),在沒有經過度量以前,均認爲是不可信的。同時,只有通過可信度量且與預期數據相符的模塊或組件,纔可歸入可信邊界內。
  • 可信邊界內部的模塊或組件,可以作爲驗證代理,對尚未完成驗證的模塊或組件進行完整性驗證。
  • 只有可信邊界內的模塊或組件,纔可以獲得相關的 TPM 控制權,可信邊界以外的模塊或組件無法控制或使用可信平臺模塊。

TPM

一般,可信計算平臺由 TPM 芯片機器密鑰和相應軟件作爲信任根。

TPM 本身是一個 SOC 芯片,由 CPU、存儲器、I/O、密碼協處理器、隨機數產生器和嵌入式操作系統等部件組成,主要用於可信度量的存儲、可信度量的報告、密鑰產生、加密和簽名、數據安全存儲等功能。通過將密鑰封裝在芯片內部,讓外界無法訪問,只有 TPM 認可的合法應用請求時,TPM 纔會在芯片內部對數據進行解密,並將解密後的數據送往內存。

TPM 的使用一定程度上降低了重要數據被木馬等惡意軟件竊取的風險,但卻無法防禦運行時攻擊,如果黑客在合法應用運行時進行破解,直接去內存讀解密後的數據,這樣 TPM 就形同虛設了。

爲了解決這個問題,我們還應該想辦法使得黑客無法讀取合法應用所使用的內存空間,可信執行環境(Trusted Execution Environment)的提出,正是基於這樣的背景。

TEE 與 REE

2010 年,Global Platform 首次宣佈了一整套 TEE 系統體系標準。Global Platform 的系列 TEE 規範,這也是當前許多商業或者開源產品一般都會參考該規範,並按照其定義的各種功能接口進行規範實現。

Global Platform 從接口、協議實現層面上對 TEE 進行了部分的規範定義,以及典型應用規範定義。可以看出,可信執行環境應該有如下幾個特徵:

  • 軟硬件協同的安全機制:隔離是其本質屬性,隔離可以是通過軟件,也可以是硬件實現,更多的軟件、硬件、IP、總線一體的安全機制
  • 算力共享:能使用 CPU 的同等算力、硬件資源
  • 開放性:有對應的 REE 側,纔有 TEE 的必要性,只有在開放性中才需要可信執行環境的保護

到這裏,我們大概可以看出,TEE 技術與沙盒模型的區別了:一個是有罪推定原則指導的設計,一個是無罪推定原則指導的設計。

在有罪推定的模型中,TEE 是相對 REE (Rich Execution Environment)而言的。一般稱 TEE 和 REE 爲 Secure World 和 Normal World。比如一個系統平時是跑在 Normal World 上,但當有些安全性要求比較高的行爲,例如人臉數據比對、或支付時用私鑰簽名等任務,需要運行在 Secure World 裏。

從甕城與沙盒談起,瞭解可信計算對區塊鏈隱私保護的價值

Trust Zone

2006 年,ARM 從 ARMv6 架構 開始引入了 TrustZone 技術。TrustZone 技術將 CPU 的工作狀態分爲了正常世界狀態(Normal World Status,NWS)和安全世界狀態(Secure World Status,SWS)。

支持 TrustZone 技術的芯片提供了對外圍硬件資源的硬件級別的保護和安全隔離。當 CPU、處於正常狀態時,任何應用都無法訪問安全硬件設備,也無法訪問屬於安全世界狀態下的內存、緩存(Cache)以及其他外圍安全硬件設備。

在具體的應用環境中,可以將用戶的敏感數據保存到 TEE 中,並由可信應用(Trusted Application,TA)使用重要算法和處理邏輯來完成對數據的處理。當需要用戶的敏感數據做身份驗證時,則通過在 REE 側定義具體的請求編號從 TEE 側獲取驗證結果。

Intel SGX

2013 年,英特爾推出了基於 TEE 的指令集擴展:SGX (全稱 Intel Software Guard Extension),旨在通過硬件安全爲強制性保障 , 不依賴於固件和軟件的安全狀態 , 給用戶空間提供可信執行環境。

SGX 通過一組新的指令集擴展與訪問控制機制 , 實現不同程序間的隔離運行 , 保障用戶關鍵代碼和數據的機密性與完整性不受惡意軟件的破壞。

與 ARM TrustZone 的思想不同,SGX 採取的方式並不是識別和隔離平臺上的所有惡意軟件,而是將合法軟件的安全操作封裝在一個 Enclave 中,保護其不受惡意軟件的攻擊,特權或者非特權軟件都無法訪問 Enclave。

一旦軟件和數據位於 Enclave 中,即便操作系統也無法影響 Enclave 裏面的代碼和數據。Enclave 的安全邊界只包含 CPU 和它自身 , 這一設計避免了基於軟件的 TEE 自身存在軟件安全漏洞與威脅的缺陷 , 極大地提升了系統安全保障。

目前,Intel SGX 已允許第三方利用「遠程驗證」機制,構建自己的信任證書頒發。因此在商用層面上,Intel SGX 相對比較成熟。

SGX 的問題

但是目前 Intel SGX 也存在一些問題:

  • 過於依賴英特爾。也就是所謂「中心化」,這也是 MPC 的多種方案中 TEE 常常被抨擊的點。
  • SGX 提供的 enclave 可使用內存太小 ,當程序數量和規模增大時 , 需要換進換出頁面 . 爲了保證安全性 , 需要對頁面進行完整性和機密性保障 , 導致系統開銷大。
  • 無法抵禦側信道攻擊。SGX Enclaves 僅保護在圍圈中運行的代碼。這意味着不受信任的操作系統將保留服務資源管理任務,這爲側信道攻擊打開了一個很大的缺口。事實上,最近的研究已經證明了一些針對英特爾 SGX 的側信道攻擊是有效的。
  • 由於 enclave 處於用戶態 , 其自身無法執行系統調用 , 需要與不可信區域進行交互 (運行庫的支持有限 , 接口的安全性)。在執行系統調用前需要退出 enclave, 執行完成後將結果返回到 enclave 中 , 增大了安全風險和系統開銷。

不同的計算機系統設計有不同的對象,就好比我們不能讓甕城承擔市民居住的功能一樣,我們發現 TEE 與區塊鏈有可以互相補充的適用場景。

區塊鏈 TEE 能做到什麼

區塊鏈對 TEE 的價值:

  • 通過去中心化網絡和共識機制降低英特爾等廠商的安全風險和作惡可能性,保證可信鏈(此鏈非區塊鏈)的可用性。Phala Network 未來會兼容多種 TEE 協議,因此即使英特爾被大規模攻擊,區塊鏈系統也能通過切換 TPM 節點等手段恢復數據、懲罰作惡節點。
  • 解決 Enclave 與不可信區域交互的問題。區塊鏈最擅長的即是構建可信網絡,不論是 BTC 還是以太坊,其可信程度都達到了非常好的水平——甚至與 TEE 的可信程度類似。因此,讓 TEE 通過區塊鏈和區塊鏈智能合約交互是個非常好的互補場景。這也是 Phala 網絡需要跨鏈能力的重要原因。

TEE 對區塊鏈的價值:隱私(機密)保護

一提到隱私保護,大家想到的就是 Facebook 隱私泄露什麼的。其實不只是這樣,TEE 可以實現的區塊鏈祕密保護更加泛化,還包括通用意義上的「機密」,比如商業類型的、業務沉澱的。

我們常常給隱私保護技術分成三個世代:

第一代技術的典型代表 Zcash 和門羅幣,他們通過零知識證明、環簽名、保密轉賬等技術實現了交易的隱私保護,一個突出的特點就是他們的技術可以保護原生幣的交易隱私。

第二代技術的典型代表是 Aztec,一個以太坊上的隱私協議,採用和 Zcash 類似的技術,可以爲任何 ERC20 代幣實現交易隱私。第二代技術是第一代的擴展,不過他們都只能實現交易隱私,如果涉及到圖靈完備的智能合約就無能爲力了。

第三代技術,我們希望把「隱私保護」的概念拓展成「機密保護」,隱私不僅指用戶的交易隱私,更應該能保護智能合約中的任何機密數據不被泄漏。目前的智能合約技術,所有的數據都必須完全公開,而我們希望「機密智能合約」(Confidential Smart Contract)可以如同以太坊的圖靈完備智能合約一樣,可以進行通用的計算,但不必暴露機密數據。

目前機密智能合約技術可以通過多方計算(MPC)與可信執行環境(TEE)實現。前者基於同態加密、零知識證明等純密碼學技術,不依賴硬件,可以高效率的應用在一些特定領域,例如可驗證隨機數、分佈式密鑰生成等,但在通用計算上有平均 10^6 倍的性能損失。後者基於可信計算硬件(主要是 Intel 的 CPU),但已經可以實現非常高效率的通用計算。

來源鏈接:mp.weixin.qq.com