在三方复制秘密共享的基本操作中,有些操作在算数电路的环\( Z_{2^k} \)上进行效率高,而有些则在布尔电路上进行效率高,因此需要有操作将在环上表示的操作数转换为布尔表示(二进制表示),而操作数在安全多方计算中都是以子秘密(Share)的形式,因此实际是将环上表示的三方复制秘密共享子秘密转换为按比特共享的子秘密形式,记为\( [x]^{A} \rightarrow[x]^{B} \)。
之前的科普已经介绍过将在域\( F_q \)下的子秘密转换为按比特共享的子秘密形式,三方复制秘密共享则是在环上,因此需要使用新的比特分解和比特合成方式。本次科普就要介绍一下三方复制秘密共享的比特分解和比特合成。
比特分解
比特分解\( [x]^{A} \rightarrow[x]^{B} \),是将\( x\in Z_{2^k} \)的子秘密转换为{ \( x[1],x[2],...,x[k] \) } ,\( x[i]\in \) { 0,1} 的子秘密,并且 \( x[1],x[2],...,x[k] \)满足\( x=\Sigma_{i=1}^{k} 2^{i-1} x[i] \)。注意在之前的科普中,我们把Alice、Bob、Candy分别掌握\( (x_1,x_2),(x_2,x_3),(x_3,x_1) \),作为对𝑥的秘密分享,记为\( (x_1,x_2,x_3) \):
图:对𝑥的秘密分享\( (x_1,x_2,x_3) \)
那么显然Alice能在本地完成对\( x_1 \)的比特分解,因为Alice掌握了\( x_1 \),Alice只需本地将组成\( x_1 \in Z_{2^k} \)的各个比特分开,即可完成从\( Z_{2^k} \)到布尔表示的转换。
同理,Bob和Candy也可本地完成\( x_2,x_3 \)从\( Z_{2^k} \)到布尔表示的转换。
由于Alice、Bob、Candy三者掌握的子秘密对分别为:\( (x_1,x_2),(x_2,x_3),(x_3,x_1) \)
因此Alice、Bob、Candy分别本地完成对\( x_1,x_2,x_3 \)的比特分解,\( [x_1]^B=(x_1,0,0),[x_2]^B=(0,x_2,0),[x_3]^B=(0,0,x_3) \),即Alice掌握\( x_1 \)和\( x_2 \)的比特表示,Bob掌握\( x_2 \)和\( x_3 \)的比特表示,Candy掌握\( x_3 \)和\( x_1 \)的比特表示。用\( x_{i,j} \)表示子秘密\( x_i \)的第𝑗位:
在进行比特分解之后,各个子秘密都是以按比特分享的,当进行秘密恢复时,需要进行比特间的加法,而当进行子秘密间的加法时,会出现比特间的进位问题。正常恢复秘密𝑥直接计算\( x=x_1+x_2+x_3 \)即可,而当子秘密以比特形式分享后,会出现\( x_1 \)的第𝑗位和\( x_2 \)的第𝑗位,\( x_3 \)的第𝑗位相加,\( x_{1,j}+x_{2,j}+x_{3,j} \),显然当三者之和大于1时就会出现向高位的进位,同样\( x_{1,j}+x_{2,j}+x_{3,j} \)也需要考虑来自低位\( x_{1,j+1}+x_{2,j+1}+x_{3,j+1} \)的进位。因此\( x_{1,j}+x_{2,j}+x_{3,j} \)并不一定等于𝑥的第𝑗位。一种简单的实现方式是使用波纹进位全加器(Ripple-Carry Full Adder,RCFA)进行2𝑘轮的加法,\( 𝑥=𝑅𝐶𝐹𝐴(𝑅𝐶𝐹𝐴(x_1,x_2),x_3) \)。全加器(Full Adder)是实现两个二进制数相加的布尔电路,其表达式为:
其中\( S_i \)表示全加器的输出本位和,\( A_i \)和\( B_i \)是全加器的输入比特,\( C_{i-1} \)是低位来的进位,\( C_i \)是向高位的进位。如若\( A_i \)为1,\( B_i \)为0,低位来的\( C_{i-1} \)进位为1,则相加后本位和\( S_i=1+0+1 \),向高位的进位\( C_i=i\cdot 0+1\cdot (1+0)=1 \)。全加器的布尔电路图如下所示:
图:全加器布尔电路图
波纹进位全加器是使用多个1位的全加器来构成的多位全加器,其将每个全加器的进位输出\( C_i \)连接到下一个全加器的低位进位输入\( C_{i-1} \),以此实现多位加法。秘密恢复也可以使用更为高效的并行前缀加法器(Paraller Prefix Adder)实现,这里具体不再展开。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。