Gate 品牌戰略重磅升級
啓用全球域名 Gate.com,全新 Logo 同步上線!
以更簡潔、高辨識度、全球通用的視覺語言,開啓從領先到引領的新徵程!
✨ 三大戰略升級:
1. 用戶至上:服務全球 2300 萬用戶,儲備金率 128.57% 穩居行業前列
2. 技術創新:率先採用零知識技術驗證儲備金安全性
3. 全球合規:Gate 是全球少數具備多地區合法運營能力的加密平台之一
正如 12 周年盛典宣言,我們正朝“超級獨角獸交易所”進化。
全新品牌標識不僅是 Gate 大門的開啓,更是通向加密未來的信任橋梁!
https://www.gate.io/announcements/article/45055
#GateCom # #GateNewLogo#
面向TEE的開發者指南
作者:prateek, roshan, siddhartha & linguine (Marlin), krane (Asula)編譯:Shew,仙壤GodRealmX
自從Apple宣佈推出私有云以及NVIDIA在GPU中提供機密計算以來,可信執行環境(TEE)變得越來越流行。它們的機密性保證有助於保護用戶數據(可能包括私鑰),而隔離性確保部署在其上的程序的執行不會被篡改——無論是人類、其他程序還是操作系統。因此,Crypto x AI領域大量使用TEE構建產品也不足為奇。
與任何新技術一樣,TEE正在經歷一段樂觀的實驗期。本文希望為開發人員和一般讀者提供基礎的概念指南,讓他們瞭解什麼是TEE、TEE的安全模型、常見的漏洞和安全使用TEE的最佳實踐方式。(注意:為了使文本易於理解,我們有意識地用更簡單的等價詞替換了TEE術語)。
什麼是TEE
TEE是處理器或數據中心中的隔離環境,程序可以在其中運行,而不會受到系統其餘部分的任何干涉。為了避免TEE被其他部分干涉,我們需要一系列的設計,主要包括嚴格的訪問控制,即控制系統其他部分對TEE內程序和數據的訪問。目前TEE在手機、服務器、PC和雲環境中無處不在,因此非常易於訪問且價格合理。
上面的內容聽起來可能很模糊和抽象,實際上不同的服務器和雲供應商實施TEE的方式不同,但其根本目的是為了避免TEE被其他程序干涉。
大多數讀者可能會用生物識別信息登錄設備,比如通過指紋解鎖手機。但我們如何保證惡意應用程序、網站或越獄操作系統無法訪問和竊取這些生物識別信息?事實上,除了把數據加密之外,TEE設備中的電路根本不允許任何程序訪問敏感數據佔用的內存和處理器區域。
硬件錢包是TEE應用場景的另一個示例。硬件錢包連接到計算機並與其進行沙盒通信,但計算機無法直接訪問硬件錢包內存儲的助記詞。在上述兩種情況下,用戶都相信設備製造商能夠正確設計芯片並提供適當的固件更新,以防止TEE內的機密數據被導出或查看。
安全模型
遺憾的是,TEE實現種類非常多,這些不同的實現(IntelSGX、IntelTDX、AMDSEV、AWSNitroEnclaves、ARMTrustZone)都需要獨立的安全模型建模分析。在本文的其餘部分,我們將主要討論IntelSGX、TDX和AWSNitro,因為這些TEE系統具有較多的用戶,也具有完整可用開發工具。上述系統也是Web3內最常用的TEE系統。
一般而言,在TEE中部署的應用程序的工作流如下:
顯然,這裡面有3個潛在的風險:
值得慶幸的是,現在的TEE已經有了消除上述風險的方案,即可重複構建(Reproducible Builds)和遠程證明(Remote Atteststations)。
**那麼什麼是可重複構建?**現代軟件開發往往需要導入大量依賴,比如外部工具、庫或框架等,這些依賴文件也可能存在隱患。現在npm等方案使用了依賴文件對應的代碼哈希作為唯一標識符。當npm發現某個依賴文件與記錄的哈希值不一致時,就可以認為該依賴文件已被修改。
而可重複構建可以被認為是一組標準,目標是當任意代碼在任何設備上跑時,只要按照事先規定的流程進行構建,最終都可以得到一致的哈希值。當然,在實操中我們也可以使用哈希之外的產物作為標識符,此處我們稱之為代碼度量(code measurement)。
Nix是可重複構建的常用工具。當程序的源碼公開後,任何人都可以檢查代碼,以確保開發人員沒有插入異常內容,任何人都可以使用Nix構建代碼,檢查構建出的產物是否與項目方在生產環境中部署的產物有相同的代碼度量/Hash。但我們如何知道TEE中程序的代碼度量值呢?這裡就涉及到稱為“遠程證明”的概念。
遠程證明是來自TEE平臺(受信任方)的簽名消息,其中包含程序的代碼度量值、TEE平臺版本等。遠程證明讓外部觀察者知道,某個程序正在任何人都無法訪問的安全位置(xx版本的真實TEE)中執行。
可重複構建和遠程證明使得任何用戶都可以知道TEE內運行的實際代碼和TEE平臺版本信息,從而防止開發者或者服務器作惡。
但是,在TEE的情況下,始終需要信任其供應商。如果TEE供應商作惡,可以直接偽造遠程證明。因此,如果將供應商視為可能的攻擊媒介,應避免僅依賴TEE,最好將它們與ZK或共識協議相結合。
TEE的魅力
在我們看來,TEE特別受歡迎的特性,尤其是對於AI Agent的部署友好性主要在於以下幾點:
無論好壞,相當多使用TEE的用例目前很難找到替代方案。我們相信TEE的引入進一步擴展了鏈上應用程序的開發空間,這可能推動新應用場景的產生。
TEE不是銀彈
**在TEE中運行的程序仍然容易受到一系列攻擊和錯誤的影響。**就像智能合約一樣,它們容易遇到一系列問題。為簡單起見,我們將可能的漏洞分類如下:
開發人員疏忽
無論是有意還是無意,開發人員都可以通過有意或無意的代碼來削弱TEE中程序的安全保證。這包括:
運行時漏洞
開發人員再謹慎也可能成為運行時漏洞的犧牲品。開發人員必須仔細考慮以下任何一項是否會影響其項目的安全保證:
例如,在TEE中運行可以處理加密交易的匹配引擎,該引擎無法提供公平的排序保證(抗MEV),因為路由器/網關/主機仍然可以根據數據包來源的IP地址丟棄、延遲或優先處理之。
架構缺陷
TEE應用程序所使用的技術棧應該謹慎。在構建TEE應用程序時,可能出現以下問題:
運營問題
最後但並非最不重要的一點是,關於如何真正運行一臺執行TEE程序的服務器,也有一些實際注意事項:
構建安全的TEE程序
我們將我們的建議分為以下幾點:
1. 最安全的方案:無外部依賴項
創建高度安全的應用程序可能涉及消除外部依賴項,如外部輸入、API或服務,從而減少攻擊面。此方法可確保應用程序以獨立方式運行,沒有可能損害其完整性或安全性的外部交互。雖然此策略可能會限制程序的功能多樣性,但它可以提供極高的安全性。
如果模型在本地運行,則對於大部分CryptoxAI用例,可以實現此級別的安全性。
2. 採取的必要預防措施
無論應用程序是否具有外部依賴項,以下內容都是必須的!
將TEE應用程序視為智能合約,而不是後端應用程序;保持較低的更新頻率,嚴格測試。
構建TEE程序應與編寫、測試和更新智能合約時一樣嚴格。與智能合約一樣,TEE在高度敏感且不可篡改的環境中運行,其中錯誤或意外行為可能導致嚴重後果,包括資金完全損失。徹底的審計、廣泛的測試以及最少的、經過仔細審計的更新對於確保基於TEE的應用程序的完整性和可靠性至關重要。
審計代碼並檢查構建管道
**應用程序的安全性不僅取決於代碼本身,還取決於構建過程中使用的工具。**安全的構建管道對於防止漏洞至關重要。TEE僅保證提供的代碼將按預期的流程運行,但無法修復構建過程中引入的缺陷。
為了降低風險,必須對代碼進行嚴格的測試和審計,以消除錯誤並防止不必要的信息洩露。此外,可重複構建起著至關重要的作用,尤其是當代碼由一方開發並由另一方使用時。可重複構建允許任何人驗證TEE內執行的程序是否與原始源代碼匹配,從而確保透明度和信任度。如果沒有可重複構建,確定TEE內執行程序的確切內容是幾乎是不可能的,從而危及應用程序的安全。
例如,DeepWorm(在TEE中運行蠕蟲大腦模擬模型的項目)的源代碼是完全開放的。TEE內的執行程序是使用Nix管道以可重現方式構建的。
使用經過審計或驗證的庫
在TEE程序中處理敏感數據時,請僅使用經過審計的庫進行密鑰管理和私有數據處理。未經審計的庫可能會暴露密鑰並損害應用程序的安全性。優先考慮經過充分審查、以安全為中心的依賴項,以維護數據的機密性和完整性。
始終驗證來自TEE的證明
**與TEE交互的用戶必須驗證TEE產生的遠程證明或驗證機制,以確保安全可信的交互。**如果沒有這些檢查,服務器可能會操縱響應,從而無法區分真實的TEE輸出和被篡改的數據。遠程證明為在TEE中運行的代碼庫和配置提供了關鍵證明,我們可以基於遠程證明判斷TEE內執行的程序是否與預期一致。
具體的鑑證可以在鏈上(IntelSGX、AWSNitro)、使用ZK證明(IntelSGX、AWSNitro)在鏈下驗證,也可以由用戶自己或託管服務(如t16z或MarlinHub)進行驗證。
3. 依賴於用例的建議
根據應用程序的目標用例及其結構,以下提示可能有助於使您的應用程序更安全。
確保始終在安全通道執行用戶與TEE的交互
TEE所在的服務器本質上不受信任。服務器可以攔截和修改通信。在某些情況下,服務器讀取數據但不更改數據可能是可以接受的,而在其他情況下,即使讀取數據也可能是不可取的。為了降低這些風險,在用戶和TEE之間建立安全的端到端加密通道至關重要。至少,請確保消息包含簽名以驗證其真實性和來源。此外,用戶需要始終檢查TEE給出遠程證明來驗證自己是否正在與正確的TEE通信。這確保了通信的完整性和機密性。
例如,Oyster能夠通過使用CAA記錄和RFC8657來支持安全的TLS頒發。此外,它還提供了一個名為Scallop的TEE原生TLS協議,該協議不依賴於WebPKI。
知道TEE內存是瞬態的
**TEE內存是瞬態的,這意味著當TEE關閉時,其內容(包括加密密鑰)會丟失。**如果沒有一個安全的機制來保存這些信息,關鍵數據可能會永久無法訪問,從而可能使資金或運營陷入困境。
**具有IPFS等去中心化存儲系統的多方計算(MPC)網絡可以用作此問題的解決方案。**MPC網絡將密鑰拆分到多個節點,確保沒有單個節點持有完整密鑰,同時允許網絡在需要時重建密鑰。使用此密鑰加密的數據可以安全地存儲在IPFS上。
如果需要,MPC網絡可以向運行相同映像的新TEE服務器提供密鑰,前提是滿足特定條件。這種方法可確保彈性和強大的安全性,即使在不受信任的環境中也能保持數據的可訪問性和機密性。
還有另一種解決方案,即TEE將相關交易分別交給不同的MPC服務器,MPC服務器簽名後進行聚合簽名並將交易最終上鍊。這種方法的靈活性要低得多,不能用於保存API密鑰、密碼或任意數據(沒有受信任的第三方存儲服務)。
減少攻擊面
對於安全關鍵型使用案例,值得以犧牲開發人員體驗為代價嘗試儘可能多地減少外圍依賴。例如,Dstack附帶了一個基於Yocto的最小內核,其中僅包含Dstack工作所需的模塊。甚至可能值得使用像SGX(超過TDX)這樣的舊技術,因為該技術不需要引導加載程序或操作系統成為TEE的一部分。
物理隔離
**通過將TEE與可能的人類干預進行物理隔離,可以進一步增強TEE的安全性。**雖然我們可以通過將TEE服務器託管在數據中心和雲提供商,相信數據中心可以提供物理安全。但像Spacecoin這樣的項目正在探索一個相當有趣的替代方案——太空。SpaceTEE的論文依靠安全措施,例如測量發射後的慣性矩,以驗證衛星在進入軌道的過程是否偏離預期。
多重證明者
正如以太坊依賴多個客戶端實現來降低影響整個網絡的bug風險一樣,multiprovers使用不同的TEE實現方案來提高安全性和彈性。通過跨多種TEE平臺運行相同的計算步驟,多重驗證可確保****某一個TEE實現中的漏洞不會危及整個應用程序。雖然這種方法要求計算流程是確定性的,或者在非確定性情況下定義不同TEE實現方案間的共識,但它也提供了故障隔離、冗餘和交叉驗證等顯著優勢,使其成為需要可靠性保證的應用程序的不錯選擇。
展望未來
**TEE顯然已成為一個非常令人興奮的領域。**如前所述,AI的無處不在及其對用戶敏感數據的持續訪問意味著Apple和NVIDIA等大型科技公司正在其產品中使用TEE,並將TEE作為其產品的一部分提供。
另一方面,加密社區一直非常注重安全。隨著開發人員嘗試擴展鏈上應用程序和用例,我們已經看到TEE作為一種在功能和信任假設之間提供正確權衡的解決方案而變得流行。雖然TEE不像完整的ZK解決方案那樣信任最小化,但我們預計TEE將成為首次慢慢融合Web3公司和大型科技公司產品的途徑。