機密運算
當你在別人的電腦上執行程式時——一台不屬於你的雲端伺服器——你通常必須信任作業系統、超管理器與雲端營運商,而它們在程式執行時都看得見你的資料。機密運算的目標,是借助特殊硬體,連這些握有大權的內部人也防著、保護你的資料與程式碼。想像在一家銀行租一個保險箱,連銀行員工都打不開:銀行提供金庫與電力,但只有你握有鑰匙,內容物連經營這棟大樓的人都看不到。
它透過硬體飛地(hardware enclave,又稱可信執行環境)運作。CPU 本身劃出一塊受保護的記憶體區域,其內容經過加密、其存取對外界一切都被封鎖——包括平常對整台機器握有全權的作業系統與超管理器。程式碼與資料只在 CPU 內部、真正運算的當下被解密;在記憶體中與匯流排上它們維持加密。第二項關鍵特性是遠端證明(remote attestation):硬體能產生一份密碼學證明,精確地證明飛地內部正在執行的是哪段程式碼,於是遠端的一方能在送出機密之前,驗證它是貨真價實、未經竄改的程式。這把可信計算基礎——你必須信任的那組東西——縮小到只剩 CPU 與你自己的程式碼。
誠實的界限很重要,且常在行銷中被誇大。飛地保護「使用中」的資料,卻無法讓裡頭一個有錯的程式變得安全——你飛地程式碼中的漏洞,仍可能洩漏它所持有的那些機密。硬體本身成了可信基礎的一部分,而真實的飛地設計曾遭受旁路攻擊,從時序或快取行為推斷出機密。而且加密與受限的進出有效能成本。機密運算實質地提高了在不受信任的基礎設施上保護資料的門檻;它是強力的工具,而非絕對的保證。
一家醫院希望雲端供應商分析病患紀錄、卻永遠看不到它們。它在硬體飛地內部執行分析:紀錄只在運算期間於 CPU 內部被解密,雲端自己的作業系統與管理員都讀不到它們,而遠端證明讓醫院能在釋出加密金鑰之前,驗證那段確切的分析程式碼。
資料除了在 CPU 內部之外處處維持加密,連作業系統本身也看不到。
飛地保護使用中的資料,但不會讓裡頭的程式碼變正確。你飛地程式中的錯誤仍可能洩漏其機密,而真實的飛地曾被旁路攻擊攻破——它是強力的保護,而非絕對的保證。