Shamir's secret sharing
Shamir’s secret sharing算法
该算法由于Shamir提出,也就是RSA中的这S
算法概述:
秘密s被分成n份毫无相关的部分信息,每一部分信息称为一个子密钥,由一个参与者持有,只有至少拥有k份子密钥时才能恢复出秘密s,这种方案为(k, n)-秘密分割门限方案,k称为方案的门限值
一个秘密S要由n个人来保管
将s分为n个值→{s1, s2, s3,…,sn}
保证从中任取k个值,可以还原出s,{s1, s2, s3,…,sn}→s
保证从中任取k-1个值不能还原出s,{s1, s2, s3,…,sn}↛s
算法实现:
这是如何实现的呢
我们可以先回顾下多项式的性质

两个点可以确定唯一的一条直线也就是一次多项式
但是确不能确定唯一的二次多项式

但是三个点就可以确定唯一的二次多项式

对结论推广,我们可以知道k-1次的多项式可以由k个点来唯一确定
回到算法中,我们将秘密看成是k-1次多项式我们可以得到 f(x) = S + a1x + a2x + … + ak − 1xk − 1 s作为秘密放入常数项中
为了避免数论方法的攻击,所以使用了有限域下的多项式 f(x) ≡ S + a1x + a2x + … + ak − 1xk − 1 (mod P)
从中任意取n个数,n1, n2, ..., n3带入多项式计算,yi = f(xi)
将n个密钥对,(x1, f(x1)), (x2, f(x2), (x3, f(x3)), ..., (xn, f(xn)发给n个持有者
算法破解:
方法一:
任取n个密钥对代入求解多项式系数 a0 + a1x1 + ... + at − 1x1t − 1 = y1
a0 + a1x2 + ... + at − 1x2t − 1 = y2
...
a0 + a1xt + ... + at − 1xtt − 1 = yt
用矩阵乘法来表示 $$ \begin{pmatrix} 1 & x_1 & x_1^2 & \cdots & x_1^{t-1} \\ 1 & x_2 & x_2^2 & \cdots & x_2^{t-1} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_t & x_t^2 & \cdots & x_t^{t-1} \end{pmatrix} \begin{pmatrix} a_0 \\ a_1 \\ a_2 \\ \vdots \\ a_{t-1} \end{pmatrix} = \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_t \end{pmatrix} $$ 求得的a0即是原始的秘密
方法二:
我们可以用拉格朗日插值法来恢复系数 $$ (f(x) = \sum_{i=1}^{t} y_i \prod_{j=1,j\ne i}^{t} \frac{x - x_j}{x_i - x_j}) $$ 令x=0,求得s $$ s = \sum_{i=1}^t y_i \prod_{j=1,j\neq i}^t \frac{x_j}{x_j - x_i} $$
SSS
1 | 8010ba0d6ed38ef563074c3ee80a44f7fe680e82015a8d35f7f2245f66ec9c889b4e31a0c3e97bceeb6f28695f7a494918e0ca079677f07fff8eb570c17a4cb1db0477b84e9c68b9f02b21b33850f33bbd18f886b65c1f3bb015ddbe2723e64abfe8595e181d69d3f8ca3b7cc01c875ea25b97ef1e171c4f3f887e5752541270ae461cc610b3eb422c34df84e7b9a567f7933ee4b6969d19273d212a3ee92f8509679a4b40b6823c007e6d5c6241959e86bc8f989754649cd3008bdbb5bf030c9e802adf54d3afce4edef9bb709c7db4c2ac1f96f3e05cd220534b5647f35888e0e3d2435abdb1d7f32413bb630b3e8b0502e774dda8ac2bd4c2623ac433f79bd12 |
有次比赛中只给了三个数据,当时看的时候一脸懵逼,后面看了其它师傅的博客发现有个在线网站可以解

