门限秘密分割
秘密s
被分成n
份毫无相关的部分信息,每一部分信息称为一个子密钥,由一个参与者持有,只有至少拥有k
份子密钥时才能恢复出秘密s
,这种方案为(k, n)-秘密分割门限方案
,k
称为方案的门限值
Shamir门限方案就是一种门限秘密分割方案,他是基于拉格朗日插值公式的
子密钥生成算法
- 秘密为
S
- 取大素数
p
- 确定
n
,作为子密钥的持有者的数量 - 确定
k
,作为门限值 - 在
1
到p
的有限域中随机取k-1
个数,记做 a 1 , a 2 , . . . a k − 1 a_1,a_2,...a_{k-1} a1,a2,...ak−1,作为k-1
次多项式f(x)
的非常数项的系数 - 写出多项式为
f
(
x
)
=
S
+
a
1
x
+
a
2
x
+
.
.
.
+
a
k
−
1
x
k
−
1
f(x)= S +a_1x+a_2x +...+a_{k-1}x^{k-1}
f(x)=S+a1x+a2x+...+ak−1xk−1,共n项,
S
是秘密,作为常数项放在多项式内 n
个持有者记做 P 1 , P 2 , . . . . P n P_1,P_2,....P_{n} P1,P2,....Pn, P i P_i Pi分到的子密钥为 f ( i ) f(i) f(i)- 销毁多项式
复原秘密
复原秘密至少需要 k 个子密钥
利用 f ( x ) = ∑ j = 1 k f ( i j ) ∏ l = 1 , l ! = j k x − i l i j − i l m o d p f(x)=\sum_{j=1}^{k}{f(i_{j}) \prod_{l=1,l!=j}^{k}{\frac{x-i_l}{i_j-i_l}}}modp f(x)=∑j=1kf(ij)∏l=1,l!=jkij−ilx−ilmodp
而我们如果只需要计算秘密,就只需要将x=0带入,得到的数就是所需要的秘密