【隱私計算筆談】MPC系列專題(十八):三方複製秘密共享(四)

PlatON技術團隊發表於2023-05-11

在三方複製秘密共享的基本操作中,有些操作在算數電路的環\( Z_{2^k} \)上進行效率高,而有些則在布林電路上進行效率高,因此需要有操作將在環上表示的運算元轉換為布林表示(二進位制表示),而運算元在安全多方計算中都是以子秘密(Share)的形式,因此實際是將環上表示的三方複製秘密共享子秘密轉換為按位元共享的子秘密形式,記為\( [x]^{A} \rightarrow[x]^{B} \)。

之前的科普已經介紹過將在域\( F_q \)下的子秘密轉換為按位元共享的子秘密形式,三方複製秘密共享則是在環上,因此需要使用新的位元分解和位元合成方式。本次科普就要介紹一下三方複製秘密共享的位元分解和位元合成。

位元分解

位元分解\( [x]^{A} \rightarrow[x]^{B} \),是將\( x\in Z_{2^k} \)的子秘密轉換為{ \( x[1],x[2],...,x[k] \) } ,\( x[i]\in \) { 0,1} 的子秘密,並且 \( x[1],x[2],...,x[k] \)滿足\( x=\Sigma_{i=1}^{k} 2^{i-1} x[i] \)。注意在之前的科普中,我們把Alice、Bob、Candy分別掌握\( (x_1,x_2),(x_2,x_3),(x_3,x_1) \),作為對?的秘密分享,記為\( (x_1,x_2,x_3) \):

圖片
圖:對?的秘密分享\( (x_1,x_2,x_3) \)

那麼顯然Alice能在本地完成對\( x_1 \)的位元分解,因為Alice掌握了\( x_1 \),Alice只需本地將組成\( x_1 \in Z_{2^k} \)的各個位元分開,即可完成從\( Z_{2^k} \)到布林表示的轉換。

同理,Bob和Candy也可本地完成\( x_2,x_3 \)從\( Z_{2^k} \)到布林表示的轉換。

由於Alice、Bob、Candy三者掌握的子秘密對分別為:\( (x_1,x_2),(x_2,x_3),(x_3,x_1) \)

因此Alice、Bob、Candy分別本地完成對\( x_1,x_2,x_3 \)的位元分解,\( [x_1]^B=(x_1,0,0),[x_2]^B=(0,x_2,0),[x_3]^B=(0,0,x_3) \),即Alice掌握\( x_1 \)和\( x_2 \)的位元表示,Bob掌握\( x_2 \)和\( x_3 \)的位元表示,Candy掌握\( x_3 \)和\( x_1 \)的位元表示。用\( x_{i,j} \)表示子秘密\( x_i \)的第?位:

圖片

在進行位元分解之後,各個子秘密都是以按位元分享的,當進行秘密恢復時,需要進行位元間的加法,而當進行子秘密間的加法時,會出現位元間的進位問題。正常恢復秘密?直接計算\( x=x_1+x_2+x_3 \)即可,而當子秘密以位元形式分享後,會出現\( x_1 \)的第?位和\( x_2 \)的第?位,\( x_3 \)的第?位相加,\( x_{1,j}+x_{2,j}+x_{3,j} \),顯然當三者之和大於1時就會出現向高位的進位,同樣\( x_{1,j}+x_{2,j}+x_{3,j} \)也需要考慮來自低位\( x_{1,j+1}+x_{2,j+1}+x_{3,j+1} \)的進位。因此\( x_{1,j}+x_{2,j}+x_{3,j} \)並不一定等於?的第?位。一種簡單的實現方式是使用波紋進位全加器(Ripple-Carry Full Adder,RCFA)進行2?輪的加法,\( ?=????(????(x_1,x_2),x_3) \)。全加器(Full Adder)是實現兩個二進位制數相加的布林電路,其表示式為:
 
圖片

其中\( S_i \)表示全加器的輸出本位和,\( A_i \)和\( B_i \)是全加器的輸入位元,\( C_{i-1} \)是低位來的進位,\( C_i \)是向高位的進位。如若\( A_i \)為1,\( B_i \)為0,低位來的\( C_{i-1} \)進位為1,則相加後本位和\( S_i=1+0+1 \),向高位的進位\( C_i=i\cdot 0+1\cdot (1+0)=1 \)。全加器的布林電路圖如下所示:
圖片
圖:全加器布林電路圖

波紋進位全加器是使用多個1位的全加器來構成的多位全加器,其將每個全加器的進位輸出\( C_i \)連線到下一個全加器的低位進位輸入\( C_{i-1} \),以此實現多位加法。秘密恢復也可以使用更為高效的並行字首加法器(Paraller Prefix Adder)實現,這裡具體不再展開。

相關文章