【隱私計算筆談】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,只有所有參與者對𝑟進行重構才能確定𝑟的值,從而計算出𝑎。𝑟是所有參與者共同產生的隨機數,因此𝑎的值也是隨機的,且在重構之前每個參與者都只掌握隨機位元𝑎的一個子秘密,不知道𝑎的具體值。