关于LSSS线性秘密共享方案详细构造方法与原理解释
1.LSSS定义
LSSS英文精确定义如下:
翻译后:
一个关于参与者集合 P \Rho P关于秘密分享方案 Π \Pi Π在 Z p Z_p Zp上是线性的,则需要满足以下条件:
1.每一个参与者的分享份额(见2点)构成 Z p Z_p Zp上的一个向量;
2.存在一个关于 Π \Pi Π的秘密生成矩阵 M M M,这个矩阵有 m m m行 d d d列,对于 i = 1 , 2 , . . . . m i=1,2,....m i=1,2,....m, M M M的第 i i i行 M i M_i Mi被一个参与者 ρ ( i ) \rho (i) ρ(i)标识, ρ \rho ρ是一个从 { 1 , 2 , . . . , m } \{1,2,...,m\} {1,2,...,m}映射到 P \Rho P(参与者集合)的一个函数。给一个列向量 v ⃗ = ( s , r 2 , . . . , r d ) \vec {v}=(s,r_2,...,r_d) v=(s,r2,...,rd),其中 s ∈ Z p s \in Z_p s∈Zp是需要共享的秘密, r 2 , r 3 , . . . , r d r_2,r_3,...,r_d r2,r3,...,rd是随机选取的。 M v ⃗ M \vec{v} Mv表示 Π \Pi Π对秘密 s s s的 m m m个分享份额, λ i = ( M v ⃗ ) i \lambda _i=(M\vec{v})_i λi=(Mv)i是属于参与者 ρ ( i ) \rho(i) ρ(i)的分享份额。
初步感知一下 M M M是 m m m行 d d d列的, v ⃗ \vec{v} v是 d d d行 1 1 1列的, M v ⃗ M\vec{v} Mv则是 m m m行 1 1 1列的,每一行的一个值就是每个对应的参与者的分享份额。
2.Access Tree转化为LSSS矩阵方法
下面讲如何将访问树(access tree,构造参见KP-ABE那一篇)转化为分享生成矩阵。前面一篇讲过访问树叶子节点代表属性,非叶节点表示与或门,约定
(
1
,
0
,
0
,
.
.
.
,
0
)
(1,0,0,...,0)
(1,0,0,...,0)是目标向量。
构造方式如下:
(a).根节点标识为向量
(
1
)
(1)
(1),全局计数器
c
=
1
c=1
c=1,自上而下构建其他节点。
(b).如果节点x是一个被向量
v
v
v标记的与门,则将x的一个子节点标记为
v
∣
1
v|1
v∣1(|表示连接),另一个节点标记为
(
0
,
0
,
.
.
.
,
0
)
∣
−
1
(0,0,...,0)|-1
(0,0,...,0)∣−1,
(
0
,
.
.
.
0
)
长
度
为
c
(0,...0)长度为c
(0,...0)长度为c,然后c加1.
©.如果节点x是被向量v标记的或门,则x子节点也为
v
v
v.最后所有节点被标记,当叶子节点长度不等时,用0填充至相同长度。
叶子节点各向量即为LSSS分享生成矩阵各行向量。
举例
(
A
A
N
D
(
D
O
R
(
B
A
N
D
C
)
)
)
(A AND (D OR (B AND C)))
(AAND(DOR(BANDC)))
按照定义(a)设定根节点AND为
(
1
)
(1)
(1),c=1。根据定义(b),根节点左边节点A为
(
1
,
1
)
(1,1)
(1,1),右边或门节点为(0,-1).根据定义©右边或门的子孙节点D和AND节点为
(
0
,
−
1
)
(0,-1)
(0,−1).根据定义(b)节点B和节点C为
(
0
,
−
1
,
1
)
(0,-1,1)
(0,−1,1)和
(
0
,
0
,
−
1
)
(0,0,-1)
(0,0,−1).
最终得到分享生成矩阵为:
(
1
1
0
0
−
1
1
0
0
−
1
0
−
1
0
)
\begin{pmatrix} 1&1 &0 \\ 0 & -1 & 1\\ 0 & 0&-1 \\ 0& -1 &0 \end{pmatrix}
⎝⎜⎜⎛10001−10−101−10⎠⎟⎟⎞
3.LSSS算法正确性证明
证明一下算法正确性:
λ
=
M
⋅
ν
,
M
:
(
m
,
d
)
,
v
⃗
=
(
s
,
r
2
,
.
.
.
,
r
d
)
\lambda=M\cdot \nu ,M:(m,d),\vec{v} =(s,r_{2},...,r_{d})
λ=M⋅ν,M:(m,d),v=(s,r2,...,rd)
∑
i
∈
I
ω
i
M
i
=
(
1
,
0
,
.
.
.
,
0
)
\sum_{i \in I} \omega_{i} M_{i}=(1,0,...,0)
i∈I∑ωiMi=(1,0,...,0)
即
可
写
为
M
T
⋅
ω
=
(
1
,
0
,
.
.
.
,
0
)
,
ω
作
列
向
量
,
这
里
讲
的
是
存
在
这
些
ω
。
没
有
给
具
体
求
法
即可写为M^{T}\cdot \omega =(1,0,...,0), \omega作列向量,这里讲的是存在这些\omega 。没有给具体求法
即可写为MT⋅ω=(1,0,...,0),ω作列向量,这里讲的是存在这些ω。没有给具体求法
∑
i
∈
I
ω
i
λ
i
=
s
\sum_{i \in I}\omega_{i} \lambda_i =s
i∈I∑ωiλi=s
即
可
写
为
λ
T
⋅
ω
=
s
即可写为\lambda ^{T}\cdot \omega =s
即可写为λT⋅ω=s
ν
M
T
⋅
ω
=
s
,
因
为
M
T
⋅
ω
=
(
1
,
0
,
.
.
.
,
0
)
,
均
为
i
∈
I
,
则
得
到
了
我
们
的
秘
密
s
\nu M^{T} \cdot \omega =s,因为M^{T}\cdot \omega =(1,0,...,0) ,均为i \in I,则得到了我们的秘密s
νMT⋅ω=s,因为MT⋅ω=(1,0,...,0),均为i∈I,则得到了我们的秘密s