密码学小知识(7):简单理解密文策略基于属性加密(CP-ABE)访问树的构造与解密

在实际应用中,我们会考虑设计一种密文策略基于属性加密(CP-ABE)的方案来实现对某个系统的访问权限,而比较难理解的是访问树的构造,因此本文将简洁明了、通俗易懂的介绍如何构造访问树,以及解密出访问树的秘密值。

通常而言,访问树可用于隐藏源数据的秘密密钥,只有达到一定条件时,才能解出秘密值,即密钥。访问树,顾名思义也是一种树结构,由叶子节点、非叶子节点和根节点构成。

  • (1)根节点:即最终的源数据的秘密密钥,访问者需满足最低阈值才能获取密钥。
  • (2)非叶子节点:也称为 门限节点,访问者只有满足门限的阈值时,才能解出此节点的秘密值。
  • (3)叶子节点:数据拥有者所设定的属性和属性值,以及父节点传递过来的秘密值。

1. 构造访问树

如图所示,构建一个对某系统的访问权限控制的访问树。要实现访问某系统的访问者,需满足以下属性:

  • 第一种,满足(网安学院 OR 计算机学院)和(教师)属性。
  • 第二种,满足(网安学院 OR 计算机学院)和(周五下午 AND 信息安全专业 AND 研三)属性。
  • 第三种,满足(教师)和(周五下午 AND 信息安全专业 AND 研三)属性,但这种属性结合不存在,即只有以上两种。

在这里插入图片描述

前提,假设多项式是随机生成,且最高次数为门限值减1,其中常数项设置为秘密值

首先,根节点(门限值为2,孩子节点有3个),随机生成一个一次(c)多项式,如 f ( x ) = 6 + 2 x f(x)=6+2x f(x)=6+2x,秘密值为6。则将根节点的孩子节点从左到右依次标记为 1、2、3,将其带入根节点的多项式中,得到新生成的秘密值( f ( 1 ) = 8 , f ( 2 ) = 10 , f ( 3 ) = 12 f(1)=8, f(2)= 10, f(3)=12 f(1)=8,f(2)=10,f(3)=12)传递给孩子节点保存。

然后,“1-of-2 (OR)”节点构造OR门(满足其中一种属性),“3-of-3(AND)”节点构造AND门(满足所有属性)。这两种节点都按照上面的方式生成随机多项式,常数项为新生成的秘密值。“1-of-2 (OR)”节点随机生成一个0次(门限值1减1)多项式,即 f ( x ) = 8 f(x)=8 f(x)=8,“3-of-3(AND)”节点随机生成一个2次(门限值3减1)多项式,即 f ( x ) = 12 + 3 x + 4 x 2 f(x)=12+3x+4x^2 f(x)=12+3x+4x2。同样按照上面的方式,再传递给它们的孩子节点(即叶子节点),生成新的秘密值。

从而构建完成了如上图所示的访问树!

2. 解密访问树的秘密值

解密访问树的秘密值,正好是与构造过程相反,从叶子节点属性出发。访问者需要在属性集中寻找出和此叶子节点属性相同的属性,并用找出的属性解密出它们的秘密值,然后进一步解密其父子节点,从而到最后解密根节点的秘密值。

如在上述的访问树种,“3-of-3(AND)”节点的多项式为 f ( x ) = 12 + 3 x + 4 x 2 f(x)=12+3x+4x^2 f(x)=12+3x+4x2,其孩子节点的值为19、34、57(忽略随机数),即有 f ( 1 ) = 19 , f ( 2 ) = 34 , f ( 3 ) = 57 f(1)=19, f(2)=34, f(3)=57 f(1)=19,f(2)=34,f(3)=57,解密时只知道对应的三个点 ( 1 , 19 ) , ( 2 , 34 ) , ( 3 , 57 ) (1,19), (2,34), (3, 57) (1,19),(2,34),(3,57),而不知道多项式,而 f ( 0 ) = 12 f(0)=12 f(0)=12为它的秘密值,即已知这三个点,算出0所对应的值为多少,可以根据拉格朗日公式(可查阅相关文献,这里不再赘述)解出答案。

本文介绍的是本人理解的大致思想,还需要读相关的文献,以进一步加深印象和理解!

  • 14
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
CP-ABE(Ciphertext-Policy Attribute-Based Encryption)是一种访问控制加密技术,其特点是可以根据访问策略,将密文加密成只有符合访问策略的用户才能解密的明文。访问策略通常是一个属性集合,可以对应到用户的属性集合,因此CP-ABE技术常被应用于数据共享场景。 CP-ABE加密过程包括访问策略生成、密钥生成、加密解密四个步骤。其中访问策略生成和密钥生成是离线的,加密解密是在线的。下面是一个基于Python语言实现的CP-ABE访问控制的加密算法示例: ```python from charm.toolbox.abenc import abenc_waters09 # 初始化CP-ABE算法 abe = abenc_waters09.Waters09() # 定义访问策略 policy = '(age >= 18 and gender == female) or (role == doctor)' # 生成公钥和主密钥 pk, mk = abe.setup() # 生成用户私钥 attributes = {'age': 20, 'gender': 'female', 'role': 'doctor'} sk = abe.keygen(pk, mk, attributes) # 加密明文 plaintext = b'this is a secret message' ciphertext = abe.encrypt(pk, plaintext, policy) # 解密密文 recovered_plaintext = abe.decrypt(pk, sk, ciphertext) # 输出解密结果 print(recovered_plaintext) ``` 在上述示例中,我们使用了Charm框架提供的`abenc_waters09`模块来实现CP-ABE算法,首先进行了算法的初始化和访问策略的定义,然后生成了公钥和主密钥,再根据用户属性生成了私钥,接着对明文进行加密,最后使用私钥对密文进行解密,输出解密结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值