门限秘密分割
秘密 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} a 1 , a 2 , . . . a k − 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 + a 1 x + a 2 x + . . . + a k − 1 x k − 1 ,共n项,
S是秘密,作为常数项放在多项式内 -
n个持有者记做 P 1 , P 2 , . . . . P n P_1,P_2,....P_{n} P 1 , P 2 , . . . . P n , P i P_i P i 分到的子密钥为 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 = 1 k f ( i j ) ∏ l = 1 , l ! = j k i j − i l x − i l m o d p
而我们如果只需要计算秘密,就只需要将x=0带入,得到的数就是所需要的秘密