基于同态加密的恶意安全 MPC:BDOZ、SPDZ

参考文献:

  1. Bendlin R, Damgård I, Orlandi C, Zakarias S. Semi-homomorphic encryption and multiparty computation[C]//Annual International Conference on the Theory and Applications of Cryptographic Techniques. Springer, Berlin, Heidelberg, 2011: 169-188.
  2. Damgård I, Pastro V, Smart N, Zakarias S. Multiparty computation from somewhat homomorphic encryption[C]//Annual Cryptology Conference. Springer, Berlin, Heidelberg, 2012: 643-662.
  3. Evans D, Kolesnikov V, Rosulek M. A pragmatic introduction to secure multi-party computation[J]. Foundations and Trends® in Privacy and Security, 2018, 2(2-3): 70-246.

Abstract Sharing Mechanism

Beaver Triple 是为了加速 BGW 而设计的,但它可以任意的满足如下性质的抽象共享机制 [ v ] [v] [v] 上 work:

  1. Additive homomorphism:各方持有 shares [ x ] , [ y ] [x],[y] [x],[y] 以及公开常数 z z z,它们可以无交互地计算任意的 [ x + y ] = [ x ] + [ y ] [x+y] = [x] + [y] [x+y]=[x]+[y] [ x + z ] = z + [ x ] [x+z] = z + [x] [x+z]=z+[x] [ z ⋅ x ] = z ⋅ [ x ] [z \cdot x] = z \cdot [x] [zx]=z[x](三种加性操作,左边的 + , ⋅ +,\cdot +, F \mathbb F F 上的运算,右边的 + , ⋅ +,\cdot +, 是 shares 的运算)
  2. Opening:各方持有 shares [ x ] [x] [x],它们可以将 x x x 可靠地(reliably)揭露给任意一方
  3. Privacy:任意的敌手都无法从 [ x ] [x] [x] 中获取 x x x 的任何信息
  4. Beaver triples:对于任意乘法门,各方都持有随机三元组的 shares [ a ] ,   [ b ] ,   [ c ] [a],\, [b],\, [c] [a],[b],[c],满足 c = a b c=ab c=ab
  5. Random input gadgets:各方持有随机的 [ r ] [r] [r],其中 r r r 仅被其中一方 P i P_i Pi 知晓。 P i P_i Pi 的输入值为 x x x,广播 δ = x − r \delta = x-r δ=xr 给其他各方(并不泄露 x x x 的信息),所有参与者计算得到 [ x ] = [ r ] + δ [x] = [r] + \delta [x]=[r]+δ

只要 SS 的 Opening, Privacy 性质抵御 malicious adversaries,那么 Beaver Triple Paradigm 就是 malicious-secure.

Authenticated Secret Sharing

BDOZ 协议

MAC

2011年,BDOZ 协议中使用了 information-theoretic one-time MAC,形如
M A C K ( x ) : = α x + β ,   K = ( α , β ) ← R F 2 MAC_{K}(x):=\alpha x+\beta,\, K=(\alpha,\beta) \leftarrow_R \mathbb F^2 MACK(x):=αx+β,K=(α,β)RF2

其中域的大小满足 ∣ F ∣ ≥ 2 κ |\mathbb F| \ge 2^\kappa F2κ κ \kappa κ是安全参数。

易知,这是 “one-time” MAC,一旦敌手获取到 t = M A C K ( x ) , t ′ = M A C K ( x ′ ) , x ≠ x ′ t=MAC_K(x),t'=MAC_K(x'),x\neq x' t=MACK(x),t=MACK(x),x=x,那么就可以计算 α = ( t − t ′ ) ⋅ ( x − x ′ ) − 1 \alpha = (t-t') \cdot (x-x')^{-1} α=(tt)(xx)1 β = t − α x \beta = t-\alpha x β=tαx。但如果敌手仅仅知道一个消息 x x x 的MAC,那么敌手伪造另一个消息 x ′ ≠ x x'\neq x x=x 的合法MAC,其成功概率为 1 / ∣ F ∣ = n e g l ( κ ) 1/|F| = negl(\kappa) 1/∣F=negl(κ)

密钥不可重用,对于不同的消息需要使用不同的密钥。如果我们固定 α \alpha α为全局密钥,对每个消息随机选择 β \beta β分量,那么已知两个消息 x , x ′ x,x' x,x 的MAC,
t = M A C α , β ( x ) = α x + β t ′ = M A C α , β ′ ( x ) = α x + β ′ \begin{aligned} t &=MAC_{\alpha,\beta}(x) = \alpha x + \beta\\ t' &=MAC_{\alpha,\beta'}(x) = \alpha x + \beta'\\ \end{aligned} tt=MACα,β(x)=αx+β=MACα,β(x)=αx+β

可以计算消息加和 x + x ′ x+x' x+x 的MAC,
t + t ′ = α ( x + x ′ ) + ( β + β ′ ) = M A C α , β + β ′ ( x + x ′ ) t+t' = \alpha (x+x') + (\beta+\beta') = MAC_{\alpha,\beta+\beta'}(x+x') t+t=α(x+x)+(β+β)=MACα,β+β(x+x)

我们说两个密钥 K , K ′ K,K' K,K一致的consistent),如果 α = α ′ \alpha=\alpha' α=α。这是保证计算 M A C ( x + x ′ ) MAC(x+x') MAC(x+x) 的可行性。

MACs 的运算

我们定义,MAC 密钥的运算(博主自己定义的,为了方便表示 MAC 运算),

  1. Addition K + K ′ = ( α ,   β + β ′ ) K+K' = (\alpha,\, \beta+\beta') K+K=(α,β+β)
  2. Multiplication by constants c ⋅ K = ( α ,   c ⋅ β ) c \cdot K = (\alpha,\, c\cdot \beta) cK=(α,cβ)
  3. Addition of constants c + K = ( α , β − c ⋅ α ) c+K = (\alpha,\beta - c \cdot \alpha) c+K=(α,βcα)

那么 MAC 的运算为:

  1. Addition M A C K ( x ) + M A C K ′ ( x ′ ) = M A C K + K ′ ( x + x ′ ) MAC_{K}(x) + MAC_{K'}(x') = MAC_{K+K'}(x+x') MACK(x)+MACK(x)=MACK+K(x+x),左边是 F \mathbb F F 上运算
  2. Multiplication by constants c ⋅ M A C K ( x ) = M A C c ⋅ K ( c ⋅ x ) c \cdot MAC_{K}(x) = MAC_{c \cdot K}(c \cdot x) cMACK(x)=MACcK(cx),左边是 F \mathbb F F 上运算
  3. Addition of constants 0 + M A C K ( x ) = M A C c + K ( c + x ) 0 + MAC_{K}(x) = MAC_{c + K}(c + x) 0+MACK(x)=MACc+K(c+x),左边是 F \mathbb F F 上运算

Share

对于值 a ∈ F a \in \mathbb F aF a = ∑ i = 1 n a i a=\sum_{i=1}^n a_i a=i=1nai,令 a i a_i ai P i P_i Pi持有的 share,额外地让 P i P_i Pi持有 MAC keys K a j i , j = 1 , ⋯   , n K_{a_j}^i,j=1,\cdots,n Kaji,j=1,,n,用于校验其他的 P j P_j Pj的 shares a j a_j aj 的正确性。

简写 m j ( a i ) : = M A C K a i j ( a i ) m_j(a_i) := MAC_{K_{a_i}^j}(a_i) mj(ai):=MACKaij(ai) 代表 P j P_j Pj a i a_i ai 的校验,那么带有 MAC 的 shares 形如:
[ a ] = [ { a i , { K a j i ,   m j ( a i ) } j = 1 n } i = 1 n ] [a] = [\{a_i,\{K_{a_j}^i,\, m_j(a_i)\}_{j=1}^n\}_{i=1}^n] [a]=[{ai,{Kaji,mj(ai)}j=1n}i=1n]

其中, K a j i K_{a_j}^i Kaji P i P_i Pi 用于校验其他人的 a j a_j aj的正确性,而 m j ( a i ) m_j(a_i) mj(ai) P i P_i Pi让其他人相信自己的 a i a_i ai的正确性。

注意,与一般的MAC的场景不同,BDOZ 的MAC密钥不是双方都持有的,仅由检验方 P i P_i Pi自己持有自己的密钥 K a j i K_{a_j}^i Kaji。为了计算 m j ( a i ) m_j(a_i) mj(ai),需要利用 Semi-homomorphic Encryption(同态加密方案的弱化,当明文和随机性都足够小,确保解密错误的概率指数小),使用复杂的协议来计算它。

在 shares 的运算过程中,MAC也随之一同运算,以保持MAC的校验关系。每当需要重构秘密 a a a时,各方就可以用自己的MAC密钥 check 从其他参与者那儿获得的 shares 是否合法。

我们说 [ a ] [a] [a]一致的consistent),如果 a = ∑ i a i a=\sum_i a_i a=iai,且对于任意的 i , j i,j i,j m j ( a i ) = M A C K a i j ( a i ) m_j(a_i) = MAC_{K_{a_i}^j}(a_i) mj(ai)=MACKaij(ai)。这是保证 a a a 的安全性。

我们说两个 shares [ a ] , [ a ′ ] [a],[a'] [a],[a]密钥一致的key-consistent),如果它们都是一致的,且对于任意的 i , j i,j i,j K a j i , K a j ′ i K_{a_j}^i,K_{a_j'}^i Kaji,Kaji是一致的。这是保证计算 [ a + a ′ ] [a+a'] [a+a] 的可行性。

Shares 的运算

这儿的 [ a ] [a] [a] 是满足 Beaver Triple 的要求的 SS,其运算为:

  1. Addition,对于 a = ∑ i a i ,   a ′ = ∑ i a i ′ a=\sum_i a_i,\, a'=\sum_i a_i' a=iai,a=iai,令 ( a + a ′ ) i = a i + a i ′ (a+a')_i = a_i+a_i' (a+a)i=ai+ai,那么
    [ a + a ′ ] = [ a ] + [ a ′ ] : = [ { a i + a i ′ ,   { K a j i + K a j ′ i ,   m j ( a i ) + m j ( a i ′ ) } j = 1 n } i = 1 n ] \begin{aligned} [a+a'] &= [a]+[a'] \\ &:= \left[ \{a_i+a_i',\, \{K_{a_j}^i+K_{a_j'}^i,\, m_j(a_i)+m_j(a_i')\}_{j=1}^n\}_{i=1}^n \right] \end{aligned} [a+a]=[a]+[a]:=[{ai+ai,{Kaji+Kaji,mj(ai)+mj(ai)}j=1n}i=1n]

    每一对 shares 的MAC相加,对应的要修改密钥。

  2. Multiplication by constants,对于 a = ∑ i a i a=\sum_i a_i a=iai,令 ( c ⋅ a ) i = c ⋅ a i (c \cdot a)_i = c \cdot a_i (ca)i=cai,那么
    [ c ⋅ a ] = c ⋅ [ a ] : = [ { c ⋅ a i ,   { c ⋅ K a j i ,   c ⋅ m j ( a i ) } j = 1 n } i = 1 n ] \begin{aligned} [c \cdot a] &= c \cdot [a] \\ &:= \left[ \{c \cdot a_i,\, \{c \cdot K_{a_j}^i,\, c \cdot m_j(a_i)\}_{j=1}^n\}_{i=1}^n \right] \end{aligned} [ca]=c[a]:=[{cai,{cKaji,cmj(ai)}j=1n}i=1n]

    每一个 shares 的MAC乘以常数,对应的要修改密钥。

  3. Addition of constants,对于 a = ∑ i a i a=\sum_i a_i a=iai,令 ( c + a ) 1 = c + a 1 ,   ( c + a ) i = a i , i = 2 , ⋯   , n (c + a)_1 = c + a_1,\, (c+a)_i=a_i,i=2,\cdots,n (c+a)1=c+a1,(c+a)i=ai,i=2,,n,那么
    [ c + a ] = c + [ a ] : = [ { a i + c ,   { c + K a 1 i ,   m 1 ( a i ) } ,   { K a j i ,   m j ( a i ) } j = 2 n } i = 1 1 ,   { a i ,   { c + K a 1 i ,   m 1 ( a i ) } ,   { K a j i ,   m j ( a i ) } j = 2 n } i = 2 n ] \begin{aligned} [c+a] &= c + [a] \\ &:= \left[\begin{aligned} &\{a_i+c,\, \{c+K_{a_1}^i,\, m_1(a_i)\},\, \{K_{a_j}^i,\, m_j(a_i)\}_{j=2}^n\}_{i=1}^1,\, \\ &\{a_i,\, \{c+K_{a_1}^i,\, m_1(a_i)\},\, \{K_{a_j}^i,\, m_j(a_i)\}_{j=2}^n\}_{i=2}^n\\ \end{aligned}\right] \end{aligned} [c+a]=c+[a]:=[{ai+c,{c+Ka1i,m1(ai)},{Kaji,mj(ai)}j=2n}i=11,{ai,{c+Ka1i,m1(ai)},{Kaji,mj(ai)}j=2n}i=2n]

    因为 a 1 a_1 a1变为了 a 1 + c a_1+c a1+c,因此与 a 1 a_1 a1有关的MAC密钥 K K K都替换为了 c + K c+K c+K,并保持MAC值 m j ( a 1 ) m_j(a_1) mj(a1)不变,从而满足MAC关系。而其他的 a i a_i ai以及对应的 K K K m j ( a i ) m_j(a_i) mj(ai)都不动。

注意,每个参与者 P i P_i Pi的各个密钥 K a j i K_{a_j}^i Kaji α \alpha α分量部分是自己的全局秘密,对每个参与者各确定一个 α j i \alpha_j^i αji,不得与其他参与者共享。 P j P_j Pj签的各个消息 a i , a i ′ a_i,a_i' ai,ai的MAC值 m j ( a i ) , m j ( a i ′ ) m_{j}(a_i),m_{j}(a_i') mj(ai),mj(ai),都仅与自己签的MAC之间做运算。

Generate Beaver Triple

在预处理阶段,BDOZ 使用 Semi-Homomorphic Encryption 来生成 Beaver Triple。令 E i E_i Ei 是使用 P i P_i Pi 的公钥 p k i pk_i pki的半同态加密函数,对于值 x ∈ F x \in \mathbb F xF,它的另一种 shares 写作:
< x > = { E 1 ( x 1 ) ,   ⋯   ,   E n ( x n ) } <x> = \{E_1(x_1),\, \cdots,\, E_n(x_n)\} <x>={E1(x1),,En(xn)}

其中 x = ∑ i x i x = \sum_i x_i x=ixi,每个 E i ( x i ) E_i(x_i) Ei(xi) 都是 ( τ , ρ ) − (\tau,\rho)- (τ,ρ)密文(即 ∣ x ∣ ≤ τ ,   ∥ r ∥ ∞ ≤ ρ |x| \le \tau,\, \|\bf r\|_\infty \le \rho xτ,rρ,这种密文可以正确解密)

另外,BDOZ 还需要两个 ZKPP:

  1. Π P o P K \Pi_{PoPK} ΠPoPK:零知识的明文的知识证明;证明给定密文,加密方确实拥有合适的明文和随机性。
  2. Π P o C M \Pi_{PoCM} ΠPoCM:零知识的密文乘法的知识证明;证明给定密文,确实是两个密文的对应明文乘积(加上一个小随机数)的密文。

预处理阶段简略描述如下:

  1. 构造 Π s h a r e \Pi_{share} Πshare

    1. 每个 P i P_i Pi选择 x i x_i xi,广播 E i ( x i ) E_i(x_i) Ei(xi)
    2. 利用 Π P o P K \Pi_{PoPK} ΠPoPK验证,然后获得随机数 x = ∑ i x i x=\sum_i x_i x=ixi的 shares < x > <x> <x>
  2. 构造 Π 2 − m u l t \Pi_{2-mult} Π2mult

    1. 诚实的两方 P i , P j P_i,P_j Pi,Pj,都持有 E i ( x ) , E j ( y ) E_i(x),E_j(y) Ei(x),Ej(y)
    2. P i P_i Pi计算并发送 C = x ⋅ E j ( y ) + E j ( r ) C = x \cdot E_j(y) + E_j(r) C=xEj(y)+Ej(r),其中 r r r是小随机数。
    3. 利用 Π P o M C \Pi_{PoMC} ΠPoMC验证, P j P_j Pj解密 C C C得到 z j z_j zj P i P_i Pi设置 z i = r z_i=r zi=r,它们满足 z i + z j = x y z_i+z_j=xy zi+zj=xy
  3. 构造 Π n − m u l t \Pi_{n-mult} Πnmult

    1. 利用 Π s h a r e \Pi_{share} Πshare生成 < a > ,   < b > <a>,\, <b> <a>,<b>,各方 P i P_i Pi设置初值 c i = a i b i c_i=a_i b_i ci=aibi
    2. 每一对 P i , P j P_i,P_j Pi,Pj分别执行 π 2 − m u l t \pi_{2-mult} π2mult,输入 E i ( a i ) , E j ( b j ) E_i(a_i),E_j(b_j) Ei(ai),Ej(bj),输出 z i , z j z_i,z_j zi,zj,叠加到 c i = c i + z i , c j = c j + z j c_i=c_i+z_i,c_j=c_j+z_j ci=ci+zi,cj=cj+zj,因为 c = ( a 1 + ⋯ + a n ) ( b 1 + ⋯ + b n ) c=(a_1+\cdots+a_n)(b_1+\cdots+b_n) c=(a1++an)(b1++bn)
    3. 各方执行 Π s h a r e \Pi_{share} Πshare,将 c i c_i ci作为输入加密并广播验证,得到 < c > <c> <c>
  4. 构造 Π a d d − m a c s \Pi_{add-macs} Πaddmacs

    1. 初始化步骤:每一对 P i , P j P_i,P_j Pi,Pj,让 P i P_i Pi随机选择 α j i \alpha_j^i αji,发送 E i ( α j i ) E_i(\alpha_j^i) Ei(αji) P j P_j Pj,利用 Π P o P K \Pi_{PoPK} ΠPoPK验证。
    2. 追加 MAC 步骤:
      1. 输入 < a > <a> <a>,各方持有的 a i a_i ai作为 [ a ] [a] [a]的一部分
      2. 每一对 P i , P j P_i,P_j Pi,Pj执行 Π 2 − m u l t \Pi_{2-mult} Π2mult,输入 E i ( α j i ) E_i(\alpha_j^i) Ei(αji) α j ( a j ) \alpha_j(a_j) αj(aj),输出 z i , z j z_i,z_j zi,zj满足 z i + z j = α j i a j z_i+z_j=\alpha_j^ia_j zi+zj=αjiaj
      3. P i P_i Pi设置 β a j i = − z i \beta_{a_j}^i=-z_i βaji=zi,存储 ( α j i ,   β a j i ) (\alpha_j^i,\, \beta_{a_j}^i) (αji,βaji)作为 MAC 密钥
      4. P j P_j Pj设置 m i ( a j ) = z j m_i(a_j)=z_j mi(aj)=zj,存储作为 [ a ] [a] [a]的一部分
  5. 构造 Π t r i p \Pi_{trip} Πtrip

    1. Initialize 步骤:执行半同态方案的 KeyGen 算法,执行 Π a d d − m a c s \Pi_{add-macs} Πaddmacs的初始化步骤

    2. Triples 步骤:

      1. 执行 4 4 4 Π s h a r e \Pi_{share} Πshare,获得 < a > , < b > , < f > , < g > <a>,<b>,<f>,<g> <a>,<b>,<f>,<g>

      2. 执行 2 2 2 Π n − m u l t \Pi_{n-mult} Πnmult,获得 < c > , < h > <c>,<h> <c>,<h>,其中 c = a b , h = f g c=ab,h=fg c=ab,h=fg

      3. 多次执行 Π a d d − m a c s \Pi_{add-macs} Πaddmacs,获得 [ a ] , [ b ] , [ c ] , [ f ] , [ g ] , [ h ] [a],[b],[c],[f],[g],[h] [a],[b],[c],[f],[g],[h]

      4. 牺牲(sacrificing)一个三元组,检验另一个三元组的正确性:各方掷硬币得到 e e e,计算并揭露 e [ a ] − f e[a]-f e[a]f [ b ] − [ g ] [b]-[g] [b][g],记为 ϵ , δ \epsilon,\delta ϵ,δ,然后计算
        e [ c ] − [ h ] − δ [ f ] − ϵ [ g ] − ϵ δ e[c]-[h]-\delta[f]-\epsilon[g]-\epsilon \delta e[c][h]δ[f]ϵ[g]ϵδ

        披露它,检查它是否为 0 0 0(对于无错的 c = a b , h = f g c=ab,h=fg c=ab,h=fg的 shares,对于任意的 e e e它恒为零)

      5. 各方输出 [ a ] , [ b ] , [ c ] [a],[b],[c] [a],[b],[c]作为 Beaver Triple

    3. Singles 步骤:

      1. 各方执行 Π s h a r e \Pi_{share} Πshare,获得 < a > <a> <a>
      2. 接着,各方执行 Π a d d − m a c s \Pi_{add-macs} Πaddmacs,获得 [ a ] [a] [a]

详细步骤,诸位可以看 BDOZ 论文:先定义 Ideal Functionality,然后实现 Real Protocol

Compute Phase

电路的计算步骤与 BGW 类似,如图:

在这里插入图片描述

SPDZ 协议

MACs

因为 BDOZ 中的每个值 x x x,都有 n n n个 shares,每个 share 都需要 n n n个MAC,因此复杂度为 O ( n 2 ) O(n^2) O(n2)

2012年,SPDZ 协议中改进 information-theoretic one-time MAC 为了 information-theoretic zero-time MAC。使用单个全局密钥single global key),形如:
M A C α ( x ) : = α x ,   α ← R F MAC_{\alpha}(x):=\alpha x,\, \alpha \leftarrow_R \mathbb F MACα(x):=αx,αRF

其中域的大小满足 ∣ F ∣ ≥ 2 κ |\mathbb F| \ge 2^\kappa F2κ κ \kappa κ是安全参数。

易知,这是 “zero-time” MAC,一旦敌手获取到消息 x x x的MAC值 t t t,那么就可以计算 α = t ⋅ x − 1 \alpha=t \cdot x^{-1} α=tx1

如果先 check 某一个消息 x x x的MAC值,那么获知了 ( x , t ) (x,t) (x,t)从而计算出 α \alpha α,那么之后敌手就可以任意伪造MAC值了。所以,应当遵循 all-or-none law(博主的理解),要么都不 check,要么 check 全部的消息。可以使用承诺方案。

Shares

我们用全局密钥 α \alpha α,对若干消息(或者说 shares)计算 1 1 1个(而非 n n n个)MAC。然后当这些 shares 做运算时,MAC也要伴随着做运算。为了保护 α \alpha α不能直接发布消息对应的MAC,因此需要将它分享出去,让各参与方 P i P_i Pi都持有它的 shares,消息 a a a 的 MAC(连同 [ a ] [a] [a])形式如下:
< a > : = ( δ ,   ( a 1 , a 2 , ⋯   , a n ) ,   ( γ ( a ) 1 , γ ( a ) 2 , ⋯   , γ ( a ) n ) ) <a> := (\delta,\, (a_1,a_2,\cdots,a_n),\, (\gamma(a)_1,\gamma(a)_2,\cdots,\gamma(a)_n)) <a>:=(δ,(a1,a2,,an),(γ(a)1,γ(a)2,,γ(a)n))

其中 δ \delta δ是公开值, a = ∑ i a i a=\sum_i a_i a=iai,它的 MAC 值为 γ ( a ) = α ( a + δ ) \gamma(a)=\alpha (a+\delta) γ(a)=α(a+δ) γ ( a ) = ∑ i γ ( a ) i \gamma(a) = \sum_i \gamma(a)_i γ(a)=iγ(a)i。参与者 P i P_i Pi持有: δ , a i , γ ( a ) i \delta,a_i,\gamma(a)_i δ,ai,γ(a)i

与 SPDZ 不同,因为使用了 SS,MAC密钥在运算过程中不变。MAC 的运算为:

  1. Addition,对于 a = ∑ i a i ,   a ′ = ∑ i a i ′ a=\sum_i a_i,\, a'=\sum_i a_i' a=iai,a=iai,令 ( a + a ′ ) i = a i + a i ′ (a+a')_i = a_i+a_i' (a+a)i=ai+ai,那么
    < a + a ′ > = < a > + < a ′ > : = ( δ + δ ′ ,   ( a 1 + a 1 ′ , ⋯   , a n + a n ′ ) ,   ( γ ( a ) 1 + γ ( a ′ ) 1 , ⋯   , γ ( a ) n + γ ( a ′ ) n ) ) \begin{aligned} <a+a'> &= <a> + <a'>\\ &:= (\delta+\delta',\, (a_1+a_1',\cdots,a_n+a_n'),\, (\gamma(a)_1+\gamma(a')_1,\cdots,\gamma(a)_n+\gamma(a')_n)) \end{aligned} <a+a>=<a>+<a>:=(δ+δ,(a1+a1,,an+an),(γ(a)1+γ(a)1,,γ(a)n+γ(a)n))

    由于 α ( a + a ′ ) = α a + α a ′ \alpha(a+a')=\alpha a+\alpha a' α(a+a)=αa+αa,每一对 shares 的MAC相加,同时修改对应的 δ \delta δ

  2. Multiplication by constants,对于 a = ∑ i a i a=\sum_i a_i a=iai,令 ( c ⋅ a ) i = c ⋅ a i (c \cdot a)_i = c \cdot a_i (ca)i=cai,那么
    < c ⋅ a > = c ⋅ < a > : = ( c ⋅ δ ,   ( c ⋅ a 1 , ⋯   , c ⋅ a n ) ,   ( c ⋅ γ ( a ) 1 , ⋯   , c ⋅ γ ( a ) n ) ) \begin{aligned} <c \cdot a> &= c \cdot <a>\\ &:= (c \cdot \delta,\, (c \cdot a_1,\cdots,c \cdot a_n),\, (c \cdot \gamma(a)_1,\cdots,c \cdot \gamma(a)_n)) \end{aligned} <ca>=c<a>:=(cδ,(ca1,,can),(cγ(a)1,,cγ(a)n))

    由于 α ( c a ) = c ( α a ) \alpha (ca) = c(\alpha a) α(ca)=c(αa),每一个 shares 的MAC乘以常数,同时修改对应的 δ \delta δ

  3. Addition of constants,对于 a = ∑ i a i a=\sum_i a_i a=iai,令 ( c + a ) 1 = c + a 1 ,   ( c + a ) i = a i , i = 2 , ⋯   , n (c + a)_1 = c + a_1,\, (c+a)_i=a_i,i=2,\cdots,n (c+a)1=c+a1,(c+a)i=ai,i=2,,n,那么
    < c + a > = c + < a > : = ( δ − c ,   ( c + a 1 , a 2 , ⋯   , a n ) ,   ( γ ( a ) 1 , γ ( a ) 2 , ⋯   , γ ( a ) n ) ) \begin{aligned} <c + a> &= c + <a>\\ &:= (\delta-c,\, (c + a_1,a_2,\cdots,a_n),\, (\gamma(a)_1,\gamma(a)_2,\cdots,\gamma(a)_n)) \end{aligned} <c+a>=c+<a>:=(δc,(c+a1,a2,,an),(γ(a)1,γ(a)2,,γ(a)n))

    由于 γ ( a ) = α ( a + δ ) \gamma(a)=\alpha(a+\delta) γ(a)=α(a+δ),因此只需保持加和 a + δ a+\delta a+δ不变,那么 γ ( a ) \gamma(a) γ(a)也就不用变了

当 shares 做运算时,MAC也伴随着做运算,保持MAC校验等式。SPDZ 将 check 延迟到 MPC 最后的输出阶段,先让各方发布秘密的 shares 的承诺,然后再重构 MAC 以校验秘密的正确性。

在预处理阶段,SPDZ 使用 Somewhat Homomorphic Encryption(简写做 SHE)来生成 Beaver Triple。

Preprocessing Phase

在预处理阶段,SPDZ 使用 SHE 来生成 Beaver Triple,且 SHE 的私钥被各方共享 [ s k ] [sk] [sk],无人知晓完整私钥。解密时,采用分布式解密算法

MAC 的全局密钥 α \alpha α 在这个阶段被生成和共享,它的 Shares 形如:
[ α ] = ( ( α 1 , ⋯   , α n ) ,   { β i , γ ( α ) 1 i , ⋯   , γ ( α ) n i } i = 1 n ) [\alpha] = ((\alpha_1,\cdots,\alpha_n),\, \{\beta_i,\gamma(\alpha)_1^i,\cdots,\gamma(\alpha)_n^i\}_{i=1}^n) [α]=((α1,,αn),{βi,γ(α)1i,,γ(α)ni}i=1n)

其中 α = ∑ i α i \alpha = \sum_i \alpha_i α=iαi,将 γ ( α ) j : = α β j = ∑ i γ ( α ) j i \gamma(\alpha)_j := \alpha \beta_j = \sum_i \gamma(\alpha)_j^i γ(α)j:=αβj=iγ(α)ji 视为 M A C β j ( α ) MAC_{\beta_j}(\alpha) MACβj(α)。每个参与者 P i P_i Pi持有: α i , β i , γ ( α ) 1 i , ⋯   , γ ( α ) n i \alpha_i,\beta_i,\gamma(\alpha)_1^i,\cdots,\gamma(\alpha)_n^i αi,βi,γ(α)1i,,γ(α)ni,即自己的MAC密钥 β i \beta_i βi,以及 α \alpha α M A C β j ( α ) , j = 1 , ⋯   , n MAC_{\beta_j}(\alpha),j=1,\cdots,n MACβj(α),j=1,,n的 shares

另外,在预处理阶段还要生成一些随机数 r r r,以两种 shares 的形式 ( < r > , [ r ] ) (<r>, [r]) (<r>,[r])-pairs,共享给各个参与者。在后面的协议描述中,我看到尖括号的 < r > <r> <r> 被用于电路的计算,而方括号的 [ r ] [r] [r] 则只用于 Open 给某个参与者,且在 [ r ] [r] [r] 上并没有定义类似 < r > <r> <r> 的加性运算。所以说,形如 [ r ] [r] [r] 的其实是一种公共生成的未知随机串吗?(论文里解释两种 shares 类型的异同了吗?我虽然没有每个字每个字地细看,但真的没看到啊!)。

类似 BDOZ,SPDZ 也需要 1 1 1个 ZKPP: Π P o P K \Pi_{PoPK} ΠPoPK,零知识的明文的知识证明;证明给定密文,加密方确实拥有合适的明文和随机性。

预处理阶段简略描述如下:

  1. 构造 Π r e s h a r e \Pi_{reshare} Πreshare

    1. 输入公开的明文向量 m \bf m m的密文 e m : = E n c p k ( m ) e_{m} := Enc_{pk}(\textbf m ) em:=Encpk(m),以及一个控制符 e n c enc enc
    2. 各方采样随机向量 f i \bf f_i fi,定义 f = ∑ i f i \textbf f = \sum_i \textbf f_i f=ifi,广播密文 E n c p k ( f i ) Enc_{pk}(\textbf f_i) Encpk(fi)
    3. 执行 Π P o P K \Pi_{PoPK} ΠPoPK,验证每个 e f i e_{f_i} efi,然后同态加法 e f = ∑ i e f i e_f = \sum_i e_{f_i} ef=iefi,再计算 e m + f = e m + e f e_{m+f}=e_m+e_f em+f=em+ef
    4. 分布式解密 e m + f e_{m+f} em+f,得到 m+f \textbf{m+f} m+f,令 P 1 P_1 P1设置 m 1 = m + f − f 1 \bf m_1 = m+f-f_1 m1=m+ff1,其他的 P i P_i Pi设置 m i = − f i \bf m_i= -f_i mi=fi(易知, m = ∑ i m i \bf m = \sum_i m_i m=imi
    5. 如果 e n c = NoNewCiphertext enc=\text{NoNewCiphertext} enc=NoNewCiphertext,那么只输出 shares m i \bf m_i mi
    6. 如果 e n c = NewCiphertext enc=\text{NewCiphertext} enc=NewCiphertext,那么额外输出 e m ′ : = E n c ( m+f ) − ∑ i e f i e_m' := Enc(\textbf{m+f})-\sum_i e_{f_i} em:=Enc(m+f)iefi
  2. 构造 Π b r a c k e t \Pi_{bracket} Πbracket

    1. 各方拥有 shares v 1 , ⋯   , v n \textbf v_1,\cdots,\textbf v_n v1,,vn,以及公开的密文 e v e_\textbf v ev,这里 v = ∑ i v i \bf v=\sum_i v_i v=ivi
    2. 各方都对每个 i = 1 , ⋯   , n i=1,\cdots,n i=1,,n设置 e γ i = e β i ⋅ e v e_{\gamma_i} = e_{\beta_i} \cdot e_v eγi=eβiev,其中的 β i \beta_i βi P i P_i Pi的私人MAC密钥, e β i e_{\beta_i} eβi在初始化阶段被公开
    3. 执行 Π r e s h a r e \Pi_{reshare} Πreshare,输入 e γ i , NoNewCiphertext e_{\gamma_i},\text{NoNewCiphertext} eγi,NoNewCiphertext,输出MAC值 β j v \beta_j \bf v βjv的 shares γ i 1 , ⋯   , γ i n \gamma_i^1,\cdots,\gamma_i^n γi1,,γin
    4. 最终,输出 bracket shares [ v ] = ( ( v 1 , ⋯   , v n ) ,   { β i , γ 1 i , ⋯   , γ n i } i = 1 n ) [\textbf v] = ((\textbf v_1,\cdots,\textbf v_n),\, \{\beta_i,\gamma_1^i,\cdots,\gamma_n^i\}_{i=1}^n) [v]=((v1,,vn),{βi,γ1i,,γni}i=1n)
  3. 构造 Π a n g l e \Pi_{angle} Πangle

    1. 各方拥有 shares v 1 , ⋯   , v n \textbf v_1,\cdots,\textbf v_n v1,,vn,以及公开的密文 e v e_\textbf v ev,这里 v = ∑ i v i \textbf v=\sum_i \textbf v_i v=ivi
    2. 各方设置 e α v = e v ⋅ e α e_{\alpha v} = e_v \cdot e_\alpha eαv=eveα,其中 α \alpha α是全局密钥,对应的密文在初始化阶段被公开(但没人知道 α \alpha α
    3. 执行 Π r e s h a r e \Pi_{reshare} Πreshare,输入 e α v , NoNewCiphertext e_{\alpha v},\text{NoNewCiphertext} eαv,NoNewCiphertext,输出MAC值 α v \alpha \bf v αv的 shares γ i 1 , ⋯   , γ i n \gamma_i^1,\cdots,\gamma_i^n γi1,,γin
    4. 最终,输出 angle shares < v > = ( 0 , ( v 1 , ⋯   , v n ) ,   ( γ 1 i , ⋯   , γ n i ) ) <\textbf v> = (0,(\textbf v_1,\cdots,\textbf v_n),\, (\gamma_1^i,\cdots,\gamma_n^i)) <v>=(0,(v1,,vn),(γ1i,,γni))
  4. 构造 Π p r e p \Pi_{prep} Πprep

    1. Initialize 步骤:

      1. 执行 KeyGen 算法,获得公钥 p k pk pk
      2. 各方生成私人密钥 β i \beta_i βi,以及 α i \alpha_i αi,全局密钥为 α = ∑ i α i \alpha=\sum_i \alpha_i α=iαi
      3. d i a g ( x ) = [ x , ⋯   , x ] diag(x)=[x,\cdots,x] diag(x)=[x,,x],各方计算并广播 e α i = E n c ( d i a g ( α i ) ) e_{\alpha_i}=Enc(diag(\alpha_i)) eαi=Enc(diag(αi)) α β i = E n c ( d i a g ( β i ) ) \alpha_{\beta_i}=Enc(diag(\beta_i)) αβi=Enc(diag(βi))
      4. 执行 Π P o P K \Pi_{PoPK} ΠPoPK验证上述密文,计算 e α = ∑ i e α i e_\alpha=\sum_i e_{\alpha_i} eα=ieαi,存储它
      5. 执行 Π b r a c k e t \Pi_{bracket} Πbracket,输入 d i a g ( α 1 ) , ⋯   , d i a g ( α n ) , e α diag(\alpha_1),\cdots,diag(\alpha_n),e_\alpha diag(α1),,diag(αn),eα,获得 shares [ d i a g ( α ) ] [diag(\alpha)] [diag(α)],存储它
    2. Pair 步骤:

      1. 各方生成随机向量 r i \textbf r_i ri,计算并广播 e r i e_{r_i} eri
      2. 执行 Π P o P K \Pi_{PoPK} ΠPoPK验证每个密文,设置 e r = ∑ i e r i e_r = \sum_i e_{r_i} er=ieri
      3. 输入 r 1 , ⋯   , r n , e r r_1,\cdots,r_n,e_r r1,,rn,er,执行 Π b r a c k e t \Pi_{bracket} Πbracket获得 [ r ] [r] [r],执行 Π a n g l e \Pi_{angle} Πangle获得 < r > <r> <r>
      4. 最终,输出一对 shares [ r ] , < r > [r],<r> [r],<r>
    3. Triple 步骤:

      1. 各方生成随机向量 a i , b i \bf a_i,b_i ai,bi,计算并广播 e a i , e b i e_{a_i},e_{b_i} eai,ebi
      2. 执行 Π P o P K \Pi_{PoPK} ΠPoPK验证每个密文,设置 e a = ∑ i e a i ,   e b = ∑ i e b i e_a = \sum_i e_{a_i},\, e_b = \sum_i e_{b_i} ea=ieai,eb=iebi,计算 e c = e a ⋅ e b e_c = e_a \cdot e_b ec=eaeb
      3. 执行 Π a n g l e \Pi_{angle} Πangle,获得 shares < a > , < b > <\textbf a>,<\textbf b> <a>,<b>
      4. 执行 Π r e s h a r e \Pi_{reshare} Πreshare,输入 e c , NewCiphertext e_c,\text{NewCiphertext} ec,NewCiphertext,输出 c 1 , ⋯   , c n , e c ′ \textbf c_1,\cdots,\text c_n,e_c' c1,,cn,ec
      5. 执行 Π a n g l e \Pi_{angle} Πangle,获得 shares < c > <c> <c>
      6. 最终,输出 < a > , < b > , < c > <a>,<b>,<c> <a>,<b>,<c>

详细步骤,诸位可以看 SPDZ 论文:先定义 Ideal Functionality,然后实现 Real Protocol

Compute Phase

BDOZ 和 SPDZ 中,将预处理阶段称为“离线”,将计算阶段称为“在线”

SPDZ 的在线阶段如下:

在这里插入图片描述

注意,披露最终计算结果之前,需要对之前披露的所有的 shares 检验 MAC:先承诺所有的需要 check 的 shares 和 MAC 值,然后才披露全局密钥 α \alpha α,再 check 之前披露的 shares 的正确性,最终披露结果 y y y,并要 check 它是否满足MAC关系。

在计算过程中 Open 了一些数值 a 1 , ⋯   , a T a_1,\cdots,a_T a1,,aT,将它作为一个多项式 a ( x ) = ∑ j a j x j a(x) = \sum_j a_jx^j a(x)=jajxj。同时,这些数值在 P i , i = 1 , ⋯   , n P_i, i=1,\cdots,n Pi,i=1,,n 那里的 MAC 碎片为 γ ( a j ) i \gamma(a_j)_i γ(aj)i,把它们写成矩阵形式
[ γ ( a 1 ) 1 γ ( a 2 ) 1 ⋯ γ ( a T ) 1 γ ( a 1 ) 2 γ ( a 2 ) 2 ⋯ γ ( a T ) 2 ⋮ ⋯ γ ( a 1 ) n γ ( a 2 ) n ⋯ γ ( a T ) n ] \begin{bmatrix} \gamma(a_1)_1 & \gamma(a_2)_1 & \cdots & \gamma(a_T)_1\\ \gamma(a_1)_2 & \gamma(a_2)_2 & \cdots & \gamma(a_T)_2\\ \vdots & \cdots\\ \gamma(a_1)_n & \gamma(a_2)_n & \cdots & \gamma(a_T)_n\\ \end{bmatrix} γ(a1)1γ(a1)2γ(a1)nγ(a2)1γ(a2)2γ(a2)nγ(aT)1γ(aT)2γ(aT)n

  • 每一列的加和 γ ( a i ) = ∑ i γ ( a j ) i \gamma(a_i) = \sum_i\gamma(a_j)_i γ(ai)=iγ(aj)i,是所有参与者对 a j a_j aj 的MAC 值
  • 每一行的多项式 γ i ( x ) = ∑ j γ ( a j ) i x j \gamma_i(x) = \sum_j\gamma(a_j)_ix^j γi(x)=jγ(aj)ixj,是多项式 a ( x ) a(x) a(x) 对应的 MAC 值

接着,我们对于随机点 e e e 求多项式 a ( x ) a(x) a(x) 的值 a : = a ( e ) a:=a(e) a:=a(e) 以及它对应的 MAC 碎片 γ i : = γ i ( e ) \gamma_i := \gamma_i(e) γi:=γi(e),完整的 MAC 值为 γ = ∑ i γ i \gamma = \sum_i \gamma_i γ=iγi。如果某个 a j a_j aj 的 MAC 值不正确,那么根据 Schwartz-Zippel lemma,将以压倒性概率在随机点位置的函数值 a , γ a,\gamma a,γ 上检测出两个多项式不相等(论文中没解释,博主自己的理解)。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值