GMW协议
GMW协议由Goldreich等人提出,基于混淆电路(Garbled Circuit),支持多方的半诚实的安全计算协议。和之前所述的姚氏混淆电路估值方案的不同之处在于,GMW混淆电路估值方案不需要使用混淆真值表,因此没用混淆真值表带来的查表和加解密操作,节省了非常大的计算量和通信量。
混淆电路在上次的科普已经介绍过了,在将安全多方计算的目标函数转换为布尔电路后,通过对电路进行混淆(加密)操作来得到混淆电路。
混淆电路通过对电路进行混淆(加密)操作来掩盖电路的输入和电路的结构,以此来实现对各个参与者的隐私信息的保密,再通过电路计算来实现安全多方计算的目标函数的计算。
GMW协议的目标函数由异或门和与门、非门组成。非门的输出值是输入值的反,输入为1则输出为0,反之输入为0则输出为1。与门的真值表如下图所示:
异或门及其真值表
异或门及其真值表如下图所示:
与门及其真值表
首先介绍GMW协议的两方情况。首先假设参与者为Alice 和Bob,Alice和Bob的输入均为长为n的比特串,其中 Alice输入为比特串𝑎,Bob的输入为比特串b。
对于比特串𝑎中的每个比特\( 𝑎_𝑖 \),Alice都产生一个随机的比特\( 𝑟_{1𝑖} \)∈ {0,1},1≤𝑖≤𝑛,并将这n个随机产生的比特\( 𝑟_{1𝑖} \),1≤𝑖≤𝑛发送给Bob。
对于比特串𝑏中的每个比特\( 𝑏_𝑖 \),Bob也都产生一个随机的比特\( 𝑟_{2𝑖} \)∈ {0,1},1≤𝑖≤𝑛,并将这n个随机产生的比特发送给Alice。Alice和Bob分别将\( a_{i} \oplus r_{1 i} \)和\( b_{i} \oplus r_{2 i} \)、\( 𝑟_{1𝑖} \)、\( 𝑟_{2𝑖} \)作为协议输入𝑎和b的子秘密。
即Alice掌握了𝑎和b的子秘密\( 𝑎_{Alice} \)和\( 𝑏_{Alice} \),\( 𝑎_{Alice}=𝑎 \oplus 𝑟_{1𝑖} \),\( 𝑏_{Alice}=𝑟_{2𝑖} \),Bob掌握了𝑎和b的子秘密\( a_{Bob}和𝑏_{Bob} \),\( a_{Bob}=𝑟_{1𝑖},𝑏_{Bob}= 𝑏\oplus 𝑟_{2𝑖} \)。
若Alice公开其所掌握的\( 𝑎\oplus 𝑟_{1𝑖}和𝑟_{2𝑖} \),Bob公开其所掌握的\( 𝑟_{1𝑖}和𝑏\oplus 𝑟_{2𝑖} \),那么Alice和Bob可以共同计算出\( 𝑎=𝑎\oplus 𝑟_{1𝑖}\oplus 𝑟_{1𝑖},𝑏=𝑏\oplus𝑟_{2𝑖}\oplus𝑟_{2𝑖} \)。
接着Alice和Bob对布尔电路中的每个门求值,直至完成整个电路的计算。对于非门,由于非门是单输入的,Alice和Bob间无须进行交互,因此直接对输入求反即可。
对于异或门,假设异或门的输入分别为𝑎和b,Alice掌握了𝑎和b的子秘密\( 𝑎_{Alice}和𝑏_{Alice} \),Bob掌握了𝑎和b的子秘密\( a_{Bob}和𝑏_{Bob} \),因为:
因此Alice和Bob可以在本地对其所掌握的子秘密进行计算,
对于与门,因为\( 𝑎⋀𝑏=(𝑎_{Alice}\oplus a_{Bob})⋀(𝑏_{Alice}\oplus𝑏_{Bob}) \),因此Alice和Bob无法只在本地完成与门的计算。
因为Alice手中有\( 𝑎_{Alice}、𝑏_{Alice} \),因此Alice可以本地计算\( 𝑎_{Alice}⋀𝑏{Alice} \)。Bob 手中有\( a{Bob}、𝑏{Bob} \),因此Bob可以本地计算\( a_{Bob}⋀𝑏_{Bob} \)。剩下的\( 𝑎_{Alice}⋀𝑏_{Bob}和a_{Bob}⋀𝑏_{Alice} \)二者必须协同完成。
\( (𝑎_{Alice}⋀𝑏_{Bob})\oplus(a_{Bob}⋀𝑏_{Alice}) \)的计算可通过四选一不经意传输协议完成。对于Alice来说,Bob掌握的\( a_{Bob}和𝑏_{Bob} \)都是单比特值,只有四种情况:
Alice手中又有\( 𝑎_{Alice}和𝑏_{Alice} \),因此Alice可以直接计算出四种情况下的𝑎⋀𝑏的值,假设分别为\( 𝑐_{00},𝑐_{01},𝑐_{01},𝑐_{11} \),注意这里𝑎⋀𝑏的值为\( (𝑎_{Alice}\oplus a_{Bob})⋀(𝑏_{Alice}\oplus 𝑏_{Bob}) \)的值, 对于Alice和Bob来说式子里都只有两个未知数,而这两个未知数一共只有4种可能。
Alice的未知数为\( a_{Bob}和𝑏_{Bob} \),Alice可以假设(\( a_{Bob},𝑏_{Bob} \))分别为(0,0)、(0,1)、(1,0)、(1,1),那么根据假设的四种情况,\( 𝑎_{Alice},𝑏_{Alice},a_{Bob},𝑏_{Bob} \)就都确定了,可以据此计算出四个确定的\( 𝑐_{00},𝑐_{01},𝑐_{01},𝑐_{11} \)值。因此Alice可以得到下表:
Alice 再产生一个随机比特𝑟,并将计算出的\( 𝑐_{00},𝑐_{01},𝑐_{01},𝑐_{11} \)异或上随机比特𝑟,将\( 𝑐_{00}\oplus𝑟, 𝑐_{01}\oplus𝑟, 𝑐_{01}\oplus𝑟, 𝑐_{11}\oplus𝑟 \)为四选一不经意传输协议的输入,Bob将其所掌握的\( a_{Bob}𝑏_{Bob} \)作为四选一不经意传输协议的输入,双方执行该OT协议,Bob得到对应的\( 𝑐_{aBob𝑏Bob}\oplus𝑟 \)。
Alice将𝑟作为该与门的输出的子秘密,Bob将\( 𝑐_{aBob𝑏Bob}\oplus𝑟 \)作为该与门的输出的子秘密。
由于Alice和Bob双方间执行的是不经意传输协议,Alice不知道Bob 在\( 𝑐_{00}\oplus𝑟, 𝑐_{01}\oplus𝑟, 𝑐_{01}\oplus𝑟, 𝑐_{11}\oplus𝑟 \)中选择了哪个,保证了\( a_{Bob}𝑏_{Bob} \)依旧对Alice保密。
又由于Alice发送的是\( 𝑟\oplus 𝑐_{aBob𝑏Bob} \),Bob不知道随机比特𝑟的值,也就不知道\( 𝑐_{aBob𝑏Bob} \)的到底是1还是0,只有在最后双方都公布各自手中的计算结果,双方才能合力计算出正确的结果。
这里Bob得到的子秘密异或上Alice得到的子秘密即为𝑎⋀𝑏的值。
将GMW协议扩展到多方情况下:参与者为\( 𝑃_1,𝑃_2,…,𝑃_𝑛 \),假设输入为m个比特,那么每个参与者\( 𝑃_𝑖 \)产生𝑚组,每组𝑛−1个随机比特,分别将每组的𝑛−1个随机比特发送给除了自己之外的n-1个参加者。
假设输入数据为1个比特,那么每个参与者\( 𝑃_𝑖 \)向参与者\( 𝑃_𝑗 \)发送\( 𝑟_{𝑖𝑗} \),1≤𝑗≤𝑛且𝑗≠𝑖。在所有参与者发送完成后,参与者\( 𝑃_𝑖 \)掌握了\( 𝑟_{1𝑖},𝑟_{2𝑖},…,𝑟_{𝑛𝑖} \)。假设\( 𝑃_𝑖 \)的输入为𝑎,那么\( 𝑃_𝑖 \)将\( 𝑎\oplus 𝑟_{1𝑖}\oplus 𝑟_{2𝑖}\oplus…\oplus 𝑟_{𝑛𝑖} \)作为𝑎的子秘密\( 𝑎_𝑖 \)。
对应的收到\( 𝑃_𝑖 \)发送的随机比特\( 𝑟_{𝑖𝑗} \)的参与者\( 𝑃_𝑗 \),将\( 𝑟_{𝑖𝑗} \)当做秘密𝑎的子秘密\( 𝑎_𝑗 \)。因此\( 𝑎=𝑎_1\oplus𝑎_2\oplus…\oplus𝑎_𝑛 \)。
对于异或门以及非门,和双方情况下相同,每个参与者直接在本地进行计算即可。对于与门,与门的输入为𝑎和b,参与者\( 𝑃_𝑖 \)手中掌握了𝑎和b的子秘密\( 𝑎_𝑖和𝑏_𝑖 \),因为\( 𝑎=𝑎_1\oplus𝑎_2\oplus…\oplus𝑎_𝑛,𝑏=𝑏_1\oplus𝑏_2\oplus…\oplus𝑏_𝑛 \),可得:
这其中,对于\( 𝑃_𝑖 \)来说,每个\( 𝑎_𝑖⋀𝑏_𝑖 \)都可由\( 𝑃_𝑖 \)在本地进行计算。而对于\( 𝑎_𝑖⋀𝑏_𝑗 \),𝑖≠𝑗,可由参与者\( 𝑃_𝑖和𝑃_𝑗 \)通过上述的两方BGW协议共同计算出\( 𝑎_𝑖⋀𝑏_𝑗 \)的两个子秘密。当电路计算完成,每个参与者公布自己所掌握的子秘密,再将所有的子秘密进行异或,即可得到最后的计算结果。
BGW协议
BGW协议也是支持多方的安全计算协议,BGW协议基于Shamir(t, n)门限秘密共享机制,利用了Shamir秘密共享机制的加法同态和乘法同态的性质。Shamir(t, n)门限秘密共享机制在之前的科普已经进行过介绍了。
假设BGW协议的参与者一共有n人,假设参与者𝑃𝑖需要输入秘密𝑎,则参与者𝑃𝑖首先利用Shamir(t,n)门限秘密共享机制将秘密𝑎共享给其他所有参与者,阈值t的选择根据具体使用情景下的安全性要求决定。
当所有参与者的输入都通过Shamir(t, n)门限秘密共享机制分享后,每个参与者都掌握了协议输入的子秘密。假设一个门的输入分别为𝑎和𝑏,秘密𝑎和𝑏已经分别由秘密分配函数\( f_{a}(x)=\alpha_{\mathrm{t}-1} x^{\mathrm{t}-1}+\cdots+\alpha_{1} x^{1}+a, f_{b}(x)=\beta_{\mathrm{t}-1} x^{\mathrm{t}-1}+\cdots+\beta_{1} x^{1}+b \)分配完成,\( 𝑓_𝑎(0)=𝑎,𝑓_𝑏(0)=𝑏 \),参与者\( 𝑃_𝑖 \)掌握𝑎和b的子秘密\( 𝑎_𝑖,𝑏_𝑖 \)。在布尔电路上,可将异或门和与门分别看成在有限域𝐹2上的加法和乘法。将异或用模为2的加法进行计算,与用模为2的乘法进行计算。
对于异或门:由于Shamir具有加法同态性,因此
\( a \oplus b=f_{a}(0) \oplus f_{b}(0), f_{a}(x) \oplus f_{b}(x)=\left(\alpha_{\mathrm{t}-1}+\beta_{\mathrm{t}-1}\right) x^{\mathrm{t}-1}+\cdots+\left(\alpha_{1}+\beta_{1}\right) x^{1}+(a+b) \)
假设\( 𝑓_𝑐(𝑥)=𝑓_𝑎(𝑥)\oplus 𝑓_𝑏(𝑥) \),则\( 𝑓_𝑐(𝑖)=𝑓_𝑎(𝑖)\oplus𝑓_𝑏(𝑖) \),而\( 𝑓_𝑎(𝑖)=𝑎_𝑖和𝑓_𝑏(𝑖)=𝑏_𝑖都由𝑃_𝑖掌握 \),因此\( 𝑃_𝑖 \)可以本地计算出\( 𝑓_𝑐(𝑖)=𝑎_𝑖+𝑏_𝑖 \)。当所有计算完成后,每个参与者\( 𝑃_𝑖 \)公布自己计算出的\( 𝑓_𝑐(𝑖) \), 即可恢复出\( 𝑓_𝑐(𝑥)和𝑓_𝑐(0) \)。
对于与门,和之前叙述过的基于Shamir(t, n)门限共享机制的多方乘法计算相同,只是BGW是在有限域𝐹2上。每个参与者\( 𝑃_𝑖计算𝑑_𝑖=𝑎_𝑖𝑏_𝑖 \),\( 接着每个𝑃_𝑖独自选取次数为t次的随机多项式ℎ_𝑖(𝑥),且满足ℎ_𝑖(0)=𝑑_𝑖,1≤𝑖≤𝑛,𝑡<𝑛/2 \)。
向各个参与者分配\( 𝑑_𝑖 \),且\( 𝑐_{𝑖𝑗}= ℎ_𝑖(𝑗) \),1≤𝑖,𝑗≤𝑛。所有参与者分配结束后,𝑃𝑖掌握了信息\( 𝑐_{1𝑖},𝑐_{2𝑖},…,𝑐_{𝑛𝑖} \),同时再利用公开的重组向量\( \lambda _1,…,\lambda _𝑛 \),\( 𝑃_𝑖 \)计算\( c_{i}=\sum_{j=1}^{n} \lambda_{j} c_{j i} \)。
此时\( 𝑃_𝑖 \)掌握的子秘密\( 𝑐_𝑖 \)即为𝑎𝑏的子秘密。当所有计算完成后,每个参与者公开自己的子秘密,再根据之前叙述的Shamir(t, n)门限秘密重构算法即可获得𝑎𝑏。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。