区块链上基于云辅助的属性基可搜索加密方案
2021-04-09牛淑芬谢亚亚杨平平杜小妮
牛淑芬 谢亚亚 杨平平 杜小妮
1(西北师范大学计算机科学与工程学院 兰州 730070)2(西北师范大学数学与统计学院 兰州 730070)
云存储技术[1]为用户带来了巨大便利,许多公司选择把数据存储服务外包给云服务提供商.由于大多云服务器并不是完全诚实可靠的,因此数据文件在被存储到云服务器之前需要被加密,在查找使用数据时需要将大量的数据文件都下载到本地再去解密它们,这十分地浪费网络带宽且效率低下.在这样的背景下,可搜索加密(searchable encryption, SE)的概念被及时地提出.
SE[2]允许数据用户通过关键字对加密的数据文件进行搜索,很大程度上降低了用户的通信量和计算量.现有的SE大都是基于公钥的SE,Ma等人[3]将公钥SE应用于医疗信息管理,提出了公钥SE在移动医疗系统下的应用方案.出于离线关键字猜测攻击等方面的安全性考虑,Huang等人[4]提出了一个在随机预言机模型下相对安全的公钥SE方案.但大多基于公钥的SE都是一对一的加密和解密,每次加密都必须知道接收者的身份信息,且没有考虑搜索用户的搜索权限问题,故数据拥有者无法对外包的加密数据实施有效的访问控制,这在实际的应用环境中缺乏方便性和实用性.
上述SE方案都为数据用户赋予了无限的搜索能力,即数据用户可以采用任何关键字从服务器获取包含自己感兴趣关键字的加密数据.因此,数据拥有者无法对外包的数据信息实施有效的访问控制,因此研究人员利用属性基加密技术设计了具有关键字搜索授权的SE方案.文献[5]第1次提出一种新型的密码原语,即属性基加密的概念,它通过模糊身份的方法来实现数据的细粒度访问控制.此后,Goyal等人[6]为了实现数据的细粒度访问控制第1次提出了将属性嵌入到密钥中的属性基加密方案.Li等人[7]基于数据外包的安全性和用户体验之间的平衡提出了一个细粒度的数据SE方案,并指出了其在加密的移动云环境下的应用.文献[8]中的属性基加密方案也是将属性嵌入到密钥中,实现了一对多的有效通信,但该方案要求在发送陷门时采用安全的通信信道,这无疑增加了通信成本.关志涛等人[9]提出了在半诚实云存储上的属性基加密方案,该方案基于密钥策略的属性基加密设计了更为灵活通用的访问控制策略.为了减少访问策略更新时用户的运算量,提高访问策略更新时的灵活度,文献[10]提出了一种由云服务器处理复杂计算操作的属性基SE方案.由于大多属性基SE方案都采用云存储,导致因云存储的集中化带来的数据安全和隐私保护问题也越来越多.
云服务器可以为用户提供便捷、海量的数据存储服务.然而,其安全形势也相当严峻,如未经身份验证的用户可以任意地访问云服务器、数据安全性得不到保证等严重影响了用户对其的信任.区块链技术的发展与应用为解决此类问题带来了新的契机,因为区块链技术[11]能自由安全地实现数据的访问和共享.Liu等人[12]首次指出在公有链中存储数据的必要性,在此基础上提出了一种新的基于区块链的数据删除方案,无论云服务器的行为多么恶劣,数据拥有者都可以验证删除结果,使得删除操作更加透明.之后,Li等人[13]为了保证公平和减少用户的计算量,将区块链技术与SE相结合,提出了一种基于区块链的SE方案.Zhang等人[14]针对恶意用户和恶意云服务提供商对加密的数据文件进行非法搜索的问题,提出了基于云存储的可信SE方案.基于属性的加密尤其是将属性嵌到密文中的加密在数据共享中起着重要的作用,但在分布式网络中,访问控制结构通常会泄漏敏感的数据信息,区块链技术可以保证与访问策略相关信息的完整性和不可篡改性.针对属性加密的效率、隐私泄露和密钥的滥用问题,Wu等人[15]提出了区块链中高效的、保护隐私的、可追踪的属性基可搜索加密方案.该方案利用区块链技术保证了数据的完整性和不可篡改性.
针对现有的SE没有考虑数据用户搜索权限的问题,本文将密文策略的属性基加密技术与SE结合,使数据拥有者可以为数据使用者执行细粒度的搜索授权.针对现有的可搜索加密方案因云的集中化对数据安全和隐私保护带来威胁的问题,本文将区块链技术和基于属性的SE结合,提出了区块链上基于云辅助的属性基可搜索加密方案.本文的创新点主要包括3个方面:
1) 利用SE和基于属性的加密技术,设计了一个密文策略的属性基SE方案,以实现对加密数据的有效搜索和细粒度访问授权,并基于困难问题证明了其安全性.
2) 针对因云的集中化对数据安全和隐私保护带来的威胁,并基于区块链去中心化、匿名性、不可篡改性和可验证性等特点,将区块链技术应用于上述方案.在整个过程中加密的关键字存储在区块链上,而云服务器上存储加密的关键字和加密的数据文件,其中区块链不可篡改的特性可确保关键字密文的安全性.
3) 在Linux Ubuntu-10.10操作系统下利用双线性对包,并用C语言进行编程,对本文方案和文献[16]的方案进行了数值模拟.实验结果表明:本文方案的效率较高于文献[16]的方案.
本文提出的算法可应用于社交网络、医疗信息管理等领域.例如在电子病历中主要有患者、医生、医院服务器、医疗云服务器和联盟链5个角色.患者就诊后产生电子病历,由医生将电子病历加密后上传至医院服务器,同时将关键字密文的Hash值、医生身份、患者伪身份和关键字密文上传至医疗云服务器.患者的电子病历密文存储在医院服务器上,而关键字密文则存储在医疗云服务器和联盟链上,而由患者伪身份和关键字密文所构成的安全索引则存储在联盟链上.当患者需要数据时,产生陷门并上传至联盟链.根据激励机制,选取联盟链上的节点对关键字进行搜索.当搜索到相应患者的密文后,联盟链上节点提取安全索引,并匹配患者的伪随机身份,联盟链上节点通过医生身份定位至医疗云服务器获取关键字密文的Hash值,再由患者解密得到电子病历的明文.
1 相关知识
1.1 基础知识
定义1.双线性映射.令G1和G2是2个阶为素数p的循环乘群,定义1个双线性映射e:G1×G1→G2满足3个性质[8].
2) 非退化性(non-degenerate).存在x,y∈G1,满足e(x,y)≠1.
3) 可计算性(computable).对任意x,y∈G1,存在有效的算法计算e(x,y).
1.2 困难问题假设
1.3 访问结构和访问树
定义4.访问结构[17].令P={P1,P2,…,Pn}为一个基于属性加密方案的属性集合.令集合Γ∈2{P1,P2,…,Pn},∀B,C:若B∈Γ且B⊆C,那么C∈Γ.若上述关系成立,那么称Γ是单调的.因此一个访问结构Γ就是由P={P1,P2,…,Pn}的非空属性子集构成的集合.在Γ中的集合被称为授权访问集合,不在Γ中的集合称为非授权访问集合.访问结构是基于属性加密方案不可或缺的组成部分[8,18].
定义5.访问树[17].T表示一个访问树,T中的每个非叶子节点x都可以表示成如(nx,kx)的门限结构,其中nx表示x的孩子节点个数,kx表示阈值或门限值,其中0≤kx≤nx.kx=1时表示“OR”门,kx=nx则表示“AND”门.叶子节点x用来描述属性,我们规定其门限值kx=1[17].
访问树中常用的表示方法是:parent(x)表示返回节点x的父节点,att(x)表示返回叶子节点x描述的属性,index(x)表示返回x在其兄弟节点中的编号.T是以t为根节点的访问树,若一个属性集合S满足访问树Tx,则可表示为Tx(S)=1.
1) 若x是非叶子节点,对x的孩子节点x′计算Tx′(S).当且仅当至少有kx个x′返回Tx′(S)=1时,可得到Tx(S)=1.
2) 若x是叶子节点,当且仅当att(x)∈S时,可得到Tx(S)=1.
2 系统模型和安全模型
在本节中,我们主要介绍方案的系统模型、形式化定义和安全模型.
2.1 系统模型
本文基于云辅助实现了区块链上加密数据的细粒度访问控制.其中,云服务器上存储加密的关键字和加密的数据文件.区块链上存储加密的关键字和其在云服务器上的存储地址.方案主要包括5类实体,分别是数据属主、多个数据用户、云服务器、可信的属性授权中心、区块链(联盟链).系统模型如图1所示.
Fig. 1 System model of our paper图1 本文所提的系统模型
1) 属性授权中心.对系统中与其有交互的数据属主和用户是完全可信的,它负责系统参数的设置和用户的注册.由属性授权中心生成密钥和相应的参数,并返回给用户.
2) 数据属主.数据属主从数据文件中按照约定规则提取关键字集合,并用自己所定义的访问策略对关键字进行加密,最后将数据文件密文和关键字密文上传至云服务器.云服务器收到密文后将其存储并将存储地址返回给数据属主,数据属主建立数据文件密文和关键字密文在云服务器存储地址的逆向索引关系.数据属主将关键字密文和其存储地址嵌入到1笔构造的交易中并上传至区块链,形成新的区块,并广播新的区块,区块链上其他数据用户负责新区块的验证.
3) 云服务器.云服务器提供数据存储服务.云服务器收到数据属主上传的数据文件密文和关键字密文后,将其存储并将存储地址返回给数据属主.当关键字搜索成功后,数据属主根据区块链返回的地址在本地查看数据文件密文和关键字密文的索引关系.然后向云服务器发出请求,最后云服务器根据数据文件密文进行查找并将数据文件密文返回给用户.
4) 区块链.区块链上节点提供数据搜索服务.数据属主将关键字密文及其地址嵌入到1笔自己构造的交易中并上传至区块链,当区块链上其他数据用户收到广播的区块后,对该区块进行验证.当用户以交易的形式上传陷门后,根据激励机制,区块链上想要去获得奖励的节点运行搜索算法.若搜索成功,区块链上节点将关键字密文存储地址返回给数据属主.否则,返回失败.
5) 数据用户.用户用其私钥和感兴趣的关键字产生搜索陷门,并将陷门以交易的形式上传至区块链,由区块链上节点执行搜索操作.若搜索成功,区块链上节点返回关键字密文存储地址给数据属主,数据属主根据索引关系找到数据文件密文地址,并将数据文件密文地址返回给云服务器,云服务器根据地址找到加密的数据文件,最后将数据文件密文返回给用户.
2.2 算法形式化定义
本文提出的方案包括5个概率多项式时间算法:
1) 系统建立.SetUp(1λ)→(PP,SK).该算法由属性授权中心执行.输入安全参数λ,输出系统公共参数PP和密钥SK.DO使用SK和定义的访问树加密关键字.
2) 密钥生成.KeyGen(PP,Suid)→SKu.该算法由属性授权中心执行.输入PP和用户的属性集合Suid,输出用户的私钥SKu.
3) 加密.Encrypt(PP,SK,w,T)→Iw.该算法由数据属主执行.输入系统公共参数PP、数据属主的私钥SK、关键字w和访问树结构T,输出关键字w的密文Iw,将密文Iw和相关信息嵌入交易Tx中并向全网广播该笔交易,然后由矿工写入区块链.
4) 陷门生成.Trapdoor(PP,SKu,ω)→Tω.该算法由用户执行.输入系统公共参数PP、用户的私钥SKu和感兴趣的关键字ω,输出陷门Tω,将Tω嵌入交易Ty并向区块链网络广播.
5) 搜索.Search(PP,Iw,Tω)→1.该算法由区块链(联盟链)上节点执行.输入系统公共参数PP、关键字密文Iw和用户的陷门Tω.若用户的属性集Suid满足嵌在Iw中的访问树且w和ω一致,则搜索成功并返回其存储地址Address.Iw给数据属主,否则失败.
2.3 安全模型
游戏1.关键字密文不可区分性.
游戏2.陷门不可区分性.
3 本文方案
区块链上基于云辅助的属性基可搜索加密方案分为3个阶段:系统建立、数据加密、数据搜索.
阶段1.系统建立.
本阶段分为系统初始化和密钥生成2个步骤.
系统初始化(SetUp).在这个过程中,属性授权中心执行该算法初始化系统.输入安全参数λ,输出系统公共参数PP和数据属主的密钥SK.
1) 产生1个双线性映射e.G1×G1→G2,其中G1和G2是阶为素数p的循环乘群,g是G1的生成元.
3) 定义Lagrange系数.
返回PP={G1,G2,e,g,H,H1},SK={e(g,g)α,gβ}.
密钥生成(KeyGen).在这个过程中,属性授权中心执行该算法,为用户产生与其属性集Suid相关联的私钥.
阶段2.数据加密.
关键字加密(Encrypt).在这个阶段,数据属主调用此算法来加密所有关键字,每个关键字对应于定义关键字搜索权限的访问树.
2) 首先执行秘密共享算法,对于每个在访问树T中的节点x(包含叶子节点t在内),从根节点t开始,选择一个多项式qx.具体步骤为:
① 对在T中的每个节点,使得多项式qx的次数dx为该节点门限值kx-1,即dx=kx-1.
② 从根节点t开始,定义qt(0)=s,然后随机选择多项式qt的dt个点,完成对qt的定义.对于其他的节点x,定义qx(0)=qparent(x)(index(x)),并随机选择dx个点完成对qx的定义.
数据属主将加密的数据文件F和加密的关键字Iw上传至CS,CS返回其存储地址.数据属主将Iw和其存储地址Address.Iw嵌入交易Tx,并对其签名,再以交易Tx的形式向全区块链系统广播,由矿工将验证通过的交易记录到区块链上.区块链上的数据结构如表1所示.它由块头和交易2部分组成.其中块头包括:块标识、块的大小、前一个块的Hash和时间戳;交易包括:块产生者(DO)身份IDDO、块产生者的签名δDO和由Iw以及Address.Iw构成的交易Tx=(Iw,Address.Iw).
Table 1 Blockchain Data Structure表1 区块链的数据结构
阶段3.数据搜索.
本阶段主要包括陷门生成(Trapdoor)和关键字搜索(Search)两个步骤.
陷门生成.在这个过程中,用户使用自己的密钥SKu和所要查询的关键字ω产生陷门Tω.
搜索.在关键字搜索阶段,根据用户提交的陷门信息Tω,区块链上节点(也可称为搜索者P)执行该算法对关键字密文进行搜索. 在整个搜索过程中,不会向区块链和云服务器泄露有关数据文件和所要搜索关键字的有用信息.用户构造1笔包含自己陷门信息的交易Ty,区块链上的节点根据交易Ty计算交易g的主要部分,并将搜索成功的Iw嵌入交易g中,对其签名后向全区块链网络广播该交易,同时获得交易Ty中的奖励d.当区块链上并未出现交易g时,用户可以选择构造1笔新的交易来追回上1笔交易Ty中的奖励.
x表示访问树T中的节点,算法运行:
1) 若节点x是叶子节点,令att=attr(x),即att表示与叶子节点x相关联的属性.
① 若att∈Suid,计算:
② 若att∉Suid,定义Fx=⊥.
2) 若该节点x是非叶子节点,对于节点x的所有孩子节点z,执行算法后的结果记为Fz,集合Ux中保留Fz≠⊥的所有值.
① 若|Ux| ② 若|Ux|≥kx,则表明x节点的孩子节点属性集合满足该节点的门限值,则从集合Ux中随机挑选kx个Fz的值,结合Lagrange系数计算Fx值: 其中i=index(z),Sx={∀z∈Ux:index(z)},Δi,Sx表示Lagrange系数. 3) 若用户的属性集Suid满足访问树T,则将算法的执行结果表示为Ft=e(g,g)(r+r1)qt(0)=e(g,g)(r+r1)s. 证毕. 当数据属主获得Iw的存储地址Address.Iw后,数据属主根据Address.Iw和Address.F的索引关系找到Address.F,并将Address.F返回给云服务器,云服务器根据Address.F找到对应的加密数据文件,将加密的数据文件返回给用户. 证毕. Hash询问OHash1.随机选择k∈G1,并返回它作为H1(att)的输出,即R(2)=k. 阶段2.与阶段1一样.要求不能询问与挑战关键字有关的信息. 证毕. 本文与近几年的属性基加密文献[16,19-21]的方案进行功能性对比,其中访问控制策略主要包括访问树和线性秘密共享方案2种.对比结果如表2所示.表2表明本文方案在功能特性上有一定优势. Table 2 Function Comparison表2 功能特性比较 在表3中,Tp表示配对运算的时间,Te表示指数运算的时间,Tm表示乘法运算的时间,Th表示Hash运算的时间,Tinv表示乘法逆元运算的时间. 1) 计算量比较 在表3和表4中,分别用|S|,|X|,|N|表示1个用户的属性集、1个访问树的叶子节点集合和满足访问树的最小属性集. Table 3 Computation Comparison表3 计算量比较 Table 4 Storage Comparison表4 存储代价比较 2) 存储量比较 我们在Linux操作系统下利用双线性对包(pairing-based cryptography library)[22],用C语言进行编程,在2.9 GHz CPU,4 GB RAM PC机上运行[23].(所使用的椭圆曲线基域为512 b,双线性对包参数类型为Type-A)实验结果如图2所示: Fig. 2 Time cost of each algorithm(fixed number of keywords and attributes is 500 and 10)图2 算法的时间花销(将关键字和属性的个数固定为500和10) 由图2可得出结论,本文方案在密钥生成阶段、陷门生成阶段和搜索阶段效率高于文献[16]的方案,在系统建立阶段两者几乎相同. Fig. 3 Algorithm running time comparison (fixed number of keywords is 500)图3 算法运行时间比较(将关键字个数固定为500) 由图3可知,本文方案在密钥生成阶段、陷门生成阶段和搜索阶段效率高于文献[16]的方案. 同样地,由图4可得出结论,本文方案在密钥生成阶段、陷门生成阶段和搜索阶段的效率均高于文献[16]的方案.如在用户陷门生成阶段,当属性个数为10且关键字个数为600时,本文方案的运行时间为2.381 3 s,文献[16]方案的运行时间为4.619 4 s. Fig. 4 Algorithm running time comparison when fixed number of attributes is 10图4 属性个数固定为10时算法运行时间比较 本文提出了区块链上基于云辅助的属性基可搜索加密方案.本文方案利用属性基加密技术使数据拥有者为数据用户执行细粒度的搜索授权.使用可搜索加密技术完成关键字在区块链上的搜索工作,实现数据用户对加密数据的安全访问.在整个过程中,不会向云服务器泄露任何关于关键字和数据文件的重要信息.我们给出了详细的正确性证明、性能分析和安全性证明.数值实验结果表明:本文方案具有较高的效率.在未来的工作中我们考虑结合代理重加密技术将其应用于电子病历数据共享过程中,以实现与第三方数据用户的数据共享.4 安全性证明
4.1 关键字密文安全
4.2 陷门安全
5 性能分析
5.1 功能特性比较
5.2 理论分析
5.3 数值模拟
6 总 结