最近看了一篇文章,如何对CP-ABE中的可比较属性进行快速判断,这里是利用的0-1编码,首先,先解释什么叫可比属性:我们处理的对象是这样的属性,它不是一个精确的值,而是一个连续值的范围,可以在ABE系统中进行比较匹配,如“Score > 75”,“Age < 25”。像Score和Age这种就叫做可比属性。
然后再解释一下什么叫0编码和1编码。
看起来这个定义很难理解,于是这里举一个例子。
首先,0编码和1编码都是一个集合,这里举例,设x为11,y为6。
先说x,x的1编码就是从2进制串开始取,每取到'1'时,就把字符串加入到x的1编码集合中,如x的二进制是1011,取到第一个1,就是"1",取到第2个1,就是"101",取到第3个1,就是"1011",至此所有1编码全部取完,所以x的1编码集合就是{1,101,1011}.
那么x的0编码呢,就是从2进制串开始取,每取到最后1个“0”,就把这个“0”翻转成“1”,然后字符串加入到0编码集合中。如x中,取到第1个0(也是最后1个0),就是“10”,然后将“0”翻转成“1”,于是0编码就为“11”,因为1011中只有1个0,所以0编码集合为{11}。
y与x一样,这里就不赘述。可以参考上面的table2.
那么我们如何判断x>y呢,可以由以下公式表达:
就是x的1编码与y的1编码集合中至少有一个元素相同,如11的1编码和6的0编码都有共同元素1.所以可以知道11>6.
利用0编码和1编码使这种属性适合CP-ABE构造。我们的程序是这样执行的:
现在用一个例子来解释一下这些内容,假设系统要求接入用户属性为date>5月1日,那么系统中将有Setc0这个集合,如:5月1日我们定为121(也就是一年中的第121天),二进制为001111001,那么Setc0(date,121)这个集合为:
date||>x||1
date||>x||01
date||>x||0011111
date||>x||00111101
如果我要判断date>5月1日,那么我们就要用Setc0集合进行判断,如果数据消费者的属性为date=7月7日,那么用Setu1集合可以表示为Setu1(date,188),即一年中的188天,二进制位为:010111101,Setu1集合为:
date||>x||01
date||>x||0101
date||>x||01011
date||>x||010111
date||>x||0101111
date||>x||010111101
我们发现Setc0中和Setu1中有一项元素是一样的,即date||>x||01.
故7月7日满足访问结构。
原文:CABE: A New Comparable Attribute-Based Encryption Construction with 0-Encoding and 1-Encoding