彭红艳,李 杰,石贞奎,李先贤
(1.广西师范大学 计算机科学与信息工程学院,广西 桂林 541004;2.广西多源信息挖掘与安全重点实验室,广西 桂林 541004)
近年来,云服务中心遭受外部攻击而丢失用户数据的事故接连发生,为了确保图像安全,用户在将图像外包到云服务器[1]之前会对数据进行加密以防止隐私泄露,然而加密后的图像数据失去了明文特征,使用户无法高效地进行图像检索,并且影响对图像数据的管理。
在基于可搜索加密技术的图像安全检索方案中[2-3],用户事先构造安全索引并将其与加密图像一起存储到云服务器中,通过安全索引实现了在不泄露用户数据隐私的条件下完成对加密数据的搜索,从而保证图像数据的安全性和可用性。但是目前多数加密图像检索方案[2-5]没有足够重视恶意云服务器问题,可能返回给用户错误或不完整的检索结果。
由于很难构造通用的认证结构对图像类型数据的相似度计算过程进行验证,因此加密图像检索结果验证面临很大的挑战。为准确捕捉用户真正的目标与兴趣点,本文通过使用区块链技术[6],提出一种基于区块链可验证的加密图像检索(Blockchain-based Verifiable Encrypted Image Retrieval,BVEIR)方案。在智能合约上执行图像检索任务时,借助区块链的共识机制使每次搜索操作正确执行,确保搜索结果的完整性和正确性。同时,为缩小图像语义与其特征描述符之间的差距,设计一种利用视觉词袋模型和simhash 的双层索引结构,实现精细化图像分类。该索引结构的第1 层基于视觉词袋模型,初步确定图像的分类以减少simhash 计算量,第2 层则利用simhash 进行相似图像检索,以汉明距离作为判断图像之间相似性的指标,通过相似性比较提高搜索效率和精度。
文献[7]提出一种保护隐私的图像检索方案,通过提取特征向量来表示对应的图像,并利用LSH 算法和K 最近邻算法提高搜索效率,确保图像数据安全。文献[8]提出一种基于内容的加密图像检索方案,通过引入基于离散对数问题的盲技术来保持特征向量的私密性,同时该方案支持模糊搜索。文献[9]提出一种混沌加密方法用于保护图像隐私,利用加速鲁棒特征算法和词袋模型来生成每个图像的特征向量,并应用局部敏感哈希算法构造特征向量的可搜索索引。文献[10]开发一种基于加密指纹的生物特征识别系统,但该系统的搜索复杂度和数据库大小呈线性关系。文献[11]提出一种具有访问控制功能的加密域图像检索算法,该算法可以管理用户对图像的访问权限,实现不同用户角色对图像的访问。文献[12]提出一种基于内容的加密图像检索方案,通过加密图像纹理和颜色信息来解决大规模图像数据的隐私保护问题,但该方案仍存在被恶意云服务器威胁的风险。
密码学家提出对称可搜索加密(Searchable Symmetric Encryption,SSE)技术[13],以实现对加密数据的亚线性搜索。SSE 不仅可以用于精确搜索文本类型数据,同样还能对图像类型数据进行相似性检索[2]。文献[14]设计了基于局部敏感哈希的SSE方案,其不依赖同态加密,但是复杂的构建搜索凭证过程导致整体效率较低。文献[2,14]都是在云服务器环境下设计加密图像检索方案,将加密图像和加密索引存储在云服务器中。文献[15]提出动态身份验证器用于检查结果的完整性,但不能阻止恶意服务器的重放攻击。文献[16]提出的方法可以提供前向或者后向的安全性,但是当云服务器为恶意时,用户仍无法简单有效地验证搜索结果。文献[17-19]提出将区块链技术融入到可搜索加密中实现去中心化、可靠、可验证的检索方案:文献[17-18]采用智能合约存储加密索引并执行搜索操作,解决了云服务器返回不正确结果的情况,但是方案不支持相似性检索;文献[19]将密文数据库和加密索引均存储于智能合约中,但导致了巨大的存储成本,造成不必要的浪费。
本文提出的BVEIR 方案中包含以下实体:图像拥有者(Image Owner,IO),服务提供 者(Service Provider,SP),图像使用者(Image User,IU),智能合约,云服务器即云平台(Cloud Platform,CP),系统模型如图1 所示。
图1 BVEIR 系统模型Fig.1 BVEIR system model
1)IO 即拥有图像数据的人,为了得到图像SP 的服务,其自愿将图像数据上传给SP,但不愿将这种信任延伸到外包的CP 上。
2)SP 从图像数据集中通过SIFT 提取特征,最终生成加密的图像索引存储到区块链上。SP 还使用对称加密算法对图像进行加密,然后将加密图像外包给CP。此外,SP 还会将解密密钥指定树形访问结构,从而实现细粒度访问控制。SP 部署用于搜索与更新的智能合约,当IU 发出搜索请求后,SP 认证用户的身份并为用户相应属性集合attr_list 生成属性私钥,通过安全信道将属性私钥和搜索密钥颁发给IU。
3)在搜索请求之前,IU 必须在智能合约中存入足够的搜索费(包括消息费和服务费)。如果IU 存入了足够的搜索费并且被SP 验证为授权用户,那么IU 可以将生成的搜索令牌以交易的方式发送到搜索智能合约进行搜索。IU 从搜索智能合约接收到结果后,到CP 上下载相应的加密图像数据进行解密。
4)区块链记录从SP 得到的加密图像索引,通过智能合约对IU 提供搜索服务以保证搜索结果的正确性和完整性。本文部署2 个智能合约(分别为搜索智能合约与更新智能合约)以支持整个系统的工作流程。
5)为避免CP 返回错误或者不完整结果对用户搜索造成威胁,本文仅将加密后的图像数据外包到云服务器中,搜索过程需要在区块链上完成,甚至还可将云服务器进一步替换为分布式存储服务器,例如IPFS[20]。
系统工作流程包括以下步骤:
1)IO 将图像数据上传给SP。
2)SP 生成系统参数k和密钥。SP通过SIFT 从图像数据集中提取图像特征,然后对提取的整个SIFT 局部特征描述因子进行K-Means 聚类,得到k个聚类中心作为视觉单词表(或者说是词典),这样每一幅图像就变成了一个与视觉词关联或者说图像包含在一个聚类中心中,最后根据每一幅图像所提取到的特征构建其单独的simhash 指纹,形成最终的索引结构,同时SP 将加密索引以及智能合约部署到区块链上。索引结构如表1 所示,为了方便展示,表中并没有体现加密情况。
表1 索引示例Table 1 Example of index
3)SP 同样利用对称加密算法对图像数据进行加密并且外包到CP 中。
IO 要查询图像数据,执行以下流程:
4)IO 要进行查询并将查询请求提交到SP。
5)SP 根据IO 查询图像生成search token,然后发送到搜索智能合约。
6)搜索智能合约收到search token 后进行相应的搜索,并把结果在区块链中进行广播,这样SP 将会得到结果。
7)SP 从区块链上查询到图像ID 信息,在CP 中下载与之对应的加密图像并解密。
8)SP 返回给IO 最初查询的图像结果。
IO 查询图像数据,执行以下流程:
9)IU 将自己相应的属性集合attr_list 发送到SP请求搜索授权。
10)SP 认证IU 的身份,并为IU 所具有的属性生成属性私钥,根据查询图像的请求颁发搜索密钥。
11)IU 利用步骤10 中得到的搜索密钥将查询图像生成的search token 发送到搜索智能合约中。
12)搜索智能合约收到search token 后进行相应的搜索并把结果在区块链中进行广播,这样IU 将会得到结果。
13)IU 从区块链上查询到图像ID 信息,在CP 中下载与之对应的加密图像并解密。
本文提出的BEVIR 方案包括以下算法(符号说明见表2):
表2 符号说明Table 2 Symbol description
1)Setup(1λ)→(kabe,ks,kd)。给定一个安全参数λ,SP 随机生成以下3 个密钥:kabe=(pk,msk)用来进行CP-ABE加密;ks用来进行SSE方案;kd是对称加密密钥,用于加密图像。
2)KeyGen(pk,msk,attr_list)→sk。由SP执行这个算法,输入公共密钥pk、主私钥msk 以及用户属性集合attr_list,输出属性私钥sk。SP 收到IU 的搜索请求后,返回给IU 相应的密钥ks和sk。
3)Enc(pk,G,W,S,policy_str,ks,kd)→(Ψ,C,Ckd)。SP 输入公共密钥pk、原始图像数据集合G、视觉字典W、图像的simhash 指纹集合S、访问策略policy_str、搜索密钥ks、对称密钥kd,输出安全加密索引Ψ、加密图像集合C、密钥kd嵌入访问策略后的密文Ckd,SP将C 外包到CP,将加密索引Ψ 放入搜索智能合约中并将合约部署到区块链上。
4)Trapdoor(pk,g,ks)→tokenq/tokenu。IU 向SP申请搜索/更新权限通过后,SP 通过安全信道将ks传输给IU,输入公共密钥pk、图像g 和搜索密钥ks,输出搜索令牌tokenq,IU 将tokenq发送给搜索智能合约并在区块链上完成搜索功能;或者输出更新令牌tokenu,同样IU 将tokenu发送给更新智能合约并在区块链上完成动态更新功能。
5)Search(Ψ,tokenq)→ID/⊥。搜索智能合约输入安全加密索引Ψ、搜索令牌tokenq,输出相似图像的标识符集合ID,之后IU 可以通过ID 到CP 中下载对应的加密图像。
6)Update(Ψ,tokenu)→Ψ’。更新智能合约输入安全索引Ψ、更新令牌tokenu,输出更新后的加密索引Ψ’。
7)Dec(sk,CID,Ckd)→DID/⊥。IU 输入属性私钥sk、集合ID 对应的相似加密图像集合CID和对称密钥kd嵌入访问策略后的密文Ckd,输出解密后的相似图像集合DID;否则,输出⊥表示为空。
1)系统初始化阶段Setup(1λ)→(kabe,ks,kd)。输入安全参数λ,其中kabe=(pk,msk),SP 定义G0、G1是两个阶为素数p的乘法循环群,阶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,SP 随机选α,β←ℤp,输出公共参数pk=(G0,G1,p,g,h=gβ,e(g,g)α,F,H1,H2),主私钥msk=(α,β)。其中,e(g,g)表示双线性映射在群G1中的值。搜索密钥ks=(k1,k2,k3),其中k1、k2、k3是伪随机函数F、G、P 的参数,这些函数的参数设置细节内容可参见文献[13]。SP 随机选取kd←{0,1}k作为原始图像数据的对称加密密钥。
2)用户 属性私 钥生成阶段KeyGen(pk,msk,attr_list)→sk,由SP 负责执行。在一个用户IU 发送搜索/更新权限申请后,SP 来认证用户的身份为用户的相应属性集合attr_list 生成属性私钥,并通过安全通信信道将属性私钥以及在系统初始化阶段生成的搜索密钥ks返回给用户IU。SP 随机选择r←ℤp,并且∀j∈attr_list,SP 取rj←ℤp,计 算对于不同IU 而言,属性私钥是不同的。
3)加密阶段Enc(pk,G,W,S,policy_str,ks,kd)→(Ψ,C,Ckd)。假设SP 有#G 个图像数据集,即G={g1,g2,…,g#G},需要加密上传到CP 中,同时加密索引Ψ和密钥kd嵌入访问策略后的密文Ckd上传部署到区块链中。加密阶段分为以下3 个步骤:
步骤1图像加密,Enc(G,kd)→C。SP 使用kd加密图像gi(i∈[1,#G]),得到ci=Enckd(gi)|i∈[1,#G]。最后SP 将加密图像数据集C={c1,c2,…,c#G}外包给CP。
步骤2对称密钥加密,kenEnc(pk,kd,policy_str)→Ckd。对于对称密钥kd,SP 定义加密策略policy_str并根据加密策略构造访问树T,首先从树的根节点r 开始为树T 的每一个节点x分配一个阶为dx的多项式qx(叶子节点的qx为常数),令kx表示节点的门限值,设置deg(qx)=dx=kx-1,从树的根节点r 开始,SP 随机选择s←ℤp,并设置qr(0)=s,接着从ℤp中选取deg(qr)个随机系数来确定多项式qr;对于其他任意节点x,设置qx(0)=qparrent(x)(index(x)),并从ℤp中随机选取deg(qx)系数来确定多项式qx。令Y表示树T中所有叶子节点,∀y∈Y,attr(y)表示叶子节点y对应的属性字符串,H(attr(y))将属性字符串attr(y)散列成G0中的元素,SP 计算得到对称密钥kd加密后密文:
步骤3建立加密索引,indexBuild(W,S,ks)→Ψ。SP 使用底层的SSE 方案,通过搜索密钥ks=(k1,k2,k3)生成安全加密索引Ψ。本文系统的索引结构采用了链表的形式,但可以很简单地看出也能用其他相似的数据结构进行动态加密。例如,SP 首先从图像集合G={g1,g2,…,g#G}中提取gi(i∈[1,#G])的SIFT 局部特征,然后对局部特征进行k-Means 聚类,得到用来表征图像信息的视觉单词wi(i∈[1,#W]),不同图像的视觉单词可能相同,同时还对提取到的SIFT 局部特征进行哈希编码生成相应的simhash 指纹S={s1,s2,…,s#G},这样就能获得每幅图像对应的视觉单词和simhash 指纹,整理成为如表1 所示的形式,并基于可搜索加密算法构建加密索引。这样构建索引,能够在查找图像过程中先根据视觉单词排除掉大部分不相关图像,而只在同一个分类下继续根据simhash 进行相似图像的查询,所对应的现实世界中的场景就是胸外科医生只能对关于胸部CT 的医疗图像进行搜索,而无权限搜索其他科室的图像数据,这样处理不仅实现了对图像数据使用者细粒度的搜索权限管理,而且还进一步缩小了搜索图像的规模,缩短了搜索时间。其中,SP 初始化搜索数组As和查找字典Ts分别用来随机存放每个链表的所有节点和每个链表的头节点地址,ctr 是一个计数器,本文使用随机函数π映射ctr 到数组As的一个随机地址上。SP 计算是基于同一个视觉单词w 建立的链表Lw中第i个节点,表示Lw中第i幅图像的标识符id,表示Lw中第i幅图像的f-bit 的simhash指纹信息,π(ctr+1)表示在搜索数组As中下一个节点的地址,然后SP 通过哈希函数H对加密后存储在As中的π(ctr)地址上。随着计数器ctr 的增加,SP 可以得到链表Lw的第i+1 个节点并且像上述操作一样对进行加密。对于每条链表Lw而言,其头结点地址还会被进一步加密存储在搜索字典Ts中。最终得到加密索引Ψ={As,Ts},并将其与步骤2 中得到的Ckd一同通过交易Tx 发送给搜索智能合约,调用智能合约的storeIndex()函数存储加密索引,如果SP 账户中没有足够的余额来支付$cost,系统回滚,其中,$cost 表示矿工收取的燃料费。建立加密索引的具体过程如算法1 所示。
算法1建立加密索引
4)令牌生成阶段Trapdoor(pk,g,ks)→tokenq/tokenu。搜索/更新令牌由IU 生成。在IU 向SP 申请搜索/更新权限阶段,IU 得到相应的属性私钥sk 和搜索密钥ks,通过特征提取器对要查询的图像g 计算出图像的视觉单词w 和simhash 指纹s,生成搜索令牌tokenq=(Fk1(wq),Gk2(wq),[sq]pk)或者更新 令牌。更新令牌又可以分为添加令牌和删除令牌,如果需要添加一张图片,添加令牌tokena=((Fk1(wa),Gk2(wa),Pk3(wa),Na),其中Na=((ida||0||[sa]pk||null)。而Ra是一串随机数{0,1}λ。如果需要删除一张图片,需要SP在用户属性私钥生成阶段对IU 的身份审核更加严格才能得到id 进而计算出tokend=(Fk1(wd),Gk2(wd),Pk3(idd),[sd]pk)。
5)搜索阶段Search(Ψ,tokenq)→ID/⊥。IU 将搜索令牌tokenq通过交易Tx 发送到搜索智能合约的地址,调用搜索智能合约的search()函数进行搜索得到相似图像的标识符集合IDq,具体过程如算法2 所示。
算法2搜索
从算法2 中可以看出,当判断Σ=0 表示图片存在并且在加密状态下,计算得到τ3与解析到第j个节点的simhash 指纹的汉明距离为x,若x小于所定义的阈值z,则可认为图片是相似的,否则是不相似的。如果IU 账户中没有足够的余额来支付$cost,系统回滚。算法2 定义一个搜索字典Ts和一个搜索数组As,其中Ts中包含了#W 个条目,允许通过Fk1(w)高效定位包含视觉单词w 的头结点地址addr(),进而在搜索数组As中遍历链表Lw中所有的节点并且对节点中的加密simhash 指纹计算汉明距离x,在阈值z内的为相似图像,然后将id 添加进集合ID 中,否则为不相似图像。本文所设计的索引结构优点在于查找图像的过程中能够通过视觉单词来排除不相关的图片,缩小查找范围和减少计算量,进而提高检索效率和精度。
6)更新阶段Update(Ψ,tokenu)→Ψ’。IU 将更新令牌tokenu通过交易Tx 发送到更新智能合约的地址,调用搜索智能合约的add()函数进行添加图片操作或者调用delete()函数进行删除图片操作,具体过程如算法3 所示。如果IU 账户中没有足够的余额来支付$cost,系统回滚。
算法3更新
7)解密阶段Dec(sk,CID,Ckd)→DID/⊥。IU 从CP上将ID 对应加密状态下的相似图像集合CID下载下来后,需要本地验证IU 是否具有解密权限。如果验证通过,则可以进行解密Ckd得到kd进而恢复出原始图像;如果验证不通过,即使搜索到相应的文档也不具有解密权限,所以得不到原始图像。解密阶段的具体步骤如下:
步骤1验证密钥VerifyKey(sk,Ckd)→kd/⊥。IU收到密文Ckd后,检查属性私钥sk 和访问策略policy_str是否匹配,如果不匹配,返回⊥;否则,采用自下而上的递归算法得到由此IU 可以恢复出对称密钥kd:
步骤2Dec(CID,kd)→DID。IU 利用解密得到的对称密钥kd,对CID解密得到DID,其中ID 为查询到的相似图像标识符集合。
当发送交易到区块链上时,若满足智能合约的触发条件,将自动执行预先设定好的逻辑,待区块链中多数验证节点达成共识后,智能合约将成功执行。由于智能合约会被自动触发而不需要图像服务提供商一直在线提供服务,因此用户无须直接面对恶意服务器的威胁,保证了在图像服务提供商、图像用户和图像拥有者之间交易的公平性。本文方案利用搜索智能合约和更新智能合约分别完成搜索过程以及对加密索引的更新。
1)搜索合约初始由SP 部署,之后在加密索引更新时IU 重新部署,这是因为智能合约中的代码和执行过程是提前制定的,一旦在区块链上部署完成后其中的内容无法修改且无法干预合约的执行,所以只能以重新部署的方式完成迭代更新。合约结构如图2 所示,其中主要展示了搜索合约中的变量和函数。addr_owner 和addr_UC 分别表示合约创建者的地址和更新合约的地址,定义了数组类型变量store_EI 用于存储加密索引和数组类型变量ID 表示搜索结果。此外,搜索合约包含存储索引函数storeIndex(),SP 调用该函数并输入加密索引Ψ,将其存储到变量store_EI 当中。search()为搜索函数,IU 调用该函数并传入搜索令牌token,输出搜索结果ID,同时更新合约调用getIndex()函数得到加密索引Ψ。
图2 搜索合约结构Fig.2 Structure of search contract
2)更新合约完全由SP 部署,合约结构如图3 所示,其中主要展示了更新合约中的变量和函数。变量addr_SP 表示合约创建者SP 的地址。更新合约包含添加函数add(),IU 调用该函数并传入添加令牌,添加函数add()则调用搜索合约中的getIndex()得到变量store_EI,并根据添加令牌对store_EI 进行修改并重新部署搜索合约,以达到添加新索引的目的。delete()为删除函数,IU 调用该函数并传入删除令牌,删除函数delete()同样调用搜索合约中的getIndex()得到变量store_EI,同时根据删除令牌对store_EI 进行修改并重新部署搜索合约,以达到删除索引目的,更新合约通过添加函数和删除函数来完成加密索引的更新功能。
图3 更新合约结构Fig.3 Structure of update contract
本节通过Ganache在本地构建一个模拟的以太坊网络,并通过分析建立加密索引、在智能合约上存储、搜索和更新所消耗的时间,对本文方案进行实验评估。实验环境为8 GB 内存Intel®CoreTMi7-7700 3.20 Hz,操作系统 是Microsoft Windows 10 64 位。数据集为3 个真实数据集Holiday、Oxford5k 和Ukbench。最后对方案进行安全性分析并与现有方案功能进行对比。
实验使用3 个著名的经常用于人工智能领域的真实数据集,分别为Holiday、Oxford5k 和Ukbench。Holiday 包含个人度假时拍摄的图片,以风景为主,有1 491 张图。Oxford5k 数据集包含针对11 个不同的地标landmarks 共5 062 张图,每个地标有5 个可能的查询表示。Ukbench 数据集包含2 550 个不同场景下的10 200 张图。
建立加密索引过程在链下进行,包含两个阶段:第一阶段是对图片预处理得到每张图片的视觉单词和simhash,本文使用python 来进行这一系列工作,包括提取所有图像的SIFT 特征向量生成每张图片的视觉单词和他们的simhash 指纹;第二阶段利用所有图像的视觉单词和simhash 建立加密索引,并将索引上传到区块链的智能合约,同时,将加密图像存储在云服务器中。
本文设定不同的聚类中心点个数k,通过聚类中心形成最后的视觉字典来建立索引。从图4 中可以看出,聚类中心数量k不是特别影响索引生成的时间,但是有助于在智能合约上快速检索。图4 显示了在3 个数据集上建立加密索引所需时间,可以看出,随着数据集规模的变大,建立索引的时间也相应增多。Holiday 数据集耗时约为20 s,Oxford5k 数据集约为61 s,Ukbench 数据集约为140 s。此处取20 次实验结果的平均值为最后的结果,对于大规模图像数据而言在可接受的范围内,因为建立索引后可以动态修改无需重新建立一次索引。
图4 不同聚类中心建立索引耗时Fig.4 Time consuming of indexing by different clustering centers
图5 展示了BVEIR 方案与SEIR 方案[2]建立索引耗时的对比,可以看出,BVEIR 方案在建立索引方面耗时较少。
图5 不同方案建立索引耗时Fig.5 Time consuming of indexing by different schemes
BVEIR 方案还支持对图像数据的细粒度访问控制策略。选取pbc 库中提供的A 类椭圆曲线,对称加密算法采用AES-256 来对图像进行加密。本文采用密文策略的属性加密机制完成对称密钥的加密,这实现了细粒度访问控制,不满足策略的用户将无法完成对图像的解密。本文所加密的是用来加密图像的对称加密密钥,用户只有在得到授权后才能恢复出原始的对称加密密钥,进而完成对加密图像的解密工作。换言之,非授权用户是无法解密出原始图像的,从而实现了对数据拥有者图像的隐私保护。如图6 所示,随着访问策略授权的属性个数增多,生成时间属性私钥的时间变长。当属性个数为20 时,所需时间约为0.24 s,当属性个数为60 时,所需时间约为0.5 s,即使当授权的属性个数达到100 个时,所需时间也只需约1.6 s。而在实际应用中,一般授权的属性数量在10 个左右,所以,这个细粒度的访问控制方案所需时间是可行的。
图6 生成属性私钥耗时Fig.6 Time consuming of generating attribute private key
在后续工作中,将考虑利用属性加密技术来约束用户的搜索权限,与原先的构建索引过程最大的优势在于可以对图像数据使用者进行细粒度的搜索授权,用户只能在得到授权后才能通过陷门函数生成搜索凭证来完成后续的搜索操作,以此实现对搜索范围的权限管理。当数据使用者的属性满足数据拥有者预先设定的访问结构时才能解密出对应的搜索密钥,这里提到的访问结构指的是被授权的属性集合的结构。
使用Ganache 在本地构建一个模拟的以太坊网络,验证智能合约实现链上各个功能所需消耗的时间。智能合约采用solidity 语言,并通过javascript 编写的脚本与智能合约交互实现存储、搜索、更新功能。Ganache 与真实的以太坊环境非常相似,不同之处在于其默认的挖矿时间为0,即发起的交易立即可以得到确认上链,从而可以专注于智能合约的调试去分析是否实现了预定的逻辑处理。
在本文研究中,对检索结果的性能评价使用精确率P与召回率R。由图7 和图8 可以看出。虽然本文提出的索引结构BSEI 在随着图像数量增长的同时检索精确率有所回落,但当图像数量为10 000 时检索仍然不低于30%。此外,从图8 中还可以看出,3 个方案的召回率随着图像数量的增长而增长,但在图像数量保持相同时,本文方案的召回率相比于EHD[21]和SIM[22]方案要好。通过精确率与召回率指标可以看出,本文提出的加密索引方案是可行的,并且检索的效果符合预期。
图7 不同索引结构精确率对比Fig.7 Accuracy comparison between different index structures
图8 不同索引结构召回率对比Fig.8 Recall rate comparison between different index structures
本文方案的主要贡献是在区块链上进行加密图像的检索,通过区块链的共识机制来保证图像检索结果的完备性。从图9 中可以看出智能合约的各主要功能存储、搜索和更新操作的耗时。存储耗时最多,是因为加密索引需要通过交易的方式发送给智能合约。具体而言,为了避免超过gaslimit,本文在把加密索引存储到智能合约阶段将其分为n个子集,再以n次交易的形式发送到智能合约,加密索引的存储大小、存储上链需要的交易次数#Tx 和存储到智能合约所消耗的时间在表3 中列出,可以看出,最小的数据集Holiday 需要的存储时间约为55 s,最大的数据集Ukbench 需要的存储时间约为876 s。通过多次交易的方式将加密索引分批存储到智能合约当中,平均每笔交易需要约4 s 进行操作。这是与在云服务器上检索方案最大的不同。此外,本文没有考虑共识机制(挖矿)过程对效率的影响。
图9 智能合约耗时Fig.9 Time consuming of smart contract
表3 加密索引存储耗时Table 3 Time consuming of storing encrypted index
本文BVEIR 方案在搜索与更新时,需要在本地生成token 并通过交易的方式发送给智能合约以触发对应的功能,一次交易就能完成。3 个数据集的搜索时间都在10 s 以下,在可接受的时间范围内普通用户进行常规搜索并能得到可靠的数据,而SHEN 等[23]的图像检索时间平均为14.65 s,需要注意的是,可以通过调整聚类中心k的个数进一步优化检索效率。同时最大不同之处在于本文方案并不需要删除字典,而是类似搜索一样去找到需要删除的图像将其中的Σ置1 代表删除,虽然这样会导致删除一张图片时间要比增加一张图片时间要多,原因是增加一张图片只需要对搜索字典查找并将其加入到对应的链表的头节点,而删除一张图片不仅要找到对应的链表,还需要对搜索数组查到找需要删除图像的id。普遍来说,遇到增加一张图片比删除一张图片的情况要多,虽然一定程度上造成了更新阶段比搜索阶段消耗更多的时间,但是从区块链存储成本角度来分析,省去了删除字典,降低了存储到智能合约当中的成本。此外,本文提出的在区块链上进行的加密图像检索方案产生的检索成本相比于传统的云服务器略显高昂,但是带来的优势是其无法比拟的,也提供了一种新的思路解决搜索结果的验证问题。
图10 中展示了部分检索结果(山、帆船、金字塔、浮冰),可以看出,根据查询图像可以检索到多张与其相似度很高的匹配图像,从而说明BVEIR 具有可靠性和较高的检索效率与精度,同时具有良好的隐私保护效果。
图10 BVEIR 方案检索结果Fig.10 Search results of BVEIR scheme
对BEVIR 方案的安全性分析如下:
1)完备性。一旦触发智能合约中的条件并执行预先设定好的逻辑(代码),智能合约就会将运行后的结果永久保存在智能合约的状态中,在以太坊上,这种结果是对所有人公开的。以太坊的共识机制保证了智能合约上的操作都能得到正确执行,并且每个矿工可以对结果进行验证,也就意味者通过搜索智能合约进行搜索可以得到正确的结果,无需用户验证结果,从而避免恶意云服务器所带来的威胁。
2)机密性。为了证明本文方案π的机密性,遵循real-ideal simulation paradigm,首先在构造中定义以下3 个泄露函数:(1)泄露函数L1(G)={|G|,{|gi|,id(gi)},i∈[1,#G]},其中,id(gi)是第i幅图像的唯一标识符。(2)泄露函 数L2(w,s)={SP(w,s),tokenq},其中,w 是图像的视觉单词,s 是图像的simhash 指纹,SP(w,s)表示搜索模式。(3)泄露函数L3(w,s,id)={add/del,UP(w,s,id),tokenu},其中,add/del 作为区分输入的目的(增加或删除),UP(w,s,id)表示更新(增加或删除)模式。
定理1如果F、G、P是伪随机函数,那么本文方案π是适应性选择关键词安全的。
证明:如果对于任意敌手A 存在一个模拟器S,模拟器S 根据泄露函数L回答敌手A 的询问。敌手A 识图通过分析加密图像、加密索引与搜索令牌来赢得游戏但由可忽略函数negl(λ)定义可知,任意多项式时间敌手A 在不具备对称加密密钥kd以及搜索密钥ks(F,G,P)的情况下,对 于和的输出结果在计算上不可区分的,满足条件那么本文方案π是适应性选择关键词安全的。
本文提出一种基于区块链的加密图像检索方案,通过在智能合约上进行检索,避免云服务器返回错误或不完整的搜索结果。此外,设计一种利用视觉词袋模型和simhash 的双层索引结构,提高图像检索的效率和精度。本文方案的索引生成过程也可以模块化换为其他可搜索加密方案。后续将研究可信执行环境TEE、同态加密、安全多方计算SMC、零知识证明ZKP 等技术,在不泄露图像隐私的情况下进一步降低检索成本,增强方案的实用性。同时,还将在建立索引的过程融入卷积神经网络和主成分分析,获得更好的相似图像匹配效果。