参考文献:
ABY 含义:Arithmetic(基于SS的算术电路), Boolean(基于SS的布尔电路), and Yao(姚的混淆电路)
算术电路使用的 SS 是:
<
x
>
0
A
+
<
x
>
1
A
≡
x
m
o
d
2
l
布尔电路使用的 SS 是:
<
x
>
0
B
⊕
<
x
>
1
B
=
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
并且将 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
对于 Yao’s GC 的输入比特的 shares,可以使用 C-OT 快速分享。另外,对于布尔电路和算术电路的 Beaver Triple,都可以使用 R-OT 批量获得。
ABY 框架结合三种 2PC 的优势,让 shares 在它们之间相互转换,从而提高 2PC 的效率。

对于秘密值
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
其中
R
[
0
]
=
1
R[0]=1
R[0]=1,因此它们的选择比特满足:
<
x
>
0
Y
[
0
]
⊕
<
x
>
1
Y
[
0
]
=
x
所以,转换方法就是:
<
x
>
i
B
=
Y
2
B
(
<
x
>
i
Y
)
=
<
x
>
i
Y
[
0
]
这是 free 的,只需要一丁点的本地计算。
对于秘密值
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
⊕
<
x
>
1
B
=
x
运行 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
o
u
t
=
{
k
0
⊕
(
r
⊕
0
)
R
,
<
x
>
1
B
=
0
k
0
⊕
(
r
⊕
1
)
R
,
<
x
>
1
B
=
1
out = \left\{
即
o
u
t
=
k
0
⊕
(
<
x
>
0
B
⊕
<
x
>
1
B
)
R
=
k
x
out = k_0 \oplus (
因此
P
1
P_1
P1获得了 Yao’s GC 的 share,
<
x
>
1
Y
=
o
u
t
=
k
x
而
P
0
P_0
P0简单地设置
<
x
>
0
Y
=
k
0
对于秘密值
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
=
<
x
>
0
A
+
<
x
>
1
A
x =
让
P
0
P_0
P0构建对应的混淆版本,
那么,对于每个
1
≤
i
≤
l
1 \le i \le l
1≤i≤l,
P
0
P_0
P0持有
<
x
i
>
0
Y
=
k
0
i
类似 A2Y,构建布尔加法电路,功能是计算
x
=
<
x
>
0
A
+
<
x
>
1
A
x =
使用基于 SS 的布尔电路,
可以复用其他的转换函数,
<
x
>
B
=
A
2
B
(
<
x
>
A
)
=
Y
2
B
∘
A
2
Y
(
<
x
>
A
)
因为 Y2B 是 free 的,并且 A2Y 基于 Yao’s GC,它的计算效率远高于基于 SS 的布尔电路,所以方案二速度更快。
对于
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
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 (
可以用 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
P
1
P_1
P1作为接收者,输入
<
x
i
>
1
B
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\{
即
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
P
1
P_1
P1设置
<
x
>
1
A
=
∑
i
=
0
l
−
1
o
u
t
i
=
x
−
<
x
>
0
A
容易验证
<
x
>
0
A
+
<
x
>
1
A
=
x
∈
Z
2
l
对于 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
P
0
P_0
P0简单地设置
<
x
>
0
A
=
r
可以复用其他的转换函数,
<
x
>
A
=
Y
2
A
(
<
x
>
Y
)
=
B
2
A
∘
Y
2
B
(
<
x
>
Y
)
因为 Y2B 是 free 的,并且 B2A 主要使用 OT 协议,在计算和通信上的开销比构造和计算 Yao’s GC 小得多,所以方案二速度更快。
预处理阶段(构造电路,执行 OT 协议):

在线阶段(电路运算):
