欢迎各位来访问我滴博客~~
秘密分享(Secret Sharing):
Shamir阈值秘密分享方案:
该方案基于拉格朗日插值法,支持n个参与方中的任意t个可以联合解开秘密数据。
A的目的是将其秘密数据 a 0 a_0 a0共享给 S 1 , S 2 , ⋯ , S n S_1,S_2,\cdots,S_n S1,S2,⋯,Sn,那么他先生成一个 t − 1 t-1 t−1次多项式 f ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a t − 1 x t − 1 f(x)=a_0+a_1x+a_2x^2+\cdots+a_{t-1}x^{t-1} f(x)=a0+a1x+a2x2+⋯+at−1xt−1
接下来A将 f ( 1 ) , f ( 2 ) , ⋯ , f ( n ) f(1),f(2),\cdots,f(n) f(1),f(2),⋯,f(n)分别分发给n个人(相当于把秘密拆分成n份),那么当且仅当 n n n个人中任意 t t t个将他们所拿到的值放在一起的时候才可以通过拉格朗日插值法解出原多项式,然后将 x = 0 x=0 x=0代入就可以获得秘密 a 0 a_0 a0
Shamir阈值秘密分享方法应用场景:
很容易发现 S h a m i r Shamir Shamir方法是线性的,所以支持加法同态。具体的应用场景有,某个数据需求方需要用到A, B, C三方秘密之和 a 0 + b 0 + c 0 a_0+b_0+c_0 a0+b0+c0
首先A构造出多项式 f a ( x ) = a 0 + a 1 x + a 2 x 2 f_a(x)=a_0+a_1x+a_2x^2 fa(x)=a0+a1x+a2x2,并将其秘密拆分为 f a ( 1 ) , f a ( 2 ) , f a ( 3 ) f_a(1),f_a(2),f_a(3) fa(1),fa(2),fa(3)
然后B,C分别构造出多项式 f b ( x ) , f c ( x ) f_b(x),f_c(x) fb(x),fc(x),并将其秘密拆分为 f b ( 1 ) , f b ( 2 ) , f b ( 3 ) f_b(1),f_b(2),f_b(3) fb(1),fb(2),fb(3)和 f c ( 1 ) , f c ( 2 ) , f c ( 3 ) f_c(1),f_c(2),f_c(3) fc(1),fc(2),fc(3)
然后三方分别将自变量为1的函数值发给A,自变量为2的函数值发给B,自变量为3的函数值发给C,于是形势如下图:
各方经过计算之后将结果发给数据需求方,于是可以就得到了 a + b + c a+b+c a+b+c的结果
不经意传输(Oblivious Transfer):
不经意传输指的是数据发送方有n个数据,而数据接收方接受其中一个数据,而且数据接收方不能获取其它数据,数据发送方不能直到接收的数据具体是哪一个。
例如在两个数据中选择一个的方法。
假设P1是发送方,持有 m 1 , m 2 m_1,m_2 m1,m2,P2是接收方,不妨设P2想要第一个数据
-
P1生成一对公钥和私钥e与d,并生成两个随机数 s 1 , s 2 s_1,s_2 s1,s2,将公钥与两个随机数都发送给P2。
P1所知: m 1 , m 2 , s 1 , s 2 , e , d m1,m2,s1,s2,e,d m1,m2,s1,s2,e,d
P2所知: s 1 , s 2 , e s_1,s_2,e s1,s2,e
-
P2生成一个随机数s并用公钥e将其加密,加上 s 1 s_1 s1之后发送给P1
P1所知: m 1 , m 2 , s 1 , s 2 , e , d , e n c ( s ) + s 1 m1,m2,s1,s2,e,d,enc(s)+s_1 m1,m2,s1,s2,e,d,enc(s)+s1(不妨设为 s ⋆ s^\star s⋆)
P2所知: s 1 , s 2 , s , e s_1,s_2,s,e s1,s2,s,e
-
P1利用私钥计算 d e c ( s ⋆ − s 1 ) , d e c ( s ⋆ − s 2 ) dec(s^\star-s_1),dec(s^\star-s_2) dec(s⋆−s1),dec(s⋆−s2)(容易发现其中有一个会变成P2产生的随机数s,但是P1并不知道P2随机的数是什么,不知道P2随机数的位置是哪一个)然后将 m 1 , m 2 m_1,m_2 m1,m2信息分别异或上这两个值,并发送给P2
P1所知: m 1 , m 2 , s 1 , s 2 , e , d , e n c ( s ) + s 1 m1,m2,s1,s2,e,d,enc(s)+s_1 m1,m2,s1,s2,e,d,enc(s)+s1
P2所知: s 1 , s 2 , s , e , d e c ( s ⋆ − s 1 ) ⊕ m 1 = s ⊕ m 1 , d e c ( s ⋆ − s 2 ) ⊕ m 2 = d e c ( e n c ( s ) + s 1 − s 2 ) ⊕ m 2 s1,s2,s,e,dec(s^\star-s_1)\oplus\ m_1=s \oplus m_1 ,dec(s^\star-s_2)\oplus m_2=dec(enc(s)+s_1-s_2)\oplus m_2 s1,s2,s,e,dec(s⋆−s1)⊕ m1=s⊕m1,dec(s⋆−s2)⊕m2=dec(enc(s)+s1−s2)⊕m2
-
于是P2用第一个数(P2想要信息对应的位置)计算 s ⊕ m 1 ⊕ s s\oplus m_1\oplus s s⊕m1⊕s就可以获得 m 1 m_1 m1,与此同时P2并不能从第二个数获得或者推断出任何关于 m 2 m_2 m2的信息。