ABY3中采用replicated secret sharing(复制秘密分享)机制,即2-out-of-3秘密分享,三个参与方的每一方都拥有share中的两份。下面来看一下这样做有什么好处。
2-out-of-3秘密分享
有 x , y x, y x,y两个操作数,先进行秘密分享:
- P 1 P_1 P1拥有 ( x 1 , x 2 ) , ( y 1 , y 2 ) (x_1, x_2), (y_1, y_2) (x1,x2),(y1,y2)
- P 2 P_2 P2拥有 ( x 2 , x 3 ) , ( y 2 , y 3 ) (x_2, x_3), (y_2, y_3) (x2,x3),(y2,y3)
- P 3 P_3 P3拥有 ( x 3 , x 1 ) , ( y 3 , y 1 ) (x_3, x_1), (y_3, y_1) (x3,x1),(y3,y1)
常见的计算
1 加法
⟨ x + y ⟩ = ( x 1 + y 1 , x 2 + y 2 , x 3 + y 3 ) \langle x+y\rangle=(x_1+y_1, x_2+y_2, x_3+y_3) ⟨x+y⟩=(x1+y1,x2+y2,x3+y3)
2 加常数
⟨ x ⟩ + c = ( x 1 + c , x 2 , x 3 ) \langle x\rangle+c=(x_1+c, x_2, x_3) ⟨x⟩+c=(x1+c,x2,x3),注意只需要加一次 c c c
3 数乘
⟨ c x ⟩ = ( c x 1 , c x 2 , c x 3 ) \langle cx\rangle=(cx_1, cx_2, cx_3) ⟨cx⟩=(cx1,cx2,cx3)
4 乘法
⟨ x y ⟩ = ( x 1 + x 2 + x 3 ) ( y 1 + y 2 + y 3 ) = ( x 1 y 1 + x 1 y 2 + x 1 y 3 ) + ( x 2 y 1 + x 2 y 2 + x 2 y 3 ) + ( x 3 y 1 + x 3 y 2 + x 3 y 3 ) 调整一下顺序 = ( x 1 y 1 + x 1 y 2 + x 2 y 1 ) + α 1 [ P 1 → z 1 ] + ( x 3 y 2 + x 2 y 2 + x 2 y 3 ) + α 2 [ P 2 → z 2 ] + ( x 3 y 1 + x 1 y 3 + x 3 y 3 ) + α 3 [ P 3 → z 3 ] \langle xy\rangle=(x_1+x_2+x_3)(y_1+y_2+y_3)\\=(x_1y_1+x_1y_2+x_1y_3)\\+(x_2y_1 + x_2y_2 + x_2y_3)\\+(x_3y_1 + x_3y_2 + x_3y_3)\\调整一下顺序\\=(x_1y_1+x_1y_2+x_2y_1)+\alpha_1 [P_1\rightarrow z_1]\\+(x_3y_2 + x_2y_2 + x_2y_3)+\alpha_2 [P_2\rightarrow z_2]\\+(x_3y_1 + x_1y_3 + x_3y_3)+\alpha_3 [P_3\rightarrow z_3] ⟨xy⟩=(x1+x2+x3)(y1+y2+y3)=(x1y1+x1y2+x1y3)+(x2y1+x2y2+x2y3)+(x3y1+x3y2+x3y3)调整一下顺序=(x1y1+x1y2+x2y1)+α1[P1→z1]+(x3y2+x2y2+x2y3)+α2[P2→z2]+(x3y1+x1y3+x3y3)+α3[P3→z3]
暂不管 α \alpha α,可以看到,三个参与方可以分别在本地计算出 z 1 , z 2 , z 3 z_1, z_2, z_3 z1,z2,z3,也就是交叉项的结果。
然而,我们要求各方都持有三份share中的两份,所以需要re-sharing操作,也就是 P i P_i Pi将 z i z_i zi发给 P i − 1 P_{i-1} Pi−1。
现在来看 α \alpha α的作用, α \alpha α用于随机化 z z z,我们需要让 α \alpha α满足: α 1 + α 2 + α 3 = 0 \alpha_1+\alpha_2+\alpha_3=0 α1+α2+α3=0。每一方都完全知道这三个值中的一个,这样的三元组 ( α 1 , α 2 , α 3 ) (\alpha_1, \alpha_2, \alpha_3) (α1,α2,α3)被称为zero-sharing(零共享),在one-time setup后的计算无需任何交互。
那么如何生成三元组?基于伪随机函数(PRF)生成,这部分本文不展开。
由此可见,3PC和2PC都在本地计算加法,他们最大的不同就是乘法:在2PC乘法中,交叉项需要借助OT或HE计算,带来巨大的通信或计算开销;而基于复制秘密分享的3PC乘法完全在本地计算交叉项,无需通信,在re-sharing时需要少量的通信。
5 截断
方法1: Π T r u n c 1 \Pi_{Trunc1} ΠTrunc1
核心想法是在一方不参与的情况下,运行两方协议。
令各方有 ⟨ x ′ ⟩ = ⟨ y ⟩ ⟨ z ⟩ \langle x^\prime\rangle=\langle y\rangle \langle z\rangle ⟨x′⟩=⟨y⟩⟨z⟩的2-out-of-3的share(上面乘法后的结果),现在的目的是计算截断 ⟨ x ⟩ = ⟨ x ′ ⟩ / 2 d \langle x\rangle=\langle x^\prime \rangle/2^d ⟨x⟩=⟨x′⟩/2d。
定义 P 1 , P 2 P_1, P_2 P1,P2之间的2-out-of-2 share为 ( x 1 ′ , x 2 ′ + x 3 ′ ) (x_1^\prime, x_2^\prime+x_3^\prime) (x1′,x2′+x3′),然后双方在本地截断 ( x 1 ′ / 2 d , ( x 2 ′ + x 3 ′ ) / 2 d ) (x_1^\prime/2^d, (x_2^\prime+x_3^\prime)/2^d) (x1′/2d,(x2′+x3′)/2d),最后的结果为 ⟨ x ⟩ : = ( x 1 , x 2 , x 3 ) = ( x 1 ′ / 2 d , ( x 2 ′ + x 3 ′ ) / 2 d − r , r ) \langle x\rangle:=(x_1, x_2, x_3)=(x_1^\prime/2^d, (x_2^\prime+x_3^\prime)/2^d-r, r) ⟨x⟩:=(x1,x2,x3)=(x1′/2d,(x2′+x3′)/2d−r,r),其中, r ∈ Z 2 k r\in\mathbb Z^k_2 r∈Z2k是一个 P 2 , P 3 P_2, P_3 P2,P3知道的随机数。最后,为了让三方拥有两份share,需要再做一次re-sharing操作。
这个方法的局限性是两轮计算需要乘法和截断。
方法2: Π T r u n c 2 \Pi_{Trunc2} ΠTrunc2