1 简介
- 作者:Brickell;
- 时间:1989年;
- 理念:Shamir秘密共享方案的推广,由一维方程转向多维向量。
2 具体实现
I 秘密分割算法
-
(1)首先确定可以掌握钥匙的人数nnn,以及模数ppp。例如n=4,p=127n = 4, p = 127n=4,p=127;
-
(2)确定ddd和viv_ivi,其中viv_ivi是ddd维向量,viv_ivi将在第(4)步构建;
-
(3)确定分配规则,例如{(v1,v2,v3),(v1,v4)}\{(v_1, v_2, v_3), (v_1, v_4)\}{(v1,v2,v3),(v1,v4)},表示第1,2,3个人可以解密,第1,4个人也可以解密,称为一组规则中的向量;
-
(4)确定nnn个向量,并保证一组钥匙可以线性表示为(1,0,0,…)(1,0,0,\dots)(1,0,0,…),这些向量所有参与者都知道,例如:
v1=(0,1,0)v2=(1,0,1)v3=(0,1,−1)v4=(1,1,0)\begin{array}{l} v_1 = (0, 1, 0) \\ v_2 = (1, 0, 1) \\ v_3 = (0, 1, -1) \\ v_4 = (1, 1, 0) \\ \end{array} v1=(0,1,0)v2=(1,0,1)v3=(0,1,−1)v4=(1,1,0) -
(5)利用上面规则中的向量组来构成:
(1,0,0)=v2+v3−v1(1,0,0)=v4−v1\begin{array}{l} (1, 0, 0) = v_2 + v_3 - v_1 \\ (1, 0, 0) = v_4 - v_1 \\ \end{array} (1,0,0)=v2+v3−v1(1,0,0)=v4−v1
而要用(v2,v3,v4)(v_2, v_3, v_4)(v2,v3,v4)或其它不在规则里面的向量组构成(1,0,0,…)(1,0,0,\dots)(1,0,0,…)则是无解的。 -
(6)给定消息SSS,生成d−1d - 1d−1个小于ppp的随机数,例如:a2=55a_2 = 55a2=55,a3=38a_3 = 38a3=38,同时a1=S=99a_1 = S = 99a1=S=99;
-
(7)计算Si=a⋅viS_i = \mathbf{a} \cdot \mathbf{v_i}Si=a⋅vi, 其中a=(a1,…,ad)\mathbf{a} = (a_1, \dots, a_d)a=(a1,…,ad),例如:
S1=(99,55,38)⋅(0,1,0)modp=55S2=(99,55,38)⋅(1,0,1)modp=10S3=(99,55,38)⋅(0,1,−1)modp=17S4=(99,55,38)⋅(1,1,0)modp=27\begin{array}{l} S_1 = (99, 55, 38) \cdot (0, 1, 0) \bmod p = 55\\ S_2 = (99, 55, 38) \cdot (1, 0, 1) \bmod p = 10\\ S_3 = (99, 55, 38) \cdot (0, 1, -1) \bmod p = 17\\ S_4 = (99, 55, 38) \cdot (1, 1, 0) \bmod p = 27\\ \end{array} S1=(99,55,38)⋅(0,1,0)modp=55S2=(99,55,38)⋅(1,0,1)modp=10S3=(99,55,38)⋅(0,1,−1)modp=17S4=(99,55,38)⋅(1,1,0)modp=27 -
(8)将(Si,i)(S_i, i)(Si,i)作为钥匙分发给第iii个参与者。
II 秘密重构算法
- (1)收集任意满足规则的钥匙,比如第1,2,3个参与者的钥匙;
- (2)构造(1,0,0,…)(1, 0, 0, \dots)(1,0,0,…),并计算出参数。例如:
(1,0,0)=−v1+v2+v3(1, 0, 0) = -v_1 + v_2 + v_3(1,0,0)=−v1+v2+v3
参数分别为c1=−1,c2=1,c3=1c_1 = -1, c_2 = 1, c_3 = 1c1=−1,c2=1,c3=1。 - (3)将参数代入c1v1+c2v2+…modp=Sc_1v_1 + c_2v_2 + \dots \bmod p = Sc1v1+c2v2+…modp=S,例如:
(−1∗55+1∗10+1∗17)mod127=99(-1 * 55 + 1 * 10 + 1 * 17) \bmod 127 = 99(−1∗55+1∗10+1∗17)mod127=99
3 实例
设秘密S=99S = 99S=99,n=4n = 4n=4, 向量维度d=3d=3d=3, 模数p=127p = 127p=127。
I 秘密分割
-
(1)确定解密规则{(v1,v2,v3),(v1,v4)}\{(v_1, v_2, v_3), (v_1, v_4)\}{(v1,v2,v3),(v1,v4)},viv_ivi表示第iii个ddd维向量,该解密规则表示第1,2,3个人或第1,4个人分别可以合作恢复出秘密;
-
(2)确定所有人共享的n=4n = 4n=4向量{v1,…,v4}\{v_1, \dots, v_4\}{v1,…,v4},要求解密规则里的任意一组向量可以线性构成(1,0,0)(1, 0, 0)(1,0,0),而不在解密规则里的组合无法构成。例如:v1=(0,1,0)v_1 = (0, 1, 0)v1=(0,1,0),v2=(1,0,1)v_2 = (1, 0, 1)v2=(1,0,1),v3=(0,1,−1)v_3 = (0, 1, -1)v3=(0,1,−1),v4=(1,1,0)v_4 = (1, 1, 0)v4=(1,1,0),利用这些向量构造如下:
(1,0,0)=v2+v3−v1(1,0,0)=v4−v1\begin{array}{l} (1, 0, 0) = v_2 + v_3 - v_1 \\ (1, 0, 0) = v_4 - v_1 \\ \end{array} (1,0,0)=v2+v3−v1(1,0,0)=v4−v1 -
(3)生成d−1d - 1d−1个小于ppp的随机数,a2=55a_2 = 55a2=55,a3=38a_3 = 38a3=38,同时a1=S=99a_1 = S = 99a1=S=99;
-
(4)分别计算Si=a⋅viS_i = \mathbf{a} \cdot \mathbf{v_i}Si=a⋅vi, 其中a=(a1,a2,a3)\mathbf{a} = (a_1, a_2, a_3)a=(a1,a2,a3)
S1=(99,55,38)⋅(0,1,0)modp=55S2=(99,55,38)⋅(1,0,1)modp=10S3=(99,55,38)⋅(0,1,−1)modp=17S4=(99,55,38)⋅(1,1,0)modp=27\begin{array}{l} S_1 = (99, 55, 38) \cdot (0, 1, 0) \bmod p = 55\\ S_2 = (99, 55, 38) \cdot (1, 0, 1) \bmod p = 10\\ S_3 = (99, 55, 38) \cdot (0, 1, -1) \bmod p = 17\\ S_4 = (99, 55, 38) \cdot (1, 1, 0) \bmod p = 27\\ \end{array} S1=(99,55,38)⋅(0,1,0)modp=55S2=(99,55,38)⋅(1,0,1)modp=10S3=(99,55,38)⋅(0,1,−1)modp=17S4=(99,55,38)⋅(1,1,0)modp=27 -
(5)将(Si,i)(S_i, i)(Si,i)作为钥匙分发给第iii个参与者。
II 秘密重构
(1)收集任意满足解密规则的钥匙,例如第1,2,3个人的S1=55,S2=10,S3=17S_1 = 55, S_2 = 10, S_3 = 17S1=55,S2=10,S3=17;
(2)使用第1,2,3个向量构造(1,0,0)(1, 0, 0)(1,0,0)
c1v1+c2v2+c3v3=(1,0,0)\begin{array}{l} c_1v_1 + c_2v_2 + c_3v_3 = (1, 0, 0) \\ \end{array} c1v1+c2v2+c3v3=(1,0,0)
其参数分别为c1=−1,c2=1,c3=1c_1 = -1, c_2 = 1, c_3 = 1c1=−1,c2=1,c3=1。
- (3)将参数带入c1S1+c2S2+c3S3=Sc_1S_1 + c_2S_2 + c_3S_3 = Sc1S1+c2S2+c3S3=S:
(−1∗55+1∗10+1∗17)mod127=99\begin{array}{l} (-1 * 55 + 1 * 10 + 1 * 17) \bmod 127= 99 \\ \end{array} (−1∗55+1∗10+1∗17)mod127=99