广义上而言SMPC分为两种实现方式,一类是使用布尔电路表述待计算函数,然后使用通用混淆电路来实现安全多方计算。另一类是使用域上的算术电路表述待计算函数,然后使用密码学方法实现安全多方计算。
Yao氏混淆电路估值方案
该方案可以用于实现对任何类型的门电路的安全估值。Lindell和Pinkas对该方案进行了严格的安全论证,证明该方案在半诚实模型下是安全的。下面简介姚氏混淆电路估值方案。
令
C
(
x
,
y
)
∈
{
0
,
1
}
σ
C(x,y) \in {\{ 0,1\} _\sigma }
C(x,y)∈{0,1}σ代表一个布尔电路,其输入为
x
,
y
∈
{
0
,
1
}
σ
x,y \in {\{ 0,1\} _\sigma }
x,y∈{0,1}σ。假设输入数据长度,输出数据长度和安全参数长度均为
σ
\sigma
σ。 下面介绍如何对电路C上的单个门
g
:
{
0
,
1
}
×
{
0
,
1
}
→
{
0
,
1
}
g:\{ 0,1\} \times \{ 0,1\} \to \{ 0,1\}
g:{0,1}×{0,1}→{0,1}。
令
w
1
,
w
2
{w_1},{w_2}
w1,w2代表g的输入信号,
w
3
{w_3}
w3代表输出信号。
k
1
0
k_1^0
k10,
k
1
1
k_1^1
k11,
k
2
0
k_2^0
k20,
k
2
1
k_2^1
k21,
k
3
0
k_3^0
k30,
k
3
1
k_3^1
k31是分别调用密钥生成算法
G
(
1
σ
)
G(1_{\sigma})
G(1σ)产生的密钥。简便起见,假设这些密钥的长度也是
σ
{\sigma}
σ。要解决的问题是如何在不泄露
k
3
g
(
1
−
α
,
β
)
k_3^{g(1-\alpha,\beta)}
k3g(1−α,β),
k
3
g
(
α
,
1
−
β
)
k_3^{g(\alpha,1-\beta)}
k3g(α,1−β),
k
3
g
(
1
−
α
,
1
−
β
)
k_3^{g(1-\alpha,1-\beta)}
k3g(1−α,1−β)的前提下,通过
k
1
α
k_1^{\alpha}
k1α,
k
2
β
k_2^{\beta}
k2β计算
k
3
g
(
α
,
β
)
k_3^{g(\alpha,\beta)}
k3g(α,β)。下面定义4个中间参数。
c 0 , 0 = E k 1 0 ( E k 2 0 ( k 3 g ( 0 , 0 ) ) c_{0,0}=E_{k_{1}^{0}}(E_{k_{2}^{0}}(k_{3}^{g(0,0)}) c0,0=Ek10(Ek20(k3g(0,0))
c 0 , 1 = E k 1 0 ( E k 2 1 ( k 3 g ( 0 , 1 ) ) c_{0,1}=E_{k_{1}^{0}}(E_{k_{2}^{1}}(k_{3}^{g(0,1)}) c0,1=Ek10(Ek21(k3g(0,1))
c 1 , 0 = E k 1 1 ( E k 2 0 ( k 3 g ( 1 , 0 ) ) c_{1,0}=E_{k_{1}^{1}}(E_{k_{2}^{0}}(k_{3}^{g(1,0)}) c1,0=Ek11(Ek20(k3g(1,0))
c 1 , 1 = E k 1 1 ( E k 2 1 ( k 3 g ( 1 , 1 ) ) c_{1,1}=E_{k_{1}^{1}}(E_{k_{2}^{1}}(k_{3}^{g(1,1)}) c1,1=Ek11(Ek21(k3g(1,1))
其中 E为对称加密方案(G,E,D)中的加密算法,对于多个消息其密文具有不可区分性。对上述的4个中间参数执行随机置换,得到 g的混淆真值表 c 0 c_0 c0, c 1 c_1 c1和 c 3 c_3 c3。给定 k 3 g ( α ) , β k_{3}^{g(\alpha),\beta} k3g(α),β, c 2 c_2 c2:对于 i = 0 , 1 , 2 , 3 i=0,1,2,3 i=0,1,2,3,计算 D K 2 β ( D k 1 α ( c i ) ) D_{K_{2}^{\beta}}(D_{k_1^{\alpha}}(c_{i})) DK2β(Dk1α(ci))。正常情况下,只会得到一个有效解密值 k 3 γ = k 3 g ( α , β ) k_3^{\gamma}=k_3^{g(\alpha,\beta)} k3γ=k3g(α,β);如果得到两个及以上的有效解密值,则终止协议。