TrustZone、SGX、SEV/TDX 的差異:隔離單位、信任範圍、記憶體加密比較

三者都是以 CPU 硬體保護機密處理的機制(TEE,可信執行環境),即使一般的作業系統或超管理器(hypervisor)遭到入侵也能保護。差異在於以什麼為單位切分。TrustZone 將處理器分為安全世界與一般世界,主要用於智慧型手機與嵌入式裝置。SGX 只把應用程式的一部分切出成為飛地(enclave),讓信任範圍最小。SEV 與 TDX 則將整個虛擬機器(VM)的記憶體加密,讓雲端業者也無法讀取內容,屬於機密運算的方式。

項目TrustZoneSGX(飛地)SEV/TDX(VM 型機密運算)
隔離的單位將整個處理器分為安全世界與一般世界兩部分。在安全世界中執行小型的可信作業系統與可信應用程式應用程式中處理機密的一部分(飛地)整個虛擬機器
防範的對象一般世界的作業系統與應用程式。即使其核心遭到入侵,也讀不到安全世界的記憶體作業系統、超管理器、其他應用程式,以及以物理方式讀取主記憶體的攻擊者超管理器、雲端業者的管理者、其他虛擬機器,以及以物理方式讀取主記憶體的攻擊者
信任範圍(TCB)CPU 硬體、負責切換模式的安全監控程式(secure monitor),以及安全世界的可信作業系統與應用程式CPU 的硬體與韌體,以及飛地本身的程式碼。不包含作業系統CPU 的硬體與韌體(AMD 的安全處理器、Intel 的 TDX 模組等),以及包含客體作業系統在內的整個虛擬機器內容。不包含超管理器
記憶體加密不包含在基本機制中。以匯流排訊號區分是否為安全存取,直接阻擋存取本身來隔離飛地的分頁在 CPU 外的主記憶體中保持加密。視實作而定也會偵測竄改以每台虛擬機器各自的金鑰,加密整個虛擬機器的記憶體。金鑰只在 CPU 內部管理。SEV-SNP 與 TDX 還加上完整性保護,防止超管理器改寫或重新對應記憶體
遠端證明沒有架構層級的共通方式,需與 SoC 的安全開機及金鑰機制搭配實現以 CPU 內的金鑰簽署飛地啟動時的量測值,出具報告。使用者確認後才交出機密資料由 CPU 量測虛擬機器的初始狀態,出具以 CPU 內金鑰簽署的報告。使用者確認後才交出解密資料用的金鑰
主要用途在智慧型手機與嵌入式裝置上進行生物辨識比對、處理支付憑證、保管 DRM 金鑰、安全開機中的驗證在伺服器上,只保護金鑰管理或處理機密資料等一部分處理雲端的機密虛擬機器。在連雲端業者也無法讀取的狀態下執行既有的應用程式
移植的工作量需寫成在安全世界執行的應用程式,並設計與一般世界之間狹窄的介面大。需將應用程式分成飛地內與飛地外,系統呼叫、檔案與通訊的處理交給外部的程式碼小。使用支援的客體作業系統,就能幾乎原樣執行既有的作業系統與應用程式
已知的攻擊類型因共用核心、快取與電源,研究已展示快取旁路攻擊,以及以電壓或時脈擾動進行的故障注入攻擊。可信作業系統與應用程式的漏洞也會成為目標研究曾報告利用快取時序、分頁錯誤的模式與推測執行的旁路攻擊洩漏機密的例子研究曾報告惡意的超管理器操縱記憶體對應、中斷等與虛擬機器之間互動的攻擊,以及旁路攻擊。完整性保護就是為對付這類攻擊而加入的
提供狀況廣泛用於 Arm 的應用處理器,Armv8-M 的微控制器有輕量版。Armv9-A 也定義了以虛擬機器為單位隔離的 Arm CCA(Realm)截至 2020 年代前半,Intel 已不在用戶端 CPU 提供 SGX,主要在伺服器用 CPU 提供SEV 是 AMD、TDX 是 Intel 伺服器用 CPU 的功能。截至 2020 年代中期,主要雲端業者已提供機密虛擬機器

數值為具代表性的大致參考值,會因世代或產品而異。

適用於什麼情況

TrustZone
在智慧型手機或嵌入式裝置上,不想另外加晶片,而在單一 SoC 內建立安全區域時。將生物辨識、支付、安全開機的處理與一般作業系統隔離進行。
SGX(飛地)
在伺服器上,只想把金鑰處理等特別需要保護的一部分處理,連同作業系統與超管理器一起隔離時。能讓信任範圍最小,但需要改寫應用程式。
SEV/TDX(VM 型機密運算)
在雲端上,想讓既有的應用程式幾乎原樣執行,同時連業者的超管理器與管理者也防範時。以遠端證明確認是正確的虛擬機器後,才交出資料的金鑰。

常見問題

飛地與機密虛擬機器,哪一種比較安全?

防範的對象相似,但信任範圍不同。飛地連作業系統都排除在信任範圍外,只信任 CPU 與飛地本身的程式碼,因此範圍最小。機密虛擬機器要信任包含客體作業系統在內的整個虛擬機器,範圍較大,但既有的軟體幾乎能原樣執行。應依想保護的程式碼大小,以及能投入多少改寫的工作量來選擇。

TrustZone 會加密記憶體嗎?

TrustZone 的基本機制是存取控制而不是加密。CPU 在匯流排上發出的讀寫都附有表示是否為安全存取的訊號,記憶體與周邊電路前的電路會拒絕一般世界對安全區域的存取。外部 DRAM 的加密,有些 SoC 會以另外的功能提供。

加密記憶體就能防止旁路攻擊嗎?

不能。記憶體加密可防止主記憶體中的資料被讀取或改寫,但快取的使用情形、處理時間、分頁錯誤的模式等,有時仍能從外部觀察到。需要搭配多種對策,例如寫成分支與記憶體存取不隨機密改變的程式、更新微碼、不與不可信的對象共用同一個核心等。

現在還能使用 SGX 嗎?

截至 2020 年代前半,Intel 已不在用戶端 CPU 提供 SGX,主要在伺服器用 CPU 提供。因此,保護個人電腦上執行的應用程式時,已不能以 SGX 為前提。在伺服器上,除了飛地之外,也可以選擇 TDX 這類以虛擬機器為單位的方式。

理解度檢測

下列關於TEE(可信執行環境)的說明,何者正確?

  1. A與一般作業系統隔離、受硬體保護的執行環境,用來進行金鑰處理與認證等重要處理
  2. B用來加快網際網路通訊的環境
  3. C用來撰寫程式的文字編輯軟體
查看答案與解析

正確答案:A. 與一般作業系統隔離、受硬體保護的執行環境,用來進行金鑰處理與認證等重要處理

一般作業系統功能龐大且複雜,要完全消除漏洞並不容易。TEE藉由硬體機制,建立與一般作業系統分離的小型執行環境,指紋比對、付款處理、DRM金鑰的處理等特別需要保護的處理就在其中進行。目的是即使一般作業系統被劫持,也無法動到TEE內的記憶體與金鑰。Arm的TrustZone是代表性的例子。

下列關於Arm TrustZone基本機制的說明,何者正確?

  1. A安全的處理全部在另一台電腦上進行
  2. B一般世界(Normal World)的程式可以自由讀取安全世界(Secure World)的記憶體
  3. CCPU具有安全世界與一般世界的狀態,以匯流排的訊號等區分對記憶體與周邊電路的讀寫來自哪一個世界並加以限制
查看答案與解析

正確答案:C. CPU具有安全世界與一般世界的狀態,以匯流排的訊號等區分對記憶體與周邊電路的讀寫來自哪一個世界並加以限制

在TrustZone中,CPU核心在安全與一般兩種狀態之間切換運作,每次讀寫時,表示目前處於哪種狀態的訊號都會輸出到匯流排。記憶體與周邊電路側的電路會看這個訊號,拒絕一般狀態對分配給安全狀態之區域的存取。因為不需追加專用晶片,就能在單一SoC內建立安全區域,所以廣泛用於智慧型手機等。

下列關於Intel SGX這類「飛地(enclave)」型TEE的特徵,何者正確?

  1. A在外接硬碟上執行整個作業系統核心
  2. B在由CPU將記憶體加密保護的區域中執行應用程式的一部分,連作業系統或超管理器(hypervisor)也無法讀取其內容
  3. C飛地內的資料任何人都能自由改寫
查看答案與解析

正確答案:B. 在由CPU將記憶體加密保護的區域中執行應用程式的一部分,連作業系統或超管理器(hypervisor)也無法讀取其內容

在飛地中,只有應用程式處理機密的部分在特殊的記憶體區域中執行,該區域在CPU內加密後才放到主記憶體(視實作而定也會偵測竄改)。連作業系統、超管理器,以及以物理方式讀取記憶體的攻擊者都看不到內容。需要信任的只有CPU及其程式碼。不過也有報告指出其對旁路攻擊的脆弱性,使用時需要留意。

  1. 在雲端使用的「機密運算(confidential computing)」中,由CPU將虛擬機器的記憶體加密的功能(AMD SEV、Intel TDX等),其目的下列何者正確?
  2. 下列關於在處理機密的系統中,有時會停用CPU的同時多執行緒(SMT)的原因,何者正確?
  3. 下列關於遠端證明(remote attestation)的說明,何者正確?

前往硬體安全的練習題

相關名詞的解說

TrustZone
Arm 處理器的安全性機制。切換安全世界與一般世界,並以匯流排訊號區分及限制對記憶體與周邊電路的存取。
飛地(Secure enclave)
在 CPU 對記憶體加密保護的區域中執行應用程式的一部分,使連作業系統與虛擬機器監視器都無法讀取其內容的 TEE 方式。
TEE(可信執行環境)
與一般作業系統也隔離、由硬體保護的執行環境。用於進行金鑰處理與認證等重要處理。例如 Arm 的 TrustZone。
虛擬機器監視器(Hypervisor)
在一台電腦上執行多個虛擬機器的軟體。將CPU、記憶體與裝置分配給各虛擬機器的作業系統,並使彼此隔離。也稱為虛擬機器監視器(VMM)。
遠端證明(Remote attestation)
裝置以晶片內的金鑰簽署自己內部所執行軟體的狀態,出示給遠端伺服器,由其確認是否可信賴的機制。
旁通道攻擊(Side-channel attack)
從處理所需時間、耗電量、電磁波等原本輸出以外的物理資訊,推測金鑰等機密的攻擊。
推測執行(Speculative execution)
在分支結果等確定之前,依預測先執行後面指令的 CPU 機制。預測錯誤時會取消結果,但快取等處可能會留下痕跡。

相關的比較