密钥策略的属性基加密(KP-ABE)

本文介绍了KP-ABE(密钥策略属性基加密)的基本概念、加密过程及解密算法。KP-ABE通过访问树实现细粒度的访问控制,确保只有符合特定属性条件的用户才能解密数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

KP-ABE的基本知识

KP-ABE过程

KP-ABE的说明

参考文献


KP-ABE的基本知识

基本的属性基加密将密文和密钥都与一组属性关联起来,当密文与密钥之间至少有d个属性重合时,用户就可以解密密文。虽然这个策略对于生物识别的容错加密有一定的作用,但访问控制缺乏灵活性限制了它的应用。密钥策略属性基加密(KP-ABE)的出现弥补了这一缺陷,在KP-ABE系统中,密文与一组描述性属性相关联,用户的私钥与一个访问结构相关联,当密文中的属性集满足用户私钥中的访问策略时,密文才能够被解密。这使得属性基加密能够细粒度共享加密数据,KP-ABE的构造适用于审计日志信息和广播加密。

        在KP-ABE中,与用户私钥相关联的访问结构被构造为访问树。其中树的内部节点都是一个阈值门,由其子节点和阈值描述。如果num_{x}是其子节点的个数,k_{x}是其阈值,则0<k_{x}\leq num_{x}。与门和或门都可以被构造成阈值门,当k_{x}=1时,就是或门,当k_{x}=num_{x}时就是与门。叶子节点与属性相关联,由属性值和阈值k_{x}=1描述。为了便于使用访问数,还定义了一些函数。parent(x)表示树中节点的父节点。att(x)表示与树中叶节点相关联的属性,只有x节点是叶节点时才定义该函数。对于节点的子节点来说,需要对子节点进行编号,index(x)返回子节点的索引值。

        用T_{x}表示以节点x为根的树,则根为r的访问树表示为T_{r},当节点被满足时令T_{x}=1,我们递归计算所有节点,当根节点满足时,我们就可以进行解密操作。否则解密失败。

KP-ABE过程

G1是素数阶p的双线性群,g是G1的生成元。此外e:gif.latex?G1%5Ctimes%20G1%5Crightarrow%20G2表示双线性映射。安全参数k将确定群的大小。同时为gif.latex?i%5Cin%20Zpgif.latex?Zp中元素的集合gif.latex?s定义拉格朗日系数gif.latex?%5CDelta%20_%7Bi%2Cs%7D:

                                                       gif.latex?%5CDelta%20_%7Bi%2Cs%7D%28x%29%3D%5Cprod_%7Bj%5Cin%20s%2Cj%5Cneq%20i%7D%5E%7B%7D%5Cfrac%7Bx-j%7D%7Bi-j%7D.

我们将每个属性与Z_{p}^{*}中的一个唯一的元素关联起来,构造如下:

Setup:定义一个属性域U={1,2,……,n}。对于每个属性i\in U,在Zp中随机选取t_{i},最后,从Zp中随机选取y。

公布公共参数PK为:gif.latex?T_%7B1%7D%3Dg%5E%7Bt_%7B1%7D%7D%2C...%2CT_%7B%7Cu%7C%7D%3Dg%5E%7Bt_%7B%7Cu%7C%7D%7D%2CY%3De%28g%2Cg%29%5E%7By%7D

主密钥MK为:gif.latex?t_%7B1%7D%2C...t_%7B%7Cu%7C%7D%2Cy

Encryption(M,\gamma,PK):在一组属性集合\gamma下加密消息M\inG2,选择一个随机值s\inZ_{p},公布密文如下:

                                  E=(\gamma ,E{}'=MY^{s},\left \{ E_{i} =T_{i}^{s}\right \}_{i\in \gamma })

Key Generation(\tau,MK):这个算法输出一个密钥能够使用户与解密在一组属性\gamma下加密的信息,当且仅当\tau (\gamma )=1。算法过程如下:首先为树中的每个节点x选择一个多项式q_{x}(包括叶子节点),这些多项式从根节点r开始以一种自顶向下的方式选择。

        对于树中的每个节点x,设置多项式q_{x}的次数比节点阈值少一,也就是d_{x}=k_{x}-1。首先,对于根节点r,设置q_{r}(0)=y,然后d_{r}次多项式q_{r}的其他点完全随机的选取。对于任意的其他节点x,设置q_{x}(0)=q_{parent(x)}(index(x)),其他点随机选择来定义q_{x}。多项式被定义好之后,对于叶子节点x,我们将以下的秘密值给用户:

                                                       D_{x}=g^{\frac{q_{x}(0)}{t_{i}}},当i=att(x)时。

以上一组秘密值就是解密密钥D。

Decryption(E,D):解密过程为递归过程。首先定义一个递归算法DecryptNode(E,D,x),将密文E=(\gamma ,E{}',\left \{ E_{i} \right \}_{i\in \gamma }),私钥D,树中的一个节点x作为输入,输出一个G2中的元素或者\perp

        令i=att(x)。当节点是叶子节点时DecryptNode(E,D,x)=\left\{\begin{matrix} e(D_{x},E_{i}) =e(g^{\frac{q_{x}(0)}{t_{i}}},g^{s\cdot t_{i}})=e(g,g)^{s\cdot q_{x}(0)},if i\in \gamma & & \\ &\perp otherwise & \end{matrix}\right.

       当x不是一个叶子节点时,算法DecryptNode(E,D,x)过程如下:对于x的所有子节点z,调用DecryptNode(E,D,z)并保存输出为F_{z},令S_{x}为任意k_{x}大小的子节点z的集合,使得F_{z}\neq \perp,如果这样的集合不存在,则节点不满足,函数返回\perp。否则,计算如下:

                                      F_{x}=\prod_{z\in S_{x}}^{}F_{z}^{\Delta _{i},s{}'_{x}(0)}, i=index(z),s{}'_{x}=\left \{ index(z):z\in S_{x} \right \}

                                           =\prod_{z\in S_{x}}^{}(e(g,g)^{s\cdot q_{z}(0)})^{\Delta _{i,s{_{x}}'}(0)}

                                           =\prod_{z\in S_{x}}^{}(e(g,g)^{s\cdot q_{parent(z)}(index(z))})^{\Delta _{i,s{}'_{x}}(0)}

                                           =\prod_{z\in S_{x}}^{}e(g,g)^{s\cdot q_{x}(i)\cdot \Delta _{i,s{}'_{x}}(0)}

                                           =e(g,g)^{s\cdot q_{x}(0)}

最后返回结果。我们发现当访问树被满足时DecryptNode(E,D,r)=e(g,g)^{ys}=Y^{s}。因为E{}'=MY^{s},所以E{}'/Y^{s}就是我们解密出来的明文M。

KP-ABE的说明

        KP-ABE的Setup和Encryption过程和基本ABE一致,主要区别在于密钥生成和解密阶段,将基本ABE中的门限值替换成了细粒度的访问树控制结构,只有当密文中的属性满足密钥中嵌入的访问树时,用户才能解密该密文。根据密文中的属性和访问树的叶子节点开始匹配,层层递进直到根节点,若满足则可以恢复出根节点的秘密值y,从而计算出Y^{s}的值,最终解出明文M。

参考文献

GOYAL V, PANDEY O, SAHAI A, et al. Attribute-based encryption for fine-grained access control of encrypted data

### CP-ABEKP-ABE 的概念 #### 基于密文策略的属性加密 (CP-ABE) CP-ABE 是一种特定类型的属性加密方案,在这种模式下,策略被嵌入到密文中,而用户的私钥则关联着一组属性。具体来说,密文会定义一个访问控制结构,只有那些持有能匹配该结构所需属性集的用户才能成功解密消息[^2]。 对于想要发送保密信息的人来说,可以指定复杂的条件来决定谁能读取这条信息;而对于接收者而言,则不需要知道具体的权限设置细节,只要其拥有的属性组合符合条件就可以获取原始内容。 ```python # 创建带有访问树的密文示例(伪代码) policy = "(HR and Manager) or Engineer" ciphertext = encrypt(data, policy) ``` #### 基于密钥策略的属性加密(KP-ABE) 相比之下,KP-ABE 将策略编码进用户的私钥之中,这意味着每个用户的私钥都包含了关于他们有权访问哪些资源的信息。在这种情况下,数据提供者只需用目标受众共有的某些公共参数对文件进行加密,任何拥有适当授权凭证的人都可以直接尝试解码并获得明文版本的数据[^1]。 这里的关键差异在于谁负责设定访问规则——在 CP-ABE 中是由数据所有者完成这项工作,而在 KP-ABE 则由系统管理员或其他信任实体预先分配好各个主体对应的权限范围。 ```python # 用户生成带有限制条件的私钥示例(伪代码) attributes = ["HR", "Manager"] private_key = generate_private_key(attributes) ``` ### 主要区别总结 | 特征 | CP-ABE | KP-ABE | | --- | --- | --- | | **策略位置** | 密文中 | 私钥中 | | **灵活性** | 数据发布者灵活定义访问策略 | 需要在创建账户时预设权限 | | **适用场景** | 更适合动态环境下的细粒度访问控制 | 对静态环境中固定角色较为理想 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值