参考文献:
Beaver Triple 是为了加速 BGW 而设计的,但它可以任意的满足如下性质的抽象共享机制 [ v ] [v] [v] 上 work:
只要 SS 的 Opening, Privacy 性质抵御 malicious adversaries,那么 Beaver Triple Paradigm 就是 malicious-secure.
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 ∣F∣≥2κ, κ \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} α=(t−t′)⋅(x−x′)−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′) 的可行性。
我们定义,MAC 密钥的运算(博主自己定义的,为了方便表示 MAC 运算),
那么 MAC 的运算为:
对于值 a ∈ F a \in \mathbb F a∈F, 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,Kaj′i是一致的。这是保证计算 [ a + a ′ ] [a+a'] [a+a′] 的可行性。
这儿的 [ a ] [a] [a] 是满足 Beaver Triple 的要求的 SS,其运算为:
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+Kaj′i,mj(ai)+mj(ai′)}j=1n}i=1n]
每一对 shares 的MAC相加,对应的要修改密钥。
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 (c⋅a)i=c⋅ai,那么
[ 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} [c⋅a]=c⋅[a]:=[{c⋅ai,{c⋅Kaji,c⋅mj(ai)}j=1n}i=1n]
每一个 shares 的MAC乘以常数,对应的要修改密钥。
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之间做运算。
在预处理阶段,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 x∈F,它的另一种 shares 写作:
< x > = { E 1 ( x 1 ) , ⋯ , E n ( x n ) }
其中 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:
预处理阶段简略描述如下:
构造 Π s h a r e \Pi_{share} Πshare:
构造 Π 2 − m u l t \Pi_{2-mult} Π2−mult:
构造 Π n − m u l t \Pi_{n-mult} Πn−mult:
构造 Π a d d − m a c s \Pi_{add-macs} Πadd−macs:
构造 Π t r i p \Pi_{trip} Πtrip:
Initialize 步骤:执行半同态方案的 KeyGen 算法,执行 Π a d d − m a c s \Pi_{add-macs} Πadd−macs的初始化步骤
Triples 步骤:
执行 4 4 4次 Π s h a r e \Pi_{share} Πshare,获得 < a > , < b > , < f > , < g > ,,
执行 2 2 2次 Π n − m u l t \Pi_{n-mult} Πn−mult,获得 < c > , < h >
多次执行 Π a d d − m a c s \Pi_{add-macs} Πadd−macs,获得 [ a ] , [ b ] , [ c ] , [ f ] , [ g ] , [ h ] [a],[b],[c],[f],[g],[h] [a],[b],[c],[f],[g],[h]
牺牲(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它恒为零)
各方输出 [ a ] , [ b ] , [ c ] [a],[b],[c] [a],[b],[c]作为 Beaver Triple
Singles 步骤:
详细步骤,诸位可以看 BDOZ 论文:先定义 Ideal Functionality,然后实现 Real Protocol
电路的计算步骤与 BGW 类似,如图:
因为 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 ∣F∣≥2κ, κ \kappa κ是安全参数。
易知,这是 “zero-time” MAC,一旦敌手获取到消息 x x x的MAC值 t t t,那么就可以计算 α = t ⋅ x − 1 \alpha=t \cdot x^{-1} α=t⋅x−1
如果先 check 某一个消息 x x x的MAC值,那么获知了 ( x , t ) (x,t) (x,t)从而计算出 α \alpha α,那么之后敌手就可以任意伪造MAC值了。所以,应当遵循 all-or-none law(博主的理解),要么都不 check,要么 check 全部的消息。可以使用承诺方案。
我们用全局密钥 α \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 ) ) := (\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 的运算为:
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} &= + \\ &:= (\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 δ
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 (c⋅a)i=c⋅ai,那么
< c ⋅ a > = c ⋅ < a > : = ( c ⋅ δ , ( c ⋅ a 1 , ⋯ , c ⋅ a n ) , ( c ⋅ γ ( a ) 1 , ⋯ , c ⋅ γ ( a ) n ) ) \begin{aligned}
由于 α ( c a ) = c ( α a ) \alpha (ca) = c(\alpha a) α(ca)=c(αa),每一个 shares 的MAC乘以常数,同时修改对应的 δ \delta δ
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}
由于 γ ( 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。
在预处理阶段,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 ] ) (
类似 BDOZ,SPDZ 也需要 1 1 1个 ZKPP: Π P o P K \Pi_{PoPK} ΠPoPK,零知识的明文的知识证明;证明给定密文,加密方确实拥有合适的明文和随机性。
预处理阶段简略描述如下:
构造 Π r e s h a r e \Pi_{reshare} Πreshare:
构造 Π b r a c k e t \Pi_{bracket} Πbracket:
构造 Π a n g l e \Pi_{angle} Πangle:
构造 Π p r e p \Pi_{prep} Πprep:
Initialize 步骤:
Pair 步骤:
Triple 步骤:
详细步骤,诸位可以看 SPDZ 论文:先定义 Ideal Functionality,然后实现 Real Protocol
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
接着,我们对于随机点 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,γ 上检测出两个多项式不相等(论文中没解释,博主自己的理解)。