秘密共享方案是可有效计算的是算法组 ( G , C ) (G,C) (G,C),定义为
正确性:对于所有可能的 S K SK SK,任意的 α ∈ S \alpha\in S α∈S,以及所有的大小为 t t t的 S K SK SK的子集,我们总是要求 C ( α 1 , ⋯ , α t ) = α C(\alpha_1,\cdots,\alpha_t) = \alpha C(α1,⋯,αt)=α
安全性:对于子集 S ⊆ [ s ] S \subseteq [s] S⊆[s],简记 S K [ S ] SK[S] SK[S]是由 S S S索引的共享秘密子集。我们说秘密共享方案 ( G , C ) (G,C) (G,C)是安全的,如果对于任意的 α , α ′ ∈ S \alpha,\alpha' \in S α,α′∈S以及任意的 t − 1 t-1 t−1大小的 S ⊆ [ s ] S \subseteq [s] S⊆[s], G ( s , t , α ) [ S ] G(s,t,\alpha)[S] G(s,t,α)[S]的分布与 G ( s , t , α ′ ) [ S ] G(s,t,\alpha')[S] G(s,t,α′)[S]的分布不可区分。
Shamir秘密共享方案是算法组 ( G s h , C s h ) (G_{sh},C_{sh}) (Gsh,Csh),定义为
G s h ( s , t , α ) G_{sh}(s,t,\alpha) Gsh(s,t,α):
f ( x ) : = α + ∑ i = 1 t − 1 a i ⋅ x i ∈ Z q [ x ] f(x):= \alpha + \sum_{i=1}^{t-1} a_i \cdot x^i \in Z_q[x] f(x):=α+i=1∑t−1ai⋅xi∈Zq[x]
C s h ( α 1 , ⋯ , α t ) C_{sh}(\alpha_1,\cdots,\alpha_t) Csh(α1,⋯,αt):
由于 deg f = t − 1 \deg f = t-1 degf=t−1,根据Lagrange Interpolation, t t t个点就可以唯一确定 f ( x ) f(x) f(x),
f ( x ) : = ∑ i = 1 t ( y i ∏ j = 1 , j ≠ i t ( x − x j ) ( x i − x j ) − 1 ) ∈ Z q [ x ] f(x) := \sum_{i=1}^t \left(y_i \prod_{j=1,j \neq i}^t (x-x_j)(x_i - x_j)^{-1}\right) \in Z_q[x] f(x):=i=1∑t⎝ ⎛yij=1,j=i∏t(x−xj)(xi−xj)−1⎠ ⎞∈Zq[x]
由于 α = g ( 0 ) \alpha = g(0) α=g(0),因此直接计算
λ i : = ∏ j = 1 , j ≠ i t − x j ( x i − x j ) − 1 α ← ∑ i = 1 t y i ⋅ λ i ∈ Z q \lambda_i := \prod_{j=1,j \neq i}^t -x_j(x_i - x_j)^{-1}\\ \alpha \leftarrow \sum_{i=1}^t y_i \cdot \lambda_i \in Z_q λi:=j=1,j=i∏t−xj(xi−xj)−1α←i=1∑tyi⋅λi∈Zq
这里的 λ i \lambda_i λi叫做Lagrange coefficients
输出秘密值 α \alpha α
容易看出,如果固定 x 1 , ⋯ , x s x_1,\cdots,x_s x1,⋯,xs,那么Shamir秘密共享拥有同态加法、同态标量乘法的性质。
安全性:Shamir秘密共享方案 ( G s h , C s h ) (G_{sh},C_{sh}) (Gsh,Csh)是安全的。易证,在 α , x 1 , ⋯ , x s \alpha,x_1,\cdots,x_s α,x1,⋯,xs固定的情况下, ( a 1 , ⋯ , a t − 1 ) (a_1,\cdots,a_{t-1}) (a1,⋯,at−1)与任意的大小 t − 1 t-1 t−1的子集 ( y 1 ′ , ⋯ , y t − 1 ′ ) (y_1',\cdots,y_{t-1}') (y1′,⋯,yt−1′)之间是双射(假设 g ′ ( x ) = α + x g ( x ) g'(x)=\alpha+xg(x) g′(x)=α+xg(x)与 h ′ ( x ) = α + x h ( x ) h'(x)=\alpha+xh(x) h′(x)=α+xh(x)在这 t − 1 t-1 t−1个位置的像相同,那么这导致 g ( x ) , h ( x ) g(x),h(x) g(x),h(x)在这些位置的像相同,但它们的度数至多为 t − 2 t-2 t−2,这与 g ′ ≠ h ′ g' \neq h' g′=h′矛盾),从而均匀选取 ( a 1 , ⋯ , a t − 1 ) (a_1,\cdots,a_{t-1}) (a1,⋯,at−1)导致 ( y 1 ′ , ⋯ , y t − 1 ′ ) ∈ Z q t − 1 (y_1',\cdots,y_{t-1}') \in Z_q^{t-1} (y1′,⋯,yt−1′)∈Zqt−1的分布也是均匀随机的。
公钥门限解密方案是可有效计算的算法组 Σ t h = ( G , E , D , C ) \Sigma_{th} = (G,E,D,C) Σth=(G,E,D,C),定义为
正确性:对于所有可能的 ( p k , S K ) (pk,SK) (pk,SK),任意的 m ∈ M m \in M m∈M,以及所有的大小为 t t t的 S S S,我们总是要求 C ( c , c 1 , ⋯ , c t ) = m C(c,\, c_1,\cdots,c_t) = m C(c,c1,⋯,ct)=m
安全性:敌手 A A A选取大小为 t − 1 t-1 t−1的子集 S ⊆ [ s ] S \subseteq [s] S⊆[s],将它发送给挑战者。挑战者执行 ( p k , s k 1 , ⋯ , s k s ) ← R G ( s , t ) (pk,sk_1,\cdots,sk_s) \leftarrow_R G(s,t) (pk,sk1,⋯,sks)←RG(s,t),发送 p k pk pk和 { s k i } i ∈ S \{sk_i\}_{i \in S} {ski}i∈S给敌手。然后敌手可以做一系列询问,挑战者固定随机值 b ∈ { 0 , 1 } b \in \{0,1\} b∈{0,1},
最后敌手输出 b ∗ ∈ { 0 , 1 } b^* \in \{0,1\} b∗∈{0,1},令 W b W_b Wb代表挑战者选择 b b b时敌手输出为 1 1 1的事件,我们定义敌手的优势为
t h S S a d v [ A , Σ t h ] : = ∣ P r [ W 0 ] − P r [ W 1 ] ∣ thSSadv[A,\Sigma_{th}] := |Pr[W_0] - Pr[W_1]| thSSadv[A,Σth]:=∣Pr[W0]−Pr[W1]∣
我们说公钥门限解密方案 Σ t h \Sigma_{th} Σth是语义安全的(semantically secure),如果对于任意的PPT敌手,其优势 t h S S a d v [ A , Σ t h ] thSSadv[A,\Sigma_{th}] thSSadv[A,Σth]的值是可忽略的。
令 G G G是素数 q q q阶的循环群, g ∈ G g\in G g∈G是生成元。令 Σ = ( E s , D s ) \Sigma = (E_s,D_s) Σ=(Es,Ds)是定义在 K × M × C K \times M \times C K×M×C上的对称加密方案。令 H : G 2 → K H: G^2 \rightarrow K H:G2→K是Hash函数。那么ElGamal加密方案是算法组 Σ E G = ( G e n , E n c , D e c ) \Sigma_{EG} = (Gen,Enc,Dec) ΣEG=(Gen,Enc,Dec),定义如下:
上述描述是对于初始版本的ElGamal方案的变体。在初始版本中,将 k ← H ( v , w ) k \leftarrow H(v,w) k←H(v,w)和 c ← E s ( k , m ) c \leftarrow E_s(k,m) c←Es(k,m)简化为 c ← m ⋅ w c \leftarrow m \cdot w c←m⋅w,将 k ← H ( v , w ) k \leftarrow H(v,w) k←H(v,w)和 m ← D s ( k , c ) m \leftarrow D_s(k,c) m←Ds(k,c)简化为 m ← c ⋅ w − 1 m \leftarrow c \cdot w^{-1} m←c⋅w−1,不需要Hash函数来扩展密钥。
ElGamal门限解密方案是算法组 Σ t h E G = ( G , E , D , C ) \Sigma_{thEG} = (G,E,D,C) ΣthEG=(G,E,D,C),定义为
G ( s , t ) G(s,t) G(s,t):生成 ( α , u ) ← G e n ( ) (\alpha,u) \leftarrow Gen() (α,u)←Gen(),计算 ( α 1 , ⋯ , α s ) ← R G s h ( s , t , α ) (\alpha_1,\cdots,\alpha_s) \leftarrow_R G_{sh}(s,t,\alpha) (α1,⋯,αs)←RGsh(s,t,α),输出 p k : = u , s k i : = α i pk:=u,\, sk_i:=\alpha_i pk:=u,ski:=αi
E ( p k , m ) E(pk,m) E(pk,m):简单调用 ( v , c ) ← E n c ( p k , m ) (v,c) \leftarrow Enc(pk,m) (v,c)←Enc(pk,m),输出密文 ( v , c ) (v,c) (v,c)
D ( s k i , ( v , c ) ) D(sk_i,(v,c)) D(ski,(v,c)):令 s k i = ( x i , y i ) sk_i = (x_i,y_i) ski=(xi,yi),计算 w i ← v y i w_i \leftarrow v^{y_i} wi←vyi,输出部分解密值 c i : = ( x i , w i ) ∈ Z q × G c_i := (x_i,w_i) \in Z_q \times G ci:=(xi,wi)∈Zq×G
C ( ( v , c ) , c 1 , ⋯ , c t ) C((v,c),\, c_1,\cdots,c_t) C((v,c),c1,⋯,ct):令 c i = ( x i , w i ) c_i = (x_i,w_i) ci=(xi,wi),先利用 x 1 , ⋯ , x t x_1,\cdots,x_t x1,⋯,xt计算出 λ 1 , ⋯ , λ t \lambda_1,\cdots,\lambda_t λ1,⋯,λt,然后计算
w ← ∏ i = 1 t w i λ i ∈ G w \leftarrow \prod_{i=1}^t w_i^{\lambda_i} \in G w←i=1∏twiλi∈G
再计算会话密钥 k ← H ( v , w ) k \leftarrow H(v,w) k←H(v,w),最后解密 m ← D s ( k , c ) m \leftarrow D_s(k,c) m←Ds(k,c),输出明文 m m m
安全性:如果 Σ E G \Sigma_{EG} ΣEG是语义安全的,那么 Σ t h E G \Sigma_{thEG} ΣthEG是门限解密语义安全的(threshold decryption semantically secure)。