Secret sharing scheme
定义
秘密共享方案是可有效计算的是算法组 ( G , C ) (G,C) (G,C),定义为
- G G G:概率算法,形如 ( α 1 , ⋯ , α s ) ← R G ( s , t , α ) (\alpha_1,\cdots,\alpha_s) \leftarrow_R G(s,t,\alpha) (α1,⋯,αs)←RG(s,t,α),其中 0 < t ≤ s 0<t \le s 0<t≤s, α ∈ S \alpha \in S α∈S是秘密,输出的 S K : = { α 1 , ⋯ , α s } SK := \{\alpha_1,\cdots,\alpha_s\} SK:={α1,⋯,αs}是t-out-of-s sharing of α \alpha α。
- C C C:确定性算法,形如 α ← C ( α 1 , ⋯ , α t ) \alpha \leftarrow C(\alpha_1,\cdots,\alpha_t) α←C(α1,⋯,αt),这里的输入是任意的 t t t个秘密共享值。
正确性:对于所有可能的 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’s secret sharing scheme
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,α):
- 选择 t − 1 t-1 t−1个随机数 a 1 , ⋯ , a t − 1 ← R Z q a_1,\cdots,a_{t-1} \leftarrow_R Z_q a1,⋯,at−1←RZq,定义多项式
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]
- 选择任意的 s s s个非零点 x 1 , ⋯ , x s ∈ Z q x_1,\cdots,x_s \in Z_q x1,⋯,xs∈Zq,计算 y i ← f ( x i ) ∈ Z q y_i \leftarrow f(x_i) \in Z_q yi←f(xi)∈Zq
- 定义 α i : = ( x i , y i ) ∈ Z q 2 \alpha_i := (x_i,y_i) \in Z_q^2 αi:=(xi,yi)∈Zq2,输出 ( α 1 , ⋯ , α s ) (\alpha_1,\cdots,\alpha_s) (α1,⋯,αs)
-
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的分布也是均匀随机的。
Threshold decryption
定义
公钥门限解密方案是可有效计算的算法组 Σ t h = ( G , E , D , C ) \Sigma_{th} = (G,E,D,C) Σth=(G,E,D,C),定义为
- G G G:概率的 t-out-of-s shared key 生成算法,形如 ( 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 = { s k 1 , ⋯ , s k s } SK=\{sk_1,\cdots,sk_s\} SK={sk1,⋯,sks}。
- E E E:概率的公钥加密算法,形如 c ← R E ( p k , m ; r ) c \leftarrow_R E(pk,m;r) c←RE(pk,m;r)
- D D D:确定性的解密算法,形如 c i ← D ( s k i , c ) c_i \leftarrow D(sk_i,c) ci←D(ski,c),这里的 c i c_i ci叫做部分解密值(partial decryptions)
- C C C:确定性的组合算法,形如 m ← C ( c , c 1 , ⋯ , c t ) m \leftarrow C(c,c_1,\cdots,c_t) m←C(c,c1,⋯,ct),这里的输入是任意的 t t t个部分解密值。如果输入 t ′ > t t'>t t′>t个部分解密值,可以简单忽略多余的。
正确性:对于所有可能的 ( 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},
- Combiner query:敌手第 j j j次询问 m j ∈ M m_j \in M mj∈M,挑战者计算 c j ← R E ( p k , m j ) c_j \leftarrow_R E(pk,m_j) cj←RE(pk,mj)和 c j i ← D ( s k i , c j ) , ∀ i = 1 , ⋯ , s c_{ji} \leftarrow D(sk_i,c_j),\forall i=1,\cdots,s cji←D(ski,cj),∀i=1,⋯,s,然后将 c j , c j 1 , ⋯ , c j s c_j,c_{j1},\cdots,c_{js} cj,cj1,⋯,cjs回应给敌手。
- Single encryption query:敌手发送 m 0 , m 1 ∈ M m_0,m_1 \in M m0,m1∈M,挑战者计算 c ← R E ( p k , m b ) c \leftarrow_R E(pk,m_b) c←RE(pk,mb),将 c c c回应给敌手。敌手只能询问一次。
最后敌手输出
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]的值是可忽略的。
ElGamal threshold decryption
令 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),定义如下:
- G e n ( ) Gen() Gen():选取 α ← R Z q \alpha \leftarrow_R Z_q α←RZq,计算 u ← g α u \leftarrow g^\alpha u←gα,输出私钥 s k : = α sk:=\alpha sk:=α,输出公钥 p k : = u pk:=u pk:=u
- E n c ( p k , m ) Enc(pk,m) Enc(pk,m):选取 β ← R Z q \beta \leftarrow_R Z_q β←RZq,计算 v ← g β v \leftarrow g^\beta v←gβ,并计算共享秘密 w ← u β w \leftarrow u^\beta w←uβ和会话密钥 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),输出密文 ( v , c ) (v,c) (v,c)
- D e c ( s k , ( v , c ) ) Dec(sk,(v,c)) Dec(sk,(v,c)):计算共享秘密 w ← v α w \leftarrow v^\alpha w←vα和会话密钥 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
上述描述是对于初始版本的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)。