安恒信息正式發布AiLand數據安全島平臺
隨著信息技術的快速發展,全球數據爆發式增長,海量聚集。數據作為新型生產要素,蘊藏著巨大的社會經濟價值,被譽為 “新時代的石油”。數據要素價值的充分釋放基于數據的開放、共享和流通,然而近年來數據泄漏事件頻發,儼然成為安全的“重災區”。這樣的情況下,隱私計算應運而生。
2021年,安恒信息正式發布AiLand數據安全島平臺,通過綜合應用安全多方計算,可信執行環境,同態加密,聯邦學習,區塊鏈算等多種前沿技術以實現共享數據的所有權和使用權分離,確保數據 “可用不可見”。其中運用的隱私計算技術包含哪些呢?之前為大家介紹了隱私計算的一個方向——可信執行環境技術(TEE)。今天繼續為大家另一個方向:安全多方計算(MPC),它作為通用的密碼原語,是目前國際密碼學界的研究熱點之一。
MPC能解決什么問題
MPC是一大類不同技術的總稱。這類技術適用的是由多方分別提供數據進行聯合計算的應用場景。主要解決的問題是在保證各方的原始數據不被泄露的前提下,完成聯合計算任務,得到正確的結果。因此即使多方互不信任,也能一起合作。
MPC的架構
一個MPC系統,通常包含:參與方(數據提供方、算法提供方、結果使用方)、計算方、以及調度方。
參與方
數據提供方提供被計算的數據。
算法提供方提供對數據進行處理的算法。
結果使用方獲得MPC計算的最終結果。
計算方
由多個分布式的計算節點構成。不同的計算節點執行相應的、獨立的計算任務。不同的計算節點可以部署在不同的參與方中。
調度方
根據需要執行的算法、數據、以及計算方的情況(例如節點數量、計算資源等)調度計算節點執行MPC計算任務。
一個MPC系統,可以是中心化的部署架構,也可以是完全分布式的。分布式的MPC,可以將每個計算節點部署在每個用戶域中。

中心化架構部署

分布式架構部署
MPC計算任務的下發與執行框架
按照要求部署好了MPC系統后,要執行一個計算任務可以分為兩個階段:編譯階段、以及計算階段。

計算任務執行圖
編譯階段
編譯階段由MPC任務調度方執行。目的是將不同的計算任務轉換成滿足MPC安全性要求的、可以被計算節點直接執行的計算模型。這個轉換分成兩個部分完成。
1. MPC協議的選擇。任務調度方會先對計算任務進行拆分,依次確定完成計算任務所需的復雜算子、基礎算子。然后根據計算參數選擇合適的MPC協議實現對應的基礎算子。
2. 計算模型的構建。基于不同的MPC協議,實現不同的基礎算子,構建出復雜算子的功能,進一步組合得到計算任務對應的完整計算模型。
計算階段
計算階段由MPC計算方執行。基于數據提供方提供的數據,由多個計算節點聯合運行計算模型,得到正確的計算結果。安全的計算過程由編譯階段生成的計算模型保證,其需要滿足兩個特性:
1. 數據源的“可用不可見”:源數據不能被除了自己以外的任何參與方通過任何方式獲得。
2. 結果數據的正確性:結果方獲得的結果數據需要是正確的。
MPC實現協議的簡介
MPC系統的安全性基于計算模型的安全性。計算模型是由不同的多方安全計算協議擴展組合而成。因此,MPC的安全計算的核心是底層的多方安全計算協議的安全性。主流的多方安全計算協議包含基于不經意傳輸的MPC協議,基于混淆電路的MPC協議,基于秘密共享的MPC協議,等。不同的安全多方計算協議的統一的目的是:參與協議的多方在無法獲取其他參與方的源數據的前提下,完成信息的傳遞與計算任務。
不經意傳輸
不經意傳輸的目的是發送者將自己的某一個信息傳遞給了接受者的同時,保證發送者不知道發送了什么數據、接受者只知道接收到的數據的協議。

不經意傳輸示意
不經意傳輸協議有不同的實現方式,綜合而言,可以抽象成下圖:

不經意傳輸實現方式示意
1. 發送者將擁有的信息分別放入不同的箱子中。箱子由發送者上鎖后,發送給接受者。
2. 接受者選出期望接收的箱子,將這些箱子打亂,加上接受者的鎖后發回給發送者。
3. 發送者將收到的箱子上自己上的鎖解開后,將箱子發回給接受者。這時候的箱子上只有接受者的鎖了。
4. 接受者收到箱子后,打開自己上的鎖,就可以獲得選擇的消息。
在上述過程中,發送者將箱子上鎖,是為了保證接受者只知道接收到的數據。接受者打亂箱子可以防止發送者通過順序推測出接受者選擇的信息。接受者也將箱子上鎖,可以防止發送者通過打開箱子的方式獲得接受者選擇的信息。
不經意傳輸協議可以分為1-out-of-2,1-out-of-n,k-out-of-n三大類。1-out-of-2協議支持接受者從發送者的兩個信息中選擇一個。1-out-of-n協議支持接受者從發送者的n個信息中選擇一個。k-out-of-n協議支持接受者從發送者的n個信息中選擇任意多個。
混淆電路
任何的計算問題都可以轉化為電路的形式。因為復雜的計算都是通過基礎算子(四則運算、比較運算等)實現的,基礎算子均可以由門電路(與或非門)進行構建。
針對一個兩個參與方均提供數據的計算問題,為了保證參與雙方的數據“可用不可見”,混淆電路的思路是將計算問題轉化為邏輯電路,然后將電路通過加密、擾亂等方式進行混淆掩蓋信息的方式。
混淆電路的使用者分為生成者和計算者兩方。生成者生成混淆電路,并將完整的混淆電路發送給計算者。計算者根據自己的數據進行輸入,得到結果的中間值。最后,計算者與生成者通過交互中間值得到計算結果。

混淆電路示意
具體而言,以或門為例,生成者選擇輸入為0,計算者選擇輸入為1時,計算過程可以表示成以下6步:
1. 生成者隨機生成密鑰。對或門的兩個輸入X、Y,以及輸出(計算結果)Z的所有可能的值分配隨機密鑰,公生成8個隨機密鑰。例如K0x指輸入X的值為0時的對應密鑰,K1y指輸入Y的值為1時的對應密鑰。
2. 生成者基于或門電路的真值表生成加密真值表。對或門電路真值表中的每一行,使用X,Y值對應的密鑰對Z值對應的密鑰進行加密操作。
3. 生成者產生混淆真值表。對加密真值表的順序進行打亂可以得到混淆真值表。
4. 生成者確定X輸入值(假設為0),將混淆真值表,Y輸入對應的兩個密鑰K0y及K1y,X輸入對應的密鑰K0x發送給計算者。
5. 計算者確定Y的輸入值(假設為1),使用對應的密鑰K0x及K1y對混淆真值表中的每一行進行解密操作。得到Z對應的K1z。
6. 計算者與生成者交互K1z,確定計算的結果是1。
在此過程中,生成者與計算者同時得到了正確的計算結果。生成者的輸入對計算者隱藏是通過對真值表的加密與打亂實現的。在此過程中,計算者的輸入沒有出過計算者本地;因此生成者無法獲得計算者的數據。
混淆電路協議中,姚氏電路是最著名最廣為人知的混淆電路協議。在此基礎上,BMW和GESS協議通過不同的秘密分享方式讓每個輸入都是秘密份額。除此之外,姚氏電路還被應用于與其他安全多方計算協議,通過削減通信輪數,提高協議性能。
秘密共享
秘密共享技術在傳統的密碼學領域的應用目的多聚焦在對秘密信息(例如密鑰)的分布式存儲。秘密共享可以分成兩個階段。秘密分享階段會將秘密拆分成不同的分片,然后把秘密的分片分發給不同的用戶進行存儲。秘密重構階段會將分發給不同用戶的秘密片段進行匯總,恢復出秘密信息(密鑰)。根據不同的秘密共享協議,有些協議需要所有的秘密分片才能恢復出秘密信息;另一些協議只需要一部分的秘密分片就能恢復出秘密信息。

秘密共享示意圖
將秘密共享技術應用于安全多方計算時,為了將多方存儲的能力擴展到支持多方計算的能力,將應用流程調整為了:秘密分享、秘密計算、以及秘密重構三個階段。

秘密共享技術三個階段
使用秘密共享技術完成安全多方計算分為以下三個步驟。
1. 在秘密分享階段,每個數據方先將自己的數據進行拆分。然后將拆分出的數據分發給計算方。完成分發后,每個計算方擁有所有數據方的數據片段。例如計算方A除了自己的信息片段X0,還擁有數據方B的信息片段Y0和數據方C的信息片段Z0。
2. 在秘密計算階段,每個計算方對自己獲得的數據片段執行相應計算,得到結果片段。例如計算方A得到結果片段R0。
3. 最后,所有計算方將得到的結果片段進行匯總,計算出最后的結果R。
在此過程中,保證數據的“可用不可見”是基于所有計算方均只能獲得數據的分片,而根據數據分片無法推到出完整數據。
秘密共享協議,根據共享的內容,可以分為共享比特的協議和共享數值的協議。其中共享比特的協議一次分享一個比特的信息,具體實現包含基于XOR的布爾共享和基于Yao氏電路的比特共享。共享數值的協議多采用基于加法的算數共享方式。