APP下载

使用模糊关键字可搜索同态加密的区块链隐私保护方案

2022-11-18蔡玉涵王静宇

小型微型计算机系统 2022年11期
关键词:关键字解密密钥

蔡玉涵,王静宇

(内蒙古科技大学 信息工程学院,内蒙古 包头 014010)

1 引 言

区块链是一个分布式账本,本质上是一个去中心化的数据库,具有去中心化、不可篡改、可追溯、集体维护和公开透明等特点[1-3].但区块链在实现去中心化和去信任化的同时,会将全网的交易信息公开以达到节点的共识,信息的公开就会降低数据的隐私性.为解决这一问题,数据加密应运而生,但是常用的数据加密方案会限制存储服务器处理用户访问请求的能力[4].如若用户想要查询包含某一关键字的文档,用户需将加密文档下载,然后进行解密得到想要获取的内容,这不仅消耗存储空间,也给用户带来了较差的体验感.因此,可搜索加密的研究逐渐成为近几年的热点.

近年来,许多研究者开始致力于研究区块链系统中的安全问题,在该领域应用较多的隐私保护技术主要有混币机制[5]、零知识证明[6]、环签名[7]和同态加密[8]等.祝烈煌等人[9]将区块链中的隐私定义为身份隐私和交易隐私,在介绍区块链架构的同时,详细阐述了区块链隐私保护面临的危险以及保护对策,但是该文更多的是理论阐述而没有落实到具体场景之中.张奥等人[10]将区块链隐私归纳为账本隐私和网络隐私,同时将现存的隐私保护技术总结为地址混淆、信息隐藏和通道隔离,详细介绍了各类隐私保护机制的原理、特征以及不同的实现方式,但同样的问题是,该文献也偏于理论,缺乏实际生活中的应用.陈思吉等人[11]提出一种基于环签名的区块链隐私保护算法,在众多用户中混入真实的签名者,用减小用户身份信息和区块链节点地址的相关性的方式来保护用户的隐私,但该算法是基于相对稳定以及有一定的角色权限管理的区块链网络,如私有链和联盟链,但对于公有链并不适用.Song等人[12]首次提出了可搜索加密,目前已经得到了广泛的研究.Shmueli等人[13]总结了在为加密数据库设计安全索引时的挑战,同时为了支持在多用户环境下的自由访问,将该索引分为多个子索引,使用同一密钥加密相关值,安全性较低.Boneh等人[14]在2004年提出一种基于公钥密码学的可搜索加密方案.之后,随着区块链技术的不断发展,可搜索加密技术开始逐步与区块链结合.聂梦飞等人[15]为了解决传统的可搜索加密方案的公平性问题,提出了一个结合以太坊区块链和智能合约的对称可搜索加密方案,文中分别在服务器和用户不诚信时设置了惩罚措施,保证了隐私数据的安全性.杜瑞忠等人[16]提出一种基于区块链的公钥可搜索加密方案,该方案利用区块链技术解决了传统方案中第3方的不可信问题,限制了服务器产生的恶意行为.

但是在实际应用中,精确搜索会给用户带来不便,如用户在搜索时不小心输错了关键字,精确搜索将不会返回结果,这样就会给用户极差的体验感.就这一问题,Li等人[17]提出了在云计算中的模糊关键字搜索方案,首次形式化的实现了在云计算中支持高效隐私保护的模糊搜索,以实现远程存储加密数据的有效利用的问题.Yan等人[18]提出基于区块链的可实现公平支付的可搜索加密方案,在该文献中实现了模糊关键字搜索,同时保障了用户查找到的数据文件的安全性和正确性.

但是上述文献主要是实现数据文件的安全性以及数据文件的相关隐私保护,并未考虑到用户的隐私保护.本文借鉴文献[19]的思想,基于模糊关键字可搜索加密和同态加密设计出一个区块链隐私保护方案,通过引入中间节点将内容加密密钥分割,采用同态加密算法实现加密密钥的安全性,该方案不仅能够实现数据文件的隐私安全保护,同时也增加了用户的隐私安全保护.

2 相关工作

目前大多数的可搜索加密方案的实现是基于云服务器的,传统的云服务器存储大都是依赖于可信任的第3方来存储数据和进行交易,但是数据的可用性和数据的安全性是这种模型比较容易出现的问题.当使用各种安全等级不同的加密方案将保护的数据文件上传到云服务器后,集中的密钥管理方案容易造成单点故障[20],分布式存储方案可以解决传统云存储系统中单点故障的问题.本文的方案采用密钥分割技术,通过中间节点将密钥存储在区块链上,避免了集中密钥管理的单点故障问题.此外,半可信的云服务器可能会篡改或泄露数据信息,区块链作为具有去中心化和防篡改功能的分布式架构,可以很好的保持数据的隐私性和完整性,正因为如此,区块链可以很好的与云计算结合.

智能合约(1)http://zh.m.wiki.sxisa.org/wiki/智能合约是Szabo[21]在1995年首次提出的,其无需第3方就可以自动执行,用来实现可信交易.区块链上的智能合约是一组协议,可以直接写入代码,在部署智能合约的时候,将编译器编译产生的字节码存储在区块链中[22],同时存储产生的地址.当触发合约中预定义的条件时,智能合约自动执行,将最终结果存储到区块链上.因为智能合约允许在不参与中心化结构机制的情况下执行值得信赖的交易和协议,因此区块链的智能合约可以适用于本文中设计的系统密钥的分发和验证.

Do等人[23]设计了一种具有关键字搜索功能的安全分布式数据存储结构,通过使用加密技术确保数据的可用性,在区块链的帮助下实现了对检索结果完整性的验证.Wang等人[24]为了解决传统云服务器存储中单点故障的问题,设计了一个分布式数据存储的系统框架,在该框架中,基于以太坊区块链的智能合约实现了分布式系统下对加密数据的关键字搜索功能,解决了云服务器返回错误结果的问题.Hu等人[25]使用了以太坊智能合约取代中心化服务器来构建分布式隐私保护下的可搜索加密方案,保证了参与者只有在诚实的执行了智能合约的情况下才能获得相应的结果,增强了系统的可信性.Li等人[26]为了增加系统的可信度,将数据存储在公共链上,使用区块链构造SSE模型,以加密的形式将数据拥有者的数据存放在区块链上,但是该方案不适合动态数据.Cai等人[27]融合可搜索加密技术和基于分布式哈希表(Distributed Hash Table,DHT)的关键字搜索技术为加密和分布式存储平台设计了一个安全性和鲁棒性都较强大的关键字搜索系统.但是该系统的搜索功能比较单一,仅能支持私有关键字搜索,并且区块链的开销较大.

在数据存储方面,上述方案基本上使用的都是区块链存储数据,但是区块链具有不可篡改的特性,如果在数据量比较大的时候,在发生修改或者加入文件数据时,会对存储时间和存储空间造成比较大的消耗.

Li等人[28]采用比特币区块链和云服务器结合实现单个关键字的可搜索加密方案,同时通过比特币的脚本文件来对结果进行验证.Zhang等人[29]为了保护诚实的云服务器免受数据存储过程中恶意数据拥有者的破坏,提出一种没有第3方即可实现的服务器端验证框架TKSE,采用区块链技术和哈希函数,实现公平支付问题.Wang等人[20]利用区块链的不可篡改性,将在区块链上的索引存储内容和云服务器中的搜索索引结果相匹配,设计出一个适用于单个关键字搜索的可搜索加密方案.

上述方案结合了云服务器和区块链,区块链上存储的是加密数据的哈希值,并且将相关索引集合存储在智能合约中,进一步提高了数据的完整性.但是这些方案都是要求用户在输入关键字之后要和数据拥有者预先定义好的关键字完全匹配才能够返回结果,即基于精确的关键字搜索,这在用户的使用过程中会带来较差的体验感.

为了解决上述问题,本文提出一种基于区块链的模糊关键字可搜索加密的方案,即用户输入关键字,系统返回与之匹配度相接近的文档数据.使用区块链存储分割的密钥,将加密文档存放在云服务器中,同时将加密文档的文档标识符分别发送给云服务器和区块链,因为区块链不可篡改,即使恶意用户修改云服务器中的数据信息,但在区块链中有其记录标识,在获取数据时会停止服务,保证了数据的安全性.同时采用加法同态加密算法,保证了密钥分发时的安全性.

3 预备知识

3.1 构造模糊关键字集合

在从文档中提取出关键字后,需要为关键字构造模糊关键字集合,利用文献[17]研究的编辑距离估计两个字符串的相似性.对于两个关键字W1和W2,编辑距离ed(W1,W2)就是指将一个关键字转换为另一个关键字所需要的最小单字符操作数,其中有3个基本操作[18],如下:

a)插入:插入一个字符

b)删除:删除一个字符

c)替换:将一个字母替换成另外一个字母

为了实现基于区块链的模糊关键字搜索加密,利用编辑距离构造模糊关键字集.给定关键字w和编辑距离d,假设Sw,d表示满足Sw,d={w′|ed(w,w′)≤d}的模糊关键字集.例如,对于预设编辑距离为1的关键字CASTLE,其基于通配符的模糊关键字集合表示如下:

SCASTLE,1={CASTLE,*CASTLE,*ASTLE,…,CASTL*E,CASTL*,CASTLE*}

3.2 倒排索引

倒排索引(Inverted Index)是被用来存储在全文搜索下某个关键字在一个文档或者一组文档中的存储位置映射的一种索引方式,以关键字为索引关键字和链表访问入口的索引结构[30].

以英文为例,下面是要被检索的文本:

T0="what is this place"

T1="this is Shanghai" T2="I live in Shanghai"

得到反向索引文件表如表1所示.

表1 反向索引文件表

故检索条件“this”和“is”将对应这个集合:{0,1}∩{0,1}={0,1}.

3.3 同态加密

同态加密(Homomorphic Encryption,HE)的思路是直接将密文进行加密,然后在密文上进行各种运算操作,这些操作和在明文上的操作相同[8].换言之,同态加密允许在不知道私钥的情况下对加密数据执行特定的计算,使得计算之后得到加密数据在解密后的结果与对明文执行相同的计算得到的结果相同.实现效果如图1所示.本文方案中使用的是基于加法的半同态加密算法[31].

图1 同态加密工作图

4 具体方案

本文方案使用了比较多的符号,为了方便阅读,在表2中总结了这些符号和对应的描述.该方案主要由5个参与者,分别是数据拥有者(Data Owner,DO)、半可信的云服务器(Semi-convertible Cloud Server,SCS)、中间节点A、中间节点B和数据用户(Data User,DU).

表2 符号含义

此外,本文还假设π表示本方案中的伪随机置换函数(Pseudo-Random Permutation Function,PRP)π,用来混淆关键字的位置,选择一个伪随机函数(Pseudo-Random Functions,PRF)H来加密索引向量v(wi),上述两个函数的参数如下,其中l表示关键字的最大长度:

π:{0,1}λ×{0,1}l→{0,1}l

H:{0,1}λ×{0,1}l→{0,1}N

本方案的体系架构如图2所示,包括内容加密、搜索、用户获取加密文档和用户解密4个阶段.

图2 方案体系架构

4.1 内容加密阶段

在文件内容加密阶段,DO使用加密组件生成加密密钥key,使用对称加密算法加密文档内容,并生成安全索引,将结果发送到SCS上.

1)DO的加密组件随机生成长度为L的子密钥ak和bk,并相加得到key,同时生成搜索密钥k1.

key=ak+bk

{0,1}λ→k1(λ表示安全参数)

2)DO使用key加密文档,并将结果发送到SCS上,即Enc(key,D,k1)→(C,EID,I)

a)文件加密.FileEnc(D,key)→C,DO使用key加密明文文档Di(i∈[n]),获得Ci.DO为加密的文档集合C中的文件生成加密文档标识EID={EID1,EID2,…,EIDn},最后将加密文档集合C和加密文档标识EID发送给SCS.

b)安全索引生成.IndexGen(D,k1)→I,在建立索引表的时候,我们采用倒排索引的方式.DO通过扫描明文文档集合D提取出所有不同的关键字,构造出关键字集合,用WD={w1,…,wm}表示.在这之后DO为关键字集合WD中的每一个关键字wi构造出一个n维向量v(wi),如果第j个文档包含关键字wi,则v(wi)[j]=1,否则v(wi)[j]=0.例如有4个文件D1,D2,D3,D4,其中D1包含关键字w1、w2、w3和w4,文件D2包含关键字w2和w3,文件D3包含关键字w1、w3和w4,文件D4包含关键字w2、w3和w4,则我们可以得到结果v(w1)=[1010],v(w2)=[1101],v(w3)=[1111],v(w4)=[1011].具体如表3所示.

表3 索引向量

在完成上述工作之后,DO为每一个wi∈WD构造模糊关键字集,用Swi,d表示具有编辑距离d的关键字wi的模糊关键字集合,让wi,t(1≤i≤m,1≤t≤|Swi,d|)表示模糊关键字集Swi,d中的关键字.

DO为每一个在Swi,d中的关键字wi,t计算πk1(wi,t),然后将πk1(wi,t)存储在倒排索引的第1个节点上.其中πk1(wi,t)的计算方法是使用伪随机置换函数PRPπ,此时可以混淆关键字的实际位置.在得到πk1(wi,t)和索引向量v(wi)之后,DO使用伪随机函数PRFH计算H(πk1(wi,t))⊕v(wi)→E(wi),即通过索引向量v(wi)获得加密的索引向量E(wi),如表4所示.

表4 加密的索引向量

再将加密后的索引向量E(wi)存储在倒排索引的第2个节点上.之后构造安全索引I,安全索引的结构如图3所示.

图3 安全索引

3)DO使用中间节点A的公钥PKA加密ak,并将加密结果发送给中间节点A,使用中间节点B的公钥PKB加密bk,并将加密结果发送给中间节点B.

DO→A:Enc(PKA,ak)

DO→B:Enc(PKB,bk)

4)中间节点A和B使用自己的私钥SKA和SKB分别解密出ak和bk,并分别建立一张内容标识符EID与ak,bk相互对应的表.

4.2 搜索阶段

TokenGen(w′,k1)→Tw′,当用户想要搜索包含关键字w′(此时的关键字允许拼写错误)的文档时,会使用共享密钥k1计算搜索令牌Tw′=πk1(w′),将令牌发送给SCS.

搜索操作由SCS执行,在接收到搜索令牌Tw′之后,SCS将安全索引中每一个链表的第1个节点的元素与搜索令牌Tw′进行匹配.本方案中加密的精确关键字πk1(wi)用于表示链表中第1个节点的第1个元素πk1(wi,1),即wi,1代表一个确切的关键字wi.因此,SCS先判断搜索令牌πk1(w′)是否等于第1个元素πk1(wi,1),然后在模糊关键字集Swi,d中匹配其他的加密关键字πk1(wi,t).这个过程有以下两种情况:

a)πk1(w′)与第1个节点元素πk1(wi,1)不匹配,但是与链表的第1个节点中的剩余元素πk1(wi,t)匹配.这种情况下,SCS将πk1(wi,1)发送给用户,当用户收到πk1(wi,1)之后,计算H(πk1(wi,1)),将其发送给SCS,SCS通过在链表的第2个节点上计算H(πk1(wi,1))⊕E(wi)→v(wi)得到索引向量v(wi).如果v(wi)[j]=1,SCS将加密文档Cj添加到包含搜索关键字的加密文档集合Cw′中.

b)πk1(w′)与链表第1个节点元素πk1(wi,1)匹配.这种情况下,SCS通过计算H(πk1(w′))⊕E(wi)→v(wi)直接在链表的第2个节点上解密E(wi),得到索引向量v(wi).如果v(wi)[j]=1,SCS将加密文档Cj添加到包含搜索关键字的加密文档集合Cw′中.

最后,SCS将加密文档集合Cw′发送到区块链的智能合约上,同时,将加密文档对应的加密文档标识符EID发送给DU.

4.3 用户获取加密文档

1)用户首先随机生成密钥对PKU和SKU,之后用户向智能合约提交搜索请求(Search Ask,SA),该搜索请求包含SCS返回的加密文档标识EID,并使用PKA加密:

DO→smart:SA=Enc(PKA,EID‖PKU)

2)智能合约收到搜索请求SA之后,向中间节点A提交搜索许可请求(Search Licensing Request,SLR),即SLR=SA‖T.

3)中间节点A收到搜索许可请求SLR之后,会验证时间戳T是否有效,验证通过之后,中间节点A先使用SKA解密出EID和PKU.然后,中间节点A根据EID随机生成长度为L的ha和hb,满足ha+hb∈[0,M-1](其中M表示一个很大的数),并用ha加密ak,最后将生成的搜索许可(Search Licence,SL)发送到智能合约上.搜索许可包括使用ha加密的ak,以及搜索许可凭证(Search Licence Certificate,SLC),具体如下:

SLC=(PKB,EID‖hb‖T)‖Sign(SKA,EID‖hb‖T)

A→smart:SL=SLC‖Enc(ha,ak)‖Enc(PKU,ha+hb)‖

Sign(SKA,Enc(ha,ak)‖Enc(PKU,ha+hb))

4)智能合约将完整的SL发送给中间节点B,B在接收到消息之后,用PKA验证SL是否有效,验证通过之后,从SL中提取出SLC,再使用PKA验证SLC的有效性.以上均通过之后,中间节点B使用SKB解密出EID和hb,然后查找出与该加密文档标识符EID相对应的bk,之后再使用hb加密bk,并将其发送给智能合约:

B→smart:Enc(hb,bk)

5)智能合约将来自中间节点A、B的信息打包发送给数据用户DU,即:

smart→DU:Enc(ha,ak)‖Enc(PKU,ha+hb)‖Enc(hb,bk)‖Cw′

该阶段的大致工作如图4所示.

图4 用户获取加密文档工作图

4.4 用户解密阶段

1)用户接收到智能合约的信息之后,使用SKU解密出ha+hb:

DU:ha+hb=Dec(SKU,Enc(PKU,ha+hb))

2)根据加法同态加密算法解密出:

Enc(ha,ak)+Enc(hb,bk)=Enc(ha+hb,ak+bk)

故用户可以解密出ak+bk

ak+bk=Dec(ha+hb,Enc(ha,ak)+Enc(hb+bk))

3)用户根据密钥解密出结果:

key=ak+bk

Dw′=Dec(key,Cw′)

Dw′即为用户所要搜索包括关键字w′或者包含与关键字w′最接近的关键字的文档集合.

5 方案理论分析

5.1 隐私保护能力分析

用户需要在获取加密文档的时候提交SA,此时会生成随机密钥对向区块链的智能合约提交SA,之后智能合约将生成SLR转发给中间节点,因为每次发送的SLR中的时间戳T都不相同,故这些中间节点是无法获取用户的身份信息的,所以本文方案是可以保证用户的匿名性的.此外,因为区块链是分布式的存储架构,所以是很难实现网络窃听的.综合上述要点,该方案可以实现用户隐私保护.

5.2 正确性分析

在搜索阶段,因为本方案满足拼写错误的关键字搜索,并且采用具有两个节点的链表文件来存储相关信息,如果在用户拼写时发生拼写错误,可以通过与链表第一个节点中存储的模糊关键字集合进行匹配,找到对应的模糊关键字的位置,再进行之后的操作.因此,在该阶段时可以返回相应的结果的.

在用户解密的阶段,用户获取到Enc(ha,ak)、Enc(PKU,ha+hb)和Enc(hb,bk),首先解密出ha+hb,然后基于加密同态加密算法可以得出:

Enc(ha,ak)+Enc(hb,bk)=Enc(ha+hb,ak+bk)

最终可以得出:

ak+bk=Dec(ha+hb,Enc(ha,ak)+Enc(hb+bk))

因此根据key=ak+bk就可以解密出真正的内容.

5.3 安全性分析

1)用户只有从区块链上获取到有效的打包信息才能够解密加密的文档,保障了系统的安全性,防止恶意用户获取加密文档信息.

DO使用key加密明文文档的内容,用户只有获取到key才能够解密出文档内容.DO通过将加密密钥key分成两部分ak和bk并分别交于中间节点A和B进行存储.在获得打包的信息之后,用户使用自己的私钥SKU解密出ha+hb,之后再基于加法同态加密算法解密出key.因此,只有获得打包信息的用户才能够将加密的文档进行解密.

2)在用户获取加密文档以及加密密钥的过程中,中间节点、智能合约以及区块链上的其他节点均不会获得完整的密钥key.

对于中间节点A,因为其保存的是部分密钥ak,所以不能够获取完整的密钥.同理,对于中间节点B而言,因为其保存的是部分密钥bk,所以也不能够获取完整的密钥.对于智能合约而言,中间节点A和B都是发送的各自加密的部分密钥,智能合约无法获取具体信息.在获取加密文档阶段,中间节点A向智能合约提交搜索许可SL,其中包含使用ha加密的ak,而智能合约无法解密出结果.在将信息打包的时候,也包含了使用hb加密的bk,因为都是使用了密钥进行了相应的加密,因此智能合约无法获取内容加密密钥.如果其他恶意节点试图随机生成hb′来伪造搜索许可凭证SLC的话,则智能合约将伪造的(PKB,EID‖hb′‖T)‖Sign(SKA′,EID‖hb′‖T)发送到中间节点B上,中间节点B会使用PKA验证签名Sign(SKA′,EID‖hb′‖T)不通过,因此不会得到部分密钥bk.故最终不会获得加密密钥key.

3)攻击者不能够伪造出智能合约发送给用户的打包信息.

如果攻击者伪造中间节点A发送SL给智能合约,之后该伪造的SL发送给中间节点B,会通不过中间节点B的验证,故不会获得相应的密钥.如果攻击者伪造中间节点B在接收到搜索许可SL后提取出的搜索许可凭证SLC,首先使用PKA验证签名Sign(SKA,EID‖hb‖T)通过,但是攻击者无法使用SKB解密出EID和hb,故也不会得到相应的密钥.因此,攻击者不能够伪造出智能合约发送给用户的打包信息.

5.4 可靠性分析

假设在概率多项式时间(Probability polynomial time,PPT)内存在一个敌手A可以以不可忽略的概率破坏方案的可靠性,换言之,敌手A可以伪造出(Cw′′,πk1(wi,1)′)使得用户接收到伪造的加密文档标识EID′,之后DU会根据EID′去构造搜索请求SA,最终会获得其伪造的Cw′′,则敌手A就成功欺骗DU,并使DU相信Cw′′是有效的.

但是在内容加密阶段,中间节点A和中间节点B分别建立了一张EID与ak和bk一一相对应的表,故在DU使用EID′去获取加密文档时,在中间节点B进行查找与EID′相对应的bk时就无法获得结果,从而DU无法获取到解密密钥.此外,因为中间节点建立的与EID相对应的表只有自己保存,故敌手A并不能获得.因此,敌手A是无法欺骗DU的,故假设不成立.综上所述,在该方案中,不存在以不可忽略的概率破坏方案的可靠性的敌手A,即该方案满足可靠性.

5.5 智能合约

在内容加密阶段,DO将加密密钥key随机生成长度为L的密钥ak和bk,之后分别使用中间节点A和中间节点B的公钥进行加密,之后将加密的结果存放在智能合约上.

在搜索阶段,用户通过生成搜索令牌Tw获取到对应加密文档的文档标识,此外,SCS将搜索到的加密文档结果发送到区块链的智能合约上.在这一阶段,未直接将加密文档发送给用户是为了保护用户的隐私.我们假设的SCS是诚实但好奇的,如果直接将加密文档发送给用户,有SCS中好奇者想要获取用户的相关信息,就会根据用户查找的相关信息进行数据总结归纳,从而推测出用户的搜索习惯,获得用户的相关信息.但是本文中是将加密的文档的表示符EID发送给用户,因为在内容加密阶段,DO使用伪随机置换函数混淆了关键字的位置,在这之后使用的伪随机函数进行的安全加密获得的结果所对应的关键字文档的实际位置发生变化,故好奇的用户无法判断出文档位置.此外,在SCS中会包含大量的文件,如果好奇用户进行查找,在成本上会有巨大的消耗.

在获取加密文档阶段,智能合约作为信息的转发者.智能合约将SLR发送给中间节点A,之后智能合约又将中间节点A返回的搜索许可SL发送给中间节点B.之后智能合约将中间节点A和B的信息以及加密文档进行打包发送给用户.

6 实验及结果分析

6.1 智能合约的开销

为了解智能合约在本方案中的开销,我们基于在线的Remix进行智能合约的部署与测试,程序设计语言是Java语言和solidity.

在部署智能合约和进行相关交易时会执行相应的代码,在执行的过程中会使得智能合约产生一定的消耗.在以太坊中用gas为单位表示消耗,每次操作都会有相应的gas消耗值,即gas used,单位gas的价格称之为gas price,二者的乘积即为每笔交易的交易费.在进行实验的时候,查询得知以太坊的交易价格为1 ether=1757 USD,令gas价格是1 gasprice=10-9ether.

首先是智能合约的部署,即deploysmart操作,开销为2.326717792 USD,DO将加密好的密钥发送到智能合约上,即encryptedkey操作,开销为0.192962525 USD,智能合约接收到DU发送的搜索请求SA,即accSA操作,开销为0.077766577 USD,DO设置智能合约的地址,即setsmartaddress操作,开销为0.075930512 USD,DO设置中间节点的地址,即setnodeaddress操作,开销为0.194204724 USD,智能合约发送搜索许可请求SLR到中间节点A,即sendSLR操作,开销为0.078581825 USD,中间节点A将搜索许可SL发送给智能合约,即accSL操作,开销为0.080136770 USD,智能合约发送搜索许可SL到中间节点B,即sendSL操作开销为0.080168396 USD,中间节点B将加密好的部分密钥发送给智能合约,即accEncbk操作,开销为0.077810502 USD,智能合约将信息打包发送给DU,即sendInfo操作,开销为0.124722402 USD.如表5所示,该实验的数据证明了本文方案能以较低的开销实现用户的隐私保护.

表5 智能合约开销测试表

6.2 模糊关键字集合生成时间

为了测试本文方案的效率,我们在真实的数据集上进行相关的实验,我们使用从Kaggle下载的全美国各州的健康保险市场的数据集Health-Insurance-Marketplace(2)http://www.kaggle.com/hhs/health-insurance-marketplace进行分析,从其中选取了5000个数据文件,又从这5000个数据文件中获得大约8000个关键字.即文档数0≤n≤5000,关键字数0≤m≤8000,该实验的硬件环境是Inter(R)Core(TM)i7-8700 CPU(3.2 GHz)的处理器和16 GB的内存.操作系统是64位的Windows系统,对称加密算法使用的是AES算法.

因为本方案支持模糊关键字搜索,故我们要为提取出的关键字构造模糊关键字集合.如图5是在编辑距离d=1时生成模糊关键字集合所开销的时间.

图5 模糊关键字集合生成时间(d=1)

因为每个关键字的长度不同,因此模糊关键字的数量以及生成所有模糊关键字的时间都会不同,在编辑距离d一定的情况下,构造模糊关键字集合的时间随着关键字的数量增加而增加.我们从文件中提取出的8000个关键字在生成模糊关键字集合时,消耗的时间为357.7934ms,结果表明构造模糊关键字集合的效率是比较高的.

6.3 文档加密解密时间

DO使用密钥加密明文文档的时间和用户进行解密获得的文档时间如图6所示.从图中可以看出,内容加密操作和用户解密操作都与文档的数量成线性关系,即加密操作和解密操作的时间随着文档数量增加而增加.此外,从开销的时间上分析,在相同数量的文档下,解密操作所需要的时间是少于加密操作所需要的时间的.在对加密操作的时间进行分析,在本文的实验环境下,对5000个文档进行加密操作的时间都小于1s,因此,该加密操作的时间是比较快的.所以综合上述分析,该方案在内容加密阶段和用户解密文档阶段,其对应的加密操作和解密操作所需要的时间都有一定的优势.

图6 加密解密时间对比图

7 结束语

本文主要研究了区块链环境下的隐私安全保护问题,提出了基于模糊关键字可搜索加密和同态加密相结合的区块链隐私保护方案.该方案通过使用加法同态加密算法,能够一并实现获取加密文档信息隐私保护和用户信息隐私保护.同时,我们对本方案的隐私保护性、正确性、安全性和可靠性进行分析,证明了该方案的可行性.此外,实验数据证明了能以较低的开销实现区块链隐私保护,具有较好的实用性.

猜你喜欢

关键字解密密钥
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
幻中邂逅之金色密钥
幻中邂逅之金色密钥
炫词解密
解密“一包三改”
密码系统中密钥的状态与保护*
炫词解密
炫词解密
成功避开“关键字”
Android密钥库简析