参考文献:
( n , t , u ) − (n,t,u)- (n,t,u)−秘密共享方案:一共 n n n个参与方,任意的 n ′ ≤ t n'\le t n′≤t个参与者无法恢复秘密,任意的 n ′ ≥ u n' \ge u n′≥u个诚实参与者可以正确恢复秘密。
但是,原始的 SS 协议(比如 Shamir SS)在恢复秘密时,如果恶意参与者发送了错误的share,那么诚实参与者将几乎不会计算出正确的秘密。因为他们无法区分出正确的shares。
如果让秘密的分发者(记做 dealer)在share上签名,那么是否可以解决问题?不能。因为 dealer 也是 SS 协议的参与者,如果他被入侵了,那么就可以伪造出错误的share,让其他诚实参与者无法恢复出正确的秘密。
我们额外要求:
另外,交互式VSS协议的通信量过大,不适用于某些信道,并且无法并行。非交互式VSS:在 Share 阶段,只有一个处理器(叫做leader)发送消息,可以执行数轮通信。
( n , t , u ) − (n,t,u)- (n,t,u)−非交互式可验证秘密共享协议,是一组概率多项式时间的算法 ( S h a r e , R e c o v e r , C h e c k , E n c r y p t ) (Share,Recover,Check,Encrypt) (Share,Recover,Check,Encrypt):
E n c r y p t Encrypt Encrypt是加法同态的加密方案,令 Y ← E n c r y p t ( α ) Y \leftarrow Encrypt(\alpha) Y←Encrypt(α),其中 α \alpha α是秘密
( S h a r e , R e c o v e r ) (Share,Recover) (Share,Recover)是一个 ( n , t , u ) − (n,t,u)- (n,t,u)−秘密共享方案
C
h
e
c
k
Check
Check是利用密文同态性质的校验算法,任意的参与者
j
j
j都可以检验
C
h
e
c
k
(
Y
,
j
,
α
j
)
=
1
⟺
Y
=
E
n
c
r
y
p
t
(
α
)
∧
(
⋯
,
α
j
,
⋯
)
=
S
h
a
r
e
(
α
)
Check(Y,j,\alpha_j) = 1 \iff Y = Encrypt(\alpha) \wedge (\cdots,\alpha_j,\cdots) = Share(\alpha)
Check(Y,j,αj)=1⟺Y=Encrypt(α)∧(⋯,αj,⋯)=Share(α)
注意, S h a r e Share Share中隐含着 E n c r y p t Encrypt Encrypt的调用, Y Y Y是每个 α j \alpha_j αj的一部分。
Feldman 基于 Shamir 方案,添加了基于离散对数的同态加法加密算法,给出了第一个非交互式的 VSS 方案。
原始论文为了用模拟器证明安全性,对方案的描述十分复杂。下面结合其他介绍VSS的文章,给出更简洁的描述。
Share 阶段:
选定素域乘法群或者椭圆曲线加法群 G G G,其上的离散对数问题是困难的(注意,剩余类加法群的离散对数问题是简单的)。令 g g g是生成元。
dealer
i
i
i 拥有秘密
α
\alpha
α,利用 Shamir 方案随机选择
t
t
t次(注意不同表述里的
t
t
t是否取等)多项式
f
(
x
)
=
a
0
+
∑
i
=
1
t
a
i
x
i
f(x) = a_0 + \sum_{i=1}^{t} a_i x^i
f(x)=a0+i=1∑taixi
其中常数项为
a
0
=
α
a_0 = \alpha
a0=α
dealer 对它的
t
+
1
t+1
t+1个系数加密,使用的加密算法为
g
a
←
E
n
c
r
y
p
t
(
a
)
g^a \leftarrow Encrypt(a)
ga←Encrypt(a)
它是明文加法群和密文乘法群之间的群同态,单向性基于离散对数问题。
计算多项式系数的密文(可以叫做承诺,commitment),
c
0
=
g
a
0
,
c
1
=
g
a
1
,
⋯
,
c
t
=
g
a
t
c_0 = g^{a_0},c_1 = g^{a_1}, \cdots, c_{t} = g^{a_t}
c0=ga0,c1=ga1,⋯,ct=gat
通过广播信道发送给所有参与者。
dealer 利用 Shamir 方案,生成 shares,
{
(
x
1
,
f
(
x
1
)
)
,
⋯
,
(
x
n
,
f
(
x
n
)
)
}
←
S
h
a
r
e
(
α
)
\{(x_1,f(x_1)),\cdots,(x_n,f(x_n))\} \leftarrow Share(\alpha)
{(x1,f(x1)),⋯,(xn,f(xn))}←Share(α)
然后通过隐私信道,将 α j : = ( x j , f ( x j ) ) \alpha_j:=(x_j,f(x_j)) αj:=(xj,f(xj))发送给参与者 j j j
每个参与者都可以检验自己的 share 的有效性,
c
0
⋅
c
1
x
j
⋅
c
2
x
j
2
⋅
⋯
⋅
c
t
x
j
t
=
=
E
n
c
r
y
p
t
(
f
(
x
j
)
)
c_0 \cdot c_1^{x_j} \cdot c_2^{x_j^2} \cdot \cdots \cdot c_t^{x_j^t} == Encrypt(f(x_j))
c0⋅c1xj⋅c2xj2⋅⋯⋅ctxjt==Encrypt(f(xj))
Recover 阶段:
足够多的参与者通过广播信道披露自己的 shares, ( x j , f ( x j ) ) (x_j,f(x_j)) (xj,f(xj))
每个参与者都自行验证这些 shares 的有效性,
c
0
⋅
c
1
x
j
⋅
c
2
x
j
2
⋅
⋯
⋅
c
t
x
j
t
=
=
E
n
c
r
y
p
t
(
f
(
x
j
)
)
c_0 \cdot c_1^{x_j} \cdot c_2^{x_j^2} \cdot \cdots \cdot c_t^{x_j^t} == Encrypt(f(x_j))
c0⋅c1xj⋅c2xj2⋅⋯⋅ctxjt==Encrypt(f(xj))
每个参与者选出至少 t + 1 t+1 t+1个有效的 shares,利用 Shamir 方案的拉普拉斯插值算法,恢复出秘密 α \alpha α
易知,只要 t + u ≤ n t+u \le n t+u≤n那么就可以 Recover 秘密,Shamir 协议中 u = t + 1 u=t+1 u=t+1。因此,Feldman 协议可以抵挡至多 ( n − 1 ) / 2 (n-1)/2 (n−1)/2个恶意敌手的攻击。通信复杂度为 O ( n k ) O(nk) O(nk),计算复杂度为 O ( ( n log n + k ) ⋅ n k log k ) O((n\log n+k)\cdot nk\log k) O((nlogn+k)⋅nklogk),其中 k k k是安全参数。
另外,对于通信信道的假设也可以弱化: