共享随机数

本次科普主要介绍多方比较的实现方法。回忆一下,之前介绍过的Shamir(t,n)秘密分享协议可以实现秘密分享,Shamir(t,n)协议主要基于拉格朗日插值,也可以通俗地理解成𝑛个方程求解𝑛个未知数。

BGW协议可以实现单比特分享,本次要介绍另一个比特分享方式。利用比特分享的方式,可以对𝑙比特的一个数按比特进行多方分享,之后可以据此实现多方比较。多方比较则可以用来构造安全多方计算的基础模块,无论是隐私保护的机器学习还是隐私保护的DNA比较等,都需要用到多方比较模块。

按比特分享

 

如有一个比特串𝑎 =𝑎𝑙𝑎𝑙-1…𝑎1,𝑎1到𝑎𝑙分别是组成𝑎的各个比特,即𝑎的值为。对𝑎进行比特分享即对𝑎的各个比特进行分享,每个参与者拿到𝑎1,…,𝑎𝑙的𝑙个子秘密。将参与者𝑃𝑖拿到的𝑎𝑗的子秘密记为𝑎𝑗,𝑖,则对𝑙比特长的𝑎进行比特分享后参与者𝑃𝑖能够获得𝑎1,𝑖,𝑎2,𝑖,…,𝑎𝑙,𝑖。 

首先简要介绍一个多个参与者共同产生同一个随机数的方式:假设有𝑛个参与者𝑃1,…,𝑃𝑛,每个参与者𝑃𝑖都产生一个随机数𝑟𝑖,并通过Shamir(t,n)秘密分享机制将𝑟𝑖进行分享,记𝑟𝑖,𝑗为参与者𝑃𝑗获得的𝑟𝑖的子秘密。因此当每个参与者都产生随机数并分享后,参与者𝑃𝑖可以获得𝑟1,𝑖,…,𝑟𝑛,𝑖

多方随机数生成

 

参与者𝑃𝑖获得子秘密𝑟1,𝑖,…,𝑟𝑛,𝑖之后,将它们进行累加,将累加结果记为𝑟𝑖',。用符号𝑟表示𝑟1,…,𝑟𝑛之和,即,则𝑟𝑖'就是𝑟的一个子秘密。因为𝑟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+⋯+𝑟𝑛,1, 𝑟2'=𝑟1,2+⋯+𝑟𝑛,2, 𝑟𝑛'=𝑟1,𝑛+⋯+𝑟𝑛,𝑛的子秘密。 

注意此时每个参与者𝑃𝑖都不知道其他参与者产生的随机数𝑟𝑗,因此参与者𝑃𝑖也无法计算出𝑟的具体值,但是他通过计算可以计算出𝑟的一个子秘密𝑟𝑖'。通过每个参与者都产生一个随机数并进行秘密共享,所有参与者共同协作产生了一个随机数,但是每个参与者𝑃𝑖都不知道𝑟的具体值,都只掌握𝑟的一个子秘密𝑟𝑖'。

随机单比特分享(Joint Random Bit Sharing)

在学习了多方共同产生随机数后,可以利用此来实现多方的随机单比特分享,每个参与者拿到一个随机比特的Share,在重构之前每个参与者都不知道该随机比特的具体值。首先所有参与者利用上节所讲述的共享随机数生成方式共同生成一个随机数,将其记为𝑟,将参与者𝑃𝑖拿到的𝑟的子秘密记为𝑟𝑖'(保持与上节的符号统一),用[𝑟]表示𝑟处于被分享成子秘密的状态,[𝑟]由𝑟1',…,𝑟𝑛'组成。

之后通过第二次科普介绍的Shamir多方乘法,计算[𝑟2],参与者𝑃𝑖能够计算出𝑟2的一个子秘密。之后所有参与者分享自己计算出的𝑟2的子秘密,即公开[𝑟2],每个参与者通过公开的[𝑟2]都可使用拉格朗日插值法重构出𝑟2,若重构出的𝑟2=0则各方再重新生成随机数𝑟。

参与者𝑃𝑖在计算出𝑟2后,计算𝑟= ,由于这些操作都是在有限域𝐹𝑞内进行,因此0<𝑟<𝑞,此时能够计算出两个𝑟′′,𝑟′′=𝑞−𝑟或𝑟′′=𝑟。则(𝑟′′)-1的逆乘上𝑟有两种结果,(𝑟′′)-1𝑟=𝑞−1或者(𝑟′′)-1𝑟=1。因为𝑟′′∙(𝑟′′)-1=1,当𝑟′′=𝑟时,(𝑟′′)-1𝑟=𝑟-1𝑟=1;当𝑟′′=𝑞−𝑟时,(𝑟′′)-1𝑟= (−𝑟)-1𝑟 =(−1)∙𝑟-1𝑟=𝑞−1。, 参与者可以约定选取0<𝑟′′<,那么所有参与者就可以计算出相同的𝑟′′,参与者𝑃𝑖设置𝑟-1=(𝑟′′)-1

对于参与者𝑃𝑖来说,𝑃𝑖掌握𝑟的子秘密𝑟𝑖',𝑃𝑖设置𝑎𝑖=2-1((𝑟-1)𝑟𝑖'+1),𝑎𝑖即为𝑃𝑖获得的随机比特𝑎的一个子秘密。因为参与者𝑃𝑖只知道𝑟,对于𝑃𝑖来说𝑟依旧有两种可能,分别是± ,因此𝑃𝑖无法确定𝑎的值是0还是1,只有所有参与者对𝑟进行重构才能确定𝑟的值,从而计算出𝑎。𝑟是所有参与者共同产生的随机数,因此𝑎的值也是随机的,且在重构之前每个参与者都只掌握随机比特𝑎的一个子秘密,不知道𝑎的具体值。

内容中包含的图片若涉及版权问题,请及时与我们联系删除