一种支持验证的前向安全可搜索加密存储系统及方法与流程

文档序号:18886543发布日期:2019-10-15 21:00阅读:448来源:国知局
本发明属于云数据安全存储
技术领域
:,尤其涉及一种支持验证的前向安全可搜索加密存储系统及方法。
背景技术
::目前,与本发明最接近的现有技术为可搜索加密,所谓的可搜索加密是指客户端使用传统的对称加密技术对数据库进行加密,同时在数据库上建立索引,然后将密文数据库和索引外包给云服务器;在搜索阶段,客户端提交搜索关键词有关的陷门,云服务器可以利用该陷门在索引上运行匹配搜索算法,将所有匹配的密文文档发送给用户。更进一步的,现在存在一些前向安全的可搜索加密方案,具体地说:这类技术允许客户端对外包的数据库进行更新,并且在更新的过程中,不会泄露关于搜索关键词的信息。目前,前向安全的可搜索加密中最先进的现有技术为fast方案,该方案存在的缺陷为搜索效率和更新效率较低,且没有考虑服务器有恶意行为的情况。在fast方案中,每两个状态之间由一个置换函数进行连接。所以在搜索时,需要计算多个置换函数,这导致了较低的搜索效率;同理,更新效率也较低。另外一方面,服务器可能存在恶意行为,即返回不正确或不完整的搜索结果,在这种情况下,fast检测不出来。目前,最接近的现有技术:云计算的出现已经深刻地改变了人们的生活,在数据爆炸的时代,越来越多的个人用户将他们的数据托管在云服务器中,这可以有效地降低本地设备存储成本并节约备用资源。谷歌,微软和阿里巴巴等公司也推出了自己的云存储产品,以满足不同用户的不同需求。云存储中最基本的问题在于数据拥有者将数据上传至云服务器之后,会失去对数据的控制权。云服务器并不一定是完全可信的,当用户存储敏感数据(如私人健康公司信息、书籍、商业秘密等),会对云服务器提出更高的隐私保护需求。在这种情况下,数据拥有者在将数据上传至服务器前首先会进行加密。在很多情况下,客户需要对服务器上的数据进行搜索。如何在密文数据上进行搜索引起学术界和工业界的广泛关注。对称可搜索加密技术,是密文检索问题的一个有效方法。具体来说,客户端使用传统的对称加密技术对数据库进行加密,同时在数据库上建立索引,然后将密文数据库和索引外包给云服务器;在搜索阶段,客户端提交搜索关键词有关的陷门,云服务器可以利用该陷门在索引上运行匹配搜索算法,将所有匹配的密文文档发送给用户。如何在已经上传到数据库上的数据库中进行更新,这也是一个问题。在数据被上传到云服务器之后,用户有可能希望对数据做出修改,例如插入和删除一个文档。一种朴素的解决方法是将所有的数据文件下载下来,解密,完成更新操作之后重新加密,之后重新上传给服务器。但是这势必会造成大量不必要的传输开销,而且对客户端的储存能力提出了很高的要求。在更新数据的过程中,往往会泄露关于密文数据库的信息。例如客户端插入一个文档给服务器,如果处理不当,服务器会得知这个新插入的文档中包含哪些关键词。利用这种信息,敌手将恢复用户所查询的关键字。近年来,有学者研究表明这种泄露往往带来很严重的后果。例如,通过在外包数据库中注入14个文件,敌手可以得知恢复出超过一万个搜索令牌对应的关键词。因此,动态可搜索加密技术中的前向安全成为一个研究热点。在恶意模型下,服务器出于节省计算资源等动机,会做出欺骗客户的行为。例如,在搜索阶段,服务器根本不进行搜索,然后向服务器返回空集合,表明数据库中没有搜索关键词对应的文档;或者,服务器只在一部分数据库上运行匹配算法,最后返回一个不完整的搜索结果。如何保证搜索结果的正确性和完整性,是云存储中的另外一个研究热点。针对现有在云存储中存在如何在密文数据库上搜索、如何对密文数据库进行更新操作,包括插入一个文档和删除一个文档、在对密文数据库进行更新时,如何保护数据库的前向隐私、如何保证搜索结果的正确性和完整性的问题。(1)对称可搜索加密,是解决密文搜索问题的一个成熟的解决方案,客户端使用传统的对称加密技术对数据库进行加密,同时在数据库上建立索引;在上传时,客户端将密文数据库和索引一起上传给服务器;在搜索阶段,客户端提交所搜索关键词有关的陷门,云服务器可以利用该陷门在索引上运行匹配搜索算法,发送所有匹配的密文文档给用户。(2)动态可搜索加密,是在可搜索加密的基础上,添加了更新操作。即动态可搜索加密允许客户端对已经上传到云服务器的密文数据进行更新,在本发明中,更新特指插入和删除文档两种操作。(3)前向安全的动态可搜索加密,要求在更新数据的过程中,不泄露之前上传的数据的隐私信息。换句话说,服务器不知道之前搜索过的关键词是否包含在新插入的这个文档中。(4)可验证的可搜索加密,是指在搜索时,服务器不仅返回搜索结果,还返回一个针对该搜索结果的证据。在客户端怀疑服务器在本次搜索过程中有作弊行为时,可以利用该证据对搜索结果的正确性和完整性进行验证。综上所述,现有技术存在的问题是:现有在云存储中存在如何在密文数据库上搜索、如何对密文数据库进行更新操作,包括插入一个文档和删除一个文档、在对密文数据库进行更新时,如何保护数据库的前向隐私、如何保证搜索结果的正确性和完整性的问题。解决上述技术问题的难度:在密文上搜索并不容易。首先,传统的加密方案都是随机加密,会打破明文和密文的关系,使得在密文上搜索成为不可能的事情;另外一方面,现有的密文可搜索加密方案中,搜索效率和更新效率并不高。对搜索结果的验证也是一个难题,具体地说,如何在实现对搜索结果可验证的前提下保证搜索效率,并且不破坏前向安全的性质。解决上述技术问题的意义:密文可搜索技术的研究意义在于允许客户在将数据外包给服务器之前对数据进行加密,并能够在密文上直接进行搜索。在云计算的环境中,用户可能并不信任服务器,在这种情况下,用户会选择在将数据外包给服务器之前对数据进行加密。但是,这又引入了一个问题,就是要对数据进行搜索时,必须要把数据完全下载下来,然后解密、搜索、重加密并重新上传给服务器,这导致的带宽开销是难以接收的。如果用户使用密文可搜索加密技术对数据加密,则可以直接在密文上进行搜索,从而降低带宽开销,提高搜索效率。技术实现要素:针对现有技术存在的问题,本发明提供了一种支持验证的前向安全可搜索加密存储系统及方法。本发明是这样实现的,一种支持验证的前向安全可搜索加密存储方法,所述支持验证的前向安全可搜索加密存储方法包括:用户对明文数据进行加密得到密文数据,根据密文数据建立索引,将密文数据和索引上传到云服务器上;在搜索时,用户提交所搜索关键词的令牌,服务器收到令牌之后,根据令牌信息在密文索引上进行搜索,将搜索结果以及证据返回给用户;用户在收到密文搜索结果以及证据之后,对密文搜索结果解密,得到最终结果;当用户需要验证搜索结果的正确性和完整性时,只需要对证据进行验证。进一步,所述支持验证的前向安全可搜索加密存储方法具体包括:第一步,客户端和服务器端分别初始化自己的存储结构;第二步,客户端将文档预处理为key-id对,对key-id对进行加密处理,生成索引;对证据进行更新,最后将密文信息、索引和证据信息上传给服务器;第三步,客户端对搜索关键词进行处理,生成搜索陷门,将陷门上传给服务器;第四步,服务器收到搜索陷门之后,在索引上进行搜索,获得匹配的密文数据;第五步,服务器根据搜索结果构建针对搜索结果的证据,并将搜索结果和证据返回给客户端;第六步,客户端利用证据对数据库返回的搜索结果进行验证。进一步,所述支持验证的前向安全可搜索加密存储方法包含了以下算法:setup算法:客户端和服务器分别初始化自己的存储结构,准备处理客户的更新操作;在setup之后,客户端和服务器端都将得到一个空的存储结构。setup是系统初始化的过程,服务器和客户端要准备好各自的存储数据结构;客户端和服务器均为一个map结构;客户端输入安全参数λ,根据λ初始化存储结构∑,服务器端初始化存储结构t;update算法:在更新算法中,客户端将需要插入或删除的文档预处理为key-id对,以key-id为单位进行处理,生成该key-id对的密文和索引,将密文和索引打包发送给服务器;服务器在收到服务器发送的数据之后,将存储在服务器中。另外一方面,在更新时还需要对证据进行更新;客户端首先取出之前的集合哈希值,加入新的关键词得到新的哈希值作为新的证据。该证据需要在客户端和服务器端各存一份;在update过程中,泄露给服务器和第三方的信息只有一对元组(u,e,hash);search算法:在搜索算法中,用户提交所搜索关键词的令牌,服务器收到令牌之后,根据令牌信息在密文索引上进行搜索,将搜索结果以及证据返回给用户;用户在收到密文搜索结果以及证据之后,对密文搜索结果解密,得到最终结果;verify算法:当用户对服务器返回的搜索结果有所怀疑时,验证搜索结果的正确性和完整性;客户端首先计算r的集合哈希hash′,然后取出客户端存储的证据hash,然后比较hash′、hash和proof,如果三者相等,则说明搜索结果满足正确性和完整性,否则说明服务器有作弊行为。进一步,所述setup算法的初始化阶段具体包括:客户端选择系统参数λ,客户端根据λ初始化自己的存储结构∑,该存储结构是一个map结构的数据结构,其key为关键词,value包含该关键词的最新状态stc,以及该关键词对应的集合哈希值;客户端将λ发送给服务器端,服务器在接收到系统参数λ之后,根据λ初始化自己的存储结构t,该存储结构是一个map结构的数据结构,其key为位置信息,value为密文以及集合哈希值,密文信息包括文件名信息、操作信息和前一个状态的位置信息;所述update算法更新阶段具体包括:计算关键词w的陷门tw以及集合哈希的密钥rw;客户端首先产生出新的状态stc+1;客户端检查本地存储∑中是否有w的记录,如果没有关于w的记录,说明该关键词是第一次出现;客户端首先随机选择一个st1,然后级联代表没有下一个状态的⊥、文档标识符ind和操作op;客户端使用h2(tw||st1)作为密钥,使用异或加密得到密文e;如果有关于w的记录,则取出其对应的stc,hash;客户端级联状态stc、操作op和文档标识ind;同样的,客户端使用异或加密得到密文e;客户端更新文档标志符的集合哈希值hash;客户端计算位置信息u;客户端将最新的状态stc+1以及文档哈希聚集值hash记录在客户端的存储结构中,并将位置信息u、密文e和文档哈希hash上传至服务器;服务器端将客户端上传来的(e,hash)记录在服务器中;所述search算法的搜索阶段具体包括:客户端检查本地存储∑中是否有w的记录,分为如下两种情况,如果没有关于w的记录,说明服务器中没有关于该关键词的信息;客户端判断出没有任何文档包含该关键词,此时直接返回空集合;如果有关于w的记录,则取出其对应的stc和hash。在这种情况下,客户端将(tw,stc)提交给服务器;将hash留存在客户端,hash在验证时将会被使用到;服务器在收到(tw,stc)之后,首先取出最后一个状态对应的证据hash,该证据将会被返回给客户端;对于不在最后一个状态的证据,删除掉以释放服务器端的存储空间;找出t中关于stc的记录e;使用密钥h2(tw||stc)对密文e进行解密,得到(stc,ind,op);将密文ind存储在结果r中;将当前密钥stc替换为st,准备下一次解密时使用;服务器在t中搜索关于stc的记录,如果有,则继续操作;最后服务器返回搜索结果r和证据hash;所述verify算法的验证阶段具体包括:客户端获得从服务器上得到的搜索证据proof,并从自己的存储∑中取出本地的证据hash;客户端根据服务器返回的搜索结果r重新计算集合哈希值hash′;判断hash、hash′和proof三者是否相同;如果相同,则验证通过;否则验证不通过;两个证据都是二进制数据,通过异或来判断二者是否相同;如果证据异或的结果为0,则说明二者相同;如果结果为1,则二者不相同。进一步,所述支持验证的前向安全可搜索加密存储方的验证技术为多重集哈希,多重集哈希是将一个多重集映射为一个固定长度的字符串;如果三元组满足如下三条性质:压缩性:把一个多重集m映射为一个基数为2m的集合上的一个元素上;可比较性:增量性:集合中新增一个元素,哈希值快速更新,不需要重新进行运算,则该三元组为multisethashingfunction;本发明的另一目的在于提供一种基于所述的支持验证的前向安全可搜索加密存储方法的支持验证的前向安全可搜索加密存储系统,所述支持验证的前向安全可搜索加密存储系统包括:数据拥有者,用于将个人数据外包存储在云服务器上,数据文件在上传之前要先被预处理为w-id形式,对w-id对进行加密处理,并根据w-id信息生成增量索引;数据拥有者将解密密钥分享给其希望授权的用户,被授权的用户称作数据使用者;只有数据使用者进行搜索并对搜索结果进行解密;云服务器,具有海量存储资源以及充足的计算资源,做到安全地存储数据拥有者上传的数据和索引;忠实地执行数据使用者的查询请求,并返回完整且正确的搜索结果和该搜索结果对应的证据;数据使用者,是被数据拥有者授权的用户,其拥有解密数据文件需要的密钥;在搜索阶段,数据使用者根据所搜索的关键字生成搜索陷门并提交陷门信息到云服务器;在收到云服务器返回的搜索结果和证据之后,数据使用者根据证据对云服务器返回的搜索结果进行验证,判断搜索结果是否满足正确性和完整性。本发明的另一目的在于提供一种应用所述支持验证的前向安全可搜索加密存储方法的云服务器。综上所述,本发明的优点及积极效果为:用户对明文数据进行加密得到密文数据,根据密文数据建立索引,将密文数据和索引上传到云服务器上;在搜索时,用户提交所搜索关键词的令牌,服务器收到令牌之后,根据令牌信息在密文索引上进行搜索,将搜索结果(密文形式)以及证据返回给用户;用户在收到密文搜索结果以及证据之后,对密文搜索结果解密,得到最终结果;当用户需要验证搜索结果的正确性和完整性时,只需要对证据进行验证即可。为了提高验证的效率,降低因为验证而带来的额外的存储开销,使用了一种新的验证技术——集合哈希。此外,本发明还进行了详细的性能评估;结果表明,本发明可以达到预期的安全性目标,同时实现高效的搜索和验证操作。在本发明的技术方案中,对fast的底层原理进行了改进,去除了fast依赖的置换函数,从而提高了搜索和更新效率。另外,本发明的技术方案中加入了对搜索结果的验证的逻辑,通过运行验证算法,本发明可以检测出服务器是否有作弊行为。附图说明图1是本发明实施例提供的支持验证前向安全可搜索加密存储系统及方法。图2是本发明实施例提供的系统模型图。图3是本发明实施例提供的服务器端的逻辑存储图。图4是本发明实施例提供的客户端的逻辑存储图。图5是本发明实施例提供的搜索效率的评估示意图。图6是本发明实施例提供的更新效率的评估示意图。图7是本发明实施例提供的验证效率的评估示意图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。针对现有在云存储中存在如何在密文数据库上搜索、如何对密文数据库进行更新操作,包括插入一个文档和删除一个文档、在对密文数据库进行更新时,如何保护数据库的前向隐私、如何保证搜索结果的正确性和完整性的问题。本发明可以达到预期的安全性目标,同时实现高效的搜索和验证操作。下面结合附图对本发明的应用原理作详细的描述。如图1所示,本发明实施例提供的支持验证的前向安全可搜索加密存储方法包括以下步骤:s101:客户端和服务器端分别初始化自己的存储结构;s102:客户端将文档预处理为key-id对,对key-id对进行加密处理,生成索引。对证据进行更新,最后将密文信息、索引和证据信息上传给服务器;s103:客户端对搜索关键词进行处理,生成搜索陷门,将陷门上传给服务器;s104:服务器收到搜索陷门之后,在索引上进行搜索,获得匹配的密文数据;s105:服务器根据搜索结果构建针对搜索结果的证据,并将搜索结果和证据返回给客户端;s106:客户端利用证据对数据库返回的搜索结果进行验证。本发明实施例提供的支持验证的前向安全可搜索加密存储方法公开了一种具有前向安全性质,且搜索结果可验证的对称可搜索技术。包含了以下四个算法:setup算法:在该算法中,客户端和服务器分别初始化自己的存储结构,准备处理客户的更新操作。在setup之后,客户端和服务器端都将得到一个空的存储结构。setup是系统初始化的过程,服务器和客户端要准备好各自的存储数据结构,在本发明中,客户端和服务器均为一个map结构。客户端输入安全参数λ,根据λ初始化存储结构∑,服务器端初始化存储结构t。初始化阶段具体包括:客户端选择系统参数λ,客户端根据λ初始化自己的存储结构∑,该存储结构是一个map结构的数据结构,其key为关键词,value包含该关键词的最新状态stc,以及该关键词对应的集合哈希值。客户端将λ发送给服务器端,服务器在接收到系统参数λ之后,根据λ初始化自己的存储结构t,该存储结构是一个map结构的数据结构,其key为位置信息,value为密文以及集合哈希值,密文信息包括文件名信息、操作信息和前一个状态的位置信息。具体地说,在本发明中操作包含两种,一种是插入一个文档,一种是删除一个文档。update算法:在更新算法中,客户端将需要插入或删除的文档预处理为key-id对,以key-id为单位进行处理,生成该key-id对的密文和索引,将密文和索引打包发送给服务器;服务器在收到服务器发送的数据之后,将其存储在服务器中。另外一方面,在更新时还需要对证据进行更新。具体地说,客户端首先取出之前的集合哈希值,加入新的关键词得到新的哈希值作为新的证据。该证据需要在客户端和服务器端各存一份。在update过程中,泄露给服务器和第三方的信息只有一对元组(u,e,hash)。进一步,所述更新阶段具体包括:计算关键词w的陷门tw以及集合哈希需要用到的密钥rw;客户端首先产生出新的状态stc+1;客户端检查本地存储∑中是否有w的记录,如果没有关于w的记录,说明该关键词是第一次出现,在这种情况下,客户端首先随机选择一个st1,然后级联代表没有下一个状态的⊥、文档标识符ind和操作op。接下来,客户端使用h2(tw||st1)作为密钥,使用异或加密得到密文e;如果有关于w的记录,则取出其对应的stc,hash。在这种情况下,客户端级联状态stc、操作op和文档标识ind。同样的,客户端使用异或加密得到密文e。客户端更新文档标志符的集合哈希值hash;客户端计算位置信息u。客户端将最新的状态stc+1以及文档哈希聚集值hash记录在客户端的存储结构中,并将位置信息u、密文e和文档哈希hash上传至服务器。服务器端将客户端上传来的数据记录在服务器中。search算法:在搜索算法中,用户提交所搜索关键词的令牌,服务器收到令牌之后,根据令牌信息在密文索引上进行搜索,将搜索结果(密文形式)以及证据返回给用户;用户在收到密文搜索结果以及证据之后,对密文搜索结果解密,得到最终结果;搜索阶段具体包括:客户端检查本地存储∑中是否有w的记录,分为如下两种情况,如果没有关于w的记录,说明服务器中没有关于该关键词的信息,在这种情况下,客户端可以判断出没有任何文档包含该关键词,此时可以直接返回空集合;如果有关于w的记录,则取出其对应的stc和hash。在这种情况下,客户端将(tw,stc)提交给服务器;留存在客户端,hash在验证时将会被使用到。服务器在收到(tw,stc)之后,首先取出最后一个状态对应的证据hash,该证据将会被返回给客户端。需要说明的是,对于不在最后一个状态的证据,可以删除掉以释放服务器端的存储空间。找出t中关于stc的记录e;使用密钥h2(t||stc)对密文e进行解密,得到(stc,ind,op);将密文ind存储在结果r中;将当前密钥stc替换为st,准备下一次解密时使用。服务器在t中搜索关于stc的记录,如果有,则继续上面的操作。最后服务器返回搜索结果r和证据hash。verify算法:当用户对服务器返回的搜索结果有所怀疑时,希望验证搜索结果的正确性和完整性。客户端需要首先计算r的集合哈希hash′,然后取出客户端存储的证据hash,然后比较hash′、hash和proof,如果三者相等,则说明搜索结果满足正确性和完整性,否则说明服务器有作弊行为。为了提高验证的效率,降低因为验证而带来的额外的存储开销,使用了一种新的验证技术——集合哈希。验证阶段具体包括:客户端获得从服务器上得到的搜索证据proof,并从自己的存储∑中取出本地的证据hash。客户端根据服务器返回的搜索结果r重新计算集合哈希值hash′。判断hash、hash′和proof三者是否相同,如果相同,则验证通过;否则验证不通过。需要说明的是:因为两个证据都是二进制数据,所以可以通过异或来判断二者是否相同。如果证据异或的结果为0,则说明二者相同;如果结果为1,则二者不相同。本发明使用到的验证技术,即多重集哈希,多重集哈希是一种哈希函数,与普通哈希函数不同的是:普通哈希函数可以将字符串映射为一个固定长度的字符串,而多重集哈希是将一个多重集映射为一个固定长度的字符串。如果三元组满足如下三条性质:压缩性:可以把一个多重集m映射为一个基数为2m的集合上的一个元素上;可比较性:同一个多重集得到的结果应该是相同的;增量性:集合中新增一个元素,哈希值快速更新,不需要重新进行运算,即则该三元组为multisethashingfunction。同时,一个实际可用的集合哈希函数还应该具有抗碰撞性,即如果两个集合m1和m2不相同,则二者的哈希结果和也不相同,这种性质被称为抗多重集碰撞性:现在存在四种多重集哈希函数的构造方式,分别为:mset-xor-hash:将集合中的每个元素异或在一起,实现对集合的哈希。由于只使用到异或操作,所以这种构造方式和高效。但是由于两个相同的相互异或会得到的一个全零的比特,所以该中构造方式只支持set-collisionresistant,而不支持multiset-collisionresistant。mset-add-hash:将集合中的元素映射为大整数,然后将其相加,并进行模运算。这种方式需要使用到哈希函数hk,该哈希函数可以将一个字符串映射为大整数。该种构造方法支持multiset-collisionresistant。mset-mu-hash:基于大整数乘法构造的多重集哈希函数,该种构造方法支持multiset-collisionresistant。mset-vadd-hash:基于sv问题构造的多重集哈希函数,该种构造方法支持multiset-collisionresistant。下面结合附图对本发明的应用原理作进一步的描述。sse是为了解决云端密文搜索难题,sse方案目前共有两类构建策略:基于顺序扫描的sse构建策略和基于索引的sse构建策略。前一种支持对文件中任意单词的检索和受控检索,但搜索时间长,效率很低,不适宜在实际生活中应用。目前绝大部分sse方案都是采用后一种构建策略。基于索引的构建策略将sse方案的构造划为两个部分:构建索引和加密文件;进行关键字检索时,直接在索引上进行搜索,相比前一种构建策略效率更高。基于索引的基本sse方案可以描述为五个算法:密钥产生算法、加密算法、陷门产生算法、搜索算法、解密算法。下面结合附图对本发明的应用原理做详细的描述。首先,给出本发明描述中涉及到的各个符号代表的含义:表1:符号描述符号表述∑客户端存储t服务器端存储λ安全参数w关键词ind文档标识stc最新状态keyc最新加密密钥accc文档标识的哈希聚集值op操作,包括插入和删除两种如图2所示,本发明包含数据拥有者、云服务器和数据使用者三类实体:数据拥有者:将个人数据外包存储在云服务器上,数据文件在上传之前要先被预处理为w-id形式,对w-id对进行加密处理,并根据w-id信息生成增量索引。数据拥有者还需要将解密密钥分享给其希望授权的用户,被授权的用户称作数据使用者。只有数据使用者可以进行搜索并对搜索结果进行解密。云服务器:云服务器具有海量存储资源以及充足的计算资源,云服务器需要做到安全地存储数据拥有者上传的数据和索引;忠实地执行数据使用者的查询请求,并返回完整且正确的搜索结果和该搜索结果对应的证据。数据使用者:数据使用者是被数据拥有者授权的用户,其拥有解密数据文件需要的密钥。在搜索阶段,数据使用者根据所搜索的关键字生成搜索陷门并提交陷门信息到云服务器。在收到云服务器返回的搜索结果和证据之后,数据使用者可以根据证据对云服务器返回的搜索结果进行验证,从而判断搜索结果是否满足正确性和完整性。setup阶段:setup是系统初始化的过程,服务器和客户端要准备好各自的存储数据结构,在本发明中,客户端和服务器均为一个map结构。客户端输入安全参数λ,根据λ初始化存储结构∑,服务器端初始化存储结构t。在具体实现时,如果使用java语言,则可以采用jdk自带的hashmap或者第三方实现,如hppc等;如果使用c++语言,则可以使用stl中的map。系统初始化之后,客户端和服务器中的存储均为空。服务器端的存储结构,记作t,用于记录客户端提交的w-ind对信息。在更新阶段,客户端会在本地存储中对关键词w、文件名ind和操作op进行处理,使这些信息整合加密为密文e。服务器需要做的事情就是将该元组插入到存储结构t中。客户端的存储结构,记作∑,用于存储每个关键词对应的最新状态stc和包含该关键词的所有文档的标识的集合哈希值hash。服务器端的存储如图3所示,每个状态包含一个w-id信息,同一个w的w-id信息使用一条链连接起来。需要注意的是,这里的“链”其实并不真正存在,“链”的真正含义是后一个状态中包含前一个状态的位置信息st。服务器端的存储类似于单向链表的逻辑结构,单向性保证了数据库的前向安全性,而链表的性质保证了在搜索时服务器可以搜索到所有满足条件的文件名。在更新操作中,客户端向服务器上传(u,e,hash),服务器只需要把(e,hash)写入到自身的存储中即可。对于服务器来说,由于e是经过加密的,所以其并不能知道该次更新是针对哪一个w进行操作的,因此能保护数据的前向安全。在搜索操作中,客户端向服务器上传最后第一个状态st,以及该关键词对应的陷门tw。服务器首先根据st找到最后一个状态,然后对该状态对应的密文进行解密,得到上一个状态的位置信息和解密信息。如此循环,直到找到该关键词对应的第一个状态。客户端的存储如图3所示,客户端需要记录每一个关键词对应的最新状态和最新的集合哈希值hash,最新状态指示了该关键词对应的状态链的最后一个状态的位置;而hash用来对搜索结果进行验。update阶段:update阶段是更新阶段。在该阶段,客户端对要插入或删除的文档进行预处理,得到属于本文档的w-ind对,然后对w-ind对分别处理,得到该关键词对应的最新状态并记录在客户端,最后,将最新的状态提交给服务器;对于服务器而言,需要做的只是将客户端提交的数据添加到数据存储中,以完成更新的全过程。关于stc的长度的选择:需要注意的是,stc的作用是唯一标识一个状态,所以stc的长度取决于服务器中最多有多少个状态,即m=log2|st|。客户端首先产生出新的状态stc+1;客户端检查本地存储σ中是否有w的记录,分为如下两种情况:如果没有关于w的记录,说明该关键词是第一次出现,在这种情况下,客户端级联代表没有下一个状态的⊥、文档标识ind和操作op。接下来,客户端使用异或加密得到密文e。如果有关于w的记录,则取出其对应的stc和hash。在这种情况下,客户端级联最新状态stc、文档标识ind和操作op。同样的,客户端使用异或加密得到密文e。每次更新之后,客户端都更新文档标志符的集合哈希值hash。客户端将最新状态stc+1和文档集合哈希值hash记录在客户端的存储结构中,并将(u,e,hash)上传至服务器。服务器端将客户端上传来的(e,hash)记录在服务器中。search阶段:在该阶段中,客户端提交搜索关键词对应的陷门信息给服务器;服务器根据陷门信息在数据存储中搜索所有包含该关键词的文档的文件名,并生成该次搜索结果的证据,最后将搜索结果和证据一并返回给客户端。客户端检查本地存储σ中是否有w的记录,分为如下两种情况:如果没有关于w的记录,说明服务器中没有关于该关键词的信息,在这种情况下,客户端可以判断没有任何文档包含该关键词,此时可以直接返回空集合。如果有关于w的记录,则取出其对应的stc,hash。在这种情况下,客户端将(tw,stc)提交给服务器;将hash留存在客户端,hash在验证时将会被使用到。服务器在收到(tw,stc)之后,找出t中关于stc的记录e,进行如下的操作:计算最后一个状态的位置,取出对应的证据proof,该证据将会被返回给客户端。需要指出的是,除了最后一个状态的证据,其他位置的证据可以被删除掉以释放存储空间。使用密钥h1(t||stc)对密文e进行解密,得到(stc,ind,op)。将密文ind和操作op的信息存储在结果r中将当前状态stc替换为st,准备下一次解密时使用。服务器在t中搜索关于st的记录,如果有,则继续循环上面的(2),(3)和(4)操作。最后服务器返回搜索结果r和证据proof。步骤verify:在该步骤中,客户端根据证据对服务器返回的搜索结果集合进行正确性和完整性验证。首先根据服务器返回的搜索结果r重新计算集合哈希hash′。然后比较客户端返回的证据proof、客户端存储的集合哈希hash和计算结果hash′进行比较,如果三者完全相同,则验证通过;否则验证失败。在实际操作中,因为三者都是二进制数据,所以可以通过异或来判断二者是否相同。如果证据异或的结果为0,则说明二者相同;如果结果为1,则二者不相同。下面结合性能分析对本发明的应用效果作详细的分析。使用c语言实现了本发明中的方案,使用了crypto++提供的函数来实例化使用到的密码学原语:使用ctr模式下的aes函数实现伪随机函数f,使用sha-256加密算法实现哈希函数h。将本发明的算法与和fast方案进行比较,需要指出的是,这四种sse方案都是前向安全的,但是只有本发明的方案以及可以做到对搜索结果正确性和完整性进行验证。为了比较的公平性,在四个方案中,均使用rocksdb来存储数据,使用grpc库来完成客户端和服务器端的交互。另外,所有使用到的文件名的长度都相同,对称加密算法的密钥长度被设置为128bits。使用了一台拥有四核八线程(intelxeone5-1620v3,3.50ghz)的cpu、16gb内存以及1tb的硬盘存储的工作站上进行测试,该工作站上运行的操作系统为ubuntu14.04lts。搜索效率:图5展示了搜索效率的评估结果,正如所看到的,随着搜索结果中文档数目的增加,三个方案中每个匹配文档的平均搜索时间都在降低。这是因为这三个方案的search协议都包含一些初始化操作,这些初始化操作是一次性的,并且会分摊到搜索结果集中的每一个文档上。所以,平均搜索时间会随着搜索结果中文档数的增加而减少。的搜索效率比fast和本发明的方案都低,这是因为的搜索操作中涉及到一个陷门置换函数,它是一个公钥密码学原语,因此成为搜索效率的瓶颈。在fast中,使用一个普通的置换函数(是一个对称密码学原语)替换了陷门置换函数,因此提高了搜索效率;进一步的,本发明的方案去掉了这个置换函数,因此搜索效率比其他两个方案的都高。更新效率:图6展示了更新效率的评估结果,需要指出的是,在图6中,由rpc通信以及硬盘访问导致的延迟都被包含在了update效率中。对于这三个方案来说,update效率的瓶颈在于客户端产生updatetoken的效率。对于产生updatetoken的过程包含了一次陷门置换函数和两次哈希函数;而fast方案中包含一次置换函数和两次哈希函数;在本发明的方案中,产生一个updatetoken,只需要做两次哈希函数。因此,本发明的方案的更新效率要优于其他两个方案。验证效率:由于只有可以验证搜索结果的正确性和完整性,所以图7只展示了和本发明的方案的验证效率比较结果。需要指出的是,的作者并没有详细说明自己是如何实例化verifiablehashtable的,而verifiablehashtable有很多种实例化方法,因此本发明只是使用c++的stl库提供的map来模拟重新构建vht的过程。可以看到,随着keyword-document对的增加,两个方案的验证效率的差别也越来越大。这是因为重建vht的效率和vht中元素个数成反比。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1