前言
做一篇论文阅读笔记
云存储环境下支持属性撤销的属性基加密方案
RO-CP-ABE: CP-ABE with attribute revocation and outsourced decryption 支持属性撤销和外包解密的属性基加密方案.
特点: 支持属性立即撤销, 并且通过基于CDH假设完成安全性证明.
系统模型
实体角色
属性机构(AA, attribute authority): 完全可信权威机构, 主要负责生成系统公钥和系统主私钥, 管控属性密钥分发.
云服务商(CSP, cloud service provider): 主要是指第三方云存储服务商, 包括DSM(数据服务管理者), 计算服务, 存储服务. 撤销属性需要DSM承担密文更新工作, 解密时CSP承担解密过程部分计算工作. 同时假设CSP是诚实和好奇的(指会按规定完成所有操作, 但想知道密文的内容信息).
数据拥有者(DO, data owner): DO用对称密钥PK加密待上传的数据, 然后加密对称密钥, 通过PK的安全共享完成细粒度访问控制.
数据用户(DU, data user): 属性机构AA为每个数据用户DU生成相应的属性私钥, 用于解密密钥和密文.
形式化定义
符号 | 含义 |
---|---|
S S S | 数据用户的属性集合 |
( M , ρ ) (M, \rho) (M,ρ) | 数据拥有者定义LSSS访问结构 |
m m m | 明文 |
P K , M S K PK, MSK PK,MSK | 系统公钥, 系统主私钥 |
D P K , D S K DPK, DSK DPK,DSK | DSM公钥, 主私钥 |
R K RK RK | 数据用户私钥 |
S K SK SK | 数据用户转换密钥 |
K E K ′ KEK' KEK′ | 属性群初始密钥 |
K E K KEK KEK | 属性群密钥 |
K E K ‾ \overline{KEK} KEK | 属性撤销后属性群密钥 |
C T ′ CT' CT′ | 中间密文 |
C T CT CT | 密文 |
C ˉ T ˉ \bar{C} \bar{T} CˉTˉ | 转换密文 |
C T ‾ \overline{CT} CT | 属性撤销后密文 |
H d r Hdr Hdr | 密文头 |
H d r ‾ \overline{Hdr} Hdr | 属性撤销后密文头 |
RO-CP-ABE方案五个阶段
(1) 系统初始化:
AAsetup(
1
λ
1^\lambda
1λ) → {PK, MSK}
AA输入安全参数
λ
\lambda
λ, 输出系统公钥PK和系统主私钥MSK.
DSMSetup(PK) → {DPK, DSK}
DSM输入PK, 输出公钥DPK, 主私钥DSK.
(2) 私钥生成:
AAKeyGen(id,PK,DPK,MSK, S) → {RK,SK, KEK’}
AA输入公钥PK, DSM公钥DPK, 主私钥MSK, 属性集合S, 输出用户私钥RK, 转换密钥SK, 属性群初始密钥KEK’.
DSMKeyGen(KEK’ , S) → KEK
DSM输入属性群初始密钥KEK’, 属性集合S, 输出用户属性群密钥KEK.
(3) 数据加密:
Encrypt(PK, (M,
ρ
\rho
ρ), m) → CT’
数据拥有者DO输入系统公钥PK , 访问结构(M,
ρ
\rho
ρ), 明文m, 输出中间密文CT′.
DSMEncrypt(PK,DSK,CT’) → {Hdr,CT}
DSM输入公钥PK 、DSM公钥DPK, 中间密文CT′, 输出密文头Hdr, 最终密文CT.
(4) 数据解密:
OutDecrypt(PK, Hdr, CT, SK, KEK) →
C
ˉ
T
ˉ
\bar{C}\bar{T}
CˉTˉ
CSP输入公钥PK, 密文头Hdr, 最终密文CT, 用户转换密钥SK, 属性群密钥KEK, 输出转换密文
C
ˉ
T
ˉ
\bar{C}\bar{T}
CˉTˉ.
Decrypt(PK,
C
ˉ
T
ˉ
\bar{C}\bar{T}
CˉTˉ, CT, RK) → m
DU输入公钥PK, 转换密文
C
ˉ
T
ˉ
\bar{C}\bar{T}
CˉTˉ, 最终密文CT, 用户私钥RK, 输出明文m.
(5) 用户属性撤销:
UpKEK(DSK, KEK,
a
t
t
x
att_x
attx) →
K
E
K
‾
\overline{KEK}
KEK
DSM输入DSM公钥DSK, 属性群密钥KEK, 被撤销属性
a
t
t
x
att_x
attx, 输出新的属性群密钥
K
E
K
‾
\overline{KEK}
KEK.
ReEncryption(Hdr, CT,
a
t
t
x
att_x
attx) → {
H
d
r
‾
,
C
T
‾
\overline{Hdr}, \overline{CT}
Hdr,CT}
DSM输入密文头Hdr, 最终密文CT, 被撤销属性
a
t
t
x
att_x
attx, 输出新的密文头
H
d
r
‾
\overline{Hdr}
Hdr, 新密文
C
T
‾
\overline{CT}
CT.
算法
(1) 系统初始化
AAsetup(
1
λ
1^\lambda
1λ) → {PK, MSK}
生成阶为素数p的循环群
G
,
G
T
G, G_T
G,GT, g是G的生成元, 存在映射e:
G
×
G
→
G
T
G \times G \rightarrow G_T
G×G→GT, 随机数
α
,
a
∈
Z
p
,
h
1
,
h
2
,
.
.
.
,
h
n
∈
G
\alpha, a \in Z_p, h_1, h_2, ..., h_n \in G
α,a∈Zp,h1,h2,...,hn∈G. 则系统的
主私钥 MSK =
g
α
g^\alpha
gα
系统公钥 MPK =
(
g
,
e
(
g
,
g
)
α
,
g
a
,
h
1
,
h
2
,
.
.
.
,
h
n
)
(g, e(g, g)^\alpha, g^a, h_1, h_2, ..., h_n)
(g,e(g,g)α,ga,h1,h2,...,hn)
DSMSetup(PK) → {DPK, DSK}
每
个
属
性
a
t
t
i
,
选
择
一
个
随
机
数
t
i
∈
Z
p
,
计
算
T
i
=
g
t
i
,
(
1
≤
i
≤
n
)
每个属性att_i, 选择一个随机数t_i \in Z_p, 计算T_i = g^{t_i}, (1 \leq i \leq n)
每个属性atti,选择一个随机数ti∈Zp,计算Ti=gti,(1≤i≤n).
DSM公钥
D
P
K
=
{
T
i
∣
1
≤
i
≤
n
}
DPK = \{T_i | 1 \leq i \leq n\}
DPK={Ti∣1≤i≤n}
主私钥
D
S
K
=
{
t
i
∣
1
≤
i
≤
n
}
DSK = \{t_i | 1 \leq i \leq n\}
DSK={ti∣1≤i≤n}
(2) 私钥生成
AAKeyGen(id,PK,DPK,MSK, S) → {RK,SK, KEK’}
随机数
r
i
d
∈
Z
p
r_{id} \in Z_p
rid∈Zp, 然后计算
K
′
=
g
α
+
a
r
i
d
K' = g^{\alpha + ar_{id}}
K′=gα+arid, 注意是
α
+
a
r
i
d
\alpha + ar_{id}
α+arid
L
′
=
g
r
i
d
L' = g^{r_{id}}
L′=grid
对于
∀
a
t
t
i
∈
S
\forall att_i \in S
∀atti∈S, 计算
K
i
′
=
h
i
r
i
d
K_i' = h_i^{r_{id}}
Ki′=hirid
k
e
k
i
′
=
T
i
r
i
d
kek_i' = T_i^{r_{id}}
keki′=Tirid
随机选择用户私钥
R
K
=
λ
,
(
λ
∈
Z
p
)
RK = \lambda, (\lambda \in Z_p)
RK=λ,(λ∈Zp), 计算
K
=
(
K
′
)
λ
K = (K')^\lambda
K=(K′)λ
L
=
(
L
′
)
λ
L = (L')^\lambda
L=(L′)λ
K
i
=
(
K
i
′
)
λ
K_i = (K_i')^\lambda
Ki=(Ki′)λ
k
e
k
i
=
(
k
e
k
i
′
)
λ
kek_i = (kek_i')^\lambda
keki=(keki′)λ
转换密钥
S
K
=
(
K
,
L
,
K
i
)
=
(
(
g
α
+
a
r
i
d
)
λ
,
(
g
r
i
d
)
λ
,
(
h
i
r
i
d
)
λ
)
=
(
g
(
α
+
a
r
i
d
)
λ
,
g
r
i
d
λ
,
h
i
r
i
d
λ
)
SK = (K, L, {K_i}) = ((g^{\alpha + ar_{id}})^\lambda, (g^{r_{id}})^\lambda, (h_i^{r_{id}})^\lambda) = (g^{(\alpha + ar_{id})\lambda}, g^{r_{id} \lambda}, h_i^{r_{id} \lambda})
SK=(K,L,Ki)=((gα+arid)λ,(grid)λ,(hirid)λ)=(g(α+arid)λ,gridλ,hiridλ)
属性群初始密钥
K
E
K
′
=
{
a
t
t
i
,
k
e
k
i
}
=
{
a
t
t
i
,
(
T
i
r
i
d
)
λ
}
=
{
a
t
t
i
,
g
t
i
r
i
d
λ
}
KEK' = \{att_i, kek_i\} = \{att_i, (T_i^{r_{id}})^\lambda\} = \{att_i, g^{t_i r_{id} \lambda}\}
KEK′={atti,keki}={atti,(Tirid)λ}={atti,gtiridλ},
a
t
t
i
∈
S
att_i \in S
atti∈S
DSMKeyGen(KEK’ , S) → KEK
对每一个
a
t
t
i
∈
S
att_i \in S
atti∈S, DSM计算
φ
i
=
P
a
t
h
(
u
i
d
)
∩
M
i
n
c
s
(
G
i
)
\varphi_i = Path(u_{id}) \cap Mincs(G_i)
φi=Path(uid)∩Mincs(Gi)
若
φ
i
≠
∅
\varphi_i \neq \varnothing
φi=∅, 计算
K
E
K
i
=
(
k
e
k
i
)
1
θ
j
=
g
t
i
r
i
d
λ
θ
j
KEK_i = (kek_i)^{\frac{1}{\theta_j}} = g^{\frac{t_i r_{id} \lambda}{\theta_j}}
KEKi=(keki)θj1=gθjtiridλ, 其中随机值
θ
j
\theta_j
θj是结点
v
j
v_j
vj对应的随机值.
输出属性群密钥
K
E
K
=
{
a
t
t
i
,
v
j
,
k
e
k
i
,
K
E
K
i
}
,
a
t
t
i
∈
S
KEK = \{att_i, v_j, kek_i, KEK_i \}, att_i \in S
KEK={atti,vj,keki,KEKi},atti∈S
(注意这里的
v
j
v_j
vj只有一个, 即
j
j
j是固定值, 这个性质的理解可见这篇文章的阐述, 分别对于每一个
a
t
t
i
att_i
atti求KEK;
φ
i
=
∅
\varphi_i = \varnothing
φi=∅的
a
t
t
i
att_i
atti跳过
(3) 数据加密
Encrypt(PK, (M,
ρ
\rho
ρ), m) → CT’
选择随机向量
v
=
(
s
,
y
2
,
y
3
,
.
.
.
,
y
n
)
∈
Z
p
n
v = (s, y_2, y_3, ..., y_n) \in Z_p^n
v=(s,y2,y3,...,yn)∈Zpn 用于共享加密指数s.
计算
λ
i
=
M
i
v
\lambda_i = M_i v
λi=Miv,
M
i
M_i
Mi是
M
M
M的第
i
i
i行分量. 计算每一个
1
≤
i
≤
l
1 \leq i \leq l
1≤i≤l.
C
=
m
e
(
g
,
g
)
α
s
C = me(g, g)^{\alpha s}
C=me(g,g)αs
C
′
=
g
s
C' = g^s
C′=gs
C
i
=
g
a
λ
i
h
ρ
(
i
)
−
s
,
1
≤
i
≤
l
C_i = g^{a\lambda_i}h^{-s}_{\rho(i)}, 1 \leq i \leq l
Ci=gaλihρ(i)−s,1≤i≤l
输出中间密文
C
T
′
=
(
C
,
C
′
,
{
C
i
}
)
,
1
≤
i
≤
l
CT' = (C, C', \{C_i\}), 1 \leq i \leq l
CT′=(C,C′,{Ci}),1≤i≤l
DSMEncrypt(PK,DSK,CT’) → {Hdr,CT}
访问结构(
M
,
ρ
M, \rho
M,ρ)中每一个
a
t
t
i
att_i
atti, DSM随机选择
k
i
∈
Z
p
k_i \in Z_p
ki∈Zp, 调用
M
i
n
c
s
(
G
i
)
Mincs(G_i)
Mincs(Gi)算法, 加密中间密文
C
T
′
CT'
CT′得到
最终密文
C
T
=
(
C
,
C
′
,
{
C
i
g
k
i
}
)
,
1
≤
i
≤
l
CT = (C, C', \{C_ig^{k_i}\}), 1 \leq i \leq l
CT=(C,C′,{Cigki}),1≤i≤l
密文头
H
d
r
=
{
v
j
,
E
(
k
i
)
=
g
k
i
θ
j
t
i
}
,
v
j
∈
M
i
n
c
s
(
G
i
)
,
1
≤
i
≤
l
Hdr = \{v_j, E(k_i) = g^{\frac{k_i \theta_j}{t_i}}\}, v_j \in Mincs(G_i), 1 \leq i \leq l
Hdr={vj,E(ki)=gtikiθj},vj∈Mincs(Gi),1≤i≤l
输出
(
H
d
r
,
C
T
)
(Hdr, CT)
(Hdr,CT)到CSP进行存储
(注意, 这里的
v
j
v_j
vj是最小覆盖集
M
i
n
c
s
(
G
i
)
Mincs(G_i)
Mincs(Gi)的节点,
≥
1
\geq 1
≥1个, 对比上面的
v
j
v_j
vj是至多一个
(而且
k
i
和
a
t
t
i
k_i 和 att_i
ki和atti 是一 一对应的
(4) 数据解密
OutDecrypt(PK, Hdr, CT, SK, KEK) →
C
ˉ
T
ˉ
\bar{C}\bar{T}
CˉTˉ
CSP的解密相当于用户外包部分计算的解密, 实现是通过将最终密文CT解密出来成转换密文
C
ˉ
T
ˉ
\bar{C} \bar{T}
CˉTˉ, 再把最终密文CT和转换密文
C
ˉ
T
ˉ
\bar{C} \bar{T}
CˉTˉ发送给用户做O(1)时间的解密即可得到原明文, 就是让CSP承担大部分计算工作, 用户只需做很小的计算量就能得到明文, 减小用户负担. 一共需要计算三个量T’, T’’,
C
ˉ
T
ˉ
\bar{C} \bar{T}
CˉTˉ. (计算稍微复杂, 把之前的相关表达式都搬过来, 好做对照. 还需要线性秘密共享方案相关概念
{
L
=
g
r
i
d
λ
C
i
=
g
a
λ
i
h
ρ
(
i
)
−
s
K
i
=
h
i
r
i
d
λ
C
′
=
g
s
K
E
K
i
=
(
k
e
k
i
)
1
θ
j
=
g
t
i
r
i
d
λ
θ
j
E
(
k
i
)
=
g
k
i
θ
j
t
i
K
=
g
(
α
+
a
r
i
d
)
λ
T
′
=
Π
i
∈
I
(
e
(
L
,
C
i
g
k
i
)
e
(
K
i
,
C
′
)
e
(
K
E
K
i
,
E
(
k
i
)
)
)
w
i
=
Π
i
∈
I
(
e
(
g
r
i
d
λ
,
g
a
λ
i
h
ρ
(
i
)
−
s
g
k
i
)
e
(
h
i
r
i
d
λ
,
g
s
)
e
(
g
t
i
r
i
d
λ
θ
j
,
g
k
i
θ
j
t
i
)
)
w
i
=
Π
i
∈
I
(
e
(
g
r
i
d
λ
,
g
a
λ
i
)
e
(
h
i
r
i
d
λ
,
g
k
i
)
e
(
g
r
i
d
λ
,
g
k
i
)
)
w
i
=
Π
i
∈
I
(
e
(
g
r
i
d
λ
,
g
a
λ
i
)
)
w
i
=
e
(
g
,
g
)
r
i
d
a
λ
s
T
′
′
=
e
(
K
,
C
′
)
=
e
(
g
(
α
+
a
r
i
d
)
λ
,
g
s
)
=
e
(
g
,
g
)
(
α
+
a
r
i
d
)
λ
s
C
ˉ
T
ˉ
=
T
′
′
T
′
=
e
(
g
,
g
)
(
α
+
a
r
i
d
)
λ
s
e
(
g
,
g
)
r
i
d
a
λ
s
=
e
(
g
,
g
)
α
λ
s
\left\{ \begin{array}{l} L = g^{r_{id} \lambda} \\ C_i = g^{a\lambda_i}h^{-s}_{\rho(i)} \\ K_i = h_i^{r_{id} \lambda}\\ C' = g^s \\ KEK_i = (kek_i)^{\frac{1}{\theta_j}} = g^{\frac{t_i r_{id} \lambda}{\theta_j}} \\ E(k_i) = g^{\frac{k_i \theta_j}{t_i}} \\ K = g^{(\alpha + ar_{id})\lambda} \end{array} \right.\\ \! \\ \begin{aligned} T' &= \Pi_{i\in I}(\frac{e(L, C_ig^{k_i} ) e(K_i, C')}{e(KEK_i, E(k_i))})^{w_i} \\ & = \Pi_{i\in I}(\frac{e(g^{r_{id} \lambda}, g^{a\lambda_i}h^{-s}_{\rho(i)} g^{k_i} ) e( h_i^{r_{id} \lambda}, g^s)}{e(g^{\frac{t_i r_{id} \lambda}{\theta_j}}, g^{\frac{k_i \theta_j}{t_i}})})^{w_i} \\ & = \Pi_{i\in I}(\frac{e(g^{r_{id} \lambda}, g^{a\lambda_i}) e( h_i^{r_{id} \lambda}, g^{k_i})}{e(g^{r_{id} \lambda}, g^{k_i })})^{w_i} \\ & = \Pi_{i\in I}(e(g^{r_{id}\lambda}, g^{a\lambda_i}))^{w_i} \\ & = e(g, g)^{r_{id}a\lambda s} \end{aligned} \\ \! \\ \begin{aligned} T'' &= e(K, C') = e(g^{(\alpha + ar_{id})\lambda}, g^s) \\ & = e(g, g)^{(\alpha + ar_{id})\lambda s} \end{aligned} \\ \! \\ \begin{aligned} \bar{C} \bar{T} &= \frac{T''}{T'} \\ & = \frac{e(g, g)^{(\alpha + ar_{id})\lambda s}}{ e(g, g)^{r_{id}a\lambda s} } \\ & = e(g, g)^{\alpha \lambda s } \end{aligned}
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧L=gridλCi=gaλihρ(i)−sKi=hiridλC′=gsKEKi=(keki)θj1=gθjtiridλE(ki)=gtikiθjK=g(α+arid)λT′=Πi∈I(e(KEKi,E(ki))e(L,Cigki)e(Ki,C′))wi=Πi∈I(e(gθjtiridλ,gtikiθj)e(gridλ,gaλihρ(i)−sgki)e(hiridλ,gs))wi=Πi∈I(e(gridλ,gki)e(gridλ,gaλi)e(hiridλ,gki))wi=Πi∈I(e(gridλ,gaλi))wi=e(g,g)ridaλsT′′=e(K,C′)=e(g(α+arid)λ,gs)=e(g,g)(α+arid)λsCˉTˉ=T′T′′=e(g,g)ridaλse(g,g)(α+arid)λs=e(g,g)αλs
Decrypt(PK,
C
ˉ
T
ˉ
\bar{C}\bar{T}
CˉTˉ, CT, RK) → m
用户接收转换密文
C
ˉ
T
ˉ
\bar{C} \bar{T}
CˉTˉ, 用 用户私钥 RK =
λ
\lambda
λ 解密得到明文
注意: 用户也会接收 最终密文
C
T
=
(
C
,
C
′
,
{
C
i
g
k
i
}
)
,
1
≤
i
≤
l
CT = (C, C', \{C_ig^{k_i}\}), 1 \leq i \leq l
CT=(C,C′,{Cigki}),1≤i≤l
m
=
C
(
C
ˉ
T
ˉ
)
1
R
K
=
m
e
(
g
,
g
)
α
s
(
e
(
g
,
g
)
α
λ
s
)
1
λ
m = \frac{C}{(\bar{C} \bar{T})^{\frac{1}{RK}}} = \frac{me(g, g)^ {\alpha s}}{( e(g, g)^ {\alpha \lambda s})^{\frac{1}{\lambda}}}
m=(CˉTˉ)RK1C=(e(g,g)αλs)λ1me(g,g)αs
(5) 用户属性撤销
UpKEK(DSK, KEK,
a
t
t
x
att_x
attx) →
K
E
K
‾
\overline{KEK}
KEK
DSM公钥
D
P
K
=
{
T
i
∣
1
≤
i
≤
n
}
DPK = \{T_i | 1 \leq i \leq n\}
DPK={Ti∣1≤i≤n}
主私钥
D
S
K
=
{
t
i
∣
1
≤
i
≤
n
}
DSK = \{t_i | 1 \leq i \leq n\}
DSK={ti∣1≤i≤n}
撤销属性
a
t
t
x
att_x
attx时, DSM随机选择
σ
x
\sigma_x
σx计算每个属性对应的DPK, DSK中的分量并更新
T
‾
x
=
T
x
σ
x
\overline{T}_x = T_x^{\sigma_x}
Tx=Txσx,
t
‾
x
=
t
x
σ
x
\overline{t}_x = t_x \sigma_x
tx=txσx
得到更新的, DSM公钥
D
P
K
‾
\overline{DPK}
DPK, 主私钥
D
S
K
‾
\overline{DSK}
DSK
同时更新属性群得到
G
‾
x
\overline{G}_x
Gx, 并计算
M
i
n
c
s
(
G
‾
x
)
Mincs(\overline{G}_x)
Mincs(Gx).
之后对于每个数据用户
u
k
∈
G
‾
x
u_k \in \overline{G}_x
uk∈Gx, 计算
φ
‾
x
=
P
a
t
h
(
u
k
)
∩
M
i
n
c
s
(
G
‾
x
)
\overline{\varphi}_x = Path(u_k) \cap Mincs(\overline{G}_x)
φx=Path(uk)∩Mincs(Gx),
计算
k
e
k
‾
x
=
(
k
e
k
x
)
σ
x
\overline{kek}_x = (kek_x)^{\sigma_x}
kekx=(kekx)σx,
K
E
K
‾
x
=
(
k
e
k
‾
x
)
1
θ
j
′
‾
=
(
k
e
k
x
)
σ
x
θ
j
′
‾
\overline{KEK}_x = (\overline{kek}_x)^{\frac{1}{\overline{\theta_{j'}}}} = ({kek}_x)^{\frac{\sigma_x}{\overline{\theta_{j'}}}}
KEKx=(kekx)θj′1=(kekx)θj′σx
最后更新属性群密钥KEK
K
E
K
=
{
a
t
t
x
,
v
j
,
k
e
k
x
,
K
E
K
x
}
←
{
a
t
t
x
,
v
‾
j
′
,
k
e
k
‾
x
,
K
E
K
‾
x
}
KEK = \{att_x, v_j, kek_x, KEK_x\} ← \{att_x, \overline{v}_{j'}, \overline{kek}_x, \overline{KEK}_x\}
KEK={attx,vj,kekx,KEKx}←{attx,vj′,kekx,KEKx}
ReEncryption(Hdr, CT,
a
t
t
x
att_x
attx) → {
H
d
r
‾
,
C
T
‾
\overline{Hdr}, \overline{CT}
Hdr,CT}
DSM重新选择随机数
s
′
,
k
‾
x
∈
Z
p
s', \overline{k}_x \in Z_p
s′,kx∈Zp
{
C
=
m
e
(
g
,
g
)
α
s
C
′
=
g
s
C
i
=
g
a
λ
i
h
ρ
(
i
)
−
s
,
1
≤
i
≤
l
C
T
=
(
C
,
C
′
,
{
C
i
g
k
i
}
)
,
1
≤
i
≤
l
{
C
‾
=
C
e
(
g
,
g
)
α
s
′
=
m
e
(
g
,
g
)
α
(
s
+
s
′
)
C
′
‾
=
C
g
s
′
C
x
‾
=
C
x
h
ρ
(
x
)
−
s
′
g
k
‾
x
−
k
x
{
C
i
g
k
i
h
ρ
(
i
)
−
s
′
}
,
1
≤
i
≤
l
,
i
≠
x
属
性
撤
销
后
密
文
C
T
‾
=
{
C
‾
,
C
′
‾
,
C
x
‾
,
{
C
i
g
k
i
h
ρ
(
i
)
−
s
′
}
}
,
1
≤
i
≤
l
,
i
≠
x
\left\{ \begin{array}{l} C = me(g, g)^{\alpha s} \\ C' = g^s \\ C_i = g^{a\lambda_i}h^{-s}_{\rho(i)}, 1 \leq i \leq l \\ CT = (C, C', \{C_ig^{k_i}\}), 1 \leq i \leq l \end{array} \right. \\ \! \\ \left\{ \begin{array}{l} \overline{C} = Ce(g, g)^{\alpha s'} = me(g, g)^{\alpha (s + s')} \\ \overline{C'} = Cg^{s'} \\ \overline{C_x} = C_x h^{-s'}_{\rho(x)} g^{\overline{k}_x - k_x} \\ \{C_i g^{k_i} h^{-s'}_{\rho(i)}\}, 1 \leq i \leq l, i \neq x \end{array} \right. \\ \! \\ 属性撤销后密文\overline{CT} = \{\overline{C}, \overline{C'}, \overline{C_x}, \{C_i g^{k_i} h^{-s'}_{\rho(i)}\} \}, 1 \leq i \leq l, i \neq x
⎩⎪⎪⎨⎪⎪⎧C=me(g,g)αsC′=gsCi=gaλihρ(i)−s,1≤i≤lCT=(C,C′,{Cigki}),1≤i≤l⎩⎪⎪⎪⎨⎪⎪⎪⎧C=Ce(g,g)αs′=me(g,g)α(s+s′)C′=Cgs′Cx=Cxhρ(x)−s′gkx−kx{Cigkihρ(i)−s′},1≤i≤l,i=x属性撤销后密文CT={C,C′,Cx,{Cigkihρ(i)−s′}},1≤i≤l,i=x
最后更新密文头
H
d
r
‾
=
{
{
v
‾
j
′
,
E
(
k
‾
i
)
=
g
k
‾
i
θ
‾
j
t
‾
i
}
,
v
‾
j
′
∈
M
i
n
c
s
(
G
‾
x
)
{
v
j
,
E
(
k
i
)
=
g
k
i
θ
j
t
i
}
,
v
j
∈
M
i
n
c
s
(
G
i
)
,
1
≤
i
≤
l
,
i
≠
x
\overline{Hdr} = \begin{cases} \{\overline{v}_{j'}, E(\overline{k}_i) = g^{\frac{\overline{k}_i \overline{\theta}_j}{\overline{t}_i}}\},\quad \overline{v}_{j'} \in Mincs({\overline{G}_x}) \\[2ex] \{v_j, E(k_i) = g^{\frac{k_i \theta_j}{t_i}}\}, \quad v_{j} \in Mincs(G_i), 1 \leq i \leq l, i \neq x \end{cases}
Hdr=⎩⎪⎨⎪⎧{vj′,E(ki)=gtikiθj},vj′∈Mincs(Gx){vj,E(ki)=gtikiθj},vj∈Mincs(Gi),1≤i≤l,i=x
算法过程比较复杂, 不过可以跟着模拟一遍流程, 然后验证属性撤销后是否依然可以完成从最终密文到转换密文的计算, 发现其实对于
C
‾
x
和
{
C
i
g
k
i
h
ρ
(
i
)
−
s
′
}
,
1
≤
i
≤
l
,
i
≠
x
\overline{C}_x 和 \{C_i g^{k_i} h^{-s'}_{\rho(i)}\}, 1 \leq i \leq l, i \neq x
Cx和{Cigkihρ(i)−s′},1≤i≤l,i=x, 可以看作是更新后的
{
C
i
g
k
i
}
,
1
≤
i
≤
l
\{C_ig^{k_i}\}, 1 \leq i \leq l
{Cigki},1≤i≤l, 当作
{
C
‾
x
}
∪
{
C
i
g
k
i
h
ρ
(
i
)
−
s
′
}
,
1
≤
i
≤
l
,
i
≠
x
\{\overline{C}_x \} \cup \{C_i g^{k_i} h^{-s'}_{\rho(i)}\}, 1 \leq i \leq l, i \neq x
{Cx}∪{Cigkihρ(i)−s′},1≤i≤l,i=x, 形式上依然是统一的, 所以算法没有问题.
源码实现
(立下了一个很大的flag, 做完本科毕设之后没再继续研究CP-ABE, 最近在忙别的事, 可能得等下学期研究生开学了QAQ, 应该会做吧, 另外CP-ABE目前开源代码稀缺, 很难找到完善的轮子(学术界发论文的人都没有太多开源精神, 我也无奈), 基本得自己写, java下的CP-ABE方案有比较好的开源项目, python目前没找到, 需要借鉴源码的朋友可以看看下面的链接
这是一个云加密算法库
https://github.com/liuweiran900217/CloudCrypto
作者的博客贴在这
https://www.zhihu.com/people/liu-wei-ran-8-34/posts