多方安全計算(4)MPC萬能積木:祕密共享

學習&轉載文章:多方安全計算(4)MPC萬能積木:祕密共享

前言

在之前的文章(多方安全計算(3)MPC萬能鑰匙:混淆電路中,我們對MPC中一類通用方案混淆電路(GC)與密文比較策略做了介紹。混淆電路通過將任務抽象爲電路以及對基礎電路提供加密方案達到了萬能鑰匙的效果。在姚期智先生提出GC方案不久後,Goldreich等人[1]提出了GMW範式,給通用的密文計算任務指明瞭一條新的方向。

與GC不同,GMW範式認爲既然一個電路可以由與門或者或門組成,那麼如果對與門和或門都可以做到輸入與輸出都爲密文形式,且加密形式相同,那麼就可以將初始的計算任務拆解爲若干子計算步驟,通過逐步的完成密文計算就可以做到在密文下完成整個計算任務。當然,一個真實的計算任務從與門、或門出發是不合適的;一個更自然的出發點是加法計算與乘法計算,而本文將介紹如何通過祕密共享(也常被稱爲祕密分享)技術在MPC任務中完成加法與乘法計算。讀者可以想象,這類似於搭積木,而基礎的積木塊就是密文加法與密文乘法。

  • GC是通過與門或者或門構造任意計算
  • SS是通過加法和乘法構成任意計算

宏觀上說,如圖一所示,多方安全計算以不經意傳輸爲根基,基於此可以構造出混淆電路與祕密共享兩類通用方案。值得注意的是,此三類方案在理論上都可以完成任意的密文計算任務;但在實際的方案中,往往由於效率上的取捨而構造更定製化的協議。

圖片

圖1 多方安全計算概覽

祕密共享

祕密共享技術事實上早於MPC被提出,其最初是爲了解決密鑰存儲相關的問題,其最初的設計思路可參考文章(祕密共享—隱私計算和區塊鏈共識中的榫卯)。簡單起見,本文直接給出祕密共享的通用定義形式。

定義1:(接入結構)

定義\(p_1,...,p_n\)爲參與方集合,\(A\in 2^{p_1,...,p_n}\)爲參與方集合的一個集族。如果集合\(B\in A\)\(B\in C\)可推出\(C\in A\),那麼集族\(A\)就是單調的。接入結構定義爲\(p_1,...,p_n\)的非空子集的一個單調集族\(A\)。接入結構\(A\)內的集合被稱爲授權集合,接入結構外的集合被稱爲未授權集合

此處通過定義授權集合來確定祕密應該被哪些參與方知曉。

定義2:(祕密共享)

如果以下條件成立,那麼分配方案是在祕密的給定概率分佈\(S\)上實現接入結構\(A\)的一個祕密共享方案,此處\(H\)表示信息熵。

正確性:對於每個授權集合\(B\in A\),有\(H(S|S_B)=0\)

安全性:對於每個未授權集合\(T\notin A\),有\(H(S|S_T)=H(S)\)

即對授權集合用戶來說,更多的其它參與方也不能得到額外的信息;而對未授權集合,他們事實上未得到任何信息。因爲上述定義需要絕對的正確性與安全性,以上定義也常被稱爲完美祕密共享;如將上述公式中的等號換成約等號,則相應方案常被稱爲統計祕密共享;在MPC計算中通常只關注於完美祕密共享方案。

以上定義是從信息論層面定義的祕密共享,即只有授權的參與方纔能得到有用的信息。

密文加法

完美祕密共享有多種構造方法,通常也對應着不同的密鑰管理需求;但在MPC中通常不聚焦於此;與同態類似,我們更關注於其計算的同態性。如本文開頭所述,我們需要讓單步計算的輸入與輸出保持同樣的密文格式

在MPC計算中,我們通常使用最簡單的祕密共享方案:加法祕密共享

可參考:Shamir祕密共享

例如,有原始的祕密值4,有兩個參與方\(S_1\)與,\(S_2\),那麼在經過加法祕密共享後,參與方\(S_1\)可能得到分享值3, \(S_2\)對應得到分享值1。當然,實踐中我們通常選用一個較大的環(比如uint64)來完成祕密共享,需保證原始祕密值在這個環中,而分享值等可能的爲環上的任意數;方便起見,後文中所述運算都爲環中的運算,不再顯式說明。

那麼加法祕密共享是如何保證自然的保證加法同態性的呢?

有原始兩份祕密\(a\)\(b\);那麼由於輸入時祕密已被分享,比如\(S_1\)方持有\((a_1,b_1)\)\(S_2\)方持有\((a_2,b_2)\) ,那麼由於有\(a_1+b_1+a_2+b_2=a+b\)那麼每一方無需與另一方通信,即可在不暴露原始明文的情況下完成密文加法,計算完後\(S_1\)方持有\(a_1+b_1\)\(S_2\)方持有\(a_2+b_2\)。特別的,如果是已知的明文與祕密值相乘,也可以視爲密文加法運算

密文乘法

上一節中我們描述了加法祕密共享方案如何自然的完成密文加法,然而此類方案在不交互的情況下完成密文乘法是不可能的。早期文獻往往通過OT等方案輔助完成密文乘法;幸運的是,Beaver[2]提出一種被稱爲beaver triples的策略來更加優雅與一致的解決了這個問題。

  • 目的計算:\(xy\)

具體來說,Beaver將密文計算過程分爲離線階段與在線階段;離線階段即獲得實際祕密之前的階段。 beaver triples通過在離線階段生成一個三元組\((a,b,c)\),保證\((c=ab)\);然後讓參與方\(S_1\)\(S_2\)分別獲得\((a_1,b_1,c_1)\)\((a_2,b_2,c_2)\)

  • 需要引入一個三元組:\((a,b,c)\),滿足\(c=ab\),參與方\(S_1\)\(S_2\)分別有\((a_1,b_1,c_1)\)\((a_2,b_2,c_2)\)

然後在某個時間點,參與方分別獲得了實際祕密與的分享值\((x_1,y_1)\)\((x_2,y_2)\)。容易注意到,存在如下公式:\((x-a)(y-b)=x y-a(y-b)-b(x-a)-ab\)

  • 進行祕密分發:\(S_1\)有祕密分片\((a_1,b_1,c_1,x_1,y_1)\)\(S_2\)有祕密分片\((a_2,b_2,c_2,x_2,y_2)\)

此時,兩參與方\(S_i(i=1,2)\)只需分別計算如下步驟(注:步驟中\(=\)爲賦值運算符):

\(S_i\)在本地計算 \(e_i=x_i-a_i,f_i=y_i-b_i\)

\(S_i\)通過一輪交互【加法】恢復出\(e\)\(f\)

\(S_i\)在本地計算\(xy_i=c_i+b_ie+a_if\),然後\(S_1\)進一步計算\(xy_1=xy_1+ef\)

  • 進行祕密重構:引入輔助信息(\(e=x-a\)\(f=y-b\)),所以\(ef=(x-a)(y-b)=x y-a(y-b)-b(x-a)-ab\),即\(xy=ef+af+be+c\)
    • 其中\(e,f\)可以通過加法恢復出來,接下來各方通過\(xy=x(y_1+y_2)=xy_1*xy_2\)完成乘法計算。

其過程如下圖所示。

圖片

圖2 兩方密文乘法過程

容易注意到,上述步驟實質上構造出了公式中除\(xy\)外每一項的加法分享;通過離線階段的乘法替代了在線階段的乘法。該方案也是兩方(也可拓展爲任意多方)祕密共享策略密文乘法的通用策略,但如何快速的在離線階段生成beaver triples是一個十分有趣艱深且仍在不斷探索的問題。

例子

本節中我們描述一個簡單的使用場景:安全地提取傳感器收集信息的特徵。簡單來說,系統模型如下:

這也是一個邊緣計算的例子

圖片

圖3 傳感器信息密文特徵提取

1、傳感器蒐集原始圖像信息,然後藉助兩個邊緣服務器完成信息的處理,並將結果反饋給用戶。此處由於傳感器無力完成信息的處理步驟,而不得不借助外部服務器;而傳感器直接蒐集的信息往往敏感而不能直接公開,因而需要保證邊緣服務器們只能得到密文的輸入。

2、針對圖像的特徵提取往往使用卷積神經網絡

卷積神經網絡常常由全連接層、卷積層、激活函數層與池化層組成。

  • 卷積層與全連接層僅涉及乘法與加法。例如,某卷積層的神經元共享同樣的權重和偏置值;在計算這一層時,第\((j,k)\)個輸出神經元是通過計算\(y_{j, k}=\sum_{l=0}^{n-1} \sum_{m=0}^{n-1} w_{l, m} x_{j+1, k+m}+b\)得到的,其中\(w_{l,m}\)\(x_{j+1,k+m}\)爲權重矩陣\(W\)與輸入神經元對應位置的值。當使用預訓練神經網絡時,權重\(W\)\(b\)爲已知值。全連接層的計算與之類似,不再贅述。

  • 激活函數層爲神經網絡提供非線性。常見的激活函數,一類如sigmoid,其涉及指數運算與除法運算;另一類如ReLU,其僅涉及比較運算。諸如前者,通常可使用泰勒展開等方式將其轉換爲多項式,然後即可使用密文乘法與加法完成。而後者由於涉及比較運算,可藉助於混淆電路中的方案完成;在之後的文章中,我們也將進一步介紹如何僅使用祕密共享完成比較計算。

  • 池化層分爲最大池化與平均池化。最大池化層首先將輸入分爲若干個非重疊的小塊,然後找出每個小塊中最大的值並保留該值,而將其餘值都置爲0;平均池化計算每個小塊中值的平均值,並用該平均值替換原來的值。對於前者同樣涉及密文比較計算,而後者只是一個普通的密文加法運算,可在祕密共享中各方獨立完成。

就這樣,依靠本文所介紹的密文加法與乘法策略,再簡單結合之前文章中的GC比較策略,我們就可以做到密文神經網絡的計算,從而進一步完成密文傳感器信息的特徵提取,而只需傳感器進行簡單的加法祕密共享計算。

熟悉聯邦學習的朋友可能注意到,上述策略如果應用於密文神經網絡訓練則與聯邦建模目標一致;但請注意兩類方案有着本質的不同:

  • MPC對每一步基礎計算都做了密文替換,而聯邦學習通常只對梯度等信息做了一定程度的遮掩
  • MPC類方案輸入信息與神經網絡參數的安全性由嚴格的困難性假設保證,但在效率上也仍有較大的改善空間。

總結

本文簡要的介紹了多方安全計算中另一個重要工具祕密共享,並以加法祕密共享這一最簡形式爲例,介紹了密文加法與密文乘法的計算方法。值得注意的是,相比於GC類方案,祕密共享更符合直覺,也更多停留在數值計算的層次,因而在實際編碼實現與應用中更佔優勢。雖然通過本文介紹的方案,在理論上已可以計算任意的密文計算,然而更高效的計算方式往往需要更定製化的密文計算協議,在真實的計算機中往往也有着更復雜的取捨。在之後的文章中,我們將介紹諸如比較與除法等基礎計算模塊的密文協議構造方法,也將介紹更多已有的開源密文計算框架。

參考文獻

[1] Micali S, Goldreich O, Wigderson A. How to play any mental game[C]//Proceedings of the Nineteenth ACM Symp. on Theory of Computing, STOC. ACM, 1987: 218-229.

[2] Beaver D. Efficient multiparty protocols using circuit randomization[C]//Annual International Cryptology Conference. Springer, Berlin, Heidelberg, 1991: 420-432.

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