李 健,戚 湧
(南京理工大学 计算机科学与工程学院,江苏 南京 210094)
区块链技术[1,2]所具有的去中心化、开放性、自治性、链上数据不可篡改等特点使其在数据共享[3-5]方面具备得天独厚的优势。但是区块链技术本身的P2P、节点间数据访问权限相同的特性,致使基于区块链的数据共享存在粗粒度访问控制问题。密文策略属性加密(attribute based encryption,CP-ABE)技术,通过将密文与属性集合进行绑定,实现由数据用户主导的访问控制,与区块链去中心化的特点契合,能够实现区块链数据共享机制中的细粒度访问控制。在CP-ABE现有的诸多研究方向当中,属性撤销CP-ABE方案对于数据安全尤为重要,当系统中某些用户因为身份属性发生变化时,需要在CP-ABE方案中及时地撤销用户属性。Li等[6,7]利用KEK树和属性组管理授权用户,将用户密钥与属性组密钥进行绑定实现属性撤销。SHIRAISHI等[8]提出了一种面向共享数据细粒度访问控制的属性基加密方案,授权机构可以撤销唯一指定用户的属性。LIU等[9]提出的CP-ABE方案通过在密文中嵌入撤销列表来实现属性撤销。Qin等[10]通过将密钥更新材料发送给用户来实现抵抗解密密钥暴露攻击的属性撤销CP-ABE。上述方案均需更新密文实现属性撤销,对于区块链系统来说,更新密文需要重复上链,所以上述方案均不适用于区块链系统。汪玉江等[11]提出了一种适用于区块链系统的属性可撤销RCP-ABE方案,该方案采用两次解密的思想,由区块链维护撤销列表,属性撤销后,无需更新密钥密文重新上链,但是该方案仅适用于小规模属性集,且系统建立前需要指定属性集大小。阳真等[12]通过引入第三方来实现属性的动态撤销,并将区块链和IPFS结合实现链上链下存储,但是该方案通过智能合约实现的加解密效率有待提升。
Shashank等[13]基于素数阶群下的非对称双线性映射[14]和线性秘密共享技术[15]构建了一种高效的CP-ABE方案,称为FAME,方案包括以下步骤:
(1)系统初始化Setup(1λ)→(pk,msk), 输入安全参数λ,输出公钥pk、主私钥msk。
(2)生成属性私钥KeyGen(msk,S)→sk, 输入主私钥msk,属性集合S,输出属性私钥sk。
(3)加密:Encrypt(pk,(M,π),msg)→Ct, 输入公钥pk,访问策略(M,π),明文msg,输出密文Ct。
(4)解密:Decrypt(pk,Ct,sk)→msg, 输入公钥pk,密文Ct,属性私钥sk,输出明文msg。
具体来说,FAME方案基于Ⅲ型映射群构造使其效率提高,且设计的解密过程仅需要少量Paring操作进行解密,即使是在大规模属性集下,解密时间代价也保持在常量级上。但是,FAME方案仅支持属性加密的基本功能,而不具备实时撤销属性的功能。
基于上述工作,本文开展如下工作:首先,基于区块链技术的特性和应用背景,在FAME方案基础上进行改进,提出一种支持属性实时撤销的CP-ABE算法,改进如下:在属性私钥生成阶段生成两把属性私钥,同时引入预解密过程,与之相应的加密、解密过程也需要进行改进,改进后的算法包括系统初始化、生成属性私钥、加密、预解密、解密5个组成部分,算法流程如图1所示,其中虚线框内是本文改进的部分。
图1 改进的 CP-ABE 属性加密流程
改进后的算法适用于区块链系统,适用性主要表现在两方面:①通过引入预解密过程,并由区块链系统结合属性撤销列表判断是否进行预解密,以实现用户的实时属性撤销,无需更新密钥密文重复上链;②鉴于区块链的效率问题,智能合约完成的预解密过程仅需要少量的Pairing操作、速度快,且在大规模属性集下,时间代价不随属性个数的增加而增加。然后,基于非对称群下的DBDH困难问题假设对方案进行安全性证明。最后,结合超级账本Fabric进行系统设计,采用链上链下存储,原始数据对称加密后存储在IPFS中,对称密钥进行属性加密上链,解决区块链容量不足以及系统效率问题,实现属性可撤销地、高效地、细粒度地区块链数据访问控制。
算法包括系统初始化、生成属性私钥、加密、预解密、解密5个组成部分,具体如下。
(1)系统初始化算法:Setup(1λ)→(pk,msk)。
(2)生成属性私钥算法:KeyGen(msk,S)→(sk1,sk2)。
S表示用户需要申请密钥的属性集合。随机选择r1,r2∈ZP, 计算sk0=(hb1r1,hb2r2,hr1+r2)。 利用msk中的h,b1,b2对所有的属性y∈S和t=1,2,随机选择σy,uy∈ZP, 分别计算:(sky,t)1=V(y1t)b1r1/at·V(y2t)b2r2/at·V(y3t)(r1+r2)/at·gσy/at,(sky,t)2=V(y1t)b1r1/at·V(y2t)b2r2/at·V(y3t)(r1+r2)/at·guy/at。 其中V() 表示将属性映射到群G中元素的映射函数,其输入有两种字符串组成格式:yLt和0jLt,其中y表示属性,L=1,2,3,t=1,2,j表示正整数,后者以0开头,以区分前者;输出群G中元素。
设置私钥组件:(sky)1=((sky,1)1,(sky,2)1,g-uy),(sky)2=((sky,1)2,sky,2)2,g-σy)。
随机选择σ′∈ZP, 计算:sk′t=gdt·V(011t)b1r1/at·V(012t)b2r2/at·V(013t)(r1+r2)/at·gσ′/at。
设置私钥组件:sk′=(sk′1,sk′2,gd3·g-σ′)。
输出两把属性私钥:sk1=(sk0,(sky)1,sk′),sk2=(sk0,(sky)2,sk′)。
(3)加密算法:Encrypt(pk,(M,π),msg)→Ct。
(M,π) 表示访问结构,其中M为n1×n2的矩阵,π为矩阵行到属性的映射,msg表示明文。
设置密文组件:Cti=(Cti,1,Cti,2,Cti,3)。
输出密文Ct=(Ct0,Ct1,…,Ctn1,Ct′)。
(4)预解密算法:FirstDecrypt(Ct,sk1)→firstm。
输出预解密中间明文firstm。
(5)解密算法:SecDecrypt(Ct,sk2)→secm。
计算解密中间明文:secm=e(sk′1·∏i∈I(skπ(i),1)2wi,Ct0,1)·e(sk′2·∏i∈I(skπ(i),2)2wi,Ct0,2)·e(sk′3·∏i∈I(skπ(i),3)2wi,Ct0,3)。
计算中间参数:num=e(∏i∈ICti,1wi,sk0,1)·e(∏i∈ICti,2wi,sk0,2)·e(∏i∈ICti,3wi,sk0,3)。
本文方案的安全性定义为选择明文攻击下的不可区分性(IND-CPA),由挑战者Chal和敌手Adver间的安全游戏进行证明,具体描述如下:
(1)系统建立:挑战者Chal运行系统初始化算法Setup(1λ)→(pk,msk), 将pk发生给敌手Adver,自己保留msk。
(2)私钥查询:敌手Adver向挑战者Chal发送一系列的属性集合S1,S2…, 挑战者Chal运行私钥生成算法KeyGen(msk,S)→(sk1,sk2), 并将生成的属性密钥sk1,sk2发送给敌手Adver。
(3)挑战:敌手Adver发送两个长度相等的消息msg0,msg1和访问结构 (M,π) 给挑战者Chal,并且加以限制:私钥查询阶段生成的密钥都不能满足访问结构 (M,π)。 挑战者Chal随机选择b∈{0,1}, 执行加密算法Encrypt(pk,(M,π),msgb)→Ctb, 并将生成的密文Ctb发送给敌手Adver。
(4)私钥查询,重复步骤(2):敌手Adver再次向挑战者Chal发送属性集合查询私钥,但同样限定属性集合不能满足访问结构 (M,π)。
(5)猜测:敌手Adver输出值b的猜测结果b′∈{0,1}。
本节基于非对称情况下DBDH的困难问题假设进行安全性证明,具体分析过程如下:
AdvDBDH=
定义2 如果在多项式时间内,算法不能以不可忽略的优势解决非对称情况下DBDH问题,则认为非对称情况下DBDH假设成立。
证明:参考文献[13]模拟相关随机预言机。首先进行相关参数定义:
当v表示列向量 (v1,v2,…,vn)T时,其相关参数定义见表1。
表1 列向量的相关参数定义
表2 矩阵的相关参数定义
Samp()算法定义见表3。
(1)初始化阶段Setup。运行初始化算法获得 (p,G,H,GT,e,g,h)。
运行算法Samp(p),获得 (A,a⊥),(B,b⊥)。
d表示列向量 (d1,d2,d3)T,d1,d2,d3∈ZP, 设置pk=([A]2,[dTA]T),msk=(g,h,A,B,[d]1)。
为了模拟随机预言机:Chal维护两个列表:P和Q。
P有形式为 (x,Wx) 和 (j,Uj) 的元组,其中x是任意的二进制字符串,j是正整数,Wx、Uj是ZP上的3×3矩阵。
Q有形式为(q,r)的元组,其中q可以是xLt或0jLt(L∈{1,2,3},t∈{1,2}), 也可以是其它任意元素,r是G中的元素。
敌手Adver可以进行以下3种类型的预言机查询:
3)q:Chal查询是否有 (q,r)∈Q, 如果有则返回r,否则从G中随机选择一个元素r′,将 (q,r′) 添加到Q,返回r′。
(4)私钥查询阶段KeyGen。重复过程(2)。
本文系统包括属性授权、数据拥有者(DO)、数据使用者(DU)、区块链、IPFS这5个组成部分,系统模型如图2所示。
图2 系统模型
(1)属性授权:负责系统的参数设置,生成系统的公钥和主私钥;同时,当用户注册进入系统时,根据用户的属性集合生成属性私钥。同时,根据实际情况维护一张用户访问控制的属性撤销列表,当发现系统中用户属性发生变化时,负责实时撤销用户属性。
(2)数据拥有者(DO):负责数据的加密工作,首先对明文进行对称加密,将对称加密后的密文存放在IPFS中,对返回的索引以及对称密钥指定访问策略,进行属性加密,将属性加密密文发送给区块链。
(3)数据使用者(DU):数据的访问者,向区块链发送访问请求,如果属性满足访问策略且未被撤销,则由区块链智能合约进行预解密操作,并将预解密的结果发送给数据使用者,数据使用者进行属性解密操作,得到IPFS存储索引以及对称密钥,再从IPFS中获取对称加密的密文,进行对称解密,获取明文。
(4)区块链:负责存储属性加密后的密文以及用户的预解密属性私钥、存储一张用户属性撤销列表,通过智能合约提供属性撤销和属性预解密相关功能。
(5)IPFS:负责原始数据对称加密后的密文数据的分布式存储工作,保证区块链只存储少量关键信息,减轻区块链的存储压力。
本文方法主要完成数据拥有者与数据使用者之间的数据共享和细粒度访问控制的工作,本节对此过程进行流程设计,具体如下:
3.2.1 数据拥有者加密数据流程
如图3所示,数据拥有者加密数据流程主要分为身份注册和数据加密两个阶段。
图3 数据拥有者加密数据流程
首先是身份注册阶段,数据拥有者初次登录系统时,进行身份的注册登录的操作:属性授权根据数据拥有者的身份信息运行属性私钥生成算法KeyGen(msk,S) 为数据拥有者生成两把属性私钥sk1和sk2,分别称为区块链属性私钥和用户属性私钥,属性授权将区块链属性私钥发送给区块链,区块链进行存储。将用户属性私钥发送给数据拥有者。
接下来进入数据加密阶段,数据拥有者在用户端对原始数据进行对称加密,接着将对称密文发送给IPFS进行分布式存储,IPFS返回对应索引信息。数据拥有者指定访问策略调用属性加密算法Encrypt(pk,(M,π),msg) 对返回的索引信息以及对称密钥进行属性加密,将生成的属性加密密文发送给区块链,区块链进行上链存储。
3.2.2 数据使用者解密数据流程
如图4所示,数据使用者解密数据流程主要分为身份注册和数据解密两个阶段。
图4 数据使用者解密数据流程
首先是身份注册阶段,与数据拥有者类似。
接下来进入数据解密阶段,数据使用者发送数据解密的请求给区块链,区块链首先查询属性撤销列表是否有该数据使用者的属性元组,如果没有则说明未被撤销属性,利用其区块链属性私钥调用预解密算法FirstDecrypt(Ct,sk1), 返回预解密结果firstm;如果有则说明属性被撤销更改,此时,判断新属性集合是否满足访问策略,如果满足,则进行预解密,否则拒绝预解密,返回一个非零随机值。数据使用者在用户端利用用户属性私钥对区块链返回的值进行属性解密SecDecrypt(Ct,sk2,firstm), 在其满足访问策略且未被撤销属性的情况下,得到对称密钥和IPFS索引信息,利用索引从IPFS中取得对称密文,利用对称密钥进行对称解密获得原始数据。
3.2.3 属性授权撤销属性流程
如图5所示,属性授权撤销属性流程如下:当系统中的数据使用者身份属性发生变化时,属性授权向区块链发送该数据使用者新的属性集合,以维护属性撤销列表,实现数据使用者身份属性实时更新。
图5 属性授权撤销属性流程
本节将所提属性撤销CP-ABE算法应用于区块链系统,进行了详细的系统流程设计,相比于基础区块链系统中用户数据访问权限相同的特点,本文系统中,由数据拥有者根据实际需求制定访问策略,以限定数据使用者。同时,当系统中数据使用者的身份发生变化时,属性授权只需调用属性撤销的智能合约来更新属性撤销列表,就可完成属性级的属性撤销,实现了区块链数据的细粒度访问控制。
本节对系统进行仿真与分析,仿真的实验环境如下:操作系统为64位的Ubuntu16.04,内存8 GB;CPU为Intel Core i7 8700;用户端代码和智能合约使用Java开发语言编写,属性加密方案使用jpbc2.0.0库,根据提供的TypeD曲线构造双线性映射,实验数据取运行20次的所得的平均值;区块链使用Hyperledger-fabric1.4.3版本,采用solo类型的排序服务;使用docker部署IPFS集群。
3.3.1 功能性分析
方案功能性对比分析见表4:文献[6]支持属性撤销,但不支持大规模属性集;文献[11]支持通过引入预解密过程实现属性撤销,但不支持大规模属性集;文献[12]实现了属性撤销,但不支持预解密和大规模属性集;文献[13]支持大规模属性集,但不支持预解密和属性撤销;文献[16]引入了预解密过程,但不支持属性撤销和大规模属性集;本文方案通过引入预解密的过程实现了无需更新密钥密文的属性撤销,并且支持大规模属性集。
表4 本文方案与其它方案功能性比较
3.3.2 性能分析
如图6所示:与对比方案相比,在密钥生成阶段,本文方案与对比方案的时间代价随属性个数的增加而增加,但是本文方案增加相对缓慢。
图6 密钥生成算法对比
如图7所示:与对比方案相比,在加密阶段,本文方案具备显著优势,并且随着属性个数的增加,时间代价呈现为缓慢增加趋势。
图7 加密算法对比
如图8所示:在解密阶段,本文方案因在预解密和解密各自只需要6次Pairing操作,所以预解密和解密时间代价各自保持在75 ms和150 ms常量级上,且综合来看,本文方案总解密时间显著优于对比方案。
图8 解密算法对比
如图9所示:本文方案在大规模属性集下解密效率高,且解密时间不随属性数量增加而增加。由用户端完成的解密过程,只需要150 ms左右的常量级时间代价,而对于在系统中由区块链智能合约完成的预解密过程,只需要75 ms左右的常量级时间代价。
图9 大规模属性集合解密时间
综上,本文设计的属性撤销CP-ABE方法通过引入预解密过程而使属性撤销无需更新密钥密文重复上链;并且属性加密各个阶段的时间代价均低于对比方案,尤其是由智能合约完成的预解密过程在大规模属性集下时间代价保持在75 ms的常量级上,应用于区块链上对系统的效率性能影响很小。
本文针对区块链数据共享中存在的粗粒度访问控制问题,首先提出了一种可撤销属性加密的区块链数据访问控制方法,通过引入预解密过程,构建了一种属性可撤销的CP-ABE方法,仅需要少量的Pairing操作进行解密,大规模属性集下由智能合约完成的预解密过程仅需75 ms左右;可根据需求及时撤销属性,无需更新密钥密文重复上链,适用于区块链系统。最后进行系统设计,结合IPFS实现链上链下存储,解决区块链容量不足和系统效率问题,实现高效的、细粒度的区块链数据访问控制。