【隐私计算】安全三方计算(3PC)的加法和乘法计算协议
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