安全子字符串搜索以过滤加密数据的制作方法

文档序号:18396725发布日期:2019-08-09 23:29阅读:314来源:国知局
安全子字符串搜索以过滤加密数据的制作方法
本发明涉及一种安全子字符串搜索以过滤加密数据。
背景技术
:除非本文另有指示,否则本部分中描述的方法不是对于本申请中权利要求的现有技术,并且不因为包括在本节中而被承认为现有技术。随着典范转移从本地部署软件(on-premisesoftware)到云计算和云存储,出于安全性目的需要考虑新的潜在攻击者。因此,不仅外部攻击者,而且诸如恶意云管理员的内部攻击者也可能代表恶意行为者。加密数据库可以利用最小的计算开销和对现有数据库系统的小集成工作来解决这些信任问题。虽然诸如aes的标准随机加密方案提供了语义安全性,但是对这种加密的数据的任何计算都很难或不可能。然而,由于移动客户端设备(例如,电话、平板电脑)的有限计算能力和存储量(storage),因此直接在云环境内过滤外包的加密数据的能力仍然是非常期望的。大数据应用的紧急情况只会加剧对以加密形式直接过滤外包的数据的能力的需求。技术实现要素:实施例对加密数据执行安全子字符串搜索。在第一预处理中,将指定用于远程安全存储的明文字符串分段为多个重叠的明文子字符串。在第二预处理中,这些子字符串被加密成密文(例如,利用频率隐藏保序加密(frequency-hidingorderpreservingencryption,fhope)),密文还包括子字符串的位置信息。搜索索引和秘密状态由第一和第二预处理产生。然后将密文和搜索索引外包给不安全服务器内的数据库。服务器内的引擎确定与从安全客户端接收的查询请求匹配的那些候选密文。引擎将密文返回给客户端根据秘密状态进行解密。根据一些实施例,预处理可以由客户端直接执行。然而,可替换地,可以将预处理委托给负责将搜索索引/密文外包给服务器的第三方服务,并将秘密状态委托给客户端。引擎可以被配置为对服务器侧上的候选密文进行过滤,以便消除误报(falsepositives)并减少与远程客户端的通信。这些方法可以涉及对位置信息的确定性加密。计算机实施的方法的实施例包括服务器的引擎从客户端接收搜索查询。引擎参考存储在服务器的数据库中的搜索索引连同多个密文,以产生满足搜索查询的候选密文。引擎向客户端通信至少一个候选密文,其中多个密文中的每一个包括根据加密方案加密的字符串的片段、以及字符串内片段的位置。非暂时性计算机可读存储介质体现了用于执行包括服务器的引擎从客户端接收搜索查询的方法的计算机程序。引擎参考存储在服务器的数据库中的搜索索引连同根据频率隐藏保序加密(fhope)方案加密的多个密文,以产生满足搜索查询的候选密文。引擎向客户端通信至少一个候选密文,其中多个密文中的每一个包括根据加密方案加密的字符串的片段以及字符串内片段的位置。计算机系统的实施例包括一个或多个处理器和可在所述计算机系统上执行的软件程序。软件程序被配置为使得内存储器(in-memory)数据库引擎从客户端接收搜索查询,并且参考存储在服务器的内存储器数据库中的搜索索引连同多个密文,以产生满足搜索查询的候选密文。软件程序还被配置为使得内存储器数据库引擎向客户端通信至少一个候选密文,其中多个密文中的每一个包括根据加密方案加密的字符串的片段以及字符串内片段的位置。在某些实施例中,加密方案包括保序加密方案。在一些实施例中,加密方案包括频率隐藏保序加密(fhope)方案。具体实施例还包括引擎对候选密文进行过滤,以产生至少一个候选密文。根据各种实施例,过滤包括执行范围查询。在一些实施例中,根据确定性加密方案加密位置。根据具体实施例,数据库包括内存储器数据库,并且引擎包括内存储器数据库引擎。某些实施例还包括,在接收搜索查询之前,引擎存储从客户端外包的搜索索引。一些实施例还包括,在接收搜索查询之前,引擎存储从除客户端之外的可信第三方接收的搜索索引。下面的详细描述和附图提供对实施例的性质和优点的更好理解。附图说明图1示出根据实施例的系统的简化图;图2示出根据实施例的方法的简化流程图;图3示出根据示例的用于一个字符串的加密的协议;图4示出根据示例的用于客户端侧位置集缩减(positionsetreduction)的协议;图5示出根据示例的用于分区的搜索(partitionedsearch)的协议;图6示出根据示例的用于在服务器侧评估的协议;图7:攻击者利用部分已知明文的优势;图8a至图8b分别针对200个和2000个目标文件绘制关于针对特殊字符和不同辅助数据集大小过滤的数据集的区分大小写攻击(casesensitiveattacks);图9a至图9b分别针对200个和2000个目标文件绘制关于未过滤数据集和不同辅助数据集大小的区分大小写攻击;图10a至图10b分别针对200个和2000个目标文件绘制关于针对特殊字符和不同辅助数据集大小过滤的数据集的小写攻击;图11a至图11b分别针对200个和2000个目标文件绘制关于未过滤数据集和不同辅助数据集大小的小写攻击;图12a至图12b分别针对不同k-gram大小和索引文件绘制无预处理和有预处理的压缩比;图13a至图13b分别针对k-gram大小3和5,使用位置集缩减过滤策略绘制对于不同k-gram大小的搜索时间;图14a至图14b分别针对k-gram大小3和5,使用片段搜索过滤策略绘制对于不同k-gram大小的搜索时间;图15a至图15b分别针对k-gram大小3和5,使用服务器侧的过滤来绘制对于不同k-gram大小的搜索时间;图16示出根据被配置为执行安全子字符串搜索的实施例的专用计算机器的硬件;图17示出示例计算机系统。具体实施方式本文描述根据实施例的执行安全子字符串搜索的方法和装置。在以下描述中,出于解释的目的,阐述许多示例和具体细节以便提供对根据本发明的实施例的全面理解。然而,对于本领域技术人员显而易见的是,由权利要求限定的实施例可以单独包括这些示例中的一些或全部特征,或者与下面描述的其他特征相组合,并且还可以包括本文描述的特征和概念的修改和等同物。因此,实施例对加密数据执行安全子字符串搜索。在第一预处理中,将指定用于远程安全存储的明文字符串分段为多个重叠的明文子字符串。在第二预处理中,这些子字符串被加密成密文(例如,利用频率隐藏保序加密-fhope),其还包括子字符串的位置信息。搜索索引和秘密状态由第一和第二预处理产生。然后将密文和搜索索引外包给不安全服务器内的数据库。服务器内的引擎确定与从安全客户端接收的查询请求匹配的候选密文。引擎将密文返回给客户端根据秘密状态进行解密。预处理可以由客户端直接执行。可替换地,可以将预处理委托给负责将搜索索引/密文外包给服务器的第三方服务,并将秘密状态委托给客户端。引擎可以被配置为对服务器侧上的候选密文进行过滤,以便消除误报并减少与远程客户端的通信。图1示出根据实施例的被配置为实施子字符串搜索的系统的简化视图。具体地,系统100包括提供可信环境的安全客户端102,安全客户端102经由通信网络106与不安全服务器104通信。服务器104包括数据库108和引擎110。数据库的作用是以加密形式存储外包的数据,以便通过云(例如,作为数据库即服务(databaseasaservice,dbaas)产品的一部分)进行安全访问。因此,作为预处理112的一部分,客户端获取要远程存储的明文字符串114,并将它划分成多个重叠的明文子字符串。这些片段在本文也被称为k-gram。根据一个非常简单的例子,原始明文字符串可以包括单词“banana”。对应的重叠明文片段可以包括子字符串:“ban”、“ana”和“nan”的出现。接下来,作为预处理的另一部分,客户端根据加密程序(procedure)对这些片段中的每一个进行加密,创建多个对应的密文116。在某些实施例中,加密可以根据频率隐藏保序加密的形式。在客户端的可信环境中执行该预处理加密步骤,导致秘密状态118保留在客户端上。该秘密状态包括明文片段的密文以及加密的位置信息119。作为该预处理的结果,客户端还包括隐私保护搜索索引120。每个加密的密文片段都配备有加密的位置信息。预处理使用对称加密方案对每个片段的具体位置信息进行加密。然后,所有唯一密文的元组集代表最简单的隐私保护搜索索引。注意的是,作为分段过程的结果,密文的值正好出现一次。因此,即使相同的片段也映射到不同的保序密文。这有利地导致用于片段的频率隐藏方案,从而增强安全性。接下来,作为外包过程的一部分,密文和搜索索引都从客户端外包121到服务器。密文和搜索索引被存储在数据库中,根据实施例,现在可以对数据库进行安全子字符串搜索。具体地,基于用户对用户界面(userinterface,ui)122的输入,客户端可以向服务器发出查询124。在上面给出的简化示例中,查询可以请求搜索存储的加密的数据以查找单词“banana”的任何出现。图1的引擎110控制与数据库和存储在其中的数据的交互。具体地,响应于接收到查询,引擎参考搜索索引以产生看起来与查询匹配的存储的密文候选。图1示出数据库最初向引擎返回多个密文候选116a、116b。然而,下面详细讨论的是,以分段的加密形式搜索数据有时可能产生误报结果。因此,在某些实施例中,引擎在服务器上对接收到的密文候选执行过滤。这种服务器侧评估可以涉及在与客户端的多轮交互上执行范围查询,并且在下面结合图6详细讨论。图1然后示出返回到客户端的服务器、反映由引擎执行的过滤处理的查询结果126。这里,通过服务器侧过滤过程去除了密文候选中的一个。在接收到该查询结果时,如图1所示,客户端本身可以执行可选的过滤128。这种客户端侧过滤可以包括:·位置集缩减和/或·片段搜索,如下面分别结合图4和图5所述。接下来,客户端参考秘密状态以便将密文解密129成明文搜索结果130。该明文搜索结果被显示在ui中以供用户检查和查看。图1的简化视图示出包括两方(可信客户端、不安全的服务器)的系统,其中在客服端侧上执行预处理。然而,这不是必需的,并且替代实施例可以具有多于两方的特征。例如,涉及字符串分段和加密的预处理在计算上是昂贵的。因此,可替换地,该预处理可以由提供服务功能的专用可信第三方来执行,最终将搜索索引通信到服务器,并将秘密状态通信到客户端。图2是示出根据实施例的方法中所采取的各种动作的流程图。在202处,执行明文字符串的预处理。该预处理可以由安全客户端或可信第三方服务来执行。在204处,第一预处理包括将明文字符串分段成子字符串。第二预处理包括加密子字符串和位置信息,在206中,得到搜索索引和对应的密文。在208处,将密文和搜索索引外包以储存在不安全服务器上。在由第三方执行预处理的情况下,将所得的秘密状态通信到安全客户端。在210处,在服务器处接收来自客户端的搜索查询。在212处,服务器参考搜索索引以产生与搜索查询匹配的候选密文。如下面所讨论,搜索加密的数据可能导致误报,这对于与远程客户端通信来说可能是昂贵的。因此,在214处,服务器可以执行可选的过滤。在216处,客户端可以响应于查询可选地对从服务器通信回客户端的密文执行过滤。在218处,根据安全客户端上的秘密状态解密客户端侧上接收的密文。在220处,客户端显示查询结果,例如,作为用户界面的一部分。根据具体实施例的安全子字符串搜索的定义现在提供如下。我们写[a,b]其中a,b∈n且a<b用于范围从a开始到b结束,[a,b]={x∈n|a≤x≤b}。在该工作中,我们假设字符串s在字母表σ(例如,σ是ascii字符和字符串s∈σl的整个集)上的长度为l。进一步地,我们写|s|来指代这个字符串的长度,所以|s|=l。将si表示为位置i处的字符串s的字符,我们将位置i的该字符串的k-gram定义为从位置i开始的长度为k的字符的序列,即si...si+k-1∈σk。给定k-gramkg∈s,我们表示poss[kg]为其中kg发生在s中的所有位置的有序列表并且#poss[kg]表示元素的数量。此外,我们假设字母表σ上的总顺序,以便有可能对由字母表σ的字符组成的字符串进行排序,例如,字典顺序或基于内部位字符串表示的顺序。采用以下加密方案。具体地,在该工作中,我们利用具有语义安全性的对称加密方案,该方案由三个多项式时间程序组成。·k←gen(λ)是概率性程序,其将安全参数λ作为输入并输出密钥sk。·c←enc(sk,m)是概率性程序,其将密钥sk和明文m作为输入并输出密文c。·m←dec(sk,c)是确定性程序,其将密钥sk和密文c作为输入并输出明文m。正确性要求对于所有密钥sk和有效消息m,dec(sk,enc(sk,m))=m。进一步地,在一些建构中,我们需要将确定性加密表述为encdet,使得encdet(sk,m1)=encdet(sk,m2)iff.m1=m2。另外,我们使用包括三个多项式时间程序的频率隐藏保序加密(fhope)方案。·st←genfhope(1λ)是概率性程序,其将安全参数λ作为输入并输出秘密状态st。·st′,y←encfhope(st,x)是概率性程序,其将秘密状态st和明文x作为输入并输出更新的秘密状态st'和密文y。·x←decfhope(st,y)是确定性程序,其将秘密状态st和密文y作为输入并输出明文m。正确性要求对于任何一致的秘密状态st和明文x,decfhope(st,encfhope(st,x))=x。进一步地,保序属性要求明文的顺序被保留在密文上,即,其中yi←encfhope(st,xi)。注意的是,我们的建构不需要解密功能,因此可以使用频率隐藏保序单向函数。现在描述根据一些实施例的关于安全子字符串搜索的细节。具体地,我们对在加密的数据上支持子字符串搜索的方案进行形式化。字母表σ上的子字符串可搜索加密方案包括以下程序。·gen(1λ)是概率性程序,其将安全参数1λ作为输入并输出密钥sk。·st,i←enc(sk,s)是概率性程序,其将密钥sk和明文字符串s∈σ*作为输入并输出秘密状态st和保护隐私的搜索索引i。·r←query(sk,st,q,i)是客户端和服务器之间的(可能是多轮)协议。客户端的输入是密钥sk、秘密状态st和子字符串q∈σ*,并且服务器的输入是隐私保护的搜索索引i。客户端的输出是包括poss[q]的查询结果r,并且服务器没有输出。正确性要求对于查询结果r←query(sk,st,q,i)中的每个位置i,对于所有st,i←enc(sk,s),它保持si,...,si+|q|=q。此外,完整性要求对于任何查询q、密钥sk和明文s,所有位置i∈[0,|s|]使得si,...,si+|q|=q被包含在具有st,i←enc(sk,s)的查询结果i∈r←query(sk,st,q,i)中。例如,假设外包的明文字符串“banana”和随后的子字符串查询“ana”,查询结果应该是位置{1,3}的集,以便正确和完整。注意的是,这种子字符串可搜索加密方案不具有显式解密程序,但是可以通过使用通用(语义安全)对称加密方案加密完整明文s来补充。进一步地,我们假设查询长度相比于消息长度是小的,即|q|<<|s|。现在提供根据实施例的关于安全子字符串搜索的实施方式的细节。对于我们的加密方案的目标(即,对现有数据库管理系统的容易的部署和对于实际采用的快速执行时间),我们提出所有提供安全子字符串搜索的功能的不同方法。首先从高层次的角度描述主要思想,然后提供更多的细节和不同的变化。基本加密如下执行。在数据外包步骤之前,必须在可信环境中执行预处理加密步骤,得到保留在客户端上的秘密状态st并且可以被外包的隐私保护搜索索引i。该步骤由预处理器完成,预处理器可以是客户端的设备。可替换地,该步骤可以由专门的可信第三方执行,该第三方将该预处理步骤(取决于数据库大小,可能是计算上昂贵的操作)作为服务来提供。安全外包过程因此可以包括三方之间的协议:i)持有敏感数据的客户端,ii)转换此敏感数据的预处理器,以及iii)存储隐私保护搜索索引的不可信数据库。为简单起见,在下面描述的图3的协议中仅呈现加密单个字符串的情况。然而,这能够容易地扩展以支持对多个字符串的加密(例如,连结(concatenate)所有字符串并用字符串标识符扩展位置信息)。给定要被外包的字符串s,预处理器将该字符串划分成|s|个重叠的k-gram,表示为g1,...,g|s|。然后,使用简单的fhope加密实施方式对这些k-gram进行加密,导致它们对应的fhope密文被表示为oj:·建立一个映射,其中每个唯一k-gramkgi被映射到包含所述k-gram出现的所有位置的列表,即poss[kgi];·置换每个位置列表poss[kgi];·根据其键,即出现在字符串s中的所有唯一k-gramkgi的集,对该映射按字典顺序进行排序;·迭代该排序的k-gram映射,枚举所有位置,得到关于每个k-gram的一个相干密文范围[o(kgi)1,o(kgi)#poss[kgi]]。为了允许客户端查询该搜索索引,必须在客户端侧维护秘密状态st。也就是说,所有唯一k-gramkgi的映射连同对应的fhope范围,即最低密文o(kgi)1和最高密文o(kgi)#poss[kgi]。每个值oj正好出现一次,因此,即使是相同的k-gram映射到不同的保序密文,也会得到k-gram的频率隐藏方案。每个fhope加密的k-gram都配备有加密的位置信息。预处理器使用公用对称加密方案对每个k-gramkgi的具体位置信息poss[kgi]进行加密,得到所对所有的pj∈poss[kgi],ckgij=enc(sk,pj)。那么,元组的集(okgij,ckgij)j=1,...,#posskgi对于所有唯一kgi是最简单的保护隐私的搜索索引i并且秘密状态st位于客户端。在下面给出的正式示例中评估这个客户状态的实际可行性。图3的协议1给出对于一个字符串的预处理和加密步骤的正式描述。表1和表2给出用k-gram大小k=3加密字符串“bananas”的示例,如下所示。表1:搜索索引ifhope位置0enc(sk,4)1enc(sk,2)2enc(sk,6)3enc(sk,1)4enc(sk,3)5enc(sk,5)6enc(sk,7)表2:秘密状态stkgram开始结束ana01as_22ban33nan44nas55s__66现在描述基本令牌化。在初始数据预处理步骤之后,所得的隐私保护搜索索引i被传递到不可信数据库。安全状态保留在客户端上(或者在对于初始预处理步骤使用可信第三方的情况下,安全状态被传递到客户端)。回想一下,底层数据库系统可以是像mysql这样的任何公用数据库系统而无需进一步修改;秘密状态可以被存储在另一(可信)数据库以及明文文件中。给定子字符串查询q=q1,...,ql,持有秘密状态的客户端将该查询令牌化为与隐私保护搜索索引兼容。为简单起见,首先假设l≤k,也就是说,查询的子字符串至多与预处理步骤期间使用的k-gram长度一样长。客户端访问秘密状态并查找小于q的最后索引的k-gramkgi和大于q的第一个索引k-gramkgj(根据字母表σ上定义的顺序)。由于客户端状态存储在排序的结构中,因此该搜索可以在对数时间内完成,例如,通过应用二进制搜索。对应的fhope范围:开始于:结束于:然后在数据库上进行评估,并得到查询中出现子字符串的所有加密的位置信息。然后将该加密的结果集传递到客户端并在那里解密。现在,我们准备对于子字符串查询q=q1...ql(其中l>k)的更一般的构建。为了支持这样的查询,客户端将子字符串查询q变换为多个(如果可能的话不相交)k-gram,其具有重叠或直接跟随的最多为k大小(即它们的相对距离小于或等于k)。因此,客户端选择一个参考k-gramkgref,并为其分配相对位置δref=0。然后,相对于该参考k-gram给出查询中的所有其他k-gram的相对位置δ。如果在秘密状态中找不到任何这些k-gram,则该k-gram不是原始文本的一部分,并且因此查询不能是索引文本的子字符串。否则,我们知道所有k-gram都是字符串s的一部分,但不知道它们是否建立了期望的子字符串。为此,对于每个k-gram查询的返回位置的集要么在客户端侧被解密并针对正确的位置偏移量来过滤,要么在服务器侧直接被处理,如下所述。我们将使用以下表述:τ,ρ←convert(st,q)在实际数据库查询之前引用客户端侧上发生的过程。在这种情况下,τ包含元组τi=(kgi,δi)并且ρ是每个k-gramkgi被映射到fhope范围ρi的映射。注意的是,该过程的结果不是唯一的,因此相同的子字符串查询可以导致不同的k-gram查询,甚至包括不同数量的k-gram。例如,外包的字符串“bananas”和k=3得到搜索索引i和秘密状态st,如表1和表2给出。假设客户端正在搜索子字符串“anana”,那么一个可能的令牌化如下:{(’nan’,0),(’ana’,-1),(’ana’,1)}{’ana’:[0,1],’nan’[4,4]}←convert(st,’anana’)。然而,正如我们所看到的,这会导致产生3个令牌,并且没有一个与他们的邻居不相交。例如,这不同于简单地生成具有最大偏移量k的令牌化,{(’ana’,0),(’na’,3)}{’ana’:[0,1],’na’:[4,5]}←convert(st,’anana’)。而且,fhope范围的长度是某个k-gram出现在原始文本中的频率的指示符(例如,像“the”或“of”这样的k-gram的出现频率比其他更高)。这允许客户端优化关于过滤开销的转换过程。经由公用数据库查询,向服务器查询通过转换所计算的所有fhope范围ρ。由于在应用协议1和诸如b树(b-tree)的范围查询的索引技术之后保留了k-gram的顺序,因此可以在标准数据库上有效地评估这些fhope范围查询。现在讨论过滤策略。具体地,我们讨论用于过滤匹配每个fhope范围查询的结果集的不同方法。出于演示的目的,提供sql中所得的数据库查询的示例。描述对于客户端和服务器具有不同的过滤复杂性的三种不同的方法。一方面,过滤过程可以仅在客户端上执行,得到一轮协议。也就是说,可以一批发送所有数据库查询,而无需等待中间结果集。另一方面,服务器侧评估基于两轮协议,但省略了客户端所需的任何后处理(除了解密)。在下面的示例中评估不同场景对性能的影响。一种过滤策略是位置集缩减。这是最直接的解决方案。也就是说,在数据库上分别查询每个fhope密文范围ρi,得到为每个唯一k-gramkgi生成位置集poss[kgi]。注意的是,这些fhope密文范围查询可以在协议2中表示为batchquery()的一个(并行)批处理中与对应的sql查询一起提交:之后在客户端侧根据它们的位置偏移量δi执行完整的位置过滤过程。更具体得,给定参考k-gram的位置集poss[kgref],通过添加δi来校正每个其他位置集pos[kgi]。所有这些校正的位置集的交集包含查询子字符串出现的实际位置:图4的协议2描述完整的过滤程序。片段搜索是另一种过滤策略。上述位置集缩减过滤处理完全在客户端侧发生。也就是说,具有大结果集的每个单独的k-gram查询增加在其结果集大小上线性的、客户端侧的过滤开销。相比之下,片段搜索过滤策略力求缩减客户端侧上的过滤开销,但增加了服务器侧上的过滤开销。再次,我们从如图3的协议1中所述的fhope加密开始,但是省略实际的k-gram位置。相反,要外包的字符串s被切成多个长度为|f|的字符串片段,这些片段重叠长度为l,即:fj=si,...,si+|f|和fj+1=si+|f|-l,...,si+2|f|-l。该重叠长度是一个子字符串查询的最大可能长度,否则将被切成两个不同片段的子字符串不会被正确地检索。每个片段fj使用通用(语义安全)加密方案加密,并与所述片段包含的所有fhope加密的k-gram一起外包。给定由convert(st,q)输出的fhope范围ρ,客户端查询利用fhope密码来索引的片段,这些片段落入图5的协议3中表述为queryall(ρ)的所有ρi∈ρ内。这可以使用sql连接操作来实现,如下所示:结果集包括包含τ中每个k-gram的所有加密字符串片段。然而,由于错误的位置偏移量,该结果集可能会引发误报。也就是说,尽管所有k-gram都发生在字符串片段中,但它们不会连贯地形成查询的子字符串q。基于解密的片段,在客户端侧上过滤这些误报。图5的协议3中给出综合程序的对应形式描述。现在讨论在服务器侧上过滤的第三种过滤策略。该解决方案减少了客户端侧上的过滤开销,在最不频繁k-gram的结果集大小上是线性的,但是是两轮交互的。对于该方法,我们稍微修改加密程序。更具体地,在图3的协议1的第12行中,外包的字符串中每个k-gram的发生位置使用如上定义的确定性加密方案进行加密。注意的是,利用确定性加密对位置进行加密不会削弱隐私保护索引的安全性(因为每个位置都是唯一的)。相反,这为服务器提供了检查加密的数据的相等性的能力。在第一轮中,客户端查询具有最小fhope范围的k-gram作为参考令牌kgref。范围大小与先前突出显示的结果集大小直接相关。也就是说,因为fhope范围很长,所以每个k-gram在字符串s中出现多次。包含所有匹配位置pos[kgref]的结果集将被返回给客户端。然后在客户端侧解密匹配位置的集,并进一步被处理,以便匹配剩余的k-gram位置。对于每个k-gramkgi,偏移量δi被添加到pos[kgi]={p+δi|p∈pos[kgref]}并被解密,得到encdet(pos[kgi])={encdet(p+δi)|p∈posref}。对于每个k-gram,fhope范围ρi随后在服务器处与被标记为queryinset(ρi,encdet(pos[kgi]))的计算位置信息encdet(pos[kgi])一起被查询,例如,使用sql语法:图6示出完整的协议。现在提供安全性评估。具体地,我们修订用于频率隐藏保序加密的ind-faocpa安全性定义。我们针对k-gram提供用于子字符串搜索的功能的索引方案满足这个安全性定义,这是目前文献中已知的ope方案最强的安全性定义。然而,即使安全性由这个正式框架定义,实际影响也可能不明确。事实上,实际攻击可以在根据ope方案加密的数据库上实现高达80%的明文恢复率,ope方案满足正式的安全性定义,即popf安全性。通过利用与实际加密的数据库具有相似结构的辅助数据已经成为可能。因此,我们从实用的角度评估形式安全性定义对索引k-gram用例(use-case)的影响。我们的分析是基于对频率隐藏保序加密的最熟知和已发布的攻击。现在提供正式的安全性定义。对于频率隐藏保序的加密的形式安全性是基于下面定义的两个明文序列的(不一定是唯一的)随机顺序。定义5.1(随机化顺序)。设n为序列x=x1,...,xn中不一定有区别的明文的数量。对于序列x的随机化顺序γ=γ1,...,γn(其中),它保持:并且对手a和挑战者c之间的fhope加密的安全性博弈定义如下:·对手a选择两个序列x0、x1,使得它们具有至少一个共同的随机化顺序γ。·挑战者c翻转硬币b并加密xb并将此加密序列发送回a。·最后,对手输出猜测b',并且如果b=b',则赢得博弈。如果对手的优势可以忽略不计,那么fhope加密被称为ind-faocpa(在频率分析有序的选择明文攻击下无法区分)。清楚的是,我们的索引方案确实满足了该安全性定义,因为在加密步骤期间所有k-gram都是有序的,因此实际上所有可能的长度为n的k-gram序列都具有相同的随机化顺序,即1,...,n。遵循不可分辨的密码学方法,我们根据以下定义来陈述安全性。定义5.2(ind-cpa-ioq)。设π=(gen,enc,query)是支持用于在加密数据上进行子字符串搜索的方案。我们将针对π的安全性实验expπa(1λ)定义如下。·挑战者c创建密钥sk←gen(1λ)。·对手a选择两个字符串s0、s1,其中|s0|=|s1|。·挑战者c翻转硬币b,调用stb,ib←enc(sk,sb)并将ib发送给a。·对手a提交两个具有相同长度的查询序列q0、q1。每个序列必须是可被变换为(多个)范围查询ρ0、ρ1,使得ρ0=ρ1(相对于stb)并得到相同大小的访问模式。·挑战者模拟query(sk,stb,qb,ib)并将这些查询执行的副本(transcript)view发送给a。·对手a输出猜测b′,如果b=b′,则实验输出1。如果所有的概率性对手a都以可忽略的概率赢得该实验,那么在针对同样顺序的查询的选择明文攻击下,支持在加密数据上进行子字符串搜索的加密方案π是不可区分的。注意的是,要求对具有相对于st0、st1的公共随机顺序的查询(q0、q1)进行限制。否则对手可以轻易地赢得博弈。例如,假设k=3并且两个字符串(在具有词典顺序的英语字母表上)s0=“beefs”且s1=“lulua”,得到st0=(bee,eef,efs,fs_,s__)且st1=(a__,lul,lua,ua_,ulu)。用于实验的两个有效查询序列是q0=(e__,s__)和queryq1=(lu_,ulu),两都被变换为范围查询ρ0=ρ1=([l-2])。对相同大小的访问模式的限制要求对于集qb中的每个子字符串查询,形成这些查询的所有k-gram具有相同的出现次数。进一步地,副本view是半诚实服务器(semi-honestserver)的视图,其包括从客户端发送到服务器的所有消息。定理1。如果底层的确定性加密是安全的,并且频率隐藏保序加密是ind-faocpa,如图6的协议4中所述,用于在服务器侧上过滤的加密数据上的子字符串查询的两轮交互协议是ind-cpa-ioq安全的。由于对位置信息应用最弱的加密程序,现在简述定理1的安全性证明:即确定性加密(例如,通过具有固定的初始化向量的分组密码(blockcipher)实施)。我们由伪随机置换f来对这种确定性加密建模,定义如下。定义a.1(伪随机函数)。给定有效的计算键控函数(computationalkeyedfunction)f:{0,1}λ×{0,1}n→{0,1}n,如果对于所有ppt区分符d,我们说f是伪随机置换(pseudorandompermutation,prp),其优势定义为:可以忽略不计。这里k←{0,1}λ是随机均匀采样的密钥并且f:{0,1}n→{0,1}n是从将长度为n的位字符串映射到长度同样为n的位字符串的所有函数集中随机选择的函数。我们使用伪随机置换的安全性与频率隐藏保序加密一起的形式化,以给出定理1的安全性证明的直觉。针对这个证明,我们提出博弈的序列{g0,g1,i,g2,j},每个序列输出副本view0(b)、view1,i(b)、view2,j(b)。博弈g1,i是混合博弈,其中我们修改由任何k-gram查询返回的第i个加密位置信息。博弈g2,j是混合博弈,其中我们修改由任何k-gram查询从未返回但存储在加密索引中的第j个加密位置信息。通过第i和第j个加密位置信息,我们根据它们的比特表示,在密文上采用隐式顺序。每个博弈逐渐不同,直到最终博弈的副本独立于实验的采样的位b,因此对手只能在最终博弈中以概率1/2猜测b'。我们认为,除了可忽略的概率之外,每个博弈都无法与前一个博弈区分开来,因此,除了可忽略的概率之外,第一个博弈和最后一个博弈的视图也无法区分。●g0:在该博弈中,我们遵循ind-cpa-ioq的实验,因此输出攻击者观察到的真实副本view0(b)。●g1,1:在该博弈中,我们模拟由任何k-gram查询返回的第一个加密位置信息。也就是说,我们用{0,1}n中随机采样的位字符串替换第一个返回的加密位置(在查询结果和加密搜索索引中)。用view1,1(b)表示修改的副本。注意的是,多次返回的位置(例如,因为重复子字符串查询)总是被相同的采样位字符串替换。●g1,i:在该博弈中,我们模拟所有加密位置信息,达到由任何k-gram查询返回的第i个值。●g2,1:在该博弈中,我们模拟存储在加密搜索索引中的第一个加密位置信息,但是从未由任何k-gram查询返回。也就是说,我们用{0,1}n中随机采样的位字符串替换搜索索引中第一个返回的加密位置。用view2,1(b)表示修改的副本。●g2,j:在该博弈中,我们用随机采样的位串{0,1}n替换从未返回的第j个位置的确定性加密。对手无法区分从一个博弈到下一个博弈的转变,除非概率∈可以忽略不计,否则对手可能会攻击随机置换。将n表示为替换的加密值的数量,对手将g0和g2,l区分开的总概率为n∈。在最后一个博弈(g2,l)中,用随机字符串替换所有确定性加密值,因此独立于采样位b。由于范围查询q0、q1根据安全性的定义具有相同的顺序,这完成了证明。现在结合下面的攻击的示例讨论根据具体实施例实施安全子字符串搜索的各种细节。示例为了更好地理解使用针对外包k-gram的ind-faocpa安全fhope方案的实际影响,fhope加密的k-gram索引遭受分桶攻击(bucketingattack)。分桶攻击基于以下假设:攻击者已经访问具有与fhope加密的目标数据类似结构的辅助数据。也就是说,攻击者的辅助数据和目标数据是从具有相似底层分布的相同值域(在该字符串示例中,在相同字母表σ上的相同k-gram分布)中提取的。给定长度为n的加密目标数据和足够的(即长度大于n的)辅助数据,攻击者从辅助数据中采样n个值。在这个具体的攻击中,这些值对应于它们的长度为β的前缀被分类,每个桶被标记有这样的前缀。然后计算每个桶中所有元素的秩(rank)的上限和下限。按照我们的构建,这些秩与它们的fhope密文值相同。因此,这些桶给出与长度为β的相同前缀共享的所有密文的近似值。该数据采样和分桶过程被重复l次,并且对每个桶的边界秩值进行平均。最后,每个平均的桶的最常见明文是落入该平均的桶范围内的目标密文的猜测。作为实际的安全性分析,对分桶攻击的评估如下。如果从fhope密文到对应的k-gram的映射是正确的,则攻击者的每个猜测都算作成功。攻击者的成功率是正确猜测的数量除以总体fhope加密的k-gram。每次测量被重复100次,并且计算平均值。攻击是基于安然数据集(enrondataset)。更具体地,辅助数据和挑战数据(challengedata)都是从相同的数据集集合中选择出的。作为第一基线评估,攻击是在攻击者能够访问挑战数据作为辅助数据的部分的情况下被执行,并且这一已知部分会相继增加。更详细地,我们利用选择为500个随机文件并且部分使用与挑战数据相同的文件集的辅助数据评估了分桶攻击有多成功。我们设置分桶前缀参数β=3,并将k-gram大小在3到7之间变化。注意的是,β=k=3是其中每个桶只有一个元素的特殊情况,因此,分桶攻击对应于对频率隐藏保序加密的排序攻击。在完全了解已知挑战文本(密集知识)的情况下,排序攻击具有100%的成功率。攻击者对不同k-gram大小和已知明文的不同分数的优势如图7所示。进一步地,执行了一系列更全面的攻击,其中数据集大小对于{200,500,1000,2000}内的值是固定的,并且增加了攻击者访问的辅助数据量。我们通过过滤图8a至图8b和9a至图9b中所有特殊字符的文本,并通过忽略图10a至图10b和11a至图11b中的区分大小写,来评估字母表大小增加的影响。我们选择了不同的k-gram大小k,并利用重复l=100次的分桶采样过程来固定前缀大小β=2。对于所有数据集,攻击者的成功率随着k-gram大小k的增加而降低。对于区分大小写的攻击,我们报告攻击成功率介于1%和3.5%之间,这取决于加密步骤期间选择的k-gram大小。正如预期的那样,过滤过程增加了攻击成功,并且对于不区分大小写的加密也是如此,因为目标字母表的大小减小了。也就是说,对于不区分大小写的攻击,我们报告攻击成功率在3%到15%之间,这取决于加密步骤期间选择的k-gram大小。我们已经在oracle的java1.8中原型地实施了我们的子字符串搜索协议。所有客户端操作都是在windows10上使用英特尔i76600ucpu@2.6ghz和16gb主内存执行的。作为数据库系统,我们选择了在具有4个intelxeone5-2670@2.6ghz处理器和256gb主内存的同一lan中运行的mysql。我们对安然数据集的子集进行了所有我们的评估。每次运行都随机采样子集。现在讨论客户端状态的可行性。回想一下,客户端存储将每个k-gram映射到一系列fhope密文的秘密状态。在第一步骤中,我们根据使用的k-gram大小和外包的文件量分析了客户端状态的压缩比。我们随机采样了不同数量的文件,并统计了总体k-gram的数量以及存储在客户端状态中的唯一k-gram的数量。压缩比是总体k-gram的数量除以唯一k-gram的数量。我们重复每个文件采样10次并对所有运行的压缩比取平均值。这是在有和没有预处理步骤的情况下执行的,在预处理步骤中,所有特殊字符都已被过滤掉。如图12a(没有预处理步骤)和图12b所示,由于所有可能的k-gram的数量是|σ|k(|σ|随着预处理步骤而减少),因此这个压缩比高度依赖于所选择的k-gram大小k和可能的字母表大小。对于由平均255,322,941个k-gram组成的100,000个未预处理的文件,唯一k-gram的数量从对于k=3的138,242变化到对于k=7的3,410,053。利用实际外包之前的字符过滤步骤,k-gram的总体数量为216,817,129,并且唯一k-gram的平均数量从对于k=3的50,315变化到对于k=7的10,313,490。现在讨论子字符串搜索时间。评估各种过滤策略:·直接位置集缩减(图13a至图13b);·片段搜索(图14a至图14b);和·基于确定性加密的位置信息在服务器侧进行过滤(图15a至图15b)。所有测试都由客户端经由lan接口和java的jdbc驱动程序访问的未修改的mysql数据库上运行。为了评估现实世界场景中的子字符串搜索,测量包含完整的查询应答时间,包括网络延迟和客户端后处理时间。也就是说,测量的时间包括令牌生成、通过lan接口的查询传输、mysql数据库连同客户端的中间或后处理步骤。对于每个过滤策略,我们评估了对于不同k-gram大小3、5、7的子字符串搜索时间、从3开始达到20的不同的查询长度、以及从500个文件开始达到10,000个文件的安然数据集中不同数量的索引文件。为了具有可比性,针对相同的索引文件和相同的子字符串查询的序列给出了每个测量。另外,每个绘制的数据点是100个值的平均值。图13a中示出对于k-gram大小3的位置集缩减的搜索时间,并且图13b中示出对于k-gram大小5的位置集缩减的搜索时间。搜索时间随着数据库大小的增加而线性增长,例如,将索引的数据库大小从5000增加一倍到10000个索引文件,对于查询长度3的平均搜索时间从5秒增加到10秒。该效果与使用的k-gram大小无关。虽然如此,但k-gram大小会根据查询长度而影响搜索时间,因为k-gram大小决定了所需的查询轮次。也就是说,在外包的具有k-gram大小k的数据库上,长度为l的子字符串查询要求个fhope范围查询,并且每个查询都会引发对完整数据库的额外扫描。因此,搜索时间随着所需fhope范围查询的数量线性增加;更大的k-gram大小支持具有相同数量的fhope(sql)范围查询的更长子字符串查询。与其他过滤策略相比,该方法的处理时间不受结果集大小的影响。图14a示出对于k-gram大小3的片段搜索的搜索时间,并且图14b示出对于k-gram大小5的片段搜索的搜索时间。片段大小已被设置为500个字符,其中21个字符重叠。注意的是,该滤策略能够利用单个sql查询来执行,因此最小化往返时间。进一步地,fhope范围查询是在片段id上而不是完整的位置信息上进行评估,降低处理复杂度(通过近似片段大小)。我们确定了影响查询时间的两个主要参数。首先,结果集大小具有很大的影响,特别是对于短子字符串查询,因为所有(加密的)匹配的片段都被传递到客户端进行后处理。第二是在数据库上评估的所需join操作数的参数。给定固定的k-gram大小k,这与子字符串查询所包含的k-gram的数量相关,因此尽管结果集大小减小,但子字符串查询的长度增加了处理时间。在图14a中可以观察到这两种效果。图15a和图15b示出在服务器侧使用对于k-gram大小3和5的确定性加密位置信息的过滤策略的搜索时间。再次,形成子字符串查询的结果集大小和k-gram数量都会影响搜索时间,但效果更强。回想一下,使用对应的偏移量为每个k-gram校正参考k-gram的位置集poss[kgref],并且需要重新加密并再次传递到数据库系统。因此,用于加密操作的开销乘以子字符串查询所变换成的k-gram的数量,导致高的搜索时间,特别是对于小的k-gram大小和大数据库。进一步扩展可以支持对于动态数据库的子字符串搜索。更具体地,我们讨论了在初始加密过程之后如何向外包的数据库添加字符串的不同方法。外包过程之前,针对整个敏感数据集合执行一次包括加密的初始预处理步骤。回想一下,所得的预处理步骤的输出包括隐私保护搜索索引i和秘密状态st。这个秘密状态st可以被利用来添加已经在st中可用的数据,同时为这样的添加的数据提供随机性。更准确地说,我们可以通过对现有密文范围内的随机密文进行采样来隐藏要被添加的值x的频率信息。例如,假设客户端的状态st已经拥有对于加密k-gramx的五种不同的密文,即:encfhope(x)∈{a,a+1,a+2,a+3,a+4}。客户端随机选择这些值中的一个作为值x的密文。一方面,更频繁的k-gram具有从中加密值被采样的更大的密文域。另一方面,较不频繁的k-gram具有较小的密文域,但是因为它们发生的频率较低,所以针对这些k-gram需要较少频率的加密。总之,该随机采样对于k-gram有直方图平坦化的效果。全新的k-gramkgn引发所有大于kgn的k-gram的重新加密,即所有具有kgi>kgn的k-gramskgi都需要被重新加密。然而,对于dbms来说,重新加密是一项简单的任务:让我们假设添加了新的k-gramkg,并且其ope加密是encfhope(kg)=x。因此,所有具有更大密文的值都需要由简单的sql命令(诸如:updatecipherssetenc=enc+1whereenc>x。)实施重新加密。为了最小化该更新步骤的必要性,客户端可以在索引初始数据库之后保留比每个值所需的更大的域。例如,给定对于k-gramx的密文域为:encfhope(x)∈{a,a+1,a+2,a+3,a+4}。客户保留一定数量的b占位密文,这些密文不被用于加密实际的k-gram,而是添加用于以后的采样。也就是说,密文域{(a+4)+1,...,(a+4)+b}被添加到搜索索引,而下一个真实k-gramy的第一密文是(a+4)+b+1。由于fhope加密被应用于自然语言的k-gram,我们可以提取一些关于x(或x的前缀)的统计数据,例如,在k-gramx以频繁字母“e”开头的情况下,我们选择了比x以不频繁字母“q”开头的情况更大的密文间隙b。可替换地,始终可以为每个索引的文档集合创建单独的搜索索引。也就是说,第一文档集合m1在隐私保护索引st1,i1←enc(sk,m1)中被索引,并且第二文档集合在之后在另一隐私保护索引st2,i2←enc(sk,m2)中被索引。现在客户端需要分别查询所有不同的索引,但我们定义了不同索引的阈值t。如果达到t,则所有文档集合m1,...,mt被合并为:然后将该合并的文档集合重新索引到一个新状态以及索引st,i←enc(sk,m)。现在讨论提供可能增加的安全性的附加措施。尽管模块化保序加密(ope)已经被建议用于确定性的保序加密,但是相同的直觉能够被应用于频率隐藏保序加密。存在两种不同的方法。一个是字母表上的顺序信息利用模块化添加来移位,例如,以{o,...,z,a,...,n}开头的字母表{a,...,z}。另一种方法是建立索引之后的内部fhope范围利用(秘密)偏移量来移位。然后该模块化偏移量是秘密状态的一部分,并增加了分桶攻击的复杂性。两种方法在理论上都是可行的。然而,直接在字母表上的模块化移位的实际效果具有小的安全性效果,因为只存在与字母表的大小相差很多的移位。具有增加的安全性级别的替代方法通过我们从子字符串到范围查询的变换来启用子字符串查询是基于功能加密的(例如,保护隐私范围查询)。一方面,这样的构建使得不能进行分桶攻击,因为没有关于明文的顺序信息被泄露,而只有明文落入查询范围内的信息。另一方面,这种解决方案的集成开销增加,因为数据库内部需要修改,并且精心设计的索引技术不适用于这样的方案(没有额外的泄漏)。总之,实施例提出了用于外包加密的数据同时提供具有侧重于实际部署的子字符串搜索功能的新方法。我们的构建是基于k-gram索引的,其中每个k-gram使用静态频率隐藏保序加密方案来加密。我们为该方案提供了理论上的安全性定义,并评估了该保护隐私的外包技术的实际安全性。也就是说,我们利用对这种加密方案的强烈攻击来攻击我们的构建,并且基于攻击者关于索引明文和明文字母表的辅助知识来报告明文恢复率在1%到15%之间。与允许隐私保护子字符串搜索的先前方案相比,实施例易于被部署到现有数据库系统中。结合安然数据集的10,000个随机选择的索引电子邮件上的子字符串搜索时间98.3毫秒,我们提出了一个可以被部署为实际用例的方案。注意的是,根据实施例的安全子字符串搜索可以提供优于传统方法的某些益处。具体地,这种方法需要特制(crafted)的加密协议,以允许对加密数据执行查询。这反过来需要修改底层数据库,因为搜索功能已经被改变。这种数据库修改进一步减慢了实际的搜索计算,并且增加了复杂性以及增加了成本。为了尽量最小化这种计算的减速,传统方法可以借助于采用特殊的隐私保护搜索索引。这些使得所需的数据库修改变得更加复杂。相比之下,安全字符串搜索的实施例可以容易地被部署而没有暗示底层加密的数据库中的修改。而是,只要求在客户端侧进行查询的变换。某些实施例可以结合内存储器数据库来实施,其中内存储器数据库引擎执行安全子字符串搜索中的一个或多个。图16示出根据实施例的被配置为实施安全子字符串搜索的专用计算机器的硬件。具体地,计算机系统1601包括处理器1602,处理器1602与包括数据库1603的非暂时性计算机可读存储介质进行电子通信。该计算机可读存储介质上存储有与加密数据相对应的代码1605。代码1604对应于引擎。代码可以被配置为参考存储在非暂时性计算机可读存储介质的数据库中的数据,例如,可以存在于本地或远程数据库服务器中。软件服务器一起可以形成利用软件程序编程的计算机系统的集群或逻辑网络,该软件服务器彼此通信并一起工作以便处理请求。图17中示出示例计算机系统1700。计算机系统1710包括总线1705或用于通信信息的其他通信机制,以及与总线1705耦合的用于处理信息的处理器1701。例如,计算机系统1710还包括耦合到总线1705的用于存储要由处理器1701执行的包括用于执行上述技术的信息和指令的信息和指令的存储器1702。该存储器还可以被用于在执行将由处理器1701执行的指令期间存储变量或其他中间信息。该存储器的可能的实施可以是但不限于随机存取存储器(randomaccessmemory,ram)、只读存储器(readonlymemory,rom)或两者。还提供了用于存储信息和指令的存储设备1703。常见形式的存储设备包括例如硬盘驱动器、磁盘、光盘、cd-rom、dvd、闪速存储器、usb存储卡或计算机可以从中读取的任何其他介质。例如,存储设备1703可以包括用于执行上述技术的源代码、二进制代码或软件文件。存储设备和存储器都是计算机可读介质的示例。计算机系统1710可以经由总线1705耦合到用于向计算机用户显示信息的诸如阴极射线管(cathoderaytube,crt)或液晶显示器(liquidcrystaldisplay,lcd)的显示器1712。诸如键盘和/或鼠标的输入设备1711被耦合到总线1705,用于将信息和命令选择从用户通信到处理器1701。这些组件的组合允许用户与系统通信。在一些系统中,总线1705可以被划分成多个专用总线。计算机系统1710还包括与总线1705耦合的网络接口1704。网络接口1704可以提供计算机系统1710和本地网络1720之间的双向数据通信。例如,网络接口1704可以是数字订户线(digitalsubscriberline,dsl)或调制解调器,以通过电话线提供数据通信连接。网络接口的另一示例是局域网(localareanetwork,lan)卡,以提供到兼容lan的数据通信连接。无线链接是另一示例。在任何这样的实施方式中,网络接口1704发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。计算机系统1710可以通过网络接口1704跨本地网络1720、内部网或互联网1730传送和接收包括消息或其他接口动作的信息。对于本地网络,计算机系统1710可以与多个其他计算机机器(诸如,服务器1715)通信。因此,计算机系统1710和由服务器1715表示的服务器计算机系统可以形成云计算网络,其可以用本文描述的过程来编程。在互联网示例中,软件组件或服务可以驻留在网络上的多个不同计算机系统1710或服务器1731-1735上。例如,上述过程可以在一个或多个服务器上实施。服务器1731可以通过因特网1730、本地网络1720和网络接口1704从一个组件向计算机系统1710上的组件发送动作或消息。例如,上述软件组件和过程可以在任何计算机系统上实施,并在网络上传送和/或接收信息。以上描述说明了本发明的各种实施例以及如何实施本发明的各方面的示例。以上示例和实施例不应被视为是唯一的实施例,而是被提出以说明由所附权利要求限定的本发明的灵活性和优点。基于以上公开内容和所附权利要求,其他布置、实施例、实施方式和等同物对于本领域技术人员而言是显而易见的,并且可以在不脱离由权利要求限定的本发明的精神和范围的情况下使用。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1