架構安全與可靠性

可信執行環境(trusted execution environment, TEE)

/ T-E-E /

想像把你最敏感的文件交進一個密封手套箱:你能把工作放進去、把結果取出來,但沒有人——連大樓的所有者都不行——能把手伸進去讀或竄改桌上的東西。可信執行環境,也就是 TEE,是那個手套箱的硬體版本。它是處理器中一塊在受保護氣泡裡執行程式碼、保存資料的區域,由硬體加以隔離,使得連作業系統、超管理器、以及完全掌控機器其餘部分的攻擊者,都無法窺視或更改裡頭的東西。

具體而言,TEE 把系統分成普通世界與安全世界,由 CPU 本身執行兩者之間的牆。安全世界的程式碼擁有自己受保護的記憶體與執行狀態;只有狹窄、受控的閘門讓普通世界請求服務,很像跨越特權界線的系統呼叫,但這裡界線保護的是安全側免受更高權限的軟體侵害,而非反過來。屬於 TEE 的記憶體通常由硬體加密並做完整性檢查,所以即使攻擊者讀了實體 DRAM 或記憶體匯流排,看到的也只是密文(見 secure-enclave 與 memory-mapped-io)。例子包括撐起行動支付與指紋處理的 Arm TrustZone,以及 Intel SGX 隔離區。

誠實的說法是:TEE 縮小了你必須信任的範圍,但沒讓信任消失。它的承諾是讓裡頭的程式碼與資料保有機密性與完整性,即使在一台你不掌控其 OS 的機器上也成立——這對在雲端處理秘密或守護密碼學金鑰很有用。但你仍信任著矽晶片廠商和 TEE 自己(通常很小)的韌體,而且 TEE 並不免疫於本領域的側通道攻擊:已有數個被證明儘管有隔離,仍透過快取時序與推測執行洩漏秘密(見 side-channel-attack 與 spectre-vulnerability)。TEE 把門檻大幅拉高;它不是終結一切攻擊的魔法盒子。

一支手機在 TEE 裡處理你的指紋。比對演算法與儲存的指紋樣板住在安全世界;一般的 Android App 住在普通世界,只能送出「這個符合嗎?」的請求並收到是/否。即使完全攻陷 Android 的惡意軟體,也讀不到指紋樣板,因為硬體拒絕讓普通世界對安全世界記憶體做任何存取。

OS 能問 TEE 一個問題,卻讀不到它的記憶體——隔離由 CPU 執行,而非由 OS。

TEE 縮小了可信任基礎,但並非牢不可破:真實的 TEE(含 SGX)曾被快取時序與推測執行的側通道攻破。應把它當成一道堅固的屏障,而非裡頭秘密實體上無法觸及的保證。

又稱
TEEsecure world可信賴執行環境安全世界