秘密分享
系统中为了将秘密s在参与方 p 1 , p 2 , . . . , p n {p_1,p_2,...,p_n} p1,p2,...,pn中进行分享。系统为每个参与者分配子秘密 s p i s_{p_i} spi,只有足够数量的用户能够恢复出秘密,而少于这个数量的用户得不到s的任何信息。举例来说,对于秘密s,需要有至少t个参与方才能恢复出秘密s,即阈值为t。当少于t个参与方的时候无法恢复出秘密。
进行具体方案讲解前首先知道什么是拉格朗日插值法
拉格朗日插值法
已知k-1次多项式
f
(
x
)
f(x)
f(x)的k个互不相同的点的函数值
f
(
x
i
)
(
i
=
1
,
.
.
.
,
k
)
f(x_i)(i=1,...,k)
f(xi)(i=1,...,k)(我们设定阈值为k,根据具体需求,看后面例子),可以利用下面的插值公式恢复
k
−
1
k-1
k−1次多项式
f
(
x
)
f(x)
f(x)
f
(
x
)
=
∑
j
=
1
k
f
(
x
j
)
∏
l
=
1
,
l
≠
j
k
x
−
x
l
x
j
−
x
l
f(x)=\sum _{j=1}^{k}f(x_j) \prod _{l=1,l\ne j}^{k}\frac{x-x_l}{x_j-x_l}
f(x)=j=1∑kf(xj)l=1,l=j∏kxj−xlx−xl
下面具体看利用拉格朗日插值法的秘密分享方案
1.shamir秘密分享方案
当我们把秘密s取为
f
(
0
)
f(0)
f(0)(即为上面我们讲的K-1次多项式),分别计算n个函数值
f
(
i
)
(
i
=
1
,
.
.
.
,
n
)
f(i)(i=1,...,n)
f(i)(i=1,...,n)作为参与者
P
i
P_i
Pi的秘密份额,当拥有k个参与方的时候可以恢复出秘密s。
更一般的构造。设
G
F
(
q
)
GF(q)
GF(q)为有限域,q为一大素数,
q
⩾
n
+
1
q\geqslant n+1
q⩾n+1.秘密s为
G
F
(
q
)
/
{
0
}
GF(q)/\{0\}
GF(q)/{0}的随机数。多项式系数也在有限域内,构造
f
(
x
)
=
a
0
+
a
1
x
+
.
.
.
.
+
a
k
−
1
x
k
−
1
f(x)=a_0+a_1x+....+a_{k-1}x^{k-1}
f(x)=a0+a1x+....+ak−1xk−1
举个具体例子:
设置阈值为k=3,即需要三个参与者才能恢复秘密。n=5,q=19,s=11.我们的秘密为s=11.生成k-1次多项式
f
(
x
)
=
(
7
x
2
+
2
x
+
11
)
m
o
d
19
f(x)=(7x^2+2x+11)mod 19
f(x)=(7x2+2x+11)mod19
我们的秘密
s
=
f
(
0
)
=
11
s=f(0)=11
s=f(0)=11
因为n=5,有五个参与方,所以为每个参与方计算秘密份额
f
(
1
)
=
(
7
+
2
+
11
)
m
o
d
19
=
1
f(1)=(7+2+11)mod 19=1
f(1)=(7+2+11)mod19=1
f
(
2
)
=
(
28
+
4
+
11
)
m
o
d
19
=
5
f(2)=(28+4+11)mod19=5
f(2)=(28+4+11)mod19=5
f
(
3
)
=
(
63
+
6
+
11
)
m
o
d
19
=
4
f(3)=(63+6+11)mod 19=4
f(3)=(63+6+11)mod19=4
f
(
4
)
=
(
112
+
8
+
11
)
m
o
d
19
=
17
f(4)=(112+8+11)mod19=17
f(4)=(112+8+11)mod19=17
f
(
5
)
=
(
175
+
10
+
11
)
m
o
d
19
=
6
f(5)=(175+10+11)mod 19=6
f(5)=(175+10+11)mod19=6
k-1次多项式,需要k个参与方恢复出秘密(不理解就可以简单想0次多项式即常数多项式f(x)=m,需要一个参与者才能得到秘密s=m)。
假设我们有
P
2
,
P
3
,
P
5
P_2,P_3,P_5
P2,P3,P5来恢复秘密,利用前面的拉格朗日插值公式:
k
2
=
5
(
x
−
3
)
(
x
−
5
)
(
2
−
3
)
(
2
−
5
)
=
5
(
x
−
3
)
(
x
−
5
)
3
=
5
⋅
(
3
−
1
m
o
d
19
)
(
x
−
3
)
(
x
−
5
)
=
65
(
x
−
3
)
(
x
−
5
)
k_2=5\frac{(x-3)(x-5)}{(2-3)(2-5)}=5 \frac{(x-3)(x-5)}{3}=5\cdot (3^{-1}mod19)(x-3)(x-5)=65(x-3)(x-5)
k2=5(2−3)(2−5)(x−3)(x−5)=53(x−3)(x−5)=5⋅(3−1mod19)(x−3)(x−5)=65(x−3)(x−5)
注
:
除
以
3
等
与
乘
以
3
的
逆
元
,
(
3
−
1
m
o
d
19
)
=
13
注:除以3等与乘以3的逆元,(3^{-1}mod19)=13
注:除以3等与乘以3的逆元,(3−1mod19)=13
k
3
=
4
(
x
−
2
)
(
x
−
5
)
(
3
−
2
)
(
3
−
5
)
=
36
(
x
−
2
)
(
x
−
5
)
k_3=4\frac{(x-2)(x-5)}{(3-2)(3-5)}=36(x-2)(x-5)
k3=4(3−2)(3−5)(x−2)(x−5)=36(x−2)(x−5)
k
5
=
6
(
x
−
2
)
(
x
−
3
)
(
5
−
2
)
(
5
−
3
)
=
96
(
x
−
2
)
(
x
−
3
)
k_5=6\frac{(x-2)(x-3)}{(5-2)(5-3)}=96(x-2)(x-3)
k5=6(5−2)(5−3)(x−2)(x−3)=96(x−2)(x−3)
最后
f
(
x
)
=
[
k
2
+
k
3
+
k
5
]
m
o
d
19
=
[
65
(
x
−
3
)
(
x
−
5
)
+
36
(
x
−
2
)
(
x
−
5
)
+
96
(
x
−
2
)
(
x
−
3
)
]
m
o
d
19
=
(
26
x
2
−
188
x
+
296
)
m
o
d
19
=
7
x
2
+
2
x
+
11
f(x)=[k_2+k_3+k_5]mod19=[65(x-3)(x-5)+36(x-2)(x-5)+96(x-2)(x-3)]mod 19=(26x^2-188x+296)mod19=7x^2+2x+11
f(x)=[k2+k3+k5]mod19=[65(x−3)(x−5)+36(x−2)(x−5)+96(x−2)(x−3)]mod19=(26x2−188x+296)mod19=7x2+2x+11
计算
f
(
0
)
=
11
f(0)=11
f(0)=11即恢复我们的秘密值s。
2.Peterson可验证秘密分享
假设
p
1
,
p
2
,
.
.
.
,
p
n
p_1,p_2,...,p_n
p1,p2,...,pn是秘密分享的参与方,令p为大素数,q为p-1的素因子,g为
Z
p
∗
Z_p^{*}
Zp∗中的一个元素(g就是这个群的生成元,因为是一个素数阶群)。首先每一个参与者
p
i
p_i
pi选取一个多项式
f
i
(
x
)
=
a
i
,
0
+
a
i
,
1
x
+
.
.
.
+
a
i
,
t
−
1
x
t
−
1
(
m
o
d
q
)
f_i(x)=a_{i,0}+a_{i,1}x+...+a_{i,t-1}x^{t-1} (modq)
fi(x)=ai,0+ai,1x+...+ai,t−1xt−1(modq),然后
p
i
p_i
pi计算
f
i
(
j
)
f_i(j)
fi(j)发送给
p
j
,
(
0
<
j
⩽
n
,
j
≠
i
)
p_j ,(0<j\leqslant n,j \ne i)
pj,(0<j⩽n,j=i),并广播
g
a
i
,
0
,
.
.
.
,
g
a
i
,
t
−
1
g^{a_{i,0}},...,g^{a_{i,t-1}}
gai,0,...,gai,t−1.
此时对于每一个
p
j
p_j
pj来说,其可以验证下面的等式:
g
f
i
(
j
)
=
g
a
i
,
0
⋅
(
g
a
i
,
1
)
j
⋅
.
.
.
⋅
(
g
a
i
,
t
−
1
)
j
t
−
1
m
o
d
p
g^{f_i(j)}=g^{a_{i,0}}\cdot (g^{a_{i,1}})^{j}\cdot ...\cdot (g^{a_{i,t-1}})^{j^{t-1}} modp
gfi(j)=gai,0⋅(gai,1)j⋅...⋅(gai,t−1)jt−1modp
当每一个参与方
p
j
p_j
pj验证通过后,每一个
p
j
p_j
pj计算
s
j
=
∑
i
=
1
n
f
i
(
j
)
s_j=\sum _{i=1} ^{n}f_i(j)
sj=∑i=1nfi(j)作为秘密份额。
此时我们将上面的所有
f
i
(
x
)
f_i(x)
fi(x)进行推导,将所有的
f
i
(
x
)
f_i(x)
fi(x)求和得到新的t-1阶多项式
f
(
x
)
f(x)
f(x):
f
(
x
)
=
∑
i
=
1
n
f
i
(
x
)
=
∑
i
=
1
n
a
i
,
0
+
(
∑
i
=
1
n
a
i
,
1
)
x
+
.
.
.
+
(
∑
i
=
1
n
a
i
,
t
−
1
)
x
t
−
1
m
o
d
q
f(x)=\sum _{i=1} ^{n}f_i(x)= \sum _{i=1} ^{n}a_{i,0}+ (\sum _{i=1} ^{n}a_{i,1})x+...+( \sum _{i=1} ^{n}a_{i,t-1})x^{t-1}modq
f(x)=∑i=1nfi(x)=∑i=1nai,0+(∑i=1nai,1)x+...+(∑i=1nai,t−1)xt−1modq。
(
∑
i
=
1
n
a
i
,
0
就
是
我
们
要
分
享
的
秘
密
)
( \sum _{i=1} ^{n}a_{i,0}就是我们要分享的秘密)
(∑i=1nai,0就是我们要分享的秘密)。
继续,
s
j
=
∑
i
=
1
n
f
i
(
j
)
=
f
(
j
)
s_j=\sum _{i=1} ^{n}f_i(j)=f(j)
sj=∑i=1nfi(j)=f(j),对于
s
j
s_j
sj我们进行下面的验证
g
s
j
=
g
∑
i
=
1
n
f
i
(
j
)
=
∏
i
=
1
n
g
f
i
(
j
)
=
(
∏
i
=
1
n
g
a
i
,
0
)
(
∏
i
=
1
n
g
a
i
,
1
)
j
.
.
.
(
∏
i
=
1
n
g
a
i
,
t
−
1
)
j
t
−
1
g^{s_j}=g^{\sum _{i=1} ^{n}f_i(j)}=\prod _{i=1}^{n}g^{f_i(j)}=(\prod _{i=1} ^{n}g^{a_{i,0}} )(\prod _{i=1} ^{n}g^{a_{i,1}})^{j}...(\prod _{i=1} ^{n}g^ {a_{i,t-1}})^{j^{t-1}}
gsj=g∑i=1nfi(j)=∏i=1ngfi(j)=(∏i=1ngai,0)(∏i=1ngai,1)j...(∏i=1ngai,t−1)jt−1modq
(注:中间两步为推导过程,首尾两项根据已知信息可以直接进行计算判断是否相等)
最后,给定任意的t个秘密份额
s
i
1
,
.
.
.
,
s
i
t
s_{i_1},...,s_{i_t}
si1,...,sit利用拉格朗日插值法就可以恢复出秘密
∑
i
=
1
n
a
i
,
0
\sum _{i=1} ^{n}a_{i,0}
∑i=1nai,0.
∑
i
=
1
n
a
i
,
0
\sum _{i=1} ^{n}a_{i,0}
∑i=1nai,0=f(0)即可。
最后验证
g
∑
i
=
1
n
a
i
,
0
=
∏
i
=
1
n
g
i
,
0
m
o
d
p
g^{\sum _{i=1} ^{n}a_{i,0}}=\prod _{i=1}^{n}g^{i,0}modp
g∑i=1nai,0=∏i=1ngi,0modp
本文介绍了秘密分享技术,通过拉格朗日插值法来实现。详细阐述了Shamir秘密分享方案和Peterson可验证秘密分享方案,解释了如何利用多项式和有限域来确保只有达到特定数量的参与者才能恢复秘密。
357

被折叠的 条评论
为什么被折叠?



