属性基加密(Attribute-Based Encryption)
属性基加密的思想是让密文和密钥与属性集合和访问结构产生关联,当且仅当属性集合满足访问结构的时候,方能解密成功。
属性基加密分类
- KP-ABE(key-policy ABE):(基于密钥策略的属性加密)是将策略嵌入到密钥中,属性嵌入到密文中。
- CP-ABE(ciphertext-policy ABE):(基于密文策略的属性加密)是将策略嵌入到密文中,属性嵌入到密钥中。
关于KP-ABE
一些定义
- 双线性映射
- 访问树
KP-ABE算法详解
1. Setup
根据是否符合属性要求划分出两类公钥,符合属性时为Ti,不符合时为Y。
2.Encryption
E'是你想要加密的明文消息
3.Key Generation
访问策略嵌入到密钥中
4.Decryption
从而根据E'=MY^S反解出M
举例说明
1.构造访问树
如上图所构造的访问树,能解密此访问树加密的源数据,数据访问者需满足的属性是:第一种:(“计算机学院” 且 “硕士” 且 “研二”)和 “教师”(此属性结合可能不存在,因为教师和研二不存在且关系) ,第二种:“教师” 和(“网络实验室” 或 “云实验室”),第三者:(“计算机学院” 且 “硕士” 且 “研二”)和(“网络实验室” 或 “云实验室”);否则无法访问。
如何构造这样的一棵访问树? 从根节点开始,其门限值为2,孩子节点有3个,随机生成一个多项式,其最高次数为门限值少1,故根节点的最高次数为1,然后将常数项设置为秘密数(秘密数为需要秘密保存的数);如此根节点随机的多项式为f(x)=5+3x,秘密数为5。此外,将根节点的孩子节点从左至右依次标记为1,2,3,.....,将节点标记值代入f(x)函数中,所得值(即生成新的秘密值)传给该标记的孩子节点秘密保存; 故“3/3”节点(左边第一个节点)标记为1,传给“3/3”节点的秘密值f(1)=5+3X1=8,中间“教师”节点(中间节点)标记为2,传给“教师”节点的秘密值f(2)=5+3X2=11,“1/2”节点(右边节点)标记为3,传给“1/2”节点的秘密值为f(3)=5+3*3=14。“3/3”节点和“1/2”节点在接收到父节点传来的值后,按照上述方式生成随机多项式,将常数项设置为父节点传来的值,此外也按照上述方式生成新的秘密值并将它传给子节点,数据如图所示(对于非叶子节点,都按照此方式进行)。对于叶子节点,在接受到父节点的秘密值后,用此叶子节点的属性对秘密值进行加密处理。 至此,访问树已构造完成!
2.从访问树中解密出访问树的秘密数
数据访问者需满足访问树方可解密出访问树的秘密值,对于上述访问树,数据访问者需满足以下属性集中的一个:(计算机学院、硕士、研二、教师(此属性结合可能不存在,因为教师和研二不存在且关系))、(计算机学院、硕士、研二、网络实验室)、(计算机学院、硕士、研二、云实验室)、(教师、网络实验室)、(教师、云实验室)。若上述属性集中某一个或多个(至少一个)为数据访问者属性集的子集,则能解密出秘密值,下面开始解密处理。
对于叶子节点,在数据访问者属性集中寻找出和此节点属性与属性值一致的属性,用找出的属性解密出此节点的秘密值(即Decryption中图1的公式),当然不能完全解密出,他是秘密值和加密时对此属性设置的加密值的乘积。
解密出叶子节点后,开始解密其父节点(非叶子节点),在解密出叶子节点后,即可得到多对值;如在上述访问树的“3/3”节点,其孩子节点解密出三个值19,44,83(推理过程忽略随机数),在生成这三个数时,f(1)=19,f(2)=44,f(3)=83,其中f(x)=8+4x+7x^2(解密时并不知道此多项式,只知道后面的三个点),因此在f(x)上有三个点是(1,19),(2,44),(3,83);因为此节点存储的秘密值是多项式的常数项,即f(0)=秘密值,故我们需要根据这三个点得到0所对应的值是多少,根据拉格朗日公式就能求出0所对应的值,即解密出秘密值(Decryption中图二的公式);对于非叶子节点均可按照上述方式解密出秘密值,在根节点处解密出整个树所隐藏的秘密值(是秘密值和加密时对此属性设置的加密值的乘积,所有节点解密出的秘密都存在一个随机数,解密出的值都是随机数和秘密值的乘积,只是讲述过程中为了方便忽略了随机数,最后根节点解密出的随机数在最后的解密过程中会抵消掉)。
另外需要说明的是“3/3”节点是一个3个孩子节点、门限值为3的节点,相当于且关系,数据访问者需解密出所有的孩子节点方可用拉格朗日公式解密出常数项(即秘密值);“1/2”节点是一个2个孩子节点、门限值为1的节点,故为或关系,数据访问者只满足其中一个孩子节点即可解密出秘密值(秘密值就是孩子节点解密出的秘密值,因为根据随机多项式生成规则,多项式的最高次数为门限值少1,门限值为1,故最高次数为0,即常数项);若如“2/3”这样的节点,既非且关系,也非或关系,3个孩子节点,门限值为2,若需解密出此节点的秘密值,数据访问者需解密出三个孩子节点中的两个节点即可解密出孩子节点。
论文:Goyal, Vipul, et al. "Attribute-based encryption for fine-grained access control of encrypted data." Proceedings of the 13th ACM conference on Computer and communications security. 2006. https://eprint.iacr.org/2006/309.pdf