0
点赞
收藏
分享

微信扫一扫

密码学 | CP-ABE中如何使用布尔公式构造LSSS矩阵

悄然丝语 2023-01-09 阅读 171


导读



作为CP-ABE中访问结构的扛把子,LSSS矩阵万众瞩目!但LSSS矩阵的构造,一直是个密……。


很多文章对LSSS的构造闭口不谈,包括  ,只说存在,不说是啥!


后来Lewko 和 ABE的创始人Waters提供了LSSS的构造方法,让我们一起走进今天的文章了解一下吧!



1

基础理论



1、CP-ABE


当我们希望自己去控制自己的数据可以由谁访问的时候,我们可以实时在线判断该用户是否可以访问,也可以设置访问策略进行判别。


CP-ABE就是可以实现后者的目前应用最为广泛的密码学算法。


CP-ABE全称为Ciphertext-Policy Attribute-Based Encryption,即密文策略的属性基加密。用户的访问策略和密文绑定,属性和用户的密钥绑定,当用户的属性满足访问策略,用户就可以用密钥解密密文。


例如,这篇文章,我如果只想让我的密码学或者区块链的粉丝看,那我就可以设置访问权限为: 粉丝密码学区块链


CP-ABE方案至少需要四个算法:


setup算法:生成公共参数和主密钥
KeyGen算法:生成用户密钥
Encrypt算法:设置访问策略并加密数据
Decrypt算法:满足访问策略的用户解密数据


2、CP-ABE的优势


访问策略可以由数据拥有者设定,数据拥有者可以根据用户的属性设置合理的访问策略。并且访问策略是细粒度的。


CP-ABE应用场景非常丰富,如云存储数据中的访问控制、医疗数据的访问控制等。我们可以把数据的访问控制托管给密码学,只要访问策略设置得当,就可以非常灵活地管理数据。


3、访问策略类型


目前,CP-ABE中访问策略主要有三种:


布尔公式,即与或门
阈值表达式,即门限策略
LSSS矩阵


2

布尔公式转LSSS矩阵



1、布尔公式访问结构


布尔公式访问结构是最简单的,表达效果更为直观,我们前面的示例就是布尔公式。也就是通过逻辑与和逻辑或将属性关联起来,用以描述用户的属性。


2、LSSS矩阵


LSSS是三个访问策略中最新提出的,具有更高更丰富的表达能力,但是直观效果也最差。LSSS是矩阵,所以运算过程相比较另外两种采用的递归方式也更加简洁。


LSSS的定义来自大佬Beimel的博士毕业论文:


A. Beimel, “Secure schemes for secret sharing and key distribution,” phd thesis israel institute of technology technion, 1996.


初次应用在CP-ABE中是下面这篇文章:


Waters B. Ciphertext-policy attribute-based encryption: An expressive, efficient, and provably secure realization[C]//International Workshop on Public Key Cryptography. Springer, Berlin, Heidelberg, 2011: 53-70.


密码学 | CP-ABE中如何使用布尔公式构造LSSS矩阵_父节点


3、转化过程原文翻译


但是存在一个问题,即原文中说的,存在 


直到这篇文章的出现:


Lewko A, Waters B. Decentralizing attribute-based encryption[C]//Annual international conference on the theory and applications of cryptographic techniques. Springer, Berlin, Heidelberg, 2011: 568-588.


这篇文章在最后一个附录(附录G)中给出了从布尔公式到LSSS矩阵的转化过程。我们先来将转化过程翻译一下:


密码学 | CP-ABE中如何使用布尔公式构造LSSS矩阵_区块链_02

我们现在描述一个通用算法转换布尔公式到一个等价的LSSS矩阵。我们将布尔公式视为一棵访问树,其中内部节点是与或门,叶子节点对应于属性。我们将使用(1,0,...,0)作为LSSS矩阵的共享向量。我们首先用向量(1)标记树的根节点(长度为1的向量)。然后我们沿着树的层次向下,用分配给它的父节点的向量决定的向量来标记每个节点。我们维护一个全局计数器变量c,初始化为1。


如果父节点是一个用向量v标记的OR门,那么我们也用v标记它的子节点(c的值保持不变)。如果父节点是一个用向量v标记的AND门,我们在v的末尾加上0(如果有必要),使它的长度为c。然后我们用向量v|1(其中|表示连接)标记它的一个子元素,另一个用向量(0,...,0)|-1,其中(0,...,0)表示长度为c的零向量。注意这两个向量的和是v|0。现在我们把c的值加1。一旦我们完成了对整棵树的标记,标记叶节点的向量就构成了LSSS矩阵的行。如果向量有不同的长度,我们在较短的向量的末尾加上0以得到相同长度的向量。

密码学 | CP-ABE中如何使用布尔公式构造LSSS矩阵_区块链_03


4、转化过程解读


我们通过示例来详细说明一下。我们直接使用原论文中的示例



这个访问结构表示属性A是必须要满足的,后面的,要么满足属性D,要么同时满足属性B和属性C。我们可以构造访问树为:


密码学 | CP-ABE中如何使用布尔公式构造LSSS矩阵_父节点_04


接下来我们一步一步来构造,首先是根节点,我们设置为(1),然后根节点是与门(AND),那么就是文中说的第二种情况:


如果父节点是一个用向量v标记的AND门:
我们在v的末尾加上0(如果有必要),使它的长度为c。
(1)用向量v|1(其中|表示连接)标记它的一个子元素
(2)另一个用向量(0,...,0)|-1,其中(0,...,0)表示长度为c的零向量。
注意这两个向量的和是v|0。


目前我们是没有必要给v的末尾添加0。我们使用v|1标记第一个子元素,即属性A,那么A的向量为(1,1),使用(0,...,0)|-1标记第二个子元素,即或门(OR)。


密码学 | CP-ABE中如何使用布尔公式构造LSSS矩阵_数据_05


同理,我们接着从或门往下考虑,或门的情况为:


如果父节点是一个用向量v标记的OR门,那么我们也用v标记它的子节点(c的值保持不变)


所以这步比较简单,直接顺延下来:


密码学 | CP-ABE中如何使用布尔公式构造LSSS矩阵_数据_06


接下来就是最后一个与门了,与第一个与门一样,左边在父节点的向量后面加一个1,后面用(0,...,0)|-1表示:


密码学 | CP-ABE中如何使用布尔公式构造LSSS矩阵_数据_07


这个时候我们发现,c(即向量最大的长度)为3,那么我们把所有的都补齐为3:


属性A:(1,1,0)
属性B:(0,-1,1)
属性C:(0,0,-1)
属性D:(0,-1,0)


所以最终得到的LSSS矩阵为:


密码学 | CP-ABE中如何使用布尔公式构造LSSS矩阵_父节点_08


5、求解 


最重要的问题来了,怎么求解  。为了方便表述,我们令 


首先我们先通过理论推导一下:


密码学 | CP-ABE中如何使用布尔公式构造LSSS矩阵_区块链_09


这个时候,我们就把求解  转化为求解 


然鹅……有这么几个严重的问题:


1、不是所有的矩阵都有逆矩阵


2、只有方阵才会存在逆矩阵,但  不一定是方阵(I×n)


目前主流的两种解决方案是:


1、自己手动模拟,计算出满足条件的w
2、构造M_I为方阵


贴一个别人基于Java实现的求解  的方法:


https://github.com/liuweiran900217/CloudCrypto/blob/master/src/main/java/cn/edu/buaa/crypto/access/lsss/LSSSPolicyEngine.java


有没有更好地求解  的方法,让我们一起期待吧!


3

说在后面的话



这个方案算是开启了LSSS构造方法的先河,但是这个方案只考虑了与或门转化为LSSS矩阵,没有考虑门限结构转化为LSSS。但是考虑到门限结构可以转化为LSSS,所以,也算是一种比较实用的方法。


后面,曹珍富老师团队提出了一种更为高效的直接将门限结构转为LSSS的方案,后面,我会详细讲解。



密码学 | CP-ABE中如何使用布尔公式构造LSSS矩阵_父节点_10

长按二维码关注

举报

相关推荐

0 条评论