Rust 大展拳腳的新興領域:機密計算

雲原生時代,Go 語言憑藉其原生支持高併發等特性,一躍成爲雲原生基層設施建設首選語言,榮登各大編程語言排行榜前列,成爲用戶增長最快的新興編程語言之一。而相比之下,同樣以取代 C/C++爲目的被創造出來的另一門新語言 Rust 在很長一段時間裏則不溫不火,陷入“叫好不叫座”的尷尬境地。

幸運的是,隨着雲原生浪潮逐漸進入下半場,企業和用戶對數據的安全性有了更高的要求,“可信原生”與“機密計算”等數據安全新概念被業界提出,並吸引了大批軟硬件巨頭入場佈局, 也讓 Rust 這門注重內存安全的高性能編程語言迎來了絕佳的發展機遇。
 
深耕金融、支付相關技術領域的螞蟻集團是國內外機密計算技術領域的先行者,其開源的 SOFAEnclave 機密計算解決方案被包括微軟在內的多家科技巨頭採用,團隊輸出的相關技術論文也多次在國際頂會發表,受到工業界和學術界的廣泛認可。爲深入瞭解這一前沿技術領域,我們邀請到了螞蟻集團機密計算總監閆守孟,爲我們揭開機密計算的神祕面紗。
 

什麼是機密計算?

隨着雲計算的快速發展,越來越多的關鍵性服務和高價值數據被遷移到了雲端。雲安全也因此成爲學術界和工業界關注的一個焦點。
 
機密計算填補了當前雲安全的一項空白——使用中數據(Data-in-use)的加密。過去通行的做法是對數據在存儲中(比如硬盤)和傳輸中(比如網絡)加密,而在使用中(比如內存)解密,以便處理。而機密計算可以保護使用中數據的機密性和完整性。
 
也就是說,通過機密計算技術,一些對數據安全性要求極高的傳統企業如金融、銀行、政企等客戶,也可以放心地使用公有云服務。
 
目前,多家雲計算巨頭都在不約而同地推廣這項技術:微軟已於 2017 年 7 月宣佈開始接受 Azure 機密計算的早期試用申請;IBM 於 2017 年 12 月宣佈 IBM 雲數據保護(Cloud Data Guard)的預覽版;谷歌也於 2018 年 5 月開源了名爲 Asylo 的機密計算框架。
 
2019 年 8 月, Linux 基金會宣佈 聯合多家科技巨頭組建“機密計算聯盟( Confidential Computing Consortium ,簡稱 CCC)”,創始成員包括阿里巴巴、Arm、百度、谷歌、IBM、英特爾、微軟、紅帽、瑞士通以及騰訊。讓機密計算技術進入了更多開發者的視野。
 
那麼,機密計算究竟是如何實現的呢?
 
實際上,上述所有云計算巨頭在實現機密計算時都離不開一種稱爲“可信執行環境(TEE)”的技術。
 
顧名思義,TEE 提供一種與不可信環境隔離的安全計算環境,正是這種隔離和可信驗證機制使得機密計算成爲可能。
 
TEE 一般是直接基於硬件實現的,比如 Intel SGX,Intel TDX,AMD SEV,ARM TrustZone,以及 RISC-V Keystone 等;基於虛擬化技術也可以構造 TEE,比如微軟的 VSM,Intel 的 Trusty for iKGT & ACRN。
 
其中,Intel 軟件防護拓展(Software Guard Extensions,簡稱 SGX)是目前商用 CPU 中最爲先進的 TEE 實現,它提供了一套新的指令集使得用戶可以定義稱爲 Enclave 的安全內存區域。CPU 保證 Enclave 與外界強隔離,並提供內存加密和遠程證明機制,從而保護 Enclave 代碼和數據的機密性、完整性和可驗證性。不同於之前的 TEE 實現,比如 ARM TrustZone,SGX 每個 APP 都可以有自己獨立的 TEE,甚至可以創建多個 TEE,而 TrustZone 是整個系統有一個 TEE;這裏也省去了向設備廠商申請將 TA(可信應用)裝入 TEE 的過程。由於 SGX 的先進性,目前雲端機密計算領域甚至已公認用 Enclave 這個詞來指代 TEE。
 
通過機密計算技術,能夠解決那些業務數據敏感的用戶對雲原生平臺不信任的問題,也由此引出了“可信原生”的概念,即讓雲原生基礎設施在用戶一側更加可信。

 

機密計算應用開發難點

顯然,這一技術的成熟意味着包括金融、政企等業務數據敏感的用戶上雲成爲可能,市場前景廣闊。雖然這些聽起來很美,但機密計算在實際應用中仍面臨很多的挑戰。
 
  • 首先,Enclave 是一個受限的環境,從編程接口到編程模型都跟開發者熟悉的 Linux 環境有很大不同。
 
  • 其次,開發者要花力氣學習市面上的多種不同 Enclave 硬件架構。
 
  • 再有,目前主流的集羣調度系統(如 K8s)還不支持 Enclave,限制了 Enclave 的大規模使用。
 
以基於 Intel SGX CPU 開發機密計算應用程序爲例。
 

SGX 應用是一種基於劃分的模型:在用戶態的(不可信)應用程序(上圖紅色部分)可以嵌入 SGX TEE 保護的區域(上圖綠色部分),被稱爲 Enclave。支持 SGX 的 Intel CPU 保證 Enclave 中的受保護內容是在內存中加密的,並且與外界強隔離。外界的代碼如果想進入 Enclave 中執行其中的可信代碼必須通過指定的入口點,後者可以實施訪問控制和安全檢查以保證 Enclave 無法被外界濫用。
 
由於 SGX 應用程序是基於這種劃分的架構,應用開發者通常需要使用某種 SGX SDK,比如 Intel SGX SDK、Open Enclave SDK、Google Asylo 或 Apache Rust SGX SDK等。但無論使用上述哪種 SDK,開發者會遭遇下面的開發困境:
 
  • 必須將目標應用做二分:開發者需要決定哪些組件應該置於 Enclave 內部,哪些置於 Enclave 外部,以及雙方如何通信。對於複雜的應用,確定高效、合理且安全的劃分方案本身就是一件頗具挑戰的工作,更不要說實施劃分所需的工程量。
  • 被限定在某個編程語言:無論使用上述哪種 SDK 開發,一個開發者都將被限定在該 SDK 所支持的語言,這通常意味着 C/C++(當使用 Intel SGX SDK、Open Enclave SDK 或 Google Asylo 時),而無法使用 Java、Python、Go 等更加友好的編程語言。
  • 只能獲得很有限的功能:出於硬件限制和安全考慮,Enclave 中是無法直接訪問 Enclave 外的(不可信)OS 的。由於 Enclave 中缺乏 OS 的支持,各種 SDK 只能提供普通不可信環境下的一個很小的功能子集,這使得很多現有的軟件庫或工具都無法在 Enclave 中運行。
 
上述困境使得爲 SGX 開發應用成爲一件十分痛苦的事,制約了 SGX 和機密計算的普及度和接受度。
 

螞蟻機密計算軟件棧 SOFAEnclave

爲了解決這些挑戰,螞蟻開發了 SOFAEnclave 機密計算軟件棧,分爲如圖所示的三個部分:

Occlum LibOS

Occulum 是螞蟻開源的 TEE 操作系統,也是 CCC 機密計算聯盟中第一個由中國公司發起的開源項目。
 
Occlum 提供 POSIX 編程接口,支持多種主流語言(C/C++, Java, Python, Go, Rust 等),支持多種安全文件系統。可以說,Occlum 提供了一個兼容 Linux 的 Enclave 運行環境,使得機密計算可以輕鬆支持已有的應用,也使得機密應用開發者複用原有開發技能。Occlum 不但在工業界場景中得到了廣泛的應用,而且也在系統頂會 ASPLOS 2020 發表了學術論文,代表了機密計算業界的領先水平。
 
從架構上來看,Occlum 不但提供基本的類似 Linux 的操作系統能力,而且提供一個類似 Docker 的用戶使用接口,比如這裏的 Occlum build 和 Occlum run 等都跟 Docker 的命令類似。

 
社區方面,Occlum 是阿里巴巴 Inclavare Containers 的缺省運行時,也在與 Hyperledger Avalon 等其他社區項目合作。同時,Occlum 已經捐贈給機密計算聯盟 CCC,目前是唯一一個來自中國的開源項目。另外,值得一提的是,微軟 Azure Cloud 在去年 9 月的 Microsoft Ignite 大會上 介紹機密計算技術的新進展 時,還公開推薦在 Azure 上基於 Occlum 開發機密計算應用。
 
Occlum開源地址: https://github.com/occlum/occlum
 

HyperEnclave

前面提到,市場上目前有多種 Enclave 硬件平臺。這些 Enclave 各有特點,但也給開發者帶來了較大的學習負擔。作爲這些硬件的用戶,螞蟻技術團隊其實希望有一個統一的 Enclave 抽象,另外,他們也希望能對 Enclave 的啓動和證明有更靈活的控制。
 
針對上述問題,螞蟻機密計算團隊提出了機密計算硬件虛擬化技術 HyperEnclave。這是一個統一的 Enclave 平臺。作爲抽象層,它既能映射到現有的各種 Enclave 硬件實現,也能使用未來的硬件能力,比如 Intel MKTME/TDX。“它甚至可以支持沒有 Enclave 擴展的機器,在這種機器上我們基於虛擬化技術實現了隔離機制 —— 我們開發了一個 Type 1.5 的 hypervisor 用來創建和管理基於虛擬化的 Enclave。在可信方面,我們基於可信計算技術(如 TPM 等)實現了由用戶靈活掌控的信任機制。”
 
基於 HyperEnclave,加上 AMD SEV 或者 Intel MKTME 等內存加密硬件能力,HyperEnclave 也可以防護物理攻擊。有趣的是,HyperEnclave 支持現有的 Enclave SDK。這意味着用戶已有的只能跑在 x86 平臺的 Encalve 應用,現在可以運行在 HyperEnclave 支持的任何硬件平臺上(包括國產 CPU),極大的緩解了用戶 Enclave 代碼跨平臺移植的困擾,同時使得用戶對信任鏈有更靈活的控制。
 
我們詳細看一下這個系統的生命週期各階段。首先 Linux 系統像往常一樣啓動。接着,我們的 hypervisor 模塊開始加載。Hypervisor 加載完畢之後,會把原來的 Linux host 降級爲一個不被信任的 guest。
 
這個 Hypevisor 支持創建 Enclave 虛擬機。Enclave 虛擬機支持傳統機密計算 SDK 提供的二分式編程模型。Enclave 虛擬機也支持利用 Occlum 將整個應用運行在 Enclave 裏面。


總結一下這個虛擬化技術的特點:
 
第一,安全第一的設計原則。TCB 是一個非常小的、可形式化驗證的、用內存安全語言 RUST 開發的 hypervisor。
 
第二,支持基於 TPM/TXT 的 Enclave 可信啓動和遠程證明。
 
第三,兼容 Linux 已有生態。前面提到這是一個 Type 1.5 Hypervisor,顧名思義這是一個兼具Type 1 & Type 2 特點的 Hypervisor,更明確地說就是,它 boot like type 2, 但 run like type 1。這樣一來我們可以很好地適應目前主流的 Linux 部署方式。另外,這個 Hypervisor 也可以跟 demoted Linux 裏面的 KVM 很好地配合。
 
第四,我們可以比較容易地引入硬件提供的內存加密能力,比如 Intel MKTME/TDX 或者 AMD SEV。
 

KubeTEE

前面提到的 Occlum 和 HyperEnclave 都還是針對單個計算節點的技術。但是目前的互聯網應用都是基於大規模集羣的,尤其是基於 Kubernetes 的。Kubernetes 提供了很多基礎的集羣管理、調度、和監控能力,但這些能力並不能很好適用到機密計算場景。首先我們需要讓Kubernetes 能夠認識 Enclave 硬件,將 enclave 暴露給容器,監控 Enclave 資源,並處理Enclave 特有的事務比如遠程證明等等。
 
閆守孟團隊研發的 KubeTEE 就是 Kubernetes 和 Enclave 也就是 TEE 的有機結合。基於KubeTEE,用戶可以使用 kubernetes 的工作流程來輕鬆管理機密計算集羣,部署 Enclave 服務,使用 Enclave 中間件等等。
 
 
KubeTEE 也包含一個叫做 AECS 的組件,基於機密計算的遠程證明機制,簡化集羣內 Enclave 的密鑰分發和部署過程。
 
通過以上三個組件,螞蟻開源的 SOFAEnclaves 技術棧解決了機密計算目前實際應用中的三大難題。相關技術和理念在工業界和學術界都獲得了廣泛認可,處於世界領先水平。
 

Rust 閃耀機密計算

我們注意到,在螞蟻開源的 SOFAEnclaves 軟件棧中,Rust 語言扮演了十分重要的角色。其中 Occlum 和 HypeEnclave 兩大組件都主要由 Rust 語言開發完成。
 
閆守孟告訴我們,作爲一門兼顧安全性與高性能的新興編程語言,Rust 語言在螞蟻集團內部已經被廣泛運用,尤其是他所在的機密計算領域,Rust 語言成爲了項目開發的主力語言。
 
“我們的東西基本上都是用 Rust 寫的。一方面是 Rust 語言生態已經足夠成熟,其內存安全等特性是我們非常看重的。此外,Rust 的開發效率也非常高,大大提升了我們團隊的生產力。”
 
據悉,在螞蟻機密計算技術團隊中,有一位資深的 Rust 佈道師 —— Occlum 的核心開發者田洪亮。關於 Rust 語言在螞蟻內部的推廣,這裏面還有一個小故事。
 
當時,在螞蟻內部,Java 技術棧是主流,而田洪亮則是 Rust 語言的忠實擁躉,雖然公司允許他用 Rust 開展工作,但知音難覓的他有點小鬱悶。不過很快,田洪亮參加了支付寶內部的一個編程比賽,100 名參賽同事裏面只有他一個人用 Rust,其他人要麼用 Java 要麼用 Python,從性能上來說,要比 Rust 慢很多。這一下田洪亮相當於開掛,在這場比賽中“大殺特殺”。
 
正是通過這場比賽,Rust 的名聲在公司內打響了,有不少同事對 Rust 表示興趣。於是趁熱打鐵,田洪亮在公司內分享了關於 Rust 的公開課,還成爲阿里雲的 Rust 佈道師。
 
在 Gartner 發佈的 2020 年雲安全技術成熟度曲線報告中,機密計算被列爲 33 種重要技術之一,並預測在未來 5 - 10 年內成爲最普遍的雲原生安全技術。
 
閆守孟表示,“我們希望 SOFAEnclave 機密計算軟件棧能幫助大家降低機密計算的門檻,促進雲原生到可信原生的演進。SOFAEnclave 的三個組件中,Occlum、KubeTEE 已經開源,HyperEnclave 也即將開源。希望跟業界加強交流合作!”
 


受訪嘉賓介紹



閆守孟是螞蟻集團資深技術專家和負責機密計算方向的研發總監。他目前的研究興趣是基於可信執行環境 TEE 的機密計算技術。他領導了螞蟻集團 SOFAEnclave(Occlum、HyperEnclave、KubeTEE 等)機密計算軟件棧的研發,發起並主導了國內外多項TEE標準的制定。加入螞蟻之前,閆守孟在 Intel 中國研究院任高級主任研究員,主要從事安全隔離技術的研究,研究成果融入 Intel 相關軟硬件產品。加入 Intel 之前,他在 2005 年從西北工業大學計算機學院獲得博士學位。他擁有 20 餘項專利,並在 ASPLOS, PLDI, FSE, MM 等頂級會議發表文章。

 延伸閱讀

本文分享自微信公衆號 - 金融級分佈式架構(Antfin_SOFA)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章