注:本文加解密算法构建完全参考经典ABE paper:
Attribute-Based Encryption for Fine-Grained Access Control of Encrypted Data。
一.ABE介绍
ABE算法有两种类型,KP-ABE(Key-Policy Attribute-based encryption)和CP-ABE(Ciphertext-policy Attribute-based encryption)。从名字就可以看出
CP-ABE 密文与
A
c
c
e
s
s
T
r
e
e
Access Tree
AccessTree相关,密钥与
a
t
t
r
i
b
u
t
e
attribute
attribute相关。KP-ABE刚好反过来,密钥与
A
c
c
e
s
s
T
r
e
e
Access Tree
AccessTree相关,密文与
a
t
t
r
i
b
u
t
e
attribute
attribute相关。
我们这篇讲解KP-ABE。它除了选择数据的
a
t
t
r
i
b
u
t
e
attribute
attribute外,就不会控制谁有权访问加密的数据,所以必须相信密钥发行者能发出适当的密钥。适用于日志管理,付费视频网络(明文用一个
A
c
c
e
s
s
T
r
e
e
Access Tree
AccessTree加密后,只要用户密钥的属性满足这个
T
r
e
e
Tree
Tree就可以进行解密)。我们在后面会具体讲
A
c
c
e
s
s
T
r
e
e
Access Tree
AccessTree和
A
t
t
r
i
b
u
t
e
Attribute
Attribute,建议看完全文后再次返回来看这部分内容,会更清晰。
二.KP-ABE加解密总流程
KP-ABE方案共有四个算法:
1.Setup。输入安全参数,输出公共参数
P
K
PK
PK和主密钥
M
K
MK
MK。
2.Encryption。输入消息
m
m
m,属性集合
γ
\gamma
γ,公共参数
P
K
PK
PK。输出密文
E
E
E。(可以看到密文和属性相关)
3.Key Generation。输入
A
c
c
e
s
s
T
r
e
e
A
Access Tree A
AccessTreeA,公共参数
P
K
PK
PK和主密钥
M
K
MK
MK,输出解密密钥
D
D
D。
4.Decryption。输入基于属性
γ
\gamma
γ加密的密文
E
E
E,基于
A
c
c
e
s
s
T
r
e
e
A
Access Tree A
AccessTreeA生成的解密密钥
D
D
D和公共参数
P
K
PK
PK。如果
γ
\gamma
γ属于
A
A
A即属性
γ
\gamma
γ满足访问结构
A
A
A,则输出
m
m
m。
三.Access Tree构造
首先来说一下门限方案:
设秘密
s
s
s被切分为
n
n
n个部分信息,每一个部分称为子密钥,有一个参与者持有使得:
1.由
k
k
k个或多于
k
k
k个参与者的部分信息可重构
s
s
s。
2.少于
k
k
k个参与者不能重构消息
s
s
s。
3.少于
k
k
k个参与者持有的部分信息得不到
s
s
s任何信息。
(
k
,
n
)
(k,n)
(k,n)为秘密分割门限方案,k称为门限值。
下面来讲解
A
c
c
e
s
s
T
r
e
e
Access Tree
AccessTree:
用
T
T
T表示
A
c
c
e
s
s
T
r
e
e
Access Tree
AccessTree,它其实就是一个树。每一个非叶子节点表示一个陷门,每一个非叶子节点有
n
u
m
x
numx
numx个子节点,
k
x
k_x
kx表示门限值,
0
<
k
x
≤
n
u
m
x
0<k_x \leq numx
0<kx≤numx.
k
x
=
1
k_x=1
kx=1表示是一个或门
(
O
R
g
a
t
e
)
(OR gate)
(ORgate),
k
x
=
n
u
m
x
k_x=numx
kx=numx 表示是一个与门
(
A
N
D
g
a
t
e
)
(AND gate)
(ANDgate).每一个叶子节点代表属性,其门限值为1.
该方案是基于多项式的拉格朗日插值法的。已知一个函数
p
(
x
)
p(x)
p(x)在
k
k
k个互不相同的点的函数值
p
(
x
i
)
p(xi)
p(xi),寻求一个满足
f
(
x
i
)
=
p
(
x
i
)
f(xi)=p(xi)
f(xi)=p(xi)的函数
p
(
x
)
p(x)
p(x)用来逼近
p
(
x
)
p(x)
p(x).
拉格朗日插值:已知
p
(
x
)
p(x)
p(x)在
k
k
k个不同点的函数值
p
(
x
i
)
(
i
=
1
,
2....
k
)
p(xi)(i=1,2....k)
p(xi)(i=1,2....k),可以构造
k
−
1
k-1
k−1次插值多项式。

即由k-1次多项式
f
(
x
)
f(x)
f(x)的k个互不相同的函数值
f
(
x
i
)
f(xi)
f(xi)构造多项式
f
(
x
)
f(x)
f(x).若把密钥
s
s
s取做
f
(
0
)
f(0)
f(0),
n
n
n个子密钥
f
(
x
i
)
f(xi)
f(xi),其中任意
k
k
k个可重构出
f
(
0
)
f(0)
f(0).
进行具体举例:
将加密密钥
s
s
s放在根节点上,对每一个非叶节点构造多项式。与门意味着n-1阶多项式,或门意味着0阶多项式。
(
A
a
n
d
B
a
n
d
C
)
a
n
d
(
D
o
r
E
o
r
F
)
(A and B and C)and(D or E or F)
(AandBandC)and(DorEorF)
构建两个多项式



可以看到 s s s是我们需要得到的密钥。and门需要 A , B , C A,B,C A,B,C均获得才可恢复 f 1 ( 0 ) = f 0 ( 1 ) f_1(0)=f_0(1) f1(0)=f0(1),或门只需要一个就可恢复 f 0 ( 2 ) f_0(2) f0(2),然后在 f 0 ( x ) f_0(x) f0(x)中恢复出密钥 s s s。
四.KP-ABE方案
G
1
G_1
G1是一个素数
p
p
p阶双线性群,
g
g
g是生成元。
e
:
G
1
×
G
1
→
G
2
e:G_1 \times G_1 \rightarrow G_2
e:G1×G1→G2(双线性默认已知,如果需要补充的话请留言),安全参数k。拉格朗日系数
1.setup。定义属性全集
U
=
1
,
2
,
.
.
.
,
n
U={1,2,...,n}
U=1,2,...,n。对每一个属性
i
i
i属于
U
U
U,从
Z
p
Z_p
Zp随机选择一个数
t
i
t_i
ti。最后,从
Z
p
Z_p
Zp随机选择y。公共参数
P
K
PK
PK如下:

主密钥
M
K
MK
MK如下:

2.加密
基于属性
γ
\gamma
γ加密一个消息M属于
G
2
G_2
G2,选择随机值s属于
Z
p
Z_p
Zp。加密后密文如下:

3.key Generation。
算法仅当属性
γ
\gamma
γ满足
A
c
c
e
s
s
T
r
e
e
T
Access Tree T
AccessTreeT时可获得解密密钥。按照我们上面讲到的
a
c
c
e
s
s
T
r
e
e
access Tree
accessTree建造方法构造树。对每一个叶子节点x。计算

a
t
t
(
x
)
att(x)
att(x)函数表示返回叶子节点x的属性值。
4.decryption
输入私钥
D
D
D(Key generation产生),密文:

定义
D
e
c
r
y
p
t
N
o
d
e
(
E
,
D
,
x
)
DecryptNode(E,D,x)
DecryptNode(E,D,x)函数,
i
=
a
t
t
(
x
)
i=att(x)
i=att(x),当x是叶子节点时:
当他是非叶节点时:对于
x
x
x的所有孩子
z
z
z,调用
D
e
c
r
y
p
t
N
o
d
e
(
E
,
D
,
x
)
DecryptNode(E,D,x)
DecryptNode(E,D,x),结果存为
F
z
F_z
Fz

均能计算出
e
(
g
,
g
)
s
⋅
q
x
(
0
)
e(g,g)^{s\cdot q_x(0)}
e(g,g)s⋅qx(0).当我们调用DecryptNode(E,D,r)=
e
(
g
,
g
)
y
s
=
Y
S
e(g,g)^{ys}=Y^{S}
e(g,g)ys=YS.我们的密文
E
′
=
M
Y
S
E'=MY^{S}
E′=MYS,则作除法就可获得明文M。
本文深入介绍了基于属性的加密(ABE)中的KP-ABE算法,包括其加解密流程、Access Tree的构造以及门限方案。KP-ABE的关键在于Access Tree,它决定了哪些属性的组合可以解密密文。文章通过实例解释了如何构建Access Tree,并展示了加密和解密的过程。
2万+

被折叠的 条评论
为什么被折叠?



