它的核心技術是將兩方參與的安全計算函式編譯成布林電路的形式,並將真值表加密打亂,從而實現電路的正常輸出而又不洩露參與計算的雙方私有資訊。由於任何安全計算函式都可轉換成對應布林電路的形式,相較其他的安全計算方法,具有較高的通用性,因此引起了業界較高的關注度。
混淆電路發展
姚氏電路是基於半誠實模型(semi-honest)的安全兩方計算(two-party-security-computation)。
簡單來說,可將整個計算過程分為兩個階段:
第一階段將安全計算函式轉換為電路,稱之為電路產生階段;
第二階段,利用ot、加密等密碼學原語等執行電路,稱之為執行階段。
每一階段由參與運算的一方來負責,直至電路執行完畢輸出運算後的結果。針對參與運算的雙方,從參與者的視角,又可以將參與安全運算的雙方分為電路的產生者(circuit generator)與電路的執行者(circuit evaluator)。
示意圖如下所示:
▲ 步驟一:電路產生階段
參與運算的雙方先就需要安全計算的目的依靠專有程式語言(dsl)或相關程式語言擴充套件等進行程式設計,然後針對實現計算的程式進行編譯,生成布林電路檔案;
然後針對雙方輸入值以及中間輸出結果隨機產生對映label,再利用這些label做為key對每個對應的電路輸出真值表採用分組密碼方式進行加密,並對真值表值進行打亂操作,這一步就是混淆電路的概念。
▲ 步驟二:電路執行階段
電路執行者針對布林電路檔案進行執行,執行時電路生成者需要將自己的輸入所對應的label發給電路執行者;電路執行者依據自己所有資訊通過ot方式選擇自己對應的label,這樣電路生成者與執行者均不到對方的輸入資料;電路執行者此時獲取雙方輸入對應的label,作為key的相關資訊對真值表進行解密,即可獲取真值表的內容,迴圈往復,直至所有電路執行完畢,輸出執行結果。
姚氏電路是第乙個安全兩方計算協議,後續大多數安全地計算布林電路/算術電路的安全多方計算協議都是基於姚氏混淆電路進行擴充套件的。
比較常見有gmw/ccd/bgw/bmr等,這些協議將姚氏協議支援的兩方安全計算擴充套件到多方安全計算;將布林電路擴充套件到算術電路;將安全模型由半誠實模型擴充套件到惡意模型,以抵抗一定數量惡意敵手攻擊。
上期文章已經就兩方安全計算混淆電路進行介紹,我們在此基礎上介紹下支援多方安全計算協議gmw。
gmw協議介紹
gmw協議是由goldreich等人提出,支援多方(2+)安全計算,它不但支援布林電路還支援算術電路。但與姚氏電路協議略有不同,電路評估時不再使用混淆的真值表,而是在本地直接進行計算,這樣大大節省混淆真值表帶來的解密操作,節省比較多的計算量。
gmw協議採用秘密分享及ot等常見的加密原語,可將整個計算過程分為三個階段:
▲ 秘密分享階段
參與運算的多方將自己的私有資料採用線性秘密分享方式對參與運算的多方進行秘密分享,保證每乙個參與方都可以獲得自己秘密的分量。
▲ 電路執行階段
將接收到的每個秘密分量輸入到電路中,本地逐門執行電路(and門需要再執行ot協議),重複此過程,直到所有門都執行完成,獲得結果的分量。
▲ 結果廣播再計算
每一方將最後的執行結果廣播出來,各參與方獲得各個參與方結果分量後求取最終結果。
舉例分析
參與運算的雙方有alice和bob:
alice擁有私密資訊u,將秘密進行加法秘密分享(additive secret sharing)後,使得[u1]⊕[u2]=u,[u1][u2]可以看作u的秘密分量,alice將[u2]發給bob;
bob擁有私密資訊v,將秘密進行分拆後,使得[v1]⊕[v2]=v,[v1][v2]可以看作v的秘密分量,bob將秘密分量[v1]發給alice。
這樣alice與bob都擁有彼此的秘密分量,如下表所示:
party
alice_share
bob_share
comments
alice
[u1]
[v1]
alice holds shares
bob[u2]
[v2]
bob holds sharesuv
party
alice_share
bob_share
comments
alice
[u1]
[v1]
alice holds shares
bob[u2]
[v2]
bob holds sharesuv
(1)布林電路之xor(相當於加法)
alice與bob安全計算和(異或門),表示成電路形式如下所示:
alice和bob進行秘密分享後,alice與bob獲取的秘密分量及計算電路如下所示:
alice與bob分別在本地執行此電路:
alice:u1⊕v1 = w1bob:u2⊕v2 = w2
alice與bob分別將執行電路後的結果分量廣播出去,本地計算後獲取最終結果:
w1⊕w2 = (u1⊕v1)⊕(u2⊕v2)
= (u1⊕u2)⊕(v1⊕v2) (異或滿**換律)
= u⊕v
(2)布林電路之and(相當於乘法)
alice與bob安全計算乘積(and門),其表示成電路的形式如下所示:
alice和bob進行秘密分享後,alice與bob獲取的秘密分量及計算電路如下所示:
alice本地計算and門時,求得u1v1
bob本地計算and門時,求得u2v2
可以發現還缺少其他分量u1v2⊕ v1u2,此時gmw協議構造1-4 ot進行計算,alice作為sender,擁有變數u1,v1,bob擁有選擇bit變數u2和v2,作為receiver。
記t=(u1v2)⊕(v1u2),alice在構造1-4 ot時,對真值表加了干擾σ⊕t,這樣做的目的主要是防止bob根據t的結果推測出alice的秘密分量u1。
1-4 ot
u2v2
t=(u1v2)⊕(v1u2)s0
0α0σ⊕α001
α1σ⊕α110
α2σ⊕α211
α3σ⊕α3
經過1-4 ot後,雙方值情況如下:
alice計算得到的值為:u1v1⊕σ
bob計算得到的值為:u2v2⊕σ⊕t
alice與bob分別將本方的結果分量廣播出去,本地計算後獲取最終結果:
w = u1v1⊕σ⊕u2v2⊕σ⊕t
= u1v1⊕u2v2⊕t
= u1v1⊕u2v2⊕(u1v2⊕v1u2)
= (u1+u2)⊕(v1+v2)
三方或者更多方擴充套件
(1)異或門(xor)
各參與方獲得各個分量後本地執行電路,與兩方計算類似,然後廣播自己本地計算結果,當收集全各個參與方自己計算結果時再計算最終結果。
(2)與門(and)
c=a∧b,a1...an,b1..bn代表a,b分量
每個參與方本地計算ai⊕bi,然後每兩個參與方相互組合計算ai⊕bj
最後各參與方廣播自己最終本地計算結果(a∧b分量),求得最終安全計算結果a∧b
總結
混淆電路的優化可以分為兩個方面:
一方面:電路優化(circuit optimization),主要是減少編譯後電路的size,常用技術有free-xor/garbled row reduction/circuit simplification等;
另一方面:執行階段優化,常用的技術有fast table lookup(減少解密混淆真值表次數)和pipelined circuit execution(將原來電路的產生與執行兩階段轉換成乙個階段,一邊產生一邊執行電路,這樣可以提高安全計算的效率)。
基於姚氏混淆電路進行擴充套件的協議與方法,大多已不再使用混淆真值表的做法,只保留電路的形式,且為了擴充套件至多方(2+)安全計算,普遍採用秘密分享/不經意傳輸等技術。
相較其他安全計算方案,混淆電路是一種比較通用的解決方案,安全性相對高,但其效能一般,尤其是當參與運算多方數目超過3+且資料量較大時,安全計算的過程中通訊量會比較大(兩方各1000個資料情況下求psi通訊量可達到gb數量級),特別不適合頻寬受限或wan網路環境下使用。
所以業內給混淆電路的評價是「efficient but expensive」,有效但計算代價比較高。
作者簡介滕海明
來自趣鏈科技資料網格實驗室bitxmesh演算法研究團隊
研究方向:資料安全
混淆解密 安全多方計算之混淆電路
它的核心技術是將兩方參與的安全計算函式編譯成布林電路的形式,並將真值表加密打亂,從而實現電路的正常輸出而又不洩露參與計算的雙方私有資訊。由於任何安全計算函式都可轉換成對應布林電路的形式,相較其他的安全計算方法,具有較高的通用性,因此引起了業界較高的關注度。文末驚喜 技術社群全面公升級!技術交流不迷路...
混淆解密 混淆電路介紹(三)混淆電路原理
在混淆電路介紹 一 中,我們介紹了混淆電路 garbled circuits,gc 背後依賴的密碼學思想 不經意傳輸 oblivious transfer,ot 在混淆電路介紹 二 中,我們成功地將乙個比較大小的函式轉化成了乙個邏輯電路。在這篇文章中,我們將基於以上兩篇文章,詳細介紹 gc 協議的原...
混淆解密 混淆電路介紹(一)不經意傳輸
在近期的文章中,王益介紹了多方安全計算 multiparty computation,mpc 的一種常見的實現形式 分享秘密 secret sharing 今天我們來介紹另外一種常見的實現 混淆電路 garbled circuits,gc gc 是一種密碼學協議。遵照這個協議,兩個 party 能在...