王 楠(北方工业大学 信息学院,北京 100144)
在这个信息飞速传递的时代,数据无时无刻不在交互传输,数据信息传递到各个平台的服务器上,其中也包含一些敏感的数据。为了降低资源受限用户的存储和管理负担,这些数据大多被存储在云服务器中,一旦存在恶意的云服务器会对数据进行篡改、删除或出售给其他服务器,造成用户数据泄露从而带来损失。用户担心数据泄露,会在上传数据前进行加密,但加密后的数据需要解密才能获取,需要将全部密文转化为明文,然后用户在全部明文中查找需求的明文。实际场景中,绝大多数的用户执行解密操作时只想获取其中的部分内容,但是在大量的加密数据中想要检索到自己想要的那一部分明文实现起来非常困难,大大降低了检索的效率。所以,虽然有很多成熟的加密算法,但一般加密算法加密后再上传会给后续检索带来很大困扰。
此时需要一种加密算法,加密复杂度高,不易被破解,以保障数据安全。对于加密者来说,能对密文直接进行检索。在此需求下,可搜索加密技术应运而生。最原始的可搜索加密的模型,包括数据拥有者、云服务器和用户三部分,它允许数据拥有者以一种私密的方式把自己的数据外包给云端,同时保持数据的可搜索的能力,即数据拥有者加密明文后,将密文上传到云服务器,云服务器保管这些数据,并且提供搜索服务。其他用户访问时,根据密文不能得到任何关于明文的相关信息,保障了信息的安全。
但随着技术的普及和需求的不断提升,可搜索加密也暴露出一些问题:用户需要在服务器提供搜索服务前支付费用,一旦恶意的服务器返回错误的数据,用户无法索赔。在某些情况下,用户也可能存在恶意,否认服务器发来的正确结果,或故意发现错误令牌造成服务器无法检索到正确结果,此情况概率很小,对于用户来说没有实质收益。因此,在本方案中默认用户是诚实的,只考虑服务器的恶意问题。将区块链技术引入系统,利用区块链系统的不可篡改、可追踪等优点,解决了用户公平性的问题,避免上述安全事件的发生。
2000年,song等人首次提出了可搜索加密(Searchable Encryption,SE)的思想[1],并在此基础上加以实现。用户可以通过关键词在密文中进行检索,该技术通过加密明文的关键词生成搜索凭证即访问令牌,服务器通过令牌获得与关键词相对应的密文,返还给用户。
根据加密类型的不同,可搜索加密可分为对称可搜索加密和非对称可搜索加密,非对称可搜索加密2004年由Boneh等首次提出[2],利用椭圆曲线算法实现,此加密方式的加密密钥和解密密钥不同,导致了算法更加复杂,解密效率低。相比之下,对称可搜索加密的优势得以体现[3],相同的密钥提升了加密解密的效率。最原始的对称可搜索加密技术的系统模型大体如图1所示,包括数据拥有者、云服务器和用户3部分[4-6]。功能的实现通过以下3个步骤,步骤一:数据拥有者拥有文件集D,通过密钥K将其加密为密文C,同时生成索引I,将密文C和索引I发送给云服务器保存,将密钥K发送给用户。步骤二:用户生成访问令牌,把想要搜索的关键字W通过密钥K加密,转换为搜索令牌Tw,并发送令牌给服务器,同时支付费用。步骤三:服务器结合C、Tw、I生成对应关键字W的密文C’,返还给用户,最后用户在本地用密钥K解密C’,获取想要的明文D'。如果该系统中,除了被授权的用户,其他任何人不能通过密文得到明文信息,就可以说该SSE算法是安全的[7]。
图1 SSE系统模型图Fig.1 SSE System model diagram
区块链技术源于2008年“中本聪”在密码学邮件组发表的名为《比特币:一种点对点电子现金系统》的论文中[8],之后成为数字加密货币体系的核心技术。应用区块链技术结合可搜索加密是因为以下两点:一,区块链系统是由大量的分布式共识节点组成的系统,没有中心节点,是由各个节点共同维护的系统,避免了强大恶意节点垄断的情况;二,智能合约的应用,依靠合约的执行来实现交易认证[9]。区块链上所有交易均完全公开,并且在加入到区块链前经过全部节点的验证。并且,时间戳机制使每一笔交易都有极强的可追溯性[10]。
智能合约在本系统中起到认证作用,智能合约的概念最早于1994年由美国的NickSzabo提出[11],本质是一系列计算机交易协议,在无需第三方的环境中执行合约条款。智能合约的可编程性给区块链技术提供了更多操作空间,在区块链系统中智能合约能更好地发挥功能[12]。目前,智能合约技术被广泛应用在区块链中[13]。
哈希加密算法有着非常好的性质,首先,哈希加密后密文等长,避免了攻击者由密文长度获取关于明文长度的相关信息;其次,哈希函数是典型的单向不可逆函数,例如y=f(x),已知y的值,想要获取x的值非常困难;最后,哈希函数的抗碰撞性非常适合对交易结果进行验证。例如x1≠x2,则很难找到f(x1)=f(x2),即难找到两个不同的关键字对应相同的散列值[14,15]。
图2 改进后的系统模型Fig.2 Improved system model
解决了可搜索加密时交易双方不公平的问题,方法是双方支付一定数量的押金,由区块链系统进行检测,一旦服务器存在恶意,包括返回错误搜索结果或不完整的搜索结果,在区块链系统检测后将会被扣留押金。区块链的引入完善了可搜索加密的安全体系,提升了系统安全性,同时可以提供对结果的认证,大大减少了用户的计算量,本系统是用Python语言实现的。
加入区块链系统后,本系统模型包含4部分,即:数据拥有者、服务器、用户和区块链系统。各个部分之间的交互关系及流程如图2所示。
改进后的具体步骤:
第一步:数据拥有者将明文数据D加密为密文C,同时生成索引I,将对应的私钥K发送给用户,将密文C和索引I发送给云服务器。
第二步:用户给出想要搜索的关键词w,并加密该关键词为令牌Tw,并将令牌Tw发送给区块链系统,同时向区块链系统支付一定数量的押金,这是保障后续交易公平的必要准备。
第三步:云服务器向区块链系统发送交易请求,支付一定数量的押金,支付押金后,从区块链系统中获得搜索令牌Tw。
第四步:云服务器得到Tw后,可以结合数据拥有者发送的C、I在本地计算出关键词对应的密文结果C'。
第五步:云服务器将搜索结果C'返回给区块链系统,经区块链检验后,判定该服务器是否为恶意,则该服务器支付的预定金不予退回。用户支付的押金将被退回(本次交易终止)。
第六步:如果服务器诚实且提供正确数据信息,区块链系统检验后,将正确结果返还给用户,用户支付服务费Tp,区块链系统将服务费Tp转给服务器,同时退还双方押金。第七步:用户在本地解密出明文D'。
表1 符号及其含义Table 1 Symbols and their meanings
本方案所涉及到的符号及其含义在表1中列出。
本系统主要功能由9个算法构成并实现,包括(Setup,E nc,Token,Prepare,Appoint,Search,Verification,Pay,Dec)。
Setup(1k)→K以k为安全因子,生成密钥列K。
Enc(K,D)→(I,C)将密钥列K和文件数据集D作为输入,输出密文集C和索引I。
Token(K,w)→(Tw)将密钥列K、关键词集合W作为输入,生成搜索令牌Tw。
Prepare(Tu,Tw)→null:用户向区块链系统支付押金Tu,防止用户中途退出,用户支付押金时将Tw也发送给服务器,用于解密及验证。
Appoint(Ts)→(Tw1)由服务器执行,发送请求到区块链,请求获取Tw1(Tw1是令牌Tw的一部分),由于服务器可以根据Tw1获取用户的信息,因而发送请求时需要向区块链系统支付押金Ts,支付后获得部分令牌Tw1。
Search(Tw1,I)→(Cw,MACw)服务器得到Tw1后,结合索引I进行搜索,输出对应的密文Cw,将数据拥有者发送密文C时附带的带密钥哈希MACw和Cw一并发给区块链系统。
Verification(t3w,Cw,MACw)→Ture/False判别算法,区块链系统验证服务器是否为恶意,输入Tw-Tw1和Cw,计算MACw',验证MACw'是否等于MACw。若相等,输出Ture,否则输出False,交易中止。
Pay(Tp)→Ci验证服务器非恶意后,区块链系统将密文Ci返还给用户,用户支付费用Tp给区块链系统,同时退还用户押金Tu和服务器押金Ts。
Dec(Ci ,K)→Di用户在本地输入密钥列K和得到的密文Cw,输出对应关键词W的明文Di。
数据拥有者主要应用到伪随机函数,包括F1,F2,F3,表示为{0,1}k×{0,1}*→{0,1}k。一个哈希函数H:{0,1}k→{0,1}m。
1)Setup:生成随机密钥列K1,K2,K3,{0,1}k→K1,K2,K3。
2)Enc:通过使用密钥K1,数据拥有者加密明文D={D1,D2,…,Dn}为密文文件,即C={C1,C2,…,Cn}Ci=ε.Enc(K1,Ci),之后生成密文集合C。令W={w1,w2,…,wn}为明文集D的关键词集合,其中,m表示关键词的数量,对于每一个关键词Wi(1≤i≤m),选择初始化为空、大小为n的数组DB(wi)接收。如果文件集中第j个文件包含关键词wi,那么DB(wi)[j]=1,否则DB(wi)[j]=0。
数据拥有者把(t1wi,ewi,MACwi)放到索引I中,将C,I上传到云服务器。
3)Token:数据拥有者在步骤2)发送C,I的同时,会将K1,K2,K3发送给用户,用户根据想要搜索的关键词w,生成令牌,进行如下计算:
4)Prepare:用户将步骤3)中生成的t1w,t2w,t3w,发送给区块链系统,同时为了避免用户中途退出,需要用户支付押金Tu。为了避免服务器的恶意行为,后续需要服务器支付押金。
5)Appoint:服务器向区块链发送请求,想要获得t1w和t2w,由于服务器可以通过t1w和t2w获取数据信息,因而需要服务器支付押金。服务器支付押金Ts,区块链系统发送t1w和t2w给服务器,t3w由区块链系统保留。
请求算法如下:
Algorithm:Appoint Input: Ts Output:null if blockchain system get Ts then return(t1 w, t2 w)else return Tu to server
6)Search:服务器通过t1w,t2w结合数据拥有者发来的(t1wi,ewi,MACwi)计算:
I=(t1wi,ewi,MACwi),将t1w作为密钥,解密出ewi,MACwi中对应关键词w的ew和MACw。
服务器继续解密,将t2w作为密钥解密ew得到DB(w),DB(w)=θ.Dec(t2w,ew)。若DB(wi)[j]=1将对应的文件Cj放入Cw集中,将Cw和MACw发送给区块链系统。
搜索算法如下:
Algorithm:Search find ew from ewi DB(w)=θ.Dec(t2 w, ew)for j in DB(w) do if DB(w)[j]=1 Cw=Cw∪Cj Send Cw MACw to Blockchain end
7)Verification:验证交易的可靠性,判别服务器是否有恶意。若服务器返回正确结果,则用户支付服务费,交易正常进行;若服务器有恶意,则扣留服务器支付的押金。
用户支付服务费Tp,区块链系统根据t3w和Cw计算出MACw':
验证算法如下:
Algorithm:Verification Input:t3 w , Cw , MACw Output:true/false if MACw' ==MACw return true else return false
8)Pay:若步骤7)输出True,区块链系统将用户支付的押金Tu和服务器支付的押金Ts返还给用户和服务器,同时将服务费Tp给服务器;若步骤7)输出False,区块链系统将用户支付的押金Tu和服务费Tp返还给用户,不退还服务器支付的押金Ts,一并返还给用户。
支付算法如下:
Algorithm:Pay if get.Verification()==true User send Tp to blockchain system Blockchain system send Ts +Tp to server Blockchain system send Tu to user else Blockchain system send Tu + Ts to user
9)Dec:若交易证明出现在区块链中,则用户可以从中获得Ci,使用对称密钥K1进行解密,Di=ε.Dec(K1,Ci)(1≤i≤n)。
4.1.1 数据拥有者的安全性
数据拥有者在本地加密数据,加密后上传到服务器,加密过程独立完成,以加密文档的形式上传给服务器,因此该系统的数据拥有者是安全的。
4.1.2 用户的安全性和公平性
用户将令牌上传到区块链,由区块链保管,服务器支付押金后才能获取相应的令牌,没有泄露风险,保障了用户数据的安全性;服务器得到令牌后,解密出相应密文,发送到区块链系统,经区块链系统认证后,结果正确,用户支付服务费,结果不正确,用户不需要支付服务费,同时服务器支付的押金还会作为赔款支付给用户,避免了用户支付费用后得不到正确的搜索结果的情况,保障了用户的交易公平性。
4.1.3 服务器的安全性和公平性
服务器得到数据拥有者发送的索引和密文以及区块链系统发送的令牌,均是以加密形式呈现,服务器利用令牌进行搜索操作后,发送给区块链的依然是密文形式的文件,保障了服务器的安全性;服务器执行搜索操作后,只要返回正确的搜索结果,即可通过区块链的验证,得到相应的服务费,保障了服务器的交易公平性。
4.1.4 区块链的安全性和公平性
区块链中的每个区块都有其对应的哈希值,会被下一个区块引用和验证,作为下一个区块的预哈希。如果修改某个区块的内容,那么该区块的哈希值一定会变,该区块的下一个区块已经引用了该区块的哈希值,这一原理使区块链具有不可篡改性。交易过程中,区块链主要起到保留押金、支付费用和交易验证等功能,由于区块链的高透明度,保障了交易的公平性。
4.1.5 加密算法安全性
数据拥有者在本地加密,采用伪随机函数加密索引,采用AES高级加密标准加密文件,该加密算法密钥长度达到128位,将明文分块加密,保障了加密数据的安全性。
4.1.6 令牌安全性
用户执行关键词加密时,采用和数据拥有者同样的伪随机函数进行加密,算法复杂度高,同样的关键词每次生成相同的令牌。除令牌外,服务器得不到与关键词有关的任何信息,保障了搜索令牌的安全性。
图3 文件数量与密钥生成时间的关系Fig.3 The relationship between the number of document and the key generation time
图4 文件数量与建立索引时间的关系Fig.4 The relationship between the number of documents and the building index time
通过仿真实验对系统性能进行评估,具体实验环境为Intel Core i5-8500 CPU,64位操作系统,8.00G内存,使用python语言进行编程,版本为Python3.8.0。
分别执行了从100~1000个文件的加密,文件数量与密钥生成时间的关系如图3所示,文件数量与建立索引时间的关系如图4所示,文件数量与执行搜索时间的关系如图5所示,文件数量与区块链执行验证的时间如图6所示。
综合各项性能指标,本系统具有较好的性能。
本文提出了将区块链系统引入可搜索加密模型的方案,主要针对恶意服务器,保障了交易双方的公平性,通过认证算法判断服务器是否存在恶意(包括返回错误搜索结果和不完整搜索结果等恶意行为)。引入押金机制确保了交易公平进行。区块链系统保障了交易的可追溯和数据的不可篡改,提高系统的可靠性和透明度。对本方案的安全性和
图5 文件数量与执行搜索时间的关系Fig.5 The relationship between the number of documents and the search time
图6 文件数量与区块链验证时间的关系Fig.6 The relationship between the number of documents and the blockchain verification time
性能进行了评估,证明方案是切实可行的,并具有很好的系统性能。