可证明安全的密文策略基于属性加密(Provably Secure Ciphertext Policy ABE)

1.引言

基于属性的加密(Attribute-Based Encryption)被提出后,CP-ABE(Ciphertext Policy Attribute-Based Encryption,密文策略基于属性加密)和KP-ABE(Key Policy Attribute-Based Encryption,密钥策略基于属性加密)都相继被提出,但是绝大多数CP-ABE方案都是CPA(选择明文攻击)安全的,或者sCPA(selective-CPA)安全的,并且只能实现单调的访问结构(即AND,OR)。

而下面说的这篇文章实现了CCA(选择密文攻击)安全,并且实现了关系“非”(NOT)的操作。

CP-ABE的具体概念可以参照博客:https://blog.csdn.net/ping802363/article/details/65639016

2.方案构造

2.1定义

令属性集N={1,2,3...n},称属性i和¬i为"文字"(literals)。在这节中考虑的访问结构全部为由AND门连接的这些"文字",可以表示为{\wedge}_{i \in I}\underline{i},其中I\subseteq N\underline{i}表示文字(即i或¬i)。

2.2 CPA方案构造

  • Setup

一个素数阶p的双线性群G,和一个双线性映射G\times G \rightarrow G_1.随机元素y,t_1,t_2,...t_{3n}\in \mathbb{Z}_p和群G的生成元g.

Y=e(g,g)^y,T_i=g^{t_i},其中i \in \{1,2,...,3n\}.得到PK=<e,g,Y,T_1,...,T_{3n}>,MK=<y,t_1,...,t_{3n}>.

那么需要注意的是,T_i,T_{n+i},T_{2n+i}代表i出现的三种情况,分别是正(Positive),负(negative),不在乎(don't care).正和负很好理解,那么don't care表示未出现在AND门中的属性i.

  • Encrypt

给定明文M,AND门的一个访问结构W={\wedge}_{i \in I}\underline{i},随机选择s \in \mathbb{Z}_p,并令\widetilde{C}=M\cdot Y^s,\hat{C}=g^s.接着计算C_i,计算过程如下:

  1. \underline{i}=i,则C_i=T_i^s.
  2. \underline{i}=¬i,则C_i=T_{n+i}^s.
  3. i \in N/I,则C_i=T_{2n+i}^s.

密文最终为:CT=<W,\widetilde{C},\hat{C},\left \{ C_i|i \in N \right \}>.

  • KeyGen

令S表示输入属性集合.每个i\notin S表示为负(negative)属性,首先,对于每个i \in N,选择一个随机数r_i \in \mathbb{Z}_p,记r={\sum} _{i=1}^n r_i.令\hat{D}=g^{y-r}.接着计算D_i,F_i,计算过程如下:

  1. 对于\forall i \in N:1)D_i=g^{\frac{r_i}{t_i}}\left ( i \in S \right );2)D_i=g^{\frac{r_i}{t_{n+i}}}\left ( i \notin S \right ).
  2. 对于\forall i \in N:F_i=g^{\frac{r_i}{t_{2n+i}}}.

私钥最终为:SK=<\hat{D},\left \{ <D_i,F_i>|i \in N \right \}>.

  • Decrypt

假设密文为CT=<W,\widetilde{C},\hat{C},\left \{ C_i|i \in N \right \}>,其中W={\wedge}_{i \in I}\underline{i}.令S表示输入属性集,私钥SK=<\hat{D},\left \{ <D_i,F_i>|i \in N \right \}>.

对于每个i \in I,计算e\left ( C_i,D_i \right ).

  1. 如果\underline{i}=ii \in S,则e\left ( C_i,D_i \right )=e(g^{t_is},g^{\frac{r_i}{t_i}})=e(g,g)^{r_is}.
  2. \underline{i}=¬ii\notin S,则e\left ( C_i,D_i \right )=e(g^{t_{(n+i)}s},g^{\frac{r_i}{t_{(n+i)}}})=e(g,g)^{r_is}.
  3. i \notin I,则e\left ( C_i,F_i \right )=e(g^{t_{(2*n+i)}s},g^{\frac{r_i}{t_{(2*n+i)}}})=e(g,g)^{r_is}.

最终计算明文:M=\frac{\widetilde{C}}{Y^s}=\frac{\widetilde{C}}{e(g,g)^{ys}},其中e(g,g)^{ys}=e(g^{s},g^{y-s})\cdot e(g,g)^{rs}=e(\hat{C},\hat{D})\cdot \prod_{i=1}^ne(g,g)^{r_is}.

 

接下来,举一个实例:

假设整个属性集N为:1,2,3,4,5.

W=2 AND ¬3 AND 4,则可得到I={2,3,4}.设用户属性集为S={2,4}

在加密阶段得到的部分密文为:

C_1=T_{2*5+1}^s,C_2=T_2^s,C_3=T_{5+3},C_4=T_4^s,C_5=T_{2*5+5}^s.

在密钥生成阶段得到的部分密钥为:

D_1=g^{\frac{r_1}{t_{5+1}}},D_2=g^{\frac{r_2}{t_{2}}},D_3=g^{\frac{r_3}{t_{5+3}}},D_4=g^{\frac{r_4}{t_{4}}},D_5=g^{\frac{r_5}{t_{5+5}}}.

F_1=g^{\frac{r_1}{t_{2*5+1}}},F_2=g^{\frac{r_2}{t_{2*5+2}}},F_3=g^{\frac{r_3}{t_{2*5+3}}},F_4=g^{\frac{r_4}{t_{2*5+4}}},F_5=g^{\frac{r_5}{t_{2*5+5}}}.

解密:

1.如果\underline{i}=ii \in S,满足这个条件的分别是2,4.

所以计算:e\left ( C_2,D_2 \right )=e(g^{t_2s},g^{\frac{r_2}{t_2}})=e(g,g)^{r_2s},e\left ( C_4,D_4 \right )=e(g^{t_4s},g^{\frac{r_4}{t_4}})=e(g,g)^{r_4s}.

2.\underline{i}=¬ii\notin S,满足这个条件的为¬3.

所以计算:e\left ( C_3,D_3 \right )=e(g^{t_{(5+3)}s},g^{\frac{r_3}{t_{(5+3)}}})=e(g,g)^{r_3s}.

3.i \notin I,满足这个条件的为1,5.

所以计算:e\left ( C_1,F_1 \right )=e(g^{t_{(2*5+1)}s},g^{\frac{r_1}{t_{(2*5+1)}}})=e(g,g)^{r_1s}e\left ( C_5,F_5 \right )=e(g^{t_{(2*5+5)}s},g^{\frac{r_5}{t_{(2*5+5)}}})=e(g,g)^{r_5s}.

故根据公式即可解得密文.

2.3 CCA方案构造

这节主要使用了强存在不可伪造签名来实现CCA安全.假设K_v是长度为m的比特串,令K_{v,i}K_v中第i个比特.令\mathcal{M}表示{1,...,m}.

  • Setup

此阶段继承了前面的构造,除此之外,增加了一些子项.随机选择u_1,u_2,...u_{2m}\in \mathbb{Z}_p,对于每个u_i \in \{1,2,...2m\},定义U_i=g^{u_i}.最终得到公钥和主密钥分别为:PK=<e,g,Y,T_1,...,T_{3n},U_1,...,U_{2m}>,MK=<y,t_1,...,t_{3n},u_1,...,u_{2m}>.

  • Encrypt

给定明文M,AND门的一个访问结构W={\wedge}_{i \in I}\underline{i}.在运行SigKeygen算法后生成的密钥对<K_v,K_s>.随机选择s \in \mathbb{Z}_p,利用之前构造方法得到<\widetilde{C},\widehat{C},C_1,...,C_n>,对于每个i \in \mathcal{M},如果1)K_{v,i}=0,则E_i=U_i^s.2)否则E_i=U_{m+i}^s.

利用签名密钥K_s运行签名算法(Sign)得到<W,\widetilde{C},\hat{C},\left \{ C_i|i \in N \right \},\left \{ E_i|i \in \mathcal{M} \right \}>上的签名\sigma,最终得到的密文为:CT=<W,\widetilde{C},\hat{C},\left \{ C_i|i \in N \right \},\left \{ E_i|i \in \mathcal{M} \right \},\sigma ,K_v>.

  • KeyGen

与之前构造相同,对于每个i \in N,选择一个随机数r_i \in \mathbb{Z}_p,定义<D_i,F_i>.除此之外,对于每个每个i \in \mathcal{M},选择一个随机数w_i \in \mathbb{Z}_p.此时定义r={\sum} _{i=1}^n r_i+{\sum} _{i=1}^m w_i.令\hat{D}=g^{y-r}.对于每个i \in \mathcal{M},令G_i^0=g^{\frac{w_i}{u_i}},G_i^1=g^{\frac{w_i}{u_{m+i}}}.得到私钥为SK=<\hat{D},\left \{ <D_i,F_i>|i \in N \right \},\left \{ <G_i^0,G_i^1>|i \in \mathcal{M} \right \}>.

  • Decrypt

给定密文<W,\widetilde{C},\hat{C},\left \{ C_i|i \in N \right \},\left \{ E_i|i \in \mathcal{M} \right \},\sigma ,K_v>,首先运行\sigma,K_v,<W,\widetilde{C},\hat{C},\left \{ C_i|i \in N \right \},\left \{ E_i|i \in \mathcal{M} \right \}>上的验证算法.如果\sigma

合法,则继续进行解密,否则停止解密.

假定密钥的形式为S集合上<\hat{D},\left \{ <D_i,F_i>|i \in N \right \},\left \{ <G_i^0,G_i^1>|i \in \mathcal{M} \right \}>.与之前解密方式一样,对于每个i \in I,计算e\left ( C_i,D_i \right ),对于每个i \in N/I,计算e\left ( C_i,F_i \right ).假设S满足W,对于每个i \in N,则可恢复e(g,g)^{r_is}.

对于每个对于每个i \in \mathcal{M},若K_{v,i}=0计算e\left ( E_i,G_i^0 \right ):e\left ( E_i,G_i^0 \right )=e(g^{u_is},g^\frac{w_i}{u_i})=e(g,g)^{w_is}.若K_{v,i}=1计算e\left ( E_i,G_i^1 \right ):e\left ( E_i,G_i^1 \right )=e(g^{u_{m+i}s},g^\frac{w_i}{u_{m+i}})=e(g,g)^{w_is}.最后计算密文最终计算明文:M=\frac{\widetilde{C}}{Y^s}=\frac{\widetilde{C}}{e(g,g)^{ys}},其中e(g,g)^{ys}=e(g^{s},g^{y-s})\cdot e(g,g)^{rs}=e(\hat{C},\hat{D})\cdot \prod_{i=1}^ne(g,g)^{r_is}\cdot \prod_{i=1}^me(g,g)^{w_is}.

  • 2.4 优化

  • 首先考虑对属性的优化,在这里将属性分为多个层次,加密/解密的复杂性以n为单位线性增长,因为必须处理每个r_i才能恢复r。密文开销也是如此。这对于少量的AND门来说是不高效的:如果W中出现的"文字"的数量很少,那么大部分的计算都涉及到"不在乎(don't care)"元素。那么作者给出的方式如下:

假设系统中有n=8个属性,组织这样的一棵树,若加密器只关心属性1和4,然后在密文中提供三个"不在乎"元素T_{2n+2},T_{2n+3},T_{[5,..,8]}.而原来的方式需要T_{2n+2},T_{2n+3},T_{2n+5},T_{2n+6},T_{2n+7},T_{2n+8}.

  • 文章中只实现了AND门,而未实现任意阈值门(包括OR门),作者的解决办法与访问树中秘密值s分发类似.举例来说明:

根处的阈值门是2 / 3,因此选择一个随机的1阶多项式p,使p(0) = s。对于i = 1,2,3,令si= p(i)。然后,给定s1,s2和s3中的任意两个值,就可以恢复s。然后对于下面的三个子树,就可以用文中提出的方案进行处理.但是这样处理并不安全,因为s1,s2和s3都没有绑定一个随机值,例如:用户具有属性¬1, 2, 3, 4,¬5,他只满足中间这颗子树,所以不应该被解密.但是由于在第一颗子树中,属性5是一个"不在乎"属性,那么他可以恢复e(g,g)^{r_5{s_1}}e(g,g)^{r_5{s_2}},由于s1和s2是一阶多项式上的两个不同的点,因此可以通过插值恢复e(g,g)^{r_5{s_3}}.此外,用户有属性3和4,在最后一颗子树上,属性1和2为"不在乎"属性,对于i = 1,2,3,4,他可以(合法地)获得e(g,g)^{r_i{s_3}}。通过插值将这些数据与e(g,g)^{r_5{s_3}}结合起来,用户现在可以恢复e(g,g)^{r{s_3}},得到了e(g,g)^{r{s_2}}e(g,g)^{r{s_3}},通过插值就可以解得e(g,g)^{r{s}},所以这是不安全的.

作者针对这个问题,对消息M本身执行秘密共享过程,而不是对消息的随机值s执行秘密共享过程。在上面的示例中,获得M的份额M1,M2和M3,然后分别使用独立的随机指数s1,s2和s3对这些共享进行加密。攻击者不就能再利用"不关心"属性和多项式插值进行解密了。

3 总结

相比BSW方案Water方案,此文章虽实现了CCA安全,但牺牲了灵活性.比如在最后优化访问结构时会出现漏洞,虽然作者给出了折中的解决办法,但未证明其安全性,并且在树结构很复杂时,其加密开销其实并不低.

附上文章信息:

L. Cheung and C. Newport, “Provably secure ciphertext-policy ABE,” in IACR Cryptology ePrint Archive, vol. 2007, 01 2007, pp. 456–465.

 

参考文献

[1]Sahai A, Waters B R. Fuzzy identity-based encryption[A]. Ronald Cramer. Proceedings of the 24th Annual International Conference on Theory and Applications of Cryptographic Techniques[C]. Berlin: Springer, 2004. 457-473.

[2]Bethencourt J, Sahai A, Waters B. Ciphertext-policy attribute-based encryption[A]. IEEE Symposium on Security and Privacy[C]. Washington: IEEE Computer Society, 2007. 321-334.

[3]B.Waters. Ciphertext-policy attribute-based encryption: an expressive, efficient, and provably secure realization[A]. Edinburgh :Proceedings of the 14th International Conference on Practice and Theory in Public Key Cryptography[C],2011.53–70.

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值