secret sharing;拉格朗日插值,shamir秘密分享,peterson秘密分享

本文介绍了秘密分享技术,通过拉格朗日插值法来实现。详细阐述了Shamir秘密分享方案和Peterson可验证秘密分享方案,解释了如何利用多项式和有限域来确保只有达到特定数量的参与者才能恢复秘密。
摘要由CSDN通过智能技术生成

秘密分享

系统中为了将秘密s在参与方 p 1 , p 2 , . . . , p n {p_1,p_2,...,p_n} p1,p2,...,pn中进行分享。系统为每个参与者分配子秘密 s p i s_{p_i} spi,只有足够数量的用户能够恢复出秘密,而少于这个数量的用户得不到s的任何信息。举例来说,对于秘密s,需要有至少t个参与方才能恢复出秘密s,即阈值为t。当少于t个参与方的时候无法恢复出秘密。

进行具体方案讲解前首先知道什么是拉格朗日插值法

拉格朗日插值法

已知k-1次多项式 f ( x ) f(x) f(x)的k个互不相同的点的函数值 f ( x i ) ( i = 1 , . . . , k ) f(x_i)(i=1,...,k) f(xi)(i=1,...,k)(我们设定阈值为k,根据具体需求,看后面例子),可以利用下面的插值公式恢复 k − 1 k-1 k1次多项式 f ( x ) f(x) f(x)
f ( x ) = ∑ j = 1 k f ( x j ) ∏ l = 1 , l ≠ j k x − x l x j − x l f(x)=\sum _{j=1}^{k}f(x_j) \prod _{l=1,l\ne j}^{k}\frac{x-x_l}{x_j-x_l} f(x)=j=1kf(xj)l=1,l=jkxjxlxxl
下面具体看利用拉格朗日插值法的秘密分享方案

1.shamir秘密分享方案

当我们把秘密s取为 f ( 0 ) f(0) f(0)(即为上面我们讲的K-1次多项式),分别计算n个函数值 f ( i ) ( i = 1 , . . . , n ) f(i)(i=1,...,n) f(i)(i=1,...,n)作为参与者 P i P_i Pi的秘密份额,当拥有k个参与方的时候可以恢复出秘密s。
更一般的构造。设 G F ( q ) GF(q) GF(q)为有限域,q为一大素数, q ⩾ n + 1 q\geqslant n+1 qn+1.秘密s为 G F ( q ) / { 0 } GF(q)/\{0\} GF(q)/{0}的随机数。多项式系数也在有限域内,构造 f ( x ) = a 0 + a 1 x + . . . . + a k − 1 x k − 1 f(x)=a_0+a_1x+....+a_{k-1}x^{k-1} f(x)=a0+a1x+....+ak1xk1
举个具体例子:
设置阈值为k=3,即需要三个参与者才能恢复秘密。n=5,q=19,s=11.我们的秘密为s=11.生成k-1次多项式 f ( x ) = ( 7 x 2 + 2 x + 11 ) m o d 19 f(x)=(7x^2+2x+11)mod 19 f(x)=(7x2+2x+11)mod19
我们的秘密 s = f ( 0 ) = 11 s=f(0)=11 s=f(0)=11
因为n=5,有五个参与方,所以为每个参与方计算秘密份额
f ( 1 ) = ( 7 + 2 + 11 ) m o d 19 = 1 f(1)=(7+2+11)mod 19=1 f(1)=(7+2+11)mod19=1
f ( 2 ) = ( 28 + 4 + 11 ) m o d 19 = 5 f(2)=(28+4+11)mod19=5 f(2)=(28+4+11)mod19=5
f ( 3 ) = ( 63 + 6 + 11 ) m o d 19 = 4 f(3)=(63+6+11)mod 19=4 f(3)=(63+6+11)mod19=4
f ( 4 ) = ( 112 + 8 + 11 ) m o d 19 = 17 f(4)=(112+8+11)mod19=17 f(4)=(112+8+11)mod19=17
f ( 5 ) = ( 175 + 10 + 11 ) m o d 19 = 6 f(5)=(175+10+11)mod 19=6 f(5)=(175+10+11)mod19=6
k-1次多项式,需要k个参与方恢复出秘密(不理解就可以简单想0次多项式即常数多项式f(x)=m,需要一个参与者才能得到秘密s=m)。
假设我们有 P 2 , P 3 , P 5 P_2,P_3,P_5 P2,P3,P5来恢复秘密,利用前面的拉格朗日插值公式:
k 2 = 5 ( x − 3 ) ( x − 5 ) ( 2 − 3 ) ( 2 − 5 ) = 5 ( x − 3 ) ( x − 5 ) 3 = 5 ⋅ ( 3 − 1 m o d 19 ) ( x − 3 ) ( x − 5 ) = 65 ( x − 3 ) ( x − 5 ) k_2=5\frac{(x-3)(x-5)}{(2-3)(2-5)}=5 \frac{(x-3)(x-5)}{3}=5\cdot (3^{-1}mod19)(x-3)(x-5)=65(x-3)(x-5) k2=5(23)(25)(x3)(x5)=53(x3)(x5)=5(31mod19)(x3)(x5)=65(x3)(x5)
注 : 除 以 3 等 与 乘 以 3 的 逆 元 , ( 3 − 1 m o d 19 ) = 13 注:除以3等与乘以3的逆元,(3^{-1}mod19)=13 33(31mod19)=13
k 3 = 4 ( x − 2 ) ( x − 5 ) ( 3 − 2 ) ( 3 − 5 ) = 36 ( x − 2 ) ( x − 5 ) k_3=4\frac{(x-2)(x-5)}{(3-2)(3-5)}=36(x-2)(x-5) k3=4(32)(35)(x2)(x5)=36(x2)(x5)
k 5 = 6 ( x − 2 ) ( x − 3 ) ( 5 − 2 ) ( 5 − 3 ) = 96 ( x − 2 ) ( x − 3 ) k_5=6\frac{(x-2)(x-3)}{(5-2)(5-3)}=96(x-2)(x-3) k5=6(52)(53)(x2)(x3)=96(x2)(x3)
最后 f ( x ) = [ k 2 + k 3 + k 5 ] m o d 19 = [ 65 ( x − 3 ) ( x − 5 ) + 36 ( x − 2 ) ( x − 5 ) + 96 ( x − 2 ) ( x − 3 ) ] m o d 19 = ( 26 x 2 − 188 x + 296 ) m o d 19 = 7 x 2 + 2 x + 11 f(x)=[k_2+k_3+k_5]mod19=[65(x-3)(x-5)+36(x-2)(x-5)+96(x-2)(x-3)]mod 19=(26x^2-188x+296)mod19=7x^2+2x+11 f(x)=[k2+k3+k5]mod19=[65(x3)(x5)+36(x2)(x5)+96(x2)(x3)]mod19=(26x2188x+296)mod19=7x2+2x+11
计算 f ( 0 ) = 11 f(0)=11 f(0)=11即恢复我们的秘密值s。

2.Peterson可验证秘密分享

假设 p 1 , p 2 , . . . , p n p_1,p_2,...,p_n p1,p2,...,pn是秘密分享的参与方,令p为大素数,q为p-1的素因子,g为 Z p ∗ Z_p^{*} Zp中的一个元素(g就是这个群的生成元,因为是一个素数阶群)。首先每一个参与者 p i p_i pi选取一个多项式 f i ( x ) = a i , 0 + a i , 1 x + . . . + a i , t − 1 x t − 1 ( m o d q ) f_i(x)=a_{i,0}+a_{i,1}x+...+a_{i,t-1}x^{t-1} (modq) fi(x)=ai,0+ai,1x+...+ai,t1xt1(modq),然后 p i p_i pi计算 f i ( j ) f_i(j) fi(j)发送给 p j , ( 0 < j ⩽ n , j ≠ i ) p_j ,(0<j\leqslant n,j \ne i) pj,(0<jn,j=i),并广播 g a i , 0 , . . . , g a i , t − 1 g^{a_{i,0}},...,g^{a_{i,t-1}} gai,0,...,gai,t1.
此时对于每一个 p j p_j pj来说,其可以验证下面的等式:
g f i ( j ) = g a i , 0 ⋅ ( g a i , 1 ) j ⋅ . . . ⋅ ( g a i , t − 1 ) j t − 1 m o d p g^{f_i(j)}=g^{a_{i,0}}\cdot (g^{a_{i,1}})^{j}\cdot ...\cdot (g^{a_{i,t-1}})^{j^{t-1}} modp gfi(j)=gai,0(gai,1)j...(gai,t1)jt1modp
当每一个参与方 p j p_j pj验证通过后,每一个 p j p_j pj计算 s j = ∑ i = 1 n f i ( j ) s_j=\sum _{i=1} ^{n}f_i(j) sj=i=1nfi(j)作为秘密份额。
此时我们将上面的所有 f i ( x ) f_i(x) fi(x)进行推导,将所有的 f i ( x ) f_i(x) fi(x)求和得到新的t-1阶多项式 f ( x ) f(x) f(x) f ( x ) = ∑ i = 1 n f i ( x ) = ∑ i = 1 n a i , 0 + ( ∑ i = 1 n a i , 1 ) x + . . . + ( ∑ i = 1 n a i , t − 1 ) x t − 1 m o d q f(x)=\sum _{i=1} ^{n}f_i(x)= \sum _{i=1} ^{n}a_{i,0}+ (\sum _{i=1} ^{n}a_{i,1})x+...+( \sum _{i=1} ^{n}a_{i,t-1})x^{t-1}modq f(x)=i=1nfi(x)=i=1nai,0+(i=1nai,1)x+...+(i=1nai,t1)xt1modq ( ∑ i = 1 n a i , 0 就 是 我 们 要 分 享 的 秘 密 ) ( \sum _{i=1} ^{n}a_{i,0}就是我们要分享的秘密) (i=1nai,0)
继续, s j = ∑ i = 1 n f i ( j ) = f ( j ) s_j=\sum _{i=1} ^{n}f_i(j)=f(j) sj=i=1nfi(j)=f(j),对于 s j s_j sj我们进行下面的验证 g s j = g ∑ i = 1 n f i ( j ) = ∏ i = 1 n g f i ( j ) = ( ∏ i = 1 n g a i , 0 ) ( ∏ i = 1 n g a i , 1 ) j . . . ( ∏ i = 1 n g a i , t − 1 ) j t − 1 g^{s_j}=g^{\sum _{i=1} ^{n}f_i(j)}=\prod _{i=1}^{n}g^{f_i(j)}=(\prod _{i=1} ^{n}g^{a_{i,0}} )(\prod _{i=1} ^{n}g^{a_{i,1}})^{j}...(\prod _{i=1} ^{n}g^ {a_{i,t-1}})^{j^{t-1}} gsj=gi=1nfi(j)=i=1ngfi(j)=(i=1ngai,0)(i=1ngai,1)j...(i=1ngai,t1)jt1modq
(注:中间两步为推导过程,首尾两项根据已知信息可以直接进行计算判断是否相等)
最后,给定任意的t个秘密份额 s i 1 , . . . , s i t s_{i_1},...,s_{i_t} si1,...,sit利用拉格朗日插值法就可以恢复出秘密 ∑ i = 1 n a i , 0 \sum _{i=1} ^{n}a_{i,0} i=1nai,0.
∑ i = 1 n a i , 0 \sum _{i=1} ^{n}a_{i,0} i=1nai,0=f(0)即可。
最后验证
g ∑ i = 1 n a i , 0 = ∏ i = 1 n g i , 0 m o d p g^{\sum _{i=1} ^{n}a_{i,0}}=\prod _{i=1}^{n}g^{i,0}modp gi=1nai,0=i=1ngi,0modp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

密码猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值