参考文献:
- Demmler D, Schneider T, Zohner M. ABY-A framework for efficient mixed-protocol secure two-party computation[C]//NDSS. 2015.
- Kolesnikov V, Sadeghi A R, Schneider T. A systematic approach to practically efficient general two-party secure function evaluation protocols and their modular design[J]. Journal of Computer Security, 2013, 21(2): 283-315.
- 高效 OT 协议:https://blog.csdn.net/weixin_44885334/article/details/127084970
ABY架构
ABY 含义:Arithmetic(基于SS的算术电路), Boolean(基于SS的布尔电路), and Yao(姚的混淆电路)
算术电路使用的 SS 是:
<
x
>
0
A
+
<
x
>
1
A
≡
x
m
o
d
2
l
<x>_0^A + <x>_1^A \equiv x \mod 2^l
<x>0A+<x>1A≡xmod2l
布尔电路使用的 SS 是:
<
x
>
0
B
⊕
<
x
>
1
B
=
x
<x>_0^B \oplus <x>_1^B = x
<x>0B⊕<x>1B=x
ABY 将使用 Free XOR 技术的 Yao’s GC 的输入线标签,也视作是 shares,对于
x
∈
{
0
,
1
}
x \in \{0,1\}
x∈{0,1}
<
x
>
0
Y
=
k
0
,
<
x
>
1
Y
=
k
x
=
k
0
⊕
x
R
<x>_0^Y = k_0,\, <x>_1^Y = k_x = k_0 \oplus xR
<x>0Y=k0,<x>1Y=kx=k0⊕xR
并且将 P&P 技术的选择比特
p
0
p_0
p0作为线标签
k
0
k_0
k0的第一比特。再固定
R
R
R的第一比特为
1
1
1,保证
k
0
,
k
1
k_0,k_1
k0,k1的第一比特随机但不相同。它们满足
<
x
>
0
Y
⊕
<
x
>
1
Y
=
x
R
<x>_0^Y \oplus <x>_1^Y = xR
<x>0Y⊕<x>1Y=xR
对于 Yao’s GC 的输入比特的 shares,可以使用 C-OT 快速分享。另外,对于布尔电路和算术电路的 Beaver Triple,都可以使用 R-OT 批量获得。
ABY 框架结合三种 2PC 的优势,让 shares 在它们之间相互转换,从而提高 2PC 的效率。
转换
Y2B
对于秘密值
x
∈
{
0
,
1
}
x \in \{0,1\}
x∈{0,1},Yao’s GC 的 shares 为
<
x
>
0
Y
=
k
0
,
<
x
>
1
Y
=
k
x
=
k
0
⊕
x
R
<x>_0^Y = k_0,\, <x>_1^Y = k_x = k_0 \oplus xR
<x>0Y=k0,<x>1Y=kx=k0⊕xR
其中
R
[
0
]
=
1
R[0]=1
R[0]=1,因此它们的选择比特满足:
<
x
>
0
Y
[
0
]
⊕
<
x
>
1
Y
[
0
]
=
x
<x>_0^Y[0] \oplus <x>_1^Y[0] = x
<x>0Y[0]⊕<x>1Y[0]=x
所以,转换方法就是:
<
x
>
i
B
=
Y
2
B
(
<
x
>
i
Y
)
=
<
x
>
i
Y
[
0
]
<x>_i^B = Y2B(<x>_i^Y) = <x>_i^Y[0]
<x>iB=Y2B(<x>iY)=<x>iY[0]
这是 free 的,只需要一丁点的本地计算。
B2Y
对于秘密值
x
∈
{
0
,
1
}
x \in \{0,1\}
x∈{0,1},布尔电路的 shares 为
<
x
>
0
B
=
r
∈
R
{
0
,
1
}
,
<
x
>
1
B
=
x
⊕
r
<x>_0^B = r \in_R \{0,1\},\, <x>_1^B = x \oplus r
<x>0B=r∈R{0,1},<x>1B=x⊕r
它们满足
<
x
>
0
B
⊕
<
x
>
1
B
=
x
<x>_0^B \oplus <x>_1^B = x
<x>0B⊕<x>1B=x
- P 0 P_0 P0是 Yao’s GC 的生成者,它持有随机的线标签 k 0 k_0 k0和全局随机数 R R R,以及 < x > 0 B = r <x>_0^B=r <x>0B=r
- P 1 P_1 P1是计算方,它持有 < x > 1 B <x>_1^B <x>1B
运行 OT 协议,
P
0
P_0
P0输入
(
k
0
⊕
r
R
,
k
0
⊕
(
1
−
r
)
R
)
(k_0 \oplus rR,\, k_0 \oplus (1-r)R)
(k0⊕rR,k0⊕(1−r)R),
P
1
P_1
P1输入
<
x
>
1
B
<x>_1^B
<x>1B,并获得
o
u
t
=
{
k
0
⊕
(
r
⊕
0
)
R
,
<
x
>
1
B
=
0
k
0
⊕
(
r
⊕
1
)
R
,
<
x
>
1
B
=
1
out = \left\{ \begin{aligned} k_0 \oplus (r \oplus 0)R, && <x>_1^B = 0\\ k_0 \oplus (r \oplus 1)R, && <x>_1^B = 1\\ \end{aligned} \right.
out={k0⊕(r⊕0)R,k0⊕(r⊕1)R,<x>1B=0<x>1B=1
即
o
u
t
=
k
0
⊕
(
<
x
>
0
B
⊕
<
x
>
1
B
)
R
=
k
x
out = k_0 \oplus (<x>_0^B \oplus <x>_1^B)R = k_x
out=k0⊕(<x>0B⊕<x>1B)R=kx
因此
P
1
P_1
P1获得了 Yao’s GC 的 share,
<
x
>
1
Y
=
o
u
t
=
k
x
<x>_1^Y = out = k_x
<x>1Y=out=kx
而
P
0
P_0
P0简单地设置
<
x
>
0
Y
=
k
0
<x>_0^Y = k_0
<x>0Y=k0
A2Y
对于秘密值
x
∈
{
0
,
1
}
l
x \in \{0,1\}^l
x∈{0,1}l,算术电路的 shares 为
<
x
>
0
A
=
r
∈
R
{
0
,
1
}
l
,
<
x
>
1
A
=
x
−
r
<x>_0^A = r \in_R \{0,1\}^l,\, <x>_1^A = x - r
<x>0A=r∈R{0,1}l,<x>1A=x−r
构造布尔加法电路,其功能为
x
=
<
x
>
0
A
+
<
x
>
1
A
x = <x>_0^A + <x>_1^A
x=<x>0A+<x>1A
让
P
0
P_0
P0构建对应的混淆版本,
- 输入: P 0 P_0 P0输入 < x > 0 A <x>_0^A <x>0A的 l l l比特, P 1 P_1 P1输入 < x > 1 A <x>_1^A <x>1A的 l l l比特
- 输出:电路输出 x ∈ Z 2 l x \in \mathbb Z_{2^l} x∈Z2l的 l l l比特的混淆值 < x > Y <x>^Y <x>Y
那么,对于每个 1 ≤ i ≤ l 1 \le i \le l 1≤i≤l, P 0 P_0 P0持有 < x i > 0 Y = k 0 i <x_i>^Y_0 = k_0^i <xi>0Y=k0i, P 1 P_1 P1持有 < x i > 1 Y = k x i <x_i>_1^Y = k_x^i <xi>1Y=kxi
A2B
方案一
类似 A2Y,构建布尔加法电路,功能是计算
x
=
<
x
>
0
A
+
<
x
>
1
A
x = <x>_0^A + <x>_1^A
x=<x>0A+<x>1A
使用基于 SS 的布尔电路,
- P 0 P_0 P0将 < x > 0 A ∈ Z 2 l <x>_0^A \in \mathbb Z_{2^l} <x>0A∈Z2l的每一比特都共享出去, < < x > 0 A [ i ] > B <<x>_0^A[i]>^B <<x>0A[i]>B
- P 1 P_1 P1将 < x > 1 A ∈ Z 2 l <x>_1^A \in \mathbb Z_{2^l} <x>1A∈Z2l的每一比特都共享出去, < < x > 1 A [ i ] > B <<x>_1^A[i]>^B <<x>1A[i]>B
- 然后计算出结果 < x > B <x>^B <x>B
方案二
可以复用其他的转换函数,
<
x
>
B
=
A
2
B
(
<
x
>
A
)
=
Y
2
B
∘
A
2
Y
(
<
x
>
A
)
<x>^B = A2B(<x>^A) = Y2B \circ A2Y(<x>^A)
<x>B=A2B(<x>A)=Y2B∘A2Y(<x>A)
因为 Y2B 是 free 的,并且 A2Y 基于 Yao’s GC,它的计算效率远高于基于 SS 的布尔电路,所以方案二速度更快。
B2A
对于
l
l
l比特的秘密值
x
∈
{
0
,
1
}
l
x \in \{0,1\}^l
x∈{0,1}l,布尔电路的 shares 满足
<
x
i
>
0
B
⊕
<
x
i
>
1
B
=
x
i
<x_i>_0^B \oplus <x_i>_1^B = x_i
<xi>0B⊕<xi>1B=xi
于是
x
=
∑
i
=
0
l
−
1
2
i
x
i
=
∑
i
=
0
l
−
1
2
i
⋅
(
<
x
i
>
0
B
⊕
<
x
i
>
1
B
)
x = \sum_{i=0}^{l-1} 2^i x_i = \sum_{i=0}^{l-1} 2^i \cdot (<x_i>_0^B \oplus <x_i>_1^B)
x=i=0∑l−12ixi=i=0∑l−12i⋅(<xi>0B⊕<xi>1B)
可以用 OT 协议完成转换:
-
P 0 P_0 P0作为发送者,选择随机数 r i ∈ Z 2 l r_i \in \mathbb Z_{2^l} ri∈Z2l,输入 ( s 0 i , s 1 i ) (s_0^i,s_1^i) (s0i,s1i)
s 1 i = 2 i ⋅ < x i > 0 B − r i s 0 i = 2 i ⋅ ( 1 − < x i > 0 B ) − r i \begin{aligned} s_1^i &= 2^i \cdot <x_i>_0^B - r_i\\ s_0^i &= 2^i \cdot (1-<x_i>_0^B) - r_i \end{aligned} s1is0i=2i⋅<xi>0B−ri=2i⋅(1−<xi>0B)−ri -
P 1 P_1 P1作为接收者,输入 < x i > 1 B <x_i>_1^B <xi>1B,获得
o u t i = { 2 i ⋅ ( < x i > 0 B ⊕ 0 ) − r i , < x > 1 B = 0 2 i ⋅ ( < x i > 0 B ⊕ 1 ) − r i , < x > 1 B = 1 out_i = \left\{ \begin{aligned} 2^i \cdot (<x_i>_0^B \oplus 0) - r_i, && <x>_1^B = 0\\ 2^i \cdot (<x_i>_0^B \oplus 1) - r_i, && <x>_1^B = 1\\ \end{aligned} \right. outi={2i⋅(<xi>0B⊕0)−ri,2i⋅(<xi>0B⊕1)−ri,<x>1B=0<x>1B=1
即
o u t i = 2 i ⋅ ( 0 B ⊕ 1 B ) − r i = 2 i x i − r i out_i = 2^i \cdot (_0^B \oplus _1^B) - r_i = 2^i x_i - r_i outi=2i⋅(0B⊕1B)−ri=2ixi−ri -
P 0 P_0 P0设置
< x > 0 A = ∑ i = 0 l − 1 r i <x>_0^A = \sum_{i=0}^{l-1} r_i <x>0A=i=0∑l−1ri
P 1 P_1 P1设置
< x > 1 A = ∑ i = 0 l − 1 o u t i = x − < x > 0 A <x>_1^A = \sum_{i=0}^{l-1} out_i = x - <x>_0^A <x>1A=i=0∑l−1outi=x−<x>0A
容易验证 < x > 0 A + < x > 1 A = x ∈ Z 2 l <x>_0^A + <x>_1^A = x \in \mathbb Z_{2^l} <x>0A+<x>1A=x∈Z2l
Y2A
方案一
对于 l l l比特的秘密值 x ∈ { 0 , 1 } l x \in \{0,1\}^l x∈{0,1}l,Yao’s GC 中的 P 1 P_1 P1作为计算方,持有它的混淆值 k x i i , ∀ 1 ≤ i ≤ l k_{x_i}^i,\forall 1 \le i \le l kxii,∀1≤i≤l,而 P 0 P_0 P0作为生成方持有对应的 k 0 i k_0^i k0i以及 R R R
-
令 P 0 P_0 P0选择一个随机掩码(random mask) r ∈ R Z 2 l r \in_R \mathbb Z_{2^l} r∈RZ2l
-
P 0 P_0 P0根据 k 0 i k_0^i k0i以及 R R R,构造一个布尔减法电路的混淆版本,功能为
X = x − r X = x-r X=x−r
电路发送给 P 1 P_1 P1,同时发送 r r r对应的 l + σ l+\sigma l+σ个混淆值 -
P 1 P_1 P1已经持有了 x x x对应的混淆值 k x i k_x^i kxi,不必执行 OT 协议。在混淆电路上计算,设置 < x > 1 A = X = x − r <x>_1^A = X = x-r <x>1A=X=x−r
-
P 0 P_0 P0简单地设置 < x > 0 A = r <x>_0^A = r <x>0A=r
方案二
可以复用其他的转换函数,
<
x
>
A
=
Y
2
A
(
<
x
>
Y
)
=
B
2
A
∘
Y
2
B
(
<
x
>
Y
)
<x>^A = Y2A(<x>^Y) = B2A \circ Y2B(<x>^Y)
<x>A=Y2A(<x>Y)=B2A∘Y2B(<x>Y)
因为 Y2B 是 free 的,并且 B2A 主要使用 OT 协议,在计算和通信上的开销比构造和计算 Yao’s GC 小得多,所以方案二速度更快。
效果
预处理阶段(构造电路,执行 OT 协议):
在线阶段(电路运算):