【隱私計算筆談】MPC系列專題(十一):共享隨機數和位元分享

PlatON技術團隊發表於2023-01-31

共享隨機數

本次科普主要介紹多方比較的實現方法。回憶一下,之前介紹過的Shamir(t,n)秘密分享協議可以實現秘密分享,Shamir(t,n)協議主要基於拉格朗日插值,也可以通俗地理解成?個方程求解?個未知數。

BGW協議可以實現單位元分享,本次要介紹另一個位元分享方式。利用位元分享的方式,可以對?位元的一個數按位元進行多方分享,之後可以據此實現多方比較。多方比較則可以用來構造安全多方計算的基礎模組,無論是隱私保護的機器學習還是隱私保護的DNA比較等,都需要用到多方比較模組。

圖片
按位元分享
 

如有一個位元串\( ? =?_??_{?-1}…?_1 \),\( ?_1 \)到\( ?_? \)分別是組成?的各個位元,即?的值為\( a=\sum {_{i=1}^{l}} 2^{i-1} a_{i} \)。對?進行位元分享即對?的各個位元進行分享,每個參與者拿到\( ?_1,…,?_? \)的?個子秘密。將參與者\( ?_? \)拿到的\( ?_? \)的子秘密記為\( ?_{?,?} \),則對?位元長的?進行位元分享後參與者\( ?_? \)能夠獲得\( ?_{1,?},?_{2,?},…,?_{?,?} \)。 

首先簡要介紹一個多個參與者共同產生同一個隨機數的方式:假設有?個參與者\( ?_1,…,?_? \),每個參與者\( ?_? \)都產生一個隨機數\( ?_? \),並透過Shamir(t,n)秘密分享機制將\( ?_? \)進行分享,記\( ?_{?,?} \)為參與者\( ?_? \)獲得的\( ?_? \)的子秘密。因此當每個參與者都產生隨機數並分享後,參與者\( ?_? \)可以獲得\( ?_{1,?},…,?_{?,?} \)。

圖片

多方隨機數生成
 
參與者\( ?_? \)獲得子秘密\( ?_{1,?},…,?_{?,?} \)之後,將它們進行累加,將累加結果記為\( {?_?}' \),\( r_{i}^{\prime}=\sum{_{j=1}^{n}} r_{j, i} \)。用符號?表示\( ?_1,…,?_? \)之和,即\( r=\sum{_{i=1}^{n}} r_{i} \),則\( {?_?}' \)就是?的一個子秘密。

因為\( ?_{1,?} \)是\( ?_1 \)的一個子秘密,\( ?_{?,?} \)是??的一個子秘密,由於Shamir(t,n)具有可加性(在第二次科普中介紹過)。假設參與者\( ?_1 \)的\( ?_1 \)的秘密分配函式是\( ?_1(?) =?_{t-1}?^{t-1}+⋯+?_1?+?_1 \),參與者\( ?_2 \)的\( ?_2 \)的秘密分配函式是\( ?_2(?)=?_{t-1}?^{t-1}+⋯+?_1?+?_2 \),則參與者\( ?_1 \)和\( ?_2 \)分配給參與者\( ?_? \)的子秘密分別為\( ?_{1,?}=?_1(?) \)和\( ?_{2,?}=?_2(?) \),二者相加為:

\( ?_{1,?}+?_{2,?}=?_1(?)+?_2(?)=(?_{t-1}+?_{t-1})?^{t-1}+⋯+(?_1+?_1)?+?_1+?_2 \)

即\( ?_{1,?}+?_{2,?} \)也是\( ?_1+?_2 \)的一個子秘密,\( ?_{1,1}+?_{2,1},?_{1,2}+?_{2,2},…,?_{1,?}+?_{2,?} \)也是\( ?_1+?_2 \)的子秘密。

同理\( {?_?}'=?_{1,1}+⋯+?_{?,1}, {?_2}'=?_{1,2}+⋯+?_{?,2}, {?_?}'=?_{1,?}+⋯+?_{?,?} \)是\( r=\sum{_{i=1}^{n}} r_{i}=r_{1}+\cdots+r_{n} \)的子秘密。 

注意此時每個參與者\( ?_? \)都不知道其他參與者產生的隨機數\( ?_? \),因此參與者\( ?_? \)也無法計算出?的具體值,但是他透過計算\( r_{i}^{\prime}=\sum{_{j=1}^{n}} r_{j, i} \)可以計算出?的一個子秘密\( {?_?}' \)。透過每個參與者都產生一個隨機數並進行秘密共享,所有參與者共同協作產生了一個隨機數\( r=\sum{_{i=1}^{n}} r_{i} \),但是每個參與者\( ?_? \)都不知道?的具體值,都只掌握?的一個子秘密\({?_?}' \)。

隨機單位元分享(Joint Random Bit Sharing)

在學習了多方共同產生隨機數後,可以利用此來實現多方的隨機單位元分享,每個參與者拿到一個隨機位元的Share,在重構之前每個參與者都不知道該隨機位元的具體值。首先所有參與者利用上節所講述的共享隨機數生成方式共同生成一個隨機數,將其記為?,將參與者\( ?_? \)拿到的?的子秘密記為\( {?_?}' \)(保持與上節的符號統一),用[?]表示?處於被分享成子秘密的狀態,[?]由\( {?_1}',…,{?_?}' \)組成。

之後透過第二次科普介紹的Shamir多方乘法,計算\( [?^2] \),參與者\( ?_? \)能夠計算出\( ?^2 \)的一個子秘密。之後所有參與者分享自己計算出的\( ?^2 \)的子秘密,即公開\( [?^2] \),每個參與者透過公開的\( [?^2] \)都可使用拉格朗日插值法重構出\( ?^2 \),若重構出的\( ?^2=0 \)則各方再重新生成隨機數?。

參與者\( ?_? \)在計算出\( ?^2 \)後,計算\( r=\sqrt{r^2} \) ,由於這些操作都是在有限域??內進行,因此0<?<?,此時能夠計算出兩個?′′,?′′=?−?或?′′=?。則\( (?′′)^{-1} \)的逆乘上?有兩種結果,\( (?′′)^{-1}?=?^{−1} \)或者\( (?′′)^{-1}?=1 \)。因為\( ?′′\cdot(?′′)^{-1}=1 \),當?′′=?時,\( (?′′)^{-1}?=?^{-1}?=1 \);當?′′=?−?時,\( (?′′)^{-1}?= (−?)^{-1}? =(−1)\cdot?^{-1}?=?−1 \)。 參與者可以約定選取\( 0<?′′<\frac{q}{2} \),那麼所有參與者就可以計算出相同的?′′,參與者\( ?_? \)設定\( ?^{-1}=(?′′)^{-1} \)

對於參與者\( ?_? \)來說,\( ?_? \)掌握?的子秘密\( {?_?}' \),\( ?_? \)設定\( ?_?=2^{-1}((?^{-1}){?_?}'+1) \),\( ?_? \)即為\( ?_? \)獲得的隨機位元?的一個子秘密。因為參與者\( ?_? \)只知道?,對於\( ?_? \)來說?依舊有兩種可能,分別是\( ±\sqrt{r^2} \),因此\( ?_? \)無法確定?的值是0還是1,只有所有參與者對?進行重構才能確定?的值,從而計算出?。?是所有參與者共同產生的隨機數,因此?的值也是隨機的,且在重構之前每個參與者都只掌握隨機位元?的一個子秘密,不知道?的具體值。

相關文章