updated: 2026-04-05
属性加密入门 Language: Original English
简介 属性加密(Attribute Based Encryption, ABE)可以认为是一种泛化的基于身份加密。相较于需要接收者的公钥对消息进行加密的传统公私钥加密方案,基于身份的加密允许用户使用消息接收者的ID加密消息,基于属性的加密进一步允许用户基于消息接收者拥有的属性加密消息。使得只有某个属性约束(Policy)被满足时用户才能解密该消息。
这里“属性”是一个集合。例如,对于属性集合{ A , B , C , D } \{A, B, C, D\} { A , B , C , D } ,发送者可以基于属性A ∧ B A \land B A ∧ B 对消息进行加密,使拥有属性{ A , C } \{A, C\} { A , C } 或者{ A } \{A\} { A } 等的用户无法解密信息,而只有拥有属性Q Q Q 使{ A , B } ∈ Q \{A, B\} \in Q { A , B } ∈ Q 的用户可以解密信息。
上面我们描述了一种将属性约束嵌入到密文中的加密方案,这种方案被称为Ciphertext-Policy ABE (CP-ABE)。
另一种加密方案是Key-Policy ABE (KP-ABE),在这种方案下,发送者基于一个属性集合对消息进行加密,属性约束被嵌入到用户的私钥中。例如,发送者基于集合{ A , B } \{A, B\} { A , B } 加密消息后,用户A ∨ C A \lor C A ∨ C 可以解密消息,但用户A ∧ C A \land C A ∧ C 不能解密消息。
Fuzzy-Identity Based Encryption Fuzzy IBE是最早提出属性加密的方案。在Fuzzy IBE方案中,用户的身份是一个属性的集合ω ∈ U \omega \in \mathcal{U} ω ∈ U ,其中U \mathcal{U} U 是所有可能属性的集合。消息发送者可以使用任意的属性集合ω ′ ∈ U \omega' \in \mathcal{U} ω ′ ∈ U 加密消息。对于给定的阈值d d d ,当且仅当∣ ω ∩ ω ′ ∣ ≥ d |\omega \cap \omega'| \ge d ∣ ω ∩ ω ′ ∣ ≥ d 时,用户才能解密消息,即用户必须持有d d d 个吻合的属性才能解密消息。
双线性对 对于素数阶的群G 1 , G 2 \mathbb{G}_1, \mathbb{G}_2 G 1 , G 2 ,双线性对e e e 定义了一种映射G 1 × G 1 → G 2 \mathbb{G}_1 \times \mathbb{G}_1 \rightarrow \mathbb{G}_2 G 1 × G 1 → G 2 ,并且该映射具有如下性质:
双线性:对于所有的a , b a, b a , b ,有e ( g a , g b ) = e ( g , g ) a b e(g^a, g^b) = e(g, g)^{ab} e ( g a , g b ) = e ( g , g ) ab
非退化性:e ( g , g ) ≠ 1 e(g, g) \ne 1 e ( g , g ) = 1
其中g g g 为G 1 \mathbb{G}_1 G 1 的生成元。当G 1 \mathbb{G}_1 G 1 为加法群,G 2 \mathbb{G}_2 G 2 为乘法群时,双线性对还可以表示为e ( a g , b g ) = e ( g , g ) a b e(ag, bg) = e(g, g)^{ab} e ( a g , b g ) = e ( g , g ) ab 。
由于G 1 , G 2 \mathbb{G}_1, \mathbb{G}_2 G 1 , G 2 的阶为素数,它们是循环群。对于任意的s , t ∈ G 1 s, t \in \mathbb{G}_1 s , t ∈ G 1 ,存在k 1 , k 2 k_1, k_2 k 1 , k 2 使s = g k 1 , t = g k 2 s = g^{k_1}, t = g^{k_2} s = g k 1 , t = g k 2 。因此
e ( a , s t ) = e ( a , g k 1 + k 2 ) = e ( a , g ) k 1 + k 2 = e ( a , g ) k 1 e ( a , g ) k 2 = e ( a , g k 1 ) e ( a , g k 2 ) = e ( a , s ) e ( a , t ) \begin{align}
e(a, st) &= e(a, g^{k_1 + k_2}) \\
&= e(a, g)^{k_1 + k_2} \\
&= e(a, g)^{k_1}e(a, g)^{k_2} \\
&= e(a, g^{k_1})e(a, g^{k_2}) \\
&= e(a, s)e(a, t)
\end{align} e ( a , s t ) = e ( a , g k 1 + k 2 ) = e ( a , g ) k 1 + k 2 = e ( a , g ) k 1 e ( a , g ) k 2 = e ( a , g k 1 ) e ( a , g k 2 ) = e ( a , s ) e ( a , t ) 我们可以看到,该结论与之前提到的双线性性质在循环群中是等价的。类似的,我们还有
e ( s t , a ) = e ( s , a ) e ( t , a ) e(st, a) = e(s, a)e(t, a) e ( s t , a ) = e ( s , a ) e ( t , a ) (换成除法同样适用)
e ( a , b ) = e ( b , a ) e(a, b) = e(b, a) e ( a , b ) = e ( b , a )
Fuzzy IBE方案 Fuzzy IBE与传统IBE类似,都需要KGC的参与。该方案的组成部分如下:
KGC密钥生成:假设所有属性的集合为U \mathcal{U} U ,为了简单起见,取U \mathcal{U} U 为Z p ∗ \mathbb{Z}_p^* Z p ∗ 中的前∣ U ∣ |\mathcal{U}| ∣ U ∣ 个元素,即1 , 2 , . . . , ∣ U ∣ 1, 2, ..., |\mathcal{U}| 1 , 2 , ... , ∣ U ∣ 。e : G 1 × G 1 → G 2 e: \mathbb{G}_1 \times \mathbb{G}_1 \rightarrow \mathbb{G}_2 e : G 1 × G 1 → G 2 是一个定义在阶为素数p p p 的群上的双线性对。
从Z p \mathbb{Z}_p Z p 中随机取t 1 , . . . , t ∣ U ∣ , y t_1, ..., t_{|\mathcal{U}|}, y t 1 , ... , t ∣ U ∣ , y 作为主密钥保密存储
将T 1 = g t 1 , . . . , T ∣ U ∣ = g t ∣ U ∣ , Y = e ( g , g ) y T_1 = g^{t_1}, ..., T_{|\mathcal{U}|} = g^{t_{|\mathcal{U}|}}, Y = e(g, g)^y T 1 = g t 1 , ... , T ∣ U ∣ = g t ∣ U ∣ , Y = e ( g , g ) y 作为公开参数公开
用户密钥生成:对于持有属性集合ω ∈ U \omega \in \mathcal{U} ω ∈ U 的用户(假设∣ ω ∣ ≥ d |\omega| \ge d ∣ ω ∣ ≥ d ),KGC随机选取一个系数在Z p \mathbb{Z}_p Z p 中的d − 1 d - 1 d − 1 阶多项式q q q 使得q ( 0 ) = y q(0) = y q ( 0 ) = y 。用户的私钥即为( D i ) i ∈ ω , D i = g q ( i ) t i (D_i)_{i \in \omega}, D_i = g^{\frac{q(i)}{t_i}} ( D i ) i ∈ ω , D i = g t i q ( i ) 。(注意我们这里能直接使用q ( i ) , i ∈ ω q(i), i \in \omega q ( i ) , i ∈ ω 是因为密钥生成阶段作出的假设U ⊂ Z p ∗ \mathcal{U} \subset \mathbb{Z}_p^* U ⊂ Z p ∗ )
加密:假设加密使用的属性集合为ω ′ \omega' ω ′ ,待加密消息M ∈ G 2 M \in \mathbb{G}_2 M ∈ G 2 。
随机选取s ∈ Z p s \in \mathbb{Z}_p s ∈ Z p
计算E = ( ω ′ , E ′ = M Y s , { E i = T i s } i ∈ ω ′ ) E = (\omega', E' = MY^s, \{E_i = T_i^s\}_{i \in \omega'}) E = ( ω ′ , E ′ = M Y s , { E i = T i s } i ∈ ω ′ ) 作为密文
解密: 当且仅当∣ ω ′ ∩ ω ∣ ≥ d |\omega' \cap \omega| \ge d ∣ ω ′ ∩ ω ∣ ≥ d 时,我们可以解密消息。 取S = ω ′ ∩ ω , ∣ S ∣ = d S = \omega' \cap \omega, |S| = d S = ω ′ ∩ ω , ∣ S ∣ = d ,记Δ i , S \Delta_{i, S} Δ i , S 为拉格朗日插值中点( i , q ( i ) ) (i, q(i)) ( i , q ( i )) 对应的系数,即
Δ i , S ( x ) = ∏ j ∈ S , j ≠ i x − x j x i − x j \Delta_{i, S}(x) = \prod_{j \in S, j \ne i} \frac{x - x_j}{x_i - x_j} Δ i , S ( x ) = j ∈ S , j = i ∏ x i − x j x − x j (上式中x i = i , x j = j x_i = i, x_j = j x i = i , x j = j ) 将密文中的E ′ E' E ′ 展开有:
E ′ = M Y s = M e ( g , g ) y s E' = MY^s = Me(g, g)^{ys} E ′ = M Y s = M e ( g , g ) y s 根据拉格朗日插值公式,我们有
y = q ( 0 ) = ∑ i ∈ S q ( i ) Δ i , S ( 0 ) y = q(0) = \sum_{i \in S}q(i)\Delta_{i, S}(0) y = q ( 0 ) = i ∈ S ∑ q ( i ) Δ i , S ( 0 ) 因此
e ( g , g ) y s = e ( g , g ) ∑ i ∈ S q ( i ) Δ i , S ( 0 ) s = ∏ i ∈ S e ( g , g ) q ( i ) Δ i , S ( 0 ) s = ∏ i ∈ S e ( g , g ) q ( i ) t i s t i Δ i , S ( 0 ) = ∏ i ∈ S e ( g q ( i ) t i , g s t i ) Δ i , S ( 0 ) = ∏ i ∈ S e ( D i , E i ) Δ i , S ( 0 ) \begin{align}
e(g, g)^{ys} &= e(g, g)^{\sum_{i \in S}q(i)\Delta_{i, S}(0)s} \\
&= \prod_{i \in S}e(g, g)^{q(i)\Delta_{i, S}(0)s} \\
&= \prod_{i \in S}e(g, g)^{\frac{q(i)}{t_i}st_i\Delta_{i, S}(0)} \\
&= \prod_{i \in S}e(g^{\frac{q(i)}{t_i}}, g^{st_i})^{\Delta_{i, S}(0)} \\
&= \prod_{i \in S}e(D_i, E_i)^{\Delta_{i, S}(0)} \\
\end{align} e ( g , g ) y s = e ( g , g ) ∑ i ∈ S q ( i ) Δ i , S ( 0 ) s = i ∈ S ∏ e ( g , g ) q ( i ) Δ i , S ( 0 ) s = i ∈ S ∏ e ( g , g ) t i q ( i ) s t i Δ i , S ( 0 ) = i ∈ S ∏ e ( g t i q ( i ) , g s t i ) Δ i , S ( 0 ) = i ∈ S ∏ e ( D i , E i ) Δ i , S ( 0 ) 因此消息M = E ′ / ∏ i ∈ S e ( D i , E i ) Δ i , S ( 0 ) M = E' / \prod_{i \in S}e(D_i, E_i)^{\Delta_{i, S}(0)} M = E ′ / ∏ i ∈ S e ( D i , E i ) Δ i , S ( 0 )
我们可以看到,在上述方案中,KGC的主密钥和公共参数的大小随着属性取值空间∣ U ∣ |\mathcal{U}| ∣ U ∣ 的增大而线性增大。这无疑限制了其应用场景。因此下面我们将介绍一个改进的Fuzzy IBE方案。
更大的属性空间 论文作者提供了另一种方案,该方案允许将Z p ∗ \mathbb{Z}_p^* Z p ∗ 作为其属性空间,但是加密使用的身份中的最大属性数量被限制为一个固定的值n n n 。
在这个更大的属性空间下,用户可以使用任意的字符串作为其属性,然后通过一个可靠的哈希函数H : { 0 , 1 } ∗ → Z p ∗ H: \{0, 1\}^* \rightarrow \mathbb{Z}_p^* H : { 0 , 1 } ∗ → Z p ∗ 将其映射到上述属性空间中。
该方案的组成部分如下:
KGC密钥生成:
选择g 1 = g y , g 2 ∈ G 1 g_1 = g^y, g_2 \in \mathbb{G}_1 g 1 = g y , g 2 ∈ G 1 。
从G 1 \mathbb{G}_1 G 1 中随机选取t 1 , . . . , t n + 1 t_1, ..., t_{n + 1} t 1 , ... , t n + 1 ,定义N = { 1 , . . . , n + 1 } N = \{1, ..., n + 1\} N = { 1 , ... , n + 1 } 以及函数T T T :
T ( x ) = g 2 x n ∏ i = 1 n + 1 t i Δ i , N ( x ) T(x) = g_2^{x^n}\prod_{i = 1}^{n + 1}t_i^{\Delta_{i, N}(x)} T ( x ) = g 2 x n i = 1 ∏ n + 1 t i Δ i , N ( x ) 这里T T T 可以被看作某个n n n 阶多项式g 2 x n g h ( x ) g_2^{x^n}g^{h(x)} g 2 x n g h ( x ) 的函数,其中h ( i ) = k i , g k i = t i h(i) = k_i, g^{k_i} = t_i h ( i ) = k i , g k i = t i 。
将y y y 作为主密钥,g 1 , g 2 , t 1 , . . . , t n + 1 g_1, g_2, t_1, ..., t_{n + 1} g 1 , g 2 , t 1 , ... , t n + 1 作为公开参数
密钥生成:对于拥有身份ω \omega ω 的用户
KGC随机选择一个d − 1 d -1 d − 1 阶多项式q q q 使得q ( 0 ) = y q(0) = y q ( 0 ) = y
用户私钥分为两部分,分别为{ D i } i ∈ ω , D i = g 2 q ( i ) T ( i ) r i \{D_i\}^{i \in \omega}, D_i = g_2^{q(i)}T(i)^{r_i} { D i } i ∈ ω , D i = g 2 q ( i ) T ( i ) r i 以及{ d i } i ∈ ω , d i = g r i \{d_i\}_{i \in \omega}, d_i = g^{r_i} { d i } i ∈ ω , d i = g r i 。其中r i r_i r i 是从Z p \mathbb{Z}_p Z p 中随机选取的。
加密:使用身份ω ′ \omega' ω ′ 加密消息M ∈ G 2 M \in \mathbb{G}_2 M ∈ G 2 的过程如下:
随机选取s ∈ Z p s \in \mathbb{Z}_p s ∈ Z p
计算密文E = ( ω ′ , E ′ = M e ( g 1 , g 2 ) s , E ′ ′ = g s , { E i = T ( i ) s } i ∈ ω ) E = (\omega', E' = Me(g_1, g_2)^s, E'' = g^s, \{E_i = T(i)^s\}_{i \in \omega}) E = ( ω ′ , E ′ = M e ( g 1 , g 2 ) s , E ′′ = g s , { E i = T ( i ) s } i ∈ ω )
解密:由于
e ( g 1 , g 2 ) s = e ( g y , g 2 ) s = e ( g s , g 2 ) y = e ( E ′ ′ , g 2 ) ∑ i ∈ S q ( i ) Δ i , S ( 0 ) = ∏ i ∈ S e ( E ′ ′ , g 2 q ( i ) ) Δ i , S ( 0 ) = ∏ i ∈ S ( e ( E ′ ′ , D i ) e ( E ′ ′ , T ( i ) r i ) ) Δ i , S ( 0 ) = ∏ i ∈ S ( e ( E ′ ′ , D i ) e ( g r i , T ( i ) s ) ) Δ i , S ( 0 ) = ∏ i ∈ S ( e ( E ′ ′ , D i ) e ( d i , E i ) ) Δ i , S ( 0 ) \begin{align}
e(g_1, g_2)^s &= e(g^y, g_2)^s \\
&= e(g^s, g_2)^y \\
&= e(E'', g_2)^{\sum_{i\in S}q(i)\Delta_{i, S}(0)} \\
&= \prod_{i \in S}e(E'', g_2^{q(i)})^{\Delta_{i, S}(0)} \\
&= \prod_{i \in S}(\frac{e(E'', D_i)}{e(E'', T(i)^{r_i})})^{\Delta_{i, S}(0)} \\
&= \prod_{i \in S}(\frac{e(E'', D_i)}{e(g^{r_i}, T(i)^{s})})^{\Delta_{i, S}(0)} \\
&= \prod_{i \in S}(\frac{e(E'', D_i)}{e(d_i, E_i)})^{\Delta_{i, S}(0)}
\end{align} e ( g 1 , g 2 ) s = e ( g y , g 2 ) s = e ( g s , g 2 ) y = e ( E ′′ , g 2 ) ∑ i ∈ S q ( i ) Δ i , S ( 0 ) = i ∈ S ∏ e ( E ′′ , g 2 q ( i ) ) Δ i , S ( 0 ) = i ∈ S ∏ ( e ( E ′′ , T ( i ) r i ) e ( E ′′ , D i ) ) Δ i , S ( 0 ) = i ∈ S ∏ ( e ( g r i , T ( i ) s ) e ( E ′′ , D i ) ) Δ i , S ( 0 ) = i ∈ S ∏ ( e ( d i , E i ) e ( E ′′ , D i ) ) Δ i , S ( 0 ) 我们可以得到M = E ′ / ∏ i ∈ S ( e ( E ′ ′ , D i ) e ( d i , E i ) ) Δ i , S ( 0 ) = E ′ ∏ i ∈ S ( e ( d i , E i ) e ( E ′ ′ , D i ) ) Δ i , S ( 0 ) M = E' / \prod_{i \in S}(\frac{e(E'', D_i)}{e(d_i, E_i)})^{\Delta_{i, S}(0)} = E'\prod_{i \in S}(\frac{e(d_i, E_i)}{e(E'', D_i)})^{\Delta_{i, S}(0)} M = E ′ / ∏ i ∈ S ( e ( d i , E i ) e ( E ′′ , D i ) ) Δ i , S ( 0 ) = E ′ ∏ i ∈ S ( e ( E ′′ , D i ) e ( d i , E i ) ) Δ i , S ( 0 )
TODO: 这是怎么构造出来的?
参考资料