Shamir秘密共享算法

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++at1xt1
    共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=1t yi1jt,j=i(xxj) 1jt,j=i(xjxi) 1 mod(p)
即可得到秘密S

你可能感兴趣的:(算法)