SPDZ 在线协议

基本概述

本文提出了一个通用的安全多方计算协议,可以抵抗主动敌手,敌手最多可以腐蚀 n n n方中的 n − 1 n-1 n1方,因此该协议可以归为不诚实大多数下的一个通用协议。协议中进行的算术运算可以在任意的有限域。协议分为两个阶段,一个是预处理阶段,一个是在线阶段,预处理阶段与输入数据无关且预处理阶段采用同态加密技术。在线阶段的计算效率线性接近于 n , n n,n n,n表示有 n n n个参与方。本次分享主要针对在线阶段协议。原文链接:Multiparty Computation from Somewhat Homomorphic Encryption

数学表示

向量 x = ( x 1 , x 2 , ⋯   , x n ) ∈ R n . x=(x_1,x_2,\cdots,x_n)\in \mathbb{R}^n. x=(x1,x2,,xn)Rn.
∣ ∣ x ∣ ∣ ∞ : = m a x 1 ≤ i ≤ n ∣ x i ∣ , ∣ ∣ x ∣ ∣ 1 : = ∑ 1 ≤ i ≤ n ∣ x i ∣ , ∣ ∣ x ∣ ∣ 2 : = ( ∑ ∣ x i ∣ 2 ) ||x||_{\infty}:=max_{1 \le i \le n}|x_i|,\qquad ||x||_1:=\sum_{1 \le i \le n}|x_i|,\qquad ||x||_2:=\sqrt(\sum|x_i|^2) ∣∣x:=max1inxi,∣∣x1:=1inxi,∣∣x2:=( xi2)
F c o m : F_{com}: Fcom:表示承诺函数。

在线阶段协议

在我们的在线协议中,为了简单起见,我们假设一个广播信道可用,每一方只有一个输入,并且只计算一个公共输出值。在完整的版本中,我们解释了如何从点对点的信道实现我们所需要的广播信道,并解除了对输入和输出数量的限制,而不影响整体的复杂性。我们的思想是使用无条件的安全MAC来保护我们的秘密值不被主动恶意敌手操作,我们从有限域 F p k \mathbb{F}_{p^k} Fpk随机选取一个全局值 α \alpha α,对于一个秘密值 a a a,将它在 n n n方中进行加性共享,MAC值 α ⋅ a \alpha \cdot a αa也以秘密分享的形式在 n n n方中存在。因为是线性的加性秘密分享因此可以在做乘法的时候使用 B e a v e r Beaver Beaver三元组。一个直接的问题是,可靠地打开一个值似乎需要我们检查MAC,而这需要参与方知道 α \alpha α。然而,一旦知道了 α \alpha α,其他值上的MAC就可以被伪造出来。我们通过将对MAC的检查推迟到输出阶段来解决这个问题。在输出阶段,参与方生成要公开的值及其与相应的MAC的份额的随机线性组合;参与方对结果进行一个承诺,然后只公开 α \alpha α,当 α \alpha α被揭露时,被腐蚀的参与方利用密钥已经太晚了。因此,如果MAC检查出来所有打开的值都是正确的并且概率很高,所以我们可以相信我们计算的输出值是正确的,并且可以安全地打开它们。

秘密分享方式

对于一个秘密值 a ∈ F p k a\in \mathbb{F}_{p^k} aFpk
⟨ a ⟩ : = ( δ , ( a 1 , ⋯   , a n ) , ( γ ( a ) 1 , ⋯   , γ ( a ) n ) ) , α ( a + δ ) = γ ( a 1 ) + ⋯ + γ ( a n ) , a = a 1 + ⋯ + a n , δ \langle a \rangle :=(\delta,(a_1,\cdots,a_n),(\gamma(a)_1,\cdots,\gamma(a)_n)),\alpha(a+\delta)=\gamma(a_1)+\cdots+\gamma(a_n),a=a_1+\cdots+a_n,\delta a:=(δ,(a1,,an),(γ(a)1,,γ(a)n))α(a+δ)=γ(a1)++γ(an),a=a1++an,δ 是公共的共享值, P i P_i Pi拥有 a i , γ ( a ) i , γ ( a ) ← γ ( a 1 ) + ⋯ + γ ( a n ) , γ ( a ) a_i,\gamma(a)_i,\gamma(a) \leftarrow \gamma(a_1)+\cdots+\gamma(a_n),\gamma(a) ai,γ(a)i,γ(a)γ(a1)++γ(an),γ(a)是在全局密钥 α \alpha α a a a的MAC。

数值计算

设有秘密值 a , b , a,b, a,b,常量 e . e. e.

线性计算

⟨ a ⟩ + ⟨ b ⟩ = ⟨ a + b ⟩ e ⋅ ⟨ a ⟩ = ⟨ e a ⟩ e + ⟨ a ⟩ = ⟨ e + a ⟩ \langle a\rangle +\langle b\rangle=\langle a+b\rangle \qquad e\cdot \langle a\rangle=\langle ea\rangle \qquad e+\langle a\rangle=\langle e+a\rangle a+b=a+bea=eae+a=e+a
⟨ e + a ⟩ : = ( δ − e , ( a 1 + e , a 2 , ⋯   , a n ) , ( γ ( a ) 1 , ⋯   , γ ( a ) n ) ) \langle e+a\rangle:=(\delta-e,(a_1+e,a_2,\cdots,a_n),(\gamma(a)_1,\cdots,\gamma(a)_n)) e+a:=(δe,(a1+e,a2,,an),(γ(a)1,,γ(a)n))

乘法计算

对于乘法需要预处理阶段的参与,这里我们假设预处理阶段输出随机三元组 ⟨ a ⟩ , ⟨ b ⟩ , ⟨ c ⟩ , c = a b \langle a\rangle,\langle b\rangle,\langle c\rangle,c=ab a,b,c,c=ab。然而因为存在恶意敌手,预处理阶段可能会出现错误 Δ , \Delta, Δ, c = a b + Δ c=ab+\Delta c=ab+Δ,因此在运用输出的三元组之前需要对三元组进行验证。这里的验证三元组需要通过牺牲另外一个三元组 ⟨ f ⟩ , ⟨ g ⟩ , ⟨ h ⟩ \langle f\rangle,\langle g\rangle,\langle h\rangle f,g,h来进行(具体看后面的协议)。给定这么一个有效的三元组 c = a b c=ab c=ab后,要计算 ⟨ x y ⟩ , \langle xy\rangle, xy,首先计算 ⟨ x ⟩ − ⟨ a ⟩ = ϵ , ⟨ y ⟩ − ⟨ b ⟩ = δ , x y = ( a + ϵ ) ( b + δ ) = c + ϵ b + a δ + δ ϵ , ⟨ x ⟩ ⋅ ⟨ y ⟩ = ⟨ c ⟩ + ϵ ⟨ b ⟩ + ⟨ a ⟩ δ + δ ϵ \langle x\rangle-\langle a\rangle=\epsilon,\langle y\rangle-\langle b\rangle=\delta,\\ xy=(a+\epsilon)(b+\delta)=c+\epsilon b+a\delta+\delta\epsilon,\langle x \rangle \cdot\langle y \rangle=\langle c \rangle+\epsilon\langle b \rangle+\langle a \rangle\delta+\delta\epsilon xa=ϵ,yb=δ,xy=(a+ϵ)(b+δ)=c+ϵb+aδ+δϵxy=c+ϵb+aδ+δϵ
重要的是在我们的协议中,我们实际上不能保证我们有正确的结果,因为我们不立即检查打开的值的MAC。

部分打开

在协议的第一部分,每个参与方只做部分打开。
部分打开:所有参与方 P i P_i Pi a i a_i ai发送给 P 1 P_1 P1,然后 P 1 P_1 P1计算 a = a 1 + ⋯ + a n a=a_1+\cdots+a_n a=a1++an并且广播 a a a给所有参与方。这里我们简单处理都是发送个给 P 1 P_1 P1,实际上我们要考虑平衡工作负载不一定总是要 P 1 P_1 P1来计算最终的值,也可以要其他参与方来计算。

全局 [ [ α ] ] [[\alpha]] [[α]]

正如前面所说我们将验证推迟到协议最后的输出阶段,为了验证MAC我们需要一个全局的 α , \alpha, α,我们在预处理阶段获得 α \alpha α,并且表示方式也有所不同。
[ [ α ] ] : = ( ( α 1 , ⋯   , α n ) , ( β i , γ ( α ) 1 i , ⋯   , γ ( α ) n i ) i = 1 , ⋯   , n ) α = ∑ i α i ∑ j γ ( α ) i j = α β i [[\alpha]]:=((\alpha_1,\cdots,\alpha_n),(\beta_i,\gamma(\alpha)_1^i,\cdots,\gamma(\alpha)^i_n)_{i=1,\cdots,n})\qquad\alpha=\sum_i\alpha_i\qquad \sum_j\gamma(\alpha)_i^j=\alpha\beta_i [[α]]:=((α1,,αn),(βi,γ(α)1i,,γ(α)ni)i=1,,n)α=iαijγ(α)ij=αβi
P i P_i Pi拥有 α i , β i , γ ( α ) 1 i , ⋯   , γ ( α ) n i , γ ( α ) i = ∑ j γ ( α ) i j \alpha_i,\beta_i,\gamma(\alpha)_1^i,\cdots,\gamma(\alpha)_n^i,\gamma(\alpha)_i=\sum_j\gamma(\alpha)_i^j αi,βi,γ(α)1i,,γ(α)ni,γ(α)i=jγ(α)ij γ ( α ) i \gamma(\alpha)_i γ(α)i α \alpha α P i P_i Pi拥有秘密密钥 β i \beta_i βi的MAC。为了公开 [ [ α ] ] , [[\alpha]], [[α]],每一方 P j P_j Pj发送 α j , γ ( α ) i j \alpha_j,\gamma(\alpha)_i^j αj,γ(α)ij P i , P_i, Pi,然后 P i P_i Pi检查 ∑ j γ ( α ) i j = α β i \sum_j\gamma(\alpha)_i^j=\alpha\beta_i jγ(α)ij=αβi
最后,预处理还要输出 n n n对随机值 ⟨ r ⟩ , [ [ r ] ] , \langle r \rangle,[[r]], r,[[r]],这些对被用于协议的输入阶段。

整个在线阶段如下图所示:在这里插入图片描述
上图说明
初始化:

通过预处理阶段各参与方获得 [ [ α ] ] , [[\alpha]], [[α]],乘法元组 ( ⟨ a ⟩ , ⟨ b ⟩ , ⟨ c ⟩ ) , ⟨ r ⟩ , [ [ r ] ] , [ [ t ] ] , [ [ e ] ] (\langle a \rangle,\langle b \rangle,\langle c \rangle),\langle r \rangle,[[r]],[[t]],[[e]] (⟨a,b,c⟩),r,[[r]],[[t]],[[e]]

输入:

P i P_i Pi要在所有参与方中完成它的输入 x i x_i xi的秘密分享 ⟨ x i ⟩ , P i \langle x_i \rangle,P_i xi,Pi通过预处理阶段或者 [ [ r ] ] [[r]] [[r]]获得 r r r.
P i P_i Pi广播 ϵ = x i − r \epsilon=x_i-r ϵ=xir
其他所有方计算 ⟨ x i ⟩ = ⟨ r ⟩ + ϵ \langle x_i \rangle=\langle r \rangle+\epsilon xi=r+ϵ
根据线性计算可得 ⟨ x i ⟩ = ⟨ r ⟩ + ϵ = ⟨ r ⟩ + x i − r = < x i − r + r > : = ( δ − ( x i − r ) , ( r 1 + ( x i − r ) , ⋯   , r n ) , ( γ ( r ) i , ⋯   , γ ( r ) n ) ) \langle x_i \rangle=\langle r \rangle+\epsilon=\langle r \rangle+x_i-r=<x_i-r+r>:=(\delta-(x_i-r),(r_1+(x_i-r),\cdots,r_n),(\gamma(r)_i,\cdots,\gamma(r)_n)) xi=r+ϵ=r+xir=<xir+r>:=(δ(xir),(r1+(xir),,rn),(γ(r)i,,γ(r)n))

加法

线性操作 ⟨ x ⟩ + ⟨ y ⟩ = ⟨ x + y ⟩ , \langle x \rangle +\langle y \rangle =\langle x+y \rangle, x+y=x+y,直接本地计算。

乘法

计算乘法 ⟨ x ⟩ , ⟨ y ⟩ , \langle x \rangle ,\langle y \rangle, x,y,使用两个元组 ( ⟨ a ⟩ , ⟨ b ⟩ , ⟨ c ⟩ ) , ( ⟨ f ⟩ , ⟨ g ⟩ , ⟨ h ⟩ ) , 其中 c = a b (\langle a \rangle,\langle b \rangle,\langle c \rangle),(\langle f \rangle,\langle g \rangle,\langle h \rangle),其中c=ab (⟨a,b,c⟩),(⟨f,g,h⟩),其中c=ab经过了验证,验证如下:
部分打开一个随机值 [ [ t ] ] [[t]] [[t]],计算 ρ = t ⋅ ⟨ a ⟩ − ⟨ f ⟩ , σ = ⟨ b ⟩ − ⟨ g ⟩ \rho=t\cdot \langle a \rangle -\langle f \rangle, \sigma=\langle b \rangle -\langle g \rangle ρ=taf,σ=bg
评估 t ⋅ ⟨ c ⟩ − ⟨ h ⟩ − σ ⋅ ⟨ f ⟩ − ρ ⋅ ⟨ g ⟩ − σ ⋅ ρ , t\cdot \langle c \rangle-\langle h \rangle-\sigma\cdot \langle f \rangle-\rho\cdot \langle g \rangle-\sigma\cdot\rho, tchσfρgσρ,然后部分打开结果。如果结果不为0则abort,否则验证通过。
注意:验证过程可以放到预处理阶段且这里只需要一个随机值 t t t
验证通过之后就可以使用 ( ⟨ a ⟩ , ⟨ b ⟩ , ⟨ c ⟩ ) (\langle a \rangle,\langle b \rangle,\langle c \rangle) (⟨a,b,c⟩)进行后面的乘法运算,部分公开 ⟨ x ⟩ − ⟨ a ⟩ = ϵ , ⟨ y ⟩ − ⟨ b ⟩ = δ , \langle x \rangle-\langle a \rangle=\epsilon,\langle y \rangle-\langle b \rangle=\delta, xa=ϵ,yb=δ,最后计算 ⟨ z ⟩ = ⟨ c ⟩ + ⟨ b ⟩ ϵ + ⟨ a ⟩ δ + δ ϵ 。 \langle z \rangle=\langle c \rangle+\langle b \rangle\epsilon+\langle a \rangle\delta+\delta\epsilon。 z=c+bϵ+aδ+δϵ

输出

现在所有参与方拥有 ⟨ y ⟩ , \langle y \rangle, y,我们要打开最终的结果 y y y,过程如下:
1. 1. 1. a 1 , ⋯   , a T a_1,\cdots,a_T a1,,aT是目前为止所有已经打开的值,且 ⟨ a j ⟩ = ( δ j , ( a j , 1 , ⋯   , a j , n ) , ( γ ( a j ) 1 , ⋯   , γ ( a j ) n ) ) , \langle a_j\rangle=(\delta_j,(a_{j,1},\cdots,a_{j,n}),(\gamma(a_j)_1,\cdots,\gamma(a_j)_n)), aj=(δj,(aj,1,,aj,n),(γ(aj)1,,γ(aj)n)),现在随机值 [ [ e ] ] [[e]] [[e]]被打开,并且所有参与方计算 e i = e i , i = ( 1 , ⋯   , T ) , a = ∑ j e j a j e_i=e^i,i=(1,\cdots,T),a=\sum_j e_ja_j ei=ei,i=(1,,T),a=jejaj
2. 2. 2.每一个参与方 P i P_i Pi γ i ← ∑ j e j γ ( α j ) i \gamma_i \leftarrow \sum_je_j\gamma(\alpha_j)_i γijejγ(αj)i进行承若 F c o m , F_{com}, Fcom,同时也要对 y i , γ ( y ) i y_i,\gamma(y)_i yi,γ(y)i进行承诺 F c o m F_{com} Fcom
3. 3. 3.公开 [ [ α ] ] [[\alpha]] [[α]]
4. 4. 4.每一方 P i P_i Pi要求打开对 γ i \gamma_i γi的承诺 F c o m , F_{com}, Fcom,所有参与方都检查 α ( a + ∑ j e j δ j ) = ∑ i γ i \alpha(a+\sum_je_j\delta_j)=\sum_i\gamma_i α(a+jejδj)=iγi,如果不相等协议直接abort。
这里有 α ( a + ∑ j e j δ j ) = α ( ∑ j e j a j + ∑ j e j δ j ) = α ( ∑ j e j ( a j + δ j ) ) = ∑ i γ i = ∑ i ∑ j e j γ ( a j ) i \alpha(a+\sum_je_j\delta_j)=\alpha(\sum_je_ja_j+\sum_je_j\delta_j)=\alpha(\sum_je_j(a_j+\delta_j))=\sum_i\gamma_i=\sum_i\sum_je_j\gamma(a_j)_i α(a+jejδj)=α(jejaj+jejδj)=α(jej(aj+δj))=iγi=ijejγ(aj)i。这一步相当于对上面所有的公开值 a 1 , ⋯   , a n a_1,\cdots,a_n a1,,an进行了一次认证。
5. 5. 5.为了获得 y , y, y,打开对 y i , γ ( y i ) y_i,\gamma(y_i) yi,γ(yi)的承诺,我们知道 y = ∑ i y i y=\sum_iy_i y=iyi,每一方检查 α ( y + δ ) = ∑ i γ ( y i ) , \alpha(y+\delta)=\sum_i\gamma(y_i), α(y+δ)=iγ(yi),相等则输出 y y y
最后,本人水平有限理解有错误的地方还请谅解!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值