一文搞懂CP-ABE,基于访问控制树的BSW方案原理分析与源码实现【基于C++、PBC库】

一. 概述

1.1 CP-ABE基础介绍

    属性基加密(Attribute-Based Encryption,ABE)是一种公钥加密技术,它允许数据加密和解密基于用户的属性集。ABE主要分为两种类型:密文策略属性基加密(Ciphertext-Policy ABE,CP-ABE)和密钥策略属性基加密(Key-Policy ABE,KP-ABE)。在CP-ABE中,数据加密者定义访问策略,并将其嵌入到密文中;用户的解密密钥与其属性集相关联。只有当用户的属性集满足密文中的访问策略时,才能成功解密。

1.2 访问控制树与BSW方案原理

    访问控制树的结构应用于 J. Bethencourt, A. Sahai 和 B. Waters在 IEEE Symposium on Security and Privacy (SP '07) [1], 2007年上发布基于密文策略的属性加密上提及的。这个方案现在也常被简称为BSW(取其三位作者名字的首字母)方案。该方案其实是改善了Sahai等人在2005年发表的基于身份的模糊加密方案(FIBE),该方案将用户身份分解成一系列描述用户身份的属性,加密者加密数据时指定一个属性集合和阈值d,解密者必须拥有至少d个给定的属性才能正确解密密文。FIBE方案是BSW方案的雏形。因为BSW方案是对FIBE方案的改进,在算法设计中也使用了FIBE方案的思想和运算原理,在其基础上添加了访问控制树,以及递归求解访问控制树。所以这里就只介绍BSW方案,只要理解了BSW方案也就理解了FIBE方案。

1.2.1 系统模型与角色

  • 属性授权中心(Authority):负责系统的初始化和用户私钥的生成。
  • 数据加密者(Encryptor):定义访问策略并加密数据。
  • 数据解密者(Decryptor):持有属性集的用户,尝试解密密文。

1.2.2 主要算法

BSW方案包含以下四个主要算法:

  • Setup(初始化):生成公共参数和主密钥。
  • KeyGen(密钥生成):根据用户的属性集生成私钥。
  • Encrypt(加密):根据指定的访问策略加密消息。
  • Decrypt(解密):如果用户的属性集满足访问策略,则可以成功解密密文。

1.2.3 访问结构与访问树

    BSW方案使用访问树来表示访问策略。访问树的叶子节点是属性,内部节点是逻辑门(如AND、OR)。访问树可以表示复杂的逻辑关系,定义哪些属性组合可以解密密文。

1.2.4 数学基础

  • 双线性映射:设 G 0 G_0 G0 G T G_T GT是两个有限循环群,阶为素数 p p p e : G 0 × G 0 → G T e: G_0 \times G_0 \rightarrow G_T e:G0×G0GT 是一个双线性映射,具有以下性质:
    • 双线性性:对于任意 a , b ∈ Z p a,b \in \mathbb{Z}_p a,bZp e ( g a , h b ) = e ( g , h ) a b e(g^a, h^b) = e(g,h)^{ab} e(ga,hb)=e(g,h)ab
    • 非退化性 e ( g , g ) ≠ 1 e(g,g) \neq 1 e(g,g)=1
    • 可计算性:映射 e e e 在计算上是高效的。

二. 具体算法流程

    该方案用到的基本条件:令 G 0 G_0 G0 为一个阶为素数 p p p 的双线性群, g g g G 0 G_0 G0 的生成元。此外,令 e : G 0 × G 0 → G 1 e: G_0 \times G_0 \rightarrow G_1 e:G0×G0G1 表示双线性映射。群的大小由安全参数 λ \lambda λ 决定。对于 i ∈ Z p i \in Z_p iZp Z p Z_p Zp 中元素组成的集合 S S S ,我们定义拉格朗日系数 L i ( x ) = Δ i , S ( x ) = ∏ j ∈ S , j ≠ i x − j i − j L_i(x) = \Delta_{i, S}(x)=\prod_{j \in S, j \neq i} \frac{x-j}{i-j} Li(x)=Δi,S(x)=jS,j=iijxj。此外,我们应用了一个哈希函数 + H : { 0 , 1 } ∗ → G 0 { }^{+} H:\{0,1\}^* \rightarrow G_0 +H:{ 0,1}G0 ,该函数能将任意字符串描述的属性映射为一个随机的群元素。

2.1 Setup(初始化)

    该算法以隐含安全参数 λ \lambda λ 作为输入,输出系统公钥 P K P K PK 和 主私钥 M K M K MK

  • 首先选择一个阶为素数 p p p 的双线性群 G 0 G_0 G0 ,该群的生成元为 g g g
  • 然后,随机选择加密指数 α , β ∈ Z p \alpha, \beta \in Z_p α,βZp
  • 输出的系统公钥为 P K = ( G 0 , g , h = g β , f = g 1 β , e ( g , g ) α ) P K=\left(G_0, g, h=g^\beta, f=g^{\frac{1}{\beta}}, e(g, g)^\alpha\right) PK=(G0,g,h=gβ,f=gβ1,e(g,g)α)
  • 系统主密钥为 M K = ( β , g α ) M K=\left(\beta, g^\alpha\right) MK=(β,gα)

2.2 KeyGen(密钥生成)

    KeyGen ⁡ ( M K , P K , S ) → S K \operatorname{KeyGen}(M K, P K, S) \rightarrow S K KeyGen(MK,PK,S)SK :该算法以系统主私钥 M K M K MK ,公钥 P K P K PK 和属性集合 S S S 作为输入,输出用户私钥 S K S K SK

  • 首先选择一个随机数 r ∈ Z p r \in Z_p rZp (随机数用于抵抗合谋攻击),然后对于每个属性 j ∈ S j \in S jS ,随机选择 r j ∈ Z p r_j \in Z_p rjZp 。这个过程是属性集合 S S S 里有几个属性,那就在 Z p Z_p Zp 里面随机找几个数(即 r j r_j rj )。
  • 然后再按照如下过程计算用户私钥:
    S K = ( D = g α + r β , ∀ j ∈ S : D j = g r ⋅ H ( j ) r j , D j ′ = g r j ) S K=\left(D=g^{\frac{\alpha+r}{\beta}}, \forall j \in S: D_j=g^r \cdot H(j)^{r_j}, D_j^{\prime}=g^{r_j}\right) SK=(D=gβα+r,jS:Dj=grH(j)rj,Dj=grj)
        我们利用 P K P K PK M K M K MK 里的相关参数和属性集合 S S S 来计算私钥。 ∀ j ∈ S : D j = g r ⋅ H ( j ) r j , D j ′ = g r j \forall j \in S: D_j=g^r \cdot H(j)^{r_j}, D_j^{\prime}=g^{r_j} jS:Dj=grH(j)rj,Dj=grj ,则表示的是属性集合 S S S 里含有几个属性,我们就从 Z p Z_p Zp 里选出几个随机数来计算相应的 D j D_j Dj D j ′ D_j^{\prime} Dj

2.3 Encrypt(加密)

   加密和解密是算法中设计的关键部分!

    Encrypt ⁡ ( P K , M , A ) → C T \operatorname{Encrypt}(P K, M, A) \rightarrow C T Encrypt(PK,M,A)CT :该算法输入系统公钥 P K P K PK 、明文 M M M 和基于属性的访问(树)结构 A A A(包含所有属性) ,输出对明文 M M M 加密后密文 C T C T CT ,且只有用户拥有的属性集合满足访问结构 A A A 才能正确解密密文 C T C T CT

  • 该算法首先对访问结构 A A A 中的访问控制树 T T T 中的每个节点 x x x (包括叶子节点) 选择一个多项式 q x q_x qx 。这些多项式自上向下从根节点 R R R 进行选择。对于树中的每一个节点 x x x ,设多项式 q x q_x qx 的阶 d x d_x dx 为节点 x x x 的阈值 k x k_x kx 减1,即 d x = k x − 1 d_x=k_x-1 dx=kx1
  • 从根节点 R R R 开始随机选择 s ∈ Z p s \in Z_p sZp 并设置 q R ( 0 ) = s q_R(0)=s qR(0)=s 。然后随机选择多项式 q R q_R qR 的其他 d R d_R dR 个点来定义该多项式。对于任何其他节点 x x x ,令 q x ( 0 ) = q parent  ( x ) ( index ⁡ ( x ) ) q_x(0)=q_{\text {parent }(x)}(\operatorname{index}(x)) qx(0)=qparent (x)(index(x)) 且随机选择多项式 q x q_x qx 的其他 d x d_x dx 个点来定义该多项式。访问树的结构实例如下图所示:其中根节点隐藏的秘密值就是s=5,然后逐级向下进行秘密分享,根据下面这个示例图详细分析BSW秘密分享方案的原理:(1)随机生成根节点秘密值s=5;(2)根据上面的规则生成随机多项式 q R ( x ) = 5 + 3 x q_R(x)=5+3x qR(x)=5+3x;(3)将index值代入上述 q R ( i n d e x ) q_R(index) q
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tutu-hu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值