(河南理工大学计算机科学与技术学院,河南 焦作 454003)
云环境下“一切即服务”的商业模式和按需付费的特点,使用户支付一定的服务费便能享受到云端提供的各种服务,云存储模式下廉价的计算和巨大的容量吸引越来越多的用户为节约本地存储和维护开销将私人数据外包至云端服务器。但由于用户失去了对数据的实际控制,考虑到云服务器的不可信以及保障用户数据的隐私安全,数据需要在用户上传前进行加密处理,然而加密操作使基于明文的关键词检索技术无法使用。可搜索加密(SE,searchable encryption)技术的提出[1]实现了在不泄露用户数据隐私的条件下完成对加密数据的搜索。
社交网络、智慧医疗等云环境下,常常采用一对多的搜索模型,因此密文策略属性基加密(CP-ABE,ciphertext-policy attribute-based encryption)机制和可搜索加密机制的结合是目前的研究热点。基于密文策略属性基加密方案[2]使数据拥有者可以指定访问策略,实现细粒度访问控制。Yin等[3]结合CP-ABE 方案实现了可搜索加密方案,在安全索引上指定访问结构,只有用户的属性满足访问策略时才可以进行搜索。刘振华等[4]提出了支持关键词搜索的属性代理重加密方案,将密钥分为搜索密钥和属性密钥,实现密文检索和数据安全共享,并有效地隐藏搜索模式。孙瑾等[5]提出支持属性撤销的可验证多关键词密文检索方案,在密文中捆绑撤销信息,当属性撤销后无法检索和解密密文消息。Curtmola 等[6]将可搜索加密应用在多用户场景中,然而解密密钥被多个用户共享会增加其泄露的风险。因此,将属性基加密技术应用到搜索加密机制中,能够解决一对多搜索模式下数据拥有者和多用户之间共享搜索密钥导致密钥管理难度大的问题,且支持数据拥有者对搜索结果进行细粒度访问控制。
另外,在云环境的实际应用中,云服务器是半诚实且好奇的实体,存在为了节省计算或骗取服务费返回部分或不正确搜索结果的情况,这就需要用户验证搜索结果的正确性和完整性。Chai 等[7]首次提出可验证的对称密文检索方案,用户根据检索路径的散列序列对结果进行验证。Jiang 等[8]提出可验证的多关键词排序搜索方案,用户端采用消息验证码验证返回结果的正确性。杜瑞忠等[9]基于倒排索引提出可验证混淆关键词的搜索方案,该方案需要数据拥有者和用户事先通过安全信道共享验证集合,用户端先利用双线性映射确定返回的结果是否包含查询关键词,再验证返回结果正确性。以上方案均需要用户本地进行验证,计算开销较大。为了减轻用户的计算负担,伍祈应等[10]引入第三方可信审计机构对结果进行验证,验证时间与返回密文集合的大小有关。但是,现有的大多数可验证SE 方案中,重点在于检测恶意行为,缺乏某种机制去惩罚不诚实执行者。
在按需付费的云环境下,云服务器想在返回搜索结果前得到服务费,用户想在验证正确后支付服务费,同时云服务器可能在得到服务费后返回不正确的结果,用户可能在得到正确结果后声称不正确而不支付服务费,导致服务-支付不公平的现象。这就需要一种可靠的密文检索方案,不仅能够有效地检测出恶意操作,而且支持公平支付机制,惩罚恶意行为。服务-支付不公平问题的解决,往往依赖于可信第三方,如银行,当发生冲突时需要银行耗费时间来解决。为了消除第三方机构,在点对点网络中快速实现公平支付,区块链技术受到了广泛的关注。由于区块链不可篡改的性质,引入区块链公平机制到可搜索加密机制中,实现服务-支付公平,保证用户和云服务器只要诚实地按照协议执行,云服务器就可以得到相应的服务费,同时用户得到正确的搜索结果。一旦云服务器被检测到不诚实,就得不到服务费并且会受到损失保证金的惩罚。此外,用户在搜索结果正确的前提下,不可否认云服务器提供的结果以拒绝支付服务费。Cai 等[11]在分布式存储中实现动态的关键词检索,结合区块链技术,在客户端和服务器之间进行公平搜索。Zhang 等[12]以在区块链中临时冻结押金的形式实现手续费的公平支付而不需要可信机构,保证参与方诚实执行就能得到搜索结果以及服务费,但是在验证结果正确性过程中需要用户端进行大量的签名验证计算,用户开销较大。Wang 等[13]结合区块链技术实现公平支付,采用智能合约存储安全索引并执行搜索,解决云服务器返回不正确结果的情况,保证用户只要支付了手续费就总能得到正确的结果,虽有效地进行细粒度访问控制,但只支持“与”门访问策略,表达不灵活。Chen 等[14]提出支持逻辑表达式查询的公平可搜索加密方案,该方案采用智能合约取代云服务器,但是该方案密文数据库和安全索引均存储在智能合约中,需要消耗大量的燃料。Li 等[15]采用时间锁技术和比特币区块链,实现公平的单关键词可搜索加密,但是需要矿工进行解密操作,违背了比特币区块链的特性。
针对以上应用问题,为了实现在一对多搜索模式下云服务器和用户之间公平安全的搜索交易,且支持搜索结果的验证,本文提出了一种基于区块链且支持验证的属性基搜索加密方案,主要贡献如下。1)结合对称可搜索加密和CP-ABE,对共享解密密钥指定树形访问结构,实现细粒度访问控制,适合一对多搜索场景,只有属性密钥满足访问策略时才可以获得解密密钥。2)基于以太坊区块链,设计2 个智能合约——搜索合约和验证合约,将安全索引存储在搜索合约中,减轻云服务器的存储空间和搜索代价,验证合约检测云服务器搜索结果的正确性。同时,将区块链公平机制引入可搜索加密方案中,实现服务-支付公平,只要用户和云服务器诚实按照合约规则执行,用户就能得到正确的检索结果,而不需要本地额外验证,减轻数据使用者的计算开销,同时云服务器收到相应的服务费。3)安全性分析表明,本文方案满足自适应选择关键词语义安全,能有效防止隐私数据的泄露,实现密文检索。基于真实数据集在以太坊测试网络中实现本文方案,性能对比与实验分析表明,本文方案在索引产生、搜索令牌生成、检索效率、验证正确性以及交易数量方面具有一定的优势,适用于智慧医疗等一对多搜索场景。
以太坊是智能合约的分布式应用平台,扩展了比特币的功能,支持图灵完备脚本语言,是可编程的区块链系统。
智能合约是一套控制着数字资产并包含了合约参与方约定的权利和义务,由计算机自动执行而不需要人为参与的协议,总是按照事先约定的规则执行操作。将智能合约以数字化的形式写入以太坊区块链中,由区块链的不可篡改性以及密码学散列算法保障存储、读取、执行的整个过程透明、可跟踪、不可篡改、不可否认。在以太坊中,智能合约是特殊的账户,由账户地址、脚本代码、余额以及存储空间构成。
在以太坊中,有2 种不同类型的账户:外部拥有账户和合约账户。外部拥有账户由私钥控制,地址对应于公钥,可以发起消息通信交易进行转账或者创建合约交易触发合约代码的执行。合约账户被合约代码控制,一经创建便存在于区块链中不可更改,其代码将被激活并运行。
矿工处理交易而产生的每一次计算都会产生费用,这个费用以指令操作所消耗的燃料(gas)量来支付,不同的指令消耗的gas 值不同。gasLimit表示发送方最多支出的燃料量,gasPrice 表示发送方愿意在每个燃料上支付的费用。对于每个交易,gasLimit×gasPrice 表示发送方愿意为执行交易支付的最大费用。如果发送方账户余额中有足够的以太币来支付最大费用,那么该交易会被成功打包提交给区块链;否则,交易被认为是无效的。
以太坊中有2 种类型的交易:通信交易和合约创建交易。通信交易通常指从一个外部账户到另一个外部账户进行转账的交易,合约创建交易表示产生一个新的以太坊智能合约并触发智能合约中相关代码执行的交易。交易的数据结构如下所示。
基于区块链的密文检索系统如图1 所示,适用于一对多的搜索模型,数据拥有者将密文集合上传至云端,只有用户的属性私钥满足访问结构时才可以解密文档,包含6 个参与方,分别是数据拥有者(DO,data owner)、数据使用者(DU,data user)、云服务提供商(CSP,cloud service provider)、可信授权机构(TA,trusted authority)、区块链(BC,blockchain)、智能合约(SC,smart contract)。
图1 系统模型
基于文献[2]的CP-ABE 方案、文献[6]的SE 方案以及文献[13]的区块链数据共享方案,构建一种基于区块链且支持细粒度访问控制的可验证密文检索方案,该方案由7 个多项式时间算法的元组构成,即
1)初始化算法。Setup(1λ)→PK,M K,可信授权机构TA 输入安全参数λ,输出系统公共参数PK和主私钥MK。
2)加密算法。Enc(PK,D,W,SKS,Γ,K1,K2)→C,MAC,I,数据拥有者DO 输入系统公共密钥PK、明文文档集合D、关键词集合W、搜索密钥SKS、访问策略Γ、加密密钥K1、验证密钥K2,输出密文文档C、消息验证码集合MAC、安全索引I,数据拥有者将C发送给CSP,将索引I发送给搜索合约,将SKS、MAC、K2上传到授权机构TA。
3)用户注册算法。UserRegist(PK,MK,S)→SKU,SKS,K2,MAC,TA 输入公共参数PK、主私钥MK 以及用户属性集合S,输出属性私钥SKU、搜索密钥SKS、验证密钥K2、消息验证码集合MAC,TA 收到用户的注册请求,为用户颁发相应的密钥和集合。
4)搜索令牌生成算法。TokenGen(PK,kw,SKS)→Tkw,数据使用者DU 输入公共参数PK、所查询的关键词kw、搜索密钥SKS,输出搜索令牌Tkw,DU 将Tkw发送给搜索合约。
6)验证算法。Verify(DB(kw),C,K2,MAC)→Ckw/⊥,验证智能合约输入数组DB(kw)、密文集合C、验证密钥K2、消息验证码集合MAC,如果验证通过,输出正确的包含查询关键词的密文文档集合Ckw;否则,算法输出⊥,而不需要用户本地验证CSP 返回的结果是否正确,减轻用户计算开销。
本文采用文献[7]的安全模型,在有状态的模拟器B 和攻击者A 之间采用基于模拟的游戏,允许泄露访问模式和搜索模式来证明安全。信息泄露情况采用2 个泄露函数进行描述,即L=(L1,L2)。L1定义为L1(D)={|D|,n,{|Di|,id(Di)}i∈[1,n]},输入文档集合D,输出文档集合的大小、文档数量、每个文档的大小和标识符;L2定义为L2(D,w)=(AP(w),Tw),输入文档集合和查询关键词w,输出关键词的访问模式AP(w)和搜索令牌。在挑战者C、敌手A 以及模拟器B 之间进行的游戏定义如下。
1)系统初始化阶段
Setup(1λ)→PK,M K。输入安全参数λ,TA 定义G0、G1是Zp上的2 个乘法循环群,阶p为一个大安全素数,令g为群G0的生成元,定义双线性映射e:G0×G0→G1,选取抗碰撞散列函数H1:{0,1}*→G0,定义伪随机函数H2:{0,1}k×{0,1}*→{0,1}l,F:{0,1}k×{0,1}*→{0,1}l,TA 随机选择,输出系统公共参数PK=(G0,G1,p,g,h=gβ,e(g,g)α,F,H1,H2),系统主私钥MK=(α,β)。其中,e(g,g)表示双线性映射在群G1中的值。
2)加密阶段
Enc(PK,D,W,SKS,Γ,K1,K2)→C,MAC,I。假设DO 有n个明文文档,即D={D1,D2,⋅⋅⋅,Dn}需要加密上传到CSP 中。
步骤1文档加密,FileEnc(D,K1,K2)→C,MAC 。数据拥有者DO随机选取K1←{0,1}k作为明文文档的对称加密密钥。DO 使用K1加密文档Di(i∈[1,n]),得到,其中,ε表示安全的对称加密方案,ε.Enc表示加密过程,ε.Dec表示解密过程。DO 选取验证密钥K2←{0,1}k对密文文档Ci(i∈[1,n])生成消息验证码集合={H2(K2,Ci)|i∈[1,n]},DO 将密文文档集合C={C1,C2,⋅⋅⋅,Cn}发送给CSP。
步骤2密钥加密,KeyEnc(PK,K1,Γ)→。对于密钥K1,数据拥有者DO 定义访问结构Γ,首先从树的根节点r开始为树Γ的每一个节点x分配一个阶为dx的多项式qx(叶子节点的qx为常数),令kx表示节点x的门限值,设置deg(qx)=dx=kx-1,从树的根节点r开始,DO 随机选择,并设置qr(0)=s,接着从Zp中选取deg(qr)个随机系数来确定多项式qr;对于其他任意节点x,设置qx(0)=qparent(x)(index(x)),并从Zp中随机选取deg(qx)个系数来确定多项式qx。令Y表示树Γ中所有叶子节点,DO 计算得到密钥K1加密后的密文,如式(1)所示。
其中,s为随机数,att(y)表示属性值。
步骤3索引生成,IndexGen(PK,W,SKS)→I。DO 首先从文档集合D={D1,D2,⋅⋅⋅,Dn}中提取关键词。假设关键词集合W={w1,w2,⋅⋅⋅,wm}。对于每一个关键词wi∈W,DO 选择一个大小为n的空数组DB(wi),该数组按如下方法构造:如果第j个文档包含关键词wi,那么DB(wi)[j]=1;否 则DB(wi)[j]=0。例如,假设有3 个文件D1、D2、D3,其中,D1包含关键词w1、w2,D2包含关键词w2、w3,D3包含关键词w1、w2,可以得到DB(w1)={101},DB(w2)={111},DB(w3)={010}。
接着,DO 对于关键词集合W={w1,w2,⋅⋅⋅,wm}中的每一个关键词wi∈W,随机选取搜索密钥SKS←{0,1}k并计算,DO 将和||DB(wi)(i∈[1,m])通过交易TXs发送给搜索智能合约地址AddS,调用智能合约的addIndex()函数存储安全索引,如果DO 账户中没有足够的余额来支付$cost,系统回滚,其中,$cost 表示矿工收取的燃料费。
智能合约定义一个查找表I,其包含了m个条目,允许高效定位并查找密文信息,查找表的每一个条目与一个关键词相关并包含一个键值对
,其中,address 字段用于定位查找表的条目,value 字段用于获得密文信息。在查找表中,当给定一个address 时,会立刻返回相应的value 域,令,可得,其中,1≤i≤m。步骤4数据上传。DO 将MAC=、SKS和K2通过安全信道传输给TA。
3)用户注册阶段
UserRegist(PK,MK,S)→SKU,SKS,K2,MAC。用户注册阶段由TA 执行。当一个用户DU 发送注册请求后,TA 认证用户的身份并通过安全信道颁发相应的密钥。TA 为用户的相应属性集合S生成属性私钥,对∀u∈U,TA 选择,并且对∀j∈S,TA 取,计算相应的属性私钥,如式(2)所示。
TA 为DU 颁发搜索密钥SKS、验证密钥K2以及消息验证码集合。对于不同的DU 来说,属性私钥SKU是不同的,但是MAC 集合、SKS和K2都是相同的。
4)搜索令牌生成阶段
TokenGen(PK,kw,SKS)→Tkw。搜索令牌由DU 生成。在用户注册阶段,DU 得到相应的密钥SKS,根据要查询的关键词kw 计算出搜索令牌。
5)搜索阶段
Search(I,Tkw)→,DB(kw)。数据使用者DU将搜索令牌Tkw通过交易TXT发送给搜索合约地址AddS,调用智能合约的search()函数并传入搜索令牌Tkw,使用智能合约进行搜索,如果DU 账户中没有足够的余额来支付$cost,系统回滚。搜索合约的设计在第5 节介绍。
6)验证阶段
Verify(DB(kw),C,K2,MAC)→Ckw/⊥。数据使用者DU 读取到DB(kw)后,初始化集合IDMAC,遍历DB(kw),如果DB(kw)[j]=1,将j添加到集合IDMAC中,得到IDMAC={id1,id2,⋅⋅⋅,idj},根据集合IDMAC遍历MAC 集合,返回所有包含查询关键词kw 的消息验证码集合。
DU 将MACkw和K2通过交易TXC发送给验证合约地址AddV,调用验证合约中的addMac()函数并传入参数MACkw和K2,方便合约进行验证,令$serFee 表示数据使用者DU 支付给云服务器的手续费,被临时保存在验证合约账户中。验证合约的设计在第5 节介绍。
云服务器读取到DB(kw)后,初始化集合IDkw,遍历DB(kw),如果第j个文档包含关键词kw,即DB(kw)[j]=1,将j添加到集合IDkw中,得到IDkw={id1,id2,⋅⋅⋅,idj},根据集合IDkw查询密文数据库,返回所有匹配的密文文档Ckw={C1,C2,⋅⋅⋅,Cj}。
CSP 将包含查询关键词kw 的密文文档Ckw={C1,C2,⋅⋅⋅,Cj}通过交易TXV发送给验证合约地址AddV,调用智能合约中的verify()函数并传入参数Ckw,使用智能合约验证云服务器返回结果的正确性,令$Guranty 表示云服务器CSP 支付给验证合约的保证金。
借助验证合约验证云服务器返回结果的正确性,使数据使用者DU 总能得到正确的密文文档Ckw={C1,C2,⋅⋅⋅,Cj},而不需要本地进行再次验证,减轻用户的计算开销。
7)解密阶段
Dec(SKU,CK1,Ckw)→Dkw/⊥。DU 收到正确的密文文档Ckw={C1,C2,⋅⋅⋅,Cj}后,需要本地验证是否具有解密权限。验证通过,则可以进行解密得到明文文档;如果验证不通过,即使搜索到相应的文档但由于不具有解密权限,故得不到明文文档。
步骤1验证密钥Test(SKU,)→K1/⊥。DU收到密文后,检查属性私钥SKU和访问策略Γ是否匹配,如果不匹配,返回⊥;否则,根据文献[2]采用自下而上的递归算法,得到A=e(g,g)rs。由此DU 可以恢复出对称密钥
步骤2用户解密Dec(Ckw,K1)→Dkw。利用解密得到的对称密钥K1,解密读取到的密文文档Ckw={C1,C2,⋅⋅⋅,Cj},得到包含查询关键词kw 的明文文档Dkw={D1,D2,⋅⋅⋅,Dj},即Di={ε.Dec(K1,Ci)|i∈[1,j]}。
智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪并且不可逆转。本节引入搜索合约和验证合约的相关变量和函数。
1)搜索合约
搜索合约由数据拥有者DO 部署。搜索合约中用到的变量如表1 所示。
表1 搜索合约变量
搜索合约中用到的函数如表2 所示。
表2 搜索合约函数
2)验证合约
验证合约由数据使用者DU 部署。验证合约中用到的变量如表3 所示。
表3 验证合约变量
验证合约中定义的函数如表4 所示。
表4 验证合约函数
定理1本文方案π是适应性选择关键词语义安全的,CSP 和外部攻击者除搜索模式和访问模式外,不会获取任何额外信息。
证明如果对于任意敌手A,存在一个模拟器B,满足条件,其中,negl(λ)是可忽略函数,那么本文方案是适应性选择关键词语义安全。由文献[7]的证明等价可知,基于模拟的游戏证明等价于不可区分游戏证明,敌手A 将通过分析模拟器产生的密文、索引以及搜索令牌的区分性赢得游戏,因此,要证方案是安全的,即。
模拟器自适应生成模拟密文文档C*、模拟索引I*和模拟令牌的过程如下。
1)模拟密文文档C*。根据泄露函数L1(D)={|D|,n,{|Di|,id(Di)}i∈[1,n]},模拟器均匀随机地生成n个长度为|Di|i∈[1,n]比特的模拟加密文档C*={C1,C2,⋅⋅⋅,Cn}。由于ε是安全的对称加密方案,可保证中的C和中的C*在计算上是不可区分的,即
2)模拟安全索引I*。模拟器将I*设置为具有q个条目的查找表,在{0,1}l中随机均匀选择q个元素,其中i∈[1,q],根据泄露函数L1和L2,模拟器生成,模拟索引,在中构造索引的过程采用伪随机函数F,模拟I*就是使用随机字符串取代相同长度输出的。由伪随机函数的安全性可知,在不知道密钥SKS的情况下,敌手A 无法区分伪随机函数F的输出和相同大小的随机字符串,因此,敌手在计算上无法区分I和I*,即
因此,由可忽略函数的定义可知,针对伪随机函数F,在不具有搜索密钥SKS的情况下,可保证中的搜索令牌和中的搜索令牌的不可区分性,即
由于敌手A 试图通过分析密文、索引以及搜索令牌来赢得不可区分性游戏,即Adv(A(C))表示敌手A 区分真实密文文档和随机密文文档的优势,Adv(A(I))表示敌手A 区分真实索引和随机字符串的优势,Adv(A(Tw))表示敌手A 区分真实搜索令牌和随机搜索令牌的优势,则
令negl(λ)=negl1(λ)+negl2(λ)+negl3(λ),有。
定理2对于CSP 和其他外部敌手,除密文文档外,学习不到明文文档的任何信息。
证明在本方案中,文档Di在被上传至CSP前采用对称密钥K1加密,并且DO 基于CP-ABE 将K1加密为存放在安全索引中,也就是说,即使CSP 和外部敌手窃听到信道中的密文文档,但是得到明文信息的难度等同于解密的难度。在中,=K1e(g,g)αs,所以想要解密得到K1,就必须计算出e(g,g)αs。基于离散对数问题,对CSP 和外部攻击者而言,由e(g,g)α和C=hs计算求得e(g,g)αs是困难的。同样,基于计算性迪菲-赫尔曼问题,由于攻击者没有符合访问策略的属性密钥,无法利用拉格朗日插值公式向上递归计算出根节点的值e(g,g)rs,进而不能计算出K1。因此,当且仅当属性私钥满足访问结构时才可以计算出K1,从而解密出明文文档。但由于属性私钥是由DU 私藏,因此对CSP 和外部攻击者而言,除密文文档外,学习不到明文文档的任何信息。
本文利用智能合约,在点对点服务中快速实现公平支付,由以太坊区块链保证合约执行的不可篡改、不可否认以及可追踪,确保CSP 和DU 诚实地按照合约规则执行。借助验证合约验证CSP 返回结果的正确性,使DU 总能得到正确的密文文档Ckw={C1,C2,⋅⋅⋅,Cj},而不需要本地验证,减轻用户计算负担。由于区块链的不可篡改性,使智能合约一经部署便不可修改并全网共识,只能按照合约的逻辑执行,只要DU 得到正确的结果,CSP 才能得到手续费并赎回保证金,只要DU 支付了手续费,那么一定会得到正确的结果,在CSP 返回不正确的结果时,会受到惩罚并损失保证金,DU 同时收回手续费并得到保证金作为对CSP 的惩罚。此外,DU 不可否认CSP 提供的服务以拒绝支付服务费,因为DU 需要使用唯一的外部拥有账户来产生交易以调用合约,并且将手续费临时存储在合约账户中,一旦交易被确认并记录在区块链中便不可修改、不可否认。将区块链公平机制引入可搜索加密方案中,实现服务-支付公平。
1)功能对比
将本文方案的功能特征与文献[10,12-13]中的方案进行对比,如表5 所示。文献[10]方案支持多关键搜索,并支持细粒度访问控制,同时引入一个可信审计机构验证来返回结果的正确性,对用户不具有公平性。文献[12-13]方案都是支持单关键词的可搜索加密方案,且采用区块链技术实现服务-支付公平,文献[12]方案在验证搜索结果是否正确时不需要引入可信审计机构,由用户进行本地验证,增加了用户的计算开销。另外,与本文方案相比,文献[12]方案并不支持细粒度的访问控制策略。而本文方案使用智能合约验证结果,不需要用户本地验证,使用户始终得到正确的搜索结果,减轻用户本地计算开销。文献[13]方案和本文方案都采用属性基加密机制实现对用户的细粒度访问控制,但是文献[13]方案仅支持“与”门访问策略,而本文方案支持访问树结构,策略表达更加灵活。另外,文献[13]方案并不支持用户验证,而本文方案通过智能合约技术实现搜索结果的正确性验证,同时支持公平支付。
从功能方面来看,本文方案既扩展了实际应用中对数据的细粒度访问控制功能,又保证了云计算中搜索的安全性和正确性,同时实现服务-支付公平。
2)性能对比
将本文方案与相关方案在索引、搜索令牌、搜索、验证方面的计算代价进行对比,对基于区块链的可搜索加密方案在交易数量上进行对比,如表6所示。其中,E0和E1分别表示群G和G1上的指数运算;M表示模乘运算;P表示双线性对操作;H表示散列运算;F表示伪随机函数;|m| 表示DO提取关键词个数;|j| 表示包含关键词w的文件数;|l| 表示DU 查询关键词的个数;|U| 表示系统的属性个数;|S| 表示DU 拥有的属性个数;|R| 表示返回密文文件个数;|N| 表示文档的数量;Ip表示与门访问策略P的下标;|Y| 表示树型访问策略Γ的叶子节点个数;SIG 表示签名算法,包含签名和验证2 个过程;PK 表示公钥加密算法,包含加密和解密2 个过程;—表示不参与此项操作。
索引生成阶段,文献[10]方案需要进行复杂的指数运算,且指数操作次数和系统属性个数|U| 相关。一般情况下,|U| 要远远大于加密访问策略中属性数量|Y|,可见文献[10]方案计算代价是最大的。文献[12]方案需要在每个关键词以及每个关键词的文档集合上进行一次F、一次H、一次SIG 运算,计算量较大。本文方案和文献[13]方案虽也涉及耗时的指数和模乘运算,但都是一次性操作,数据使用者只需要计算一次,同时,文献[13]方案需要在每个关键词上进行2 次F,本文方案进行一次F,减少了索引生成时间。
表5 功能对比
搜索令牌生成过程中,文献[10]方案主要依靠指数运算,且指数的计算代价随|S| 线性变化。文献[12]方案主要依靠伪随机函数生成运算,且计算代价随|N| 线性增加。文献[13]方案需要先进行公钥解密操作获得搜索密钥,然后通过一次伪随机函数生成搜索令牌。而本文方案只需进行一次伪随机函数就可以产生搜索令牌。
搜索阶段,本文方案和文献[13]方案都是常数级别,搜索时间快,因为构建索引时采用基于键-值对的查找表方式,具有O(1)的搜索效率,使当给定一个搜索令牌时会立刻返回相应的值。此外,文献[10,12]方案都需要CSP 进行搜索,CSP 存储密文文档和安全索引,而本文方案将密文文档存储在CSP,安全索引存储在智能合约,使用智能合约进行搜索,减少占用CSP 的存储空间并减轻CSP 的计算负担。
验证结果的正确性阶段,文献[10]方案需要由可信审计机构进行3|R| 次双线性对计算才可以检测出是否正确,随着|R| 增大,验证时间增加。文献[12]方案移除可信审计机构,但是需要用户在本地进行|N| 次散列运算和|N| 次签名验证操作,随着文档数量的增加,验证时间增加。本文方案不需要用户本地验证就可以得到正确的结果,使用智能合约进行|R|!次散列运算,降低了用户的工作量,减轻用户计算开销。
本文方案与文献[12-13]方案都是基于区块链技术的,文献[12]方案需要进行13 次交易,文献[13]方案需要进行7 次,而本文方案的交易只有4 次,减少了交易在区块链中上传、打包以及确认过程中的时延,使系统具有较高的响应速度。
综上所述,从索引生成、搜索令牌生成、搜索阶段、验证阶段、交易数量5 个方面来看,本文方案在性能上是最优的,采用智能合约实现外包搜索,降低了CSP 的存储空间和计算开销,同时支持搜索结果正确性的验证,移除可信审计机构而且不需要用户本地额外验证就能得到正确的搜索结果,降低了用户的计算开销,减少了交易数量以获得更高的响应速率,并实现服务-支付公平。
3)实验分析
为了更准确地评估方案的实际性能,本文使用真实数据集和PBC(pairing-based cryptography)库在索引生成时间、搜索令牌生成时间、搜索时间方面进行仿真测试。本实验采用IEEE 数据库中的英文论文作为测试数据集,选取PBC 库中提供的A类椭圆曲线,散列算法采用SHA-256,2 个伪随机函数采用 HMAC-SHA256,对称加密算法采用AES-256,智能合约采用solidity 语言,运行在以太坊虚拟机中,区块链的实现基于以太坊官方测试网络Rinkeby,账户采用以太坊钱包MetaMask。本实验的硬件环境为 Intel(R)Core(TM)i5-4200 CPU(2.3 GHz),RAM 为4 GB。由于以太坊账户余额的限制,因此在实验中设置参数如下:访问树中叶子节点个数|Y|=10,每个用户拥有的属性|S|∈[0,10],文档的数量|N|∈[0,100],提取出的关键词个数|m|∈[0,20]。实验结果如图2 所示。
如图2(a)所示,在叶子节点个数固定为10 的情况下,索引生成时间与关键词数量成正比。当关键词数量为0 时,纵坐标不为0,因为需要在索引中为共享密钥指定访问策略,是一次性运算,时间为319.8 ms。此外,在索引生成阶段,数据拥有者为每个关键词调用一次HMAC-SHA256 算法。当关键词数量为20 时,数据拥有者生成索引的时间为917.5 ms。安全索引由数据拥有者生成,并发送给智能合约存储,不会影响用户的搜索体验。
如图2(b)所示,搜索令牌生成时间并不会随着用户属性的增加而剧烈变化。在用户属性为6 的情况下,用户想要搜索关键词“Blockchain”,由于采用单关键词搜索,同时搜索令牌的生成只需要调用一次HMAC-SHA256 算法,测试可得搜索令牌的生成时间为29.6 ms。在用户属性为10 的情况下,搜索相同的关键词,测试可得令牌生成时间为29.9 ms。通过10 次实验可以得出结论,在C 语言环境下测试搜索令牌平均生成时间约为30 ms,用户的属性数量并不会影响搜索令牌的生成时间。在用户想要搜索某个关键词时,只需要通过约30 ms 时间提交搜索令牌,因此具有较高的效率。
表6 性能对比
图2 实验结果
如图2(c)所示,当文档数量为20 时,用户搜索关键词“Blockchain”的时间为51 ms;当文档数量为60 时,搜索时间为60 ms;当文档数量为100 时,搜索效率为58 ms。在搜索效率方面,由于构建索引时采用基于键值对的查找表方式,因此随着文件数量的增加,检索效率保持不变,平均测试检索时间为56 ms。在用户支付一定的手续费后,只需大约56 ms 便可得到正确的搜索结果,而不需要额外步骤对结果正确性进行验证。搜索效率表明,本文方案具有实时性,满足云存储环境下搜索应用需求。
综合以上分析,本文方案实际性能测试和理论性能分析一致,且安全索引生成阶段、搜索令牌生成阶段以及搜索阶段响应时间都处于毫秒级别,在实际应用过程中不需要用户过长的等待,不会影响用户的操作习惯,因此本文方案在智慧医疗等一对多搜索环境中具有实用性。
本文方案在对称可搜索加密的基础上,采用密文策略属性加密机制和以太坊智能合约技术,构造了一种基于区块链且支持验证的属性可搜索加密方案,实现一对多搜索模型下对共享解密密钥的细粒度访问控制,并且在半诚实且好奇的云服务器模型下验证返回结果的正确性,而不需要用户本地验证就能得到正确的结果,减轻用户计算开销。同时由于区块链的不可篡改性,保证用户和云服务器之间的服务-支付公平,使用户支付手续费就一定得到正确的检索结果,同时云服务器在提供正确结果后收到相应的服务费,并且用户不可否认云服务器提供的正确结果而拒绝支付服务费,使各参与方均诚实地按照合约的规则执行操作。实际性能测试和理论性能分析表明,本文方案与相关方案相比,在安全索引产生、搜索令牌生成、检索效率以及交易数量方面有一定的性能提升,在保障数据隐私的同时,提高了检索效率并验证结果的正确性。下一步将考虑多关键词搜索等灵活的查询方式,以提高查询的精确度,避免带宽的浪费。