Shamir秘密共享算法
简介
秘密s被分成n份毫无相关的部分信息,每一部分信息称为一个子密钥,由一个参与者持有,只有至少拥有t份子密钥时才能恢复出秘密s,这种方案为(t, n)-秘密分割门限方案,t称为方案的门限值 Shamir门限方案就是一种门限秘密分割方案,它是基于拉格朗日插值公式的。
子密钥生成算法
-
秘密为S
-
取大素数p
-
确定n,作为子密钥的持有者的数量
-
确定t,作为门限值 在1到p的有限域中随机取t-1个数,记做 a 1 , a 2 , . . . a t − 1 ,作为k-1次多项式f(x)的非常数项的系数
-
写出多项式为
f ( x ) = S + a 1 x + a 2 x + … + a t − 1 x t − 1 \mathrm{f}(\mathrm{x})=\mathrm{S}+\mathrm{a}_{1} \mathrm{x}+\mathrm{a}_{2} \mathrm{x}+\ldots+\mathrm{a}_{\mathrm{t}-1} \mathrm{x}^{\mathrm{t}-1} f(x)=S+a1x+a2x+…+at−1xt−1
共n项,S是秘密,作为常数项放在多项式内 -
n个持有者记做
P 1 , P 2 , … . P n , P i \mathrm{P}_{1}, \mathrm{P}_{2}, \ldots . \mathrm{P}_{\mathrm{n}}, \mathrm{P}_{\mathrm{i}} P1,P2,….Pn,Pi
分到的子密钥为 f ( i )r -
销毁多项式
秘密恢复:
当x=0时,F(0)=S,即可恢复出S
将t组(xi,yi)带入下式即可(t表示当子密钥持有人数大于等于t人)
F
(
x
)
=
∑
i
=
1
t
(
y
i
∏
1
≤
j
≤
t
,
j
≠
i
(
x
−
x
j
)
(
∏
1
≤
j
≤
t
,
j
≠
i
(
x
j
−
x
i
)
)
−
1
)
m
o
d
(
p
)
\mathrm{F}(x)=\sum_{i=1}^{t}\left(y i \prod_{1 \leq j \leq t, j \neq i}\left(x-x_{j}\right)\left(\prod_{1 \leq j \leq t, j \neq i}\left(x_{j}-x_{i}\right)\right)^{-1}\right) \bmod (p)
F(x)=i=1∑t⎝
⎛yi1≤j≤t,j=i∏(x−xj)⎝
⎛1≤j≤t,j=i∏(xj−xi)⎠
⎞−1⎠
⎞mod(p)
即可得到秘密S