1
头图

共享随机数

本次科普主要介绍多方比较的实现方法。回忆一下,之前介绍过的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,只有所有参与者对𝑟进行重构才能确定𝑟的值,从而计算出𝑎。𝑟是所有参与者共同产生的随机数,因此𝑎的值也是随机的,且在重构之前每个参与者都只掌握随机比特𝑎的一个子秘密,不知道𝑎的具体值。


PlatON技术团队
23 声望164 粉丝

PlatON技术团队,⼀群专注于技术、玩转算法、追求⾼效的⼯程师。