一种云环境下高效的隐私保护密文查询方法与流程

文档序号:12039583阅读:203来源:国知局
一种云环境下高效的隐私保护密文查询方法与流程
本发明涉及一种隐私保护密文查询方法,尤其是涉及一种云环境下高效的隐私保护密文查询方法。

背景技术:
云环境下安全数据外包管理,即数据贡献者在本地可信前端对数据加密处理以后再外包给云服务提供商进行存储、管理和维护,当用户访问数据时,首先从云端获得所需要的密文数据,再在可信前端进行解密从而获得明文数据。虽然可信前端数据加解密可以有效保证用户数据安全和隐私保护,但是密文数据查询由于不再具有明文查询特性而成为了重要挑战。云环境下密文查询有以下两方面需求:一方面,面向云端海量数据特征和用户个性化查询需求,有必要提供支持多关键词的高效密文查询方法,充分表达用户查询兴趣,高效返回满足用户需求的所有结果,使用户能快速定位与查询相关的密文数据。另一方面,考虑到云服务的“pay-as-you-go”特性,为了减小用户的服务付费和云环境中的资源消耗,如网络传输开销和存储开销等,有必要在保证密文数据高效精确的查询的同时,尽可能减小密文索引的空间开销。总之,除了确保密文查询隐私保护(密文索引及查询过程的无隐私泄露)外,极有必要提高其时空高效性:数据发布时数据、索引等的低传输/存储代价,数据查询时请求转换的客户端低计算代价以及云端密文查询的低执行代价。因此,一种能支持多关键词查询且兼具强隐私保护特性和时空高效性的密文查询方法将对云环境下安全数据外包管理起到至关重要的作用。目前,研究者们针对加密数据查询方面做了大量工作。在密文检索隐私保护方面,Gloldreich等人提出了遗忘RAM模型,该模型可以保证检索加密数据过程的安全性,不过该方法由于其交互过程的高额开销而不适用于诸多现实场景。Song等人第一次提出基于对称密钥的单关键词可检索加密方法,Goh基于布隆过滤器对其效率进行改进。同时Curtmola等人在Song的基础上给出更严格的安全性定义和更高效的对称密钥可检索加密方法构造,SenyKamara等人也在此基础上进一步设计了支持数据更新的动态可检索对称密钥加密方法。然而,目前具有高效查询特性的方法仅支持单关键词查询,且其索引和查询效率方面仍有很大的提升空间。针对非对称加密场景,Boneh等人首次基于DH密钥交换协议提出关键词可检索的公钥加密方法(PKES),通过公钥加密和私钥查询在一定程度上为用户数据提供了隐私保护。尽管后来对该方法的改进构造不断有提出,然而此类方法由于引入双线性对等复杂数学计算以及查询时直接匹配每个数据索引,导致效率十分低下。此外,B.Lewko等人提出了支持与运算和或运算的多关键词密文检索方法,该方法的缺陷仍然是查询效率较低,不适用于现实场景。Cao等人在多关键词密文检索方面有做了进一步的研究,通过计算索引向量和查询向量的内积并使用安全knn技术中提出的内积相似度计算,提出了支持排序的多关键词密文检索方法。然而,现有方法普遍存在效率低下等问题,无法同时兼顾密文查询的隐私保护、时空高效以及多关键词查询等需求,故不适用于数据量大、用户交互频繁且有较高隐私保护需求的云环境。

技术实现要素:
本发明主要是解决现有技术所存在的技术问题;提供了一种通过构建保护用户隐私的高效密文桶索引,满足用户安全可靠查询需求的一种云环境下高效的隐私保护密文查询方法。本发明还有一目的是解决现有技术所存在的技术问题;提供了一种在保证查询隐私保护和查询结果准确性的同时,提高了查询过程中的时空效率的一种云环境下高效的隐私保护密文查询方法。本发明的上述技术问题主要是通过下述技术方案得以解决的:一种云环境下高效的隐私保护密文查询方法,其特征在于:包括以下步骤:步骤1,数据贡献者在客户端根据数据集构建基于桶的密文索引,然后加密数据集,最后向云端发布密文数据和基于桶的密文索引;步骤2,查询用户提交查询请求到云端,云端在基于桶的密文索引上执行查询,返回满足条件的查询结果给查询用户。本发明主要针对可信云环境,在保护用户数据隐私的前提下,确保查询结果的高准确性,提高密文查询时空效率。在上述一种云环境下高效的隐私保护密文查询方法,所述步骤1的包括以下子步骤:步骤1.1、数据贡献者U在客户端对数据集D中的每个文档进行分词,将每个文档分词得到的明文索引词集合进行并操作,得到所有文档对应的明文索引词集合W;步骤1.2、对得到的明文索引词集合W进行优化,即去掉所有索引词中重复的索引词;得到优化后的明文索引词集合W’,W’={w’i|i=1,2,……,n};w’i表示明文索引词集合中的第i个明文索引词;步骤1.3、数据贡献者用索引词加密密钥key1对所有的明文索引词进行AES单向加密,得到密文索引词集合EW,EW={ewi|i=1,2,……,n},其中明文索引词w’i和密文索引词ewi一一对应;步骤1.4、数据贡献者在客户端利用密文索引词集合构建基于桶的密文索引I,I={I[i],i=1,2,……,p},该密文索引是基于桶的数据结构,I[i]表示第i个桶;步骤1.5、数据贡献者用数据加密密钥key2对明文数据集进行AES加密,得到密文数据集D,D={di|i=1,2,……,m};步骤1.6、数据贡献者将本地构建的基于桶的密文索引I、密文数据集发布到云端,将索引词加密密钥key1和数据加密密钥key2安全共享给查询用户。在上述的一种云环境下高效的隐私保护密文查询方法,所述步骤2包括以下子步骤:步骤2.1、查询用户在客户端将查询请求进行分词,得到明文查询关键词集;步骤2.2、查询用户获取数据贡献者安全共享的索引词加密密钥key1,并利用key1和明文查询关键词集构建密文查询请求;步骤2.3、查询用户将密文密文查询请求提交到云端;步骤2.4、云端获取密文查询请求,并在基于桶的密文索引上执行查询;步骤2.5、云端返回密文查询结果到查询用户的客户端,查询用户的客户端获取数据贡献者安全共享的数据加密密钥key2对查询结果进行解密。在上述的一种云环境下高效的隐私保护密文查询方法,步骤1.4中根据密文索引词集合构建基于桶的密文索引I包括以下子步骤:步骤1.4.1、客户端获取密文索引词集合EW中密文索引词的个数n,然后获取数据贡献者的数据集D中所有文档的个数m;步骤1.4.2、构建n个长度为m的倒排文档向量,分别命名为Vector1、Vector2、……、Vectorn;其中每一个倒排文档向量Vectori(1≤i≤n)与W’中明文索引词w’i一一对应,也和EW中的密文关键词ewi一一对应;每一个倒排文档向量中的第i位对应于数据集中的第i个文档,且向量中的每一位初始值为0;步骤1.4.3、依次取出明文索引词集合w’1、w’2、……、w’n和对应密文索引词集合ew1、ew2、……、ewn,以及对应的倒排文档向量集Vector1、Vector2、……、Vectorn;步骤1.4.4、循环处理每个明文索引词w’i和密文索引词ewi对应的倒排文档向量Vectori,将Vectori中包含w’i的文档对应的向量位标记为1;步骤1.4.5、构建桶集合,通过密文索引词的个数n计算桶的初始个数p和对每一个密文索引词进行哈希运算的次数k,并确定k个具体的哈希函数hash1()、hash2()、……、hashk(),其中每个桶用于存一个长度为m的向量,每个向量的各个元素初始值均为0;步骤1.4.6、依次获取密文索引词集合中的密文索引词,对每一个密文索引词进行k次哈希运算,每次哈希运算映射到一个桶,将映射到该桶的所有密文索引词对应的倒排文档向量执行并操作,即对这些倒排文档向量执行按位或操作,得到该桶所存的最终向量,第i个桶所存的最终向量命名为Vi;步骤1.4.7、对文档di进行分词后得到的索引词个数用|di|表示,取△=max{|d1|,|d2|,……,|dm|},则对于文档di,还需要添加△-|di|个索引词,即可转化为如下需求:需要额外为文档di随机选取αi个桶,并将αi个桶中所存的最终向量的第i个位的值重置为1,其中αi=(△-|di|)*k;步骤1.4.8、对于只被一个密文索引词映射过的桶I[j],统计该桶所存的最终向量Vj中值为0的位的个数μ,从这μ个位中随机选取ε个位,并将这ε个位的值重置为1;假设最终向量Vj中第i个位被选中(该向量位对应文档di),则将该位的值重置为1后,对于文档di,还需要为其随机选取αi-1个桶,并将这些桶中所存最终向量的第i个位的值重置为1;步骤1.4.9、将只被一个密文索引词映射过的桶中的最终向量处理完毕后,最后依次处理各个文档,此时对于其中一个文档di,随机选取αi-β个桶,并将这些桶中所存最终向量的第i个位的值重置为1,其中β表示步骤1.4.8中第i个位被选中并重置为1的最终向量(或桶)的个数。在上述的一种云环境下高效的隐私保护密文查询方法,步骤2.2中查询用户根据明文查询关键词集构建密文查询请求包括以下子步骤:步骤2.2.1、查询用户利用索引词加密密钥key1,对明文查询关键词集中每一个关键词进行AES单向加密,得到密文关键词集;步骤2.2.2、查询用户获取每一个密文关键词,对其进行k次哈希运算,运算结果为k个位置游标,它将对应指向密文索引的k个桶;步骤2.2.3、查询用户对所有密文关键词哈希运算后得到的位置游标取并集并去重,得到一个位置游标序列;该位置游标序列即为最终的密文查询请求。在上述的一种云环境下高效的隐私保护密文查询方法,步骤2.4中云端根据密文查询请求在基于桶的密文索引上执行查询包括以下子步骤:步骤2.4.1、云端获取密文查询请求,即一个位置游标序列;步骤2.4.2、云端从密文查询请求中依次取出每一个位置游标,并从密文索引中取出该位置游标所映射的桶中所存的向量,最终得到一个向量集合;步骤2.4.3、对于单关键词查询,将向量集合中所有向量进行交运算,即对这些向量执行按位与操作,得到的向量即为该单关键词查询请求的结果向量;步骤2.4.4、对于多关键词查询,则分为多关键词的与逻辑查询和或逻辑查询两类:对于与逻辑查询,将向量集合中所有向量进行交运算,即对这些向量执行按位与操作,得到的向量即为该多关键词与逻辑查询请求的结果向量;对于或逻辑查询,将向量集合中所有向量进行加运算,即对这些向量执行按位加操作,得到的向量即为该多关键词或逻辑查询请求的结果向量;步骤2.4.4、对于单关键词查询请求和多关键词与逻辑查询请求,云端获取结果向量中值为1的向量位对应的文档,并将这些密文文档集作为查询结果返回给查询用户客户端;对于多关键词或逻辑查询请求,获取结果向量中值大于等于k的位对应的文档,将这些密文文档集按照结果向量中对应位的值由大到小的顺序进行排序后返回给查询用户客户端。因此,本发明具有如下优点:1.通过构建保护用户隐私的高效密文桶索引,满足了用户安全可靠的查询需求;2.在保证查询隐私保护和查询结果准确性的同时,大大提高了密文索引及查询过程的时空效率。附图说明图1是本发明的方法流程示意图。图2是本发明的步骤中所涉及的密文索引词对应向量的生成图。图3是本发明的步骤中所涉及的数据发布者本地构建基于桶的密文索引的流程图。图4是本发明的步骤中所涉及的查询用户输入单关键词进行密文检索或输入多关键词进行与逻辑密文检索的流程图。图5是本发明的步骤中所涉及的查询用户输入多关键词进行或逻辑密文检索的流程图。具体实施方式下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。实施例:下面结合附图和实施例,对本发明所述的技术方案做进一步的阐述。步骤一,数据贡献者在客户端根据数据集构建基于桶的密文索引,然后加密数据集,最后向云端发布密文数据和密文索引:具体步骤如下:1)数据贡献者U在客户端对数据集D中的每个文档进行分词,将每个文档分词得到的明文索引词集合进行并操作,得到所有文档对应的明文索引词集合W;2)对得到的明文索引词集合进行优化,即去掉所有索引词中重复的索引词,得到优化后的明文索引词集合W,W={wi|i=1,2,……,n};3)数据贡献者用索引词加密密钥key1对所有的明文索引词进行单向加密,得到密文索引词集合EW,EW={ewi|i=1,2,……,n},其中明文索引词wi和密文索引词ewi一一对应;4)数据贡献者在客户端利用密文索引词集合EW构建基于桶的密文索引I,I={I[i],i=1,2,……,p},该密文索引是基于桶的数据结构,I[i]表示第i个桶;5)数据贡献者用数据加密密钥key2对明文数据集进行加密,得到密文数据集D,D={di|i=1,2,……,m};6)数据贡献者将本地构建的基于桶的密文索引I、密文数据集D发布到云端,并将索引词加密密钥key1和数据加密密钥key2安全共享给查询用户。上述步骤4)中客户端利用密文索引词集合EW构建基于桶的密文索引I的具体步骤如下:(1)客户端获取密文索引词集合EW中密文索引词的个数n,然后获取数据贡献者的数据集D中所有文档的个数m;(2)构建n个长度为m的倒排文档向量,分别命名为Vector1、Vector2、……;其中每一个倒排文档向量Vectori(1≤i≤n)与W’中明文索引词w’i一一对应,也和EW中的密文索引词ewi一一对应;每一个倒排文档向量中的第i位对应于数据集中的第i个文档,比如Vector1[i]和第i个文档di相对应,每个向量中各个位的初始值为0;(3)依次取出明文索引词集合w’1、w’2、……、w’n和对应密文索引词集合ew1、ew2、……、ewn,以及对应的倒排文档向量集Vector1、Vector2、……、Vectorn。例如ew1和Vector1对应,ew2和Vector2对应;(4)循环处理每个明文索引词w’i和密文索引词ewi对应的倒排文档向量Vectori,将Vectori中包含ewi(或w’i)的文档对应的向量位标记为1。例如数据贡献者有包含6个文档的密文数据集,密文索引词ew1在第二个文档d2、第五个文档d5和第六个文档d6中出现,则将ew1对应的向量Vector1中第2位、第5位和第6位的值置为1,即Vector1[2]=1,Vector1[5]=1,Vector1[6]=1;密文索引词ew2在第一个文档d1、第二个文档d2和第四个文档d4中出现,则将ew2对应的向量Vector2中第1位、第2位和第4位的值置为1,即Vector2[1]=1,Vector2[2]=1,Vector2[4]=1;密文索引词ew3在第二个文档d2和第三个文档d3中出现,则将ew3对应的向量Vector3中第2位和第3位的值置为1,即Vector3[2]=1,Vector3[3]=1。(5)构建桶集合Bucket,并通过密文索引词的个数n计算桶的初始个数p和对每一个密文索引词进行哈希运算的次数k,并确定k个具体的哈希函数hash1()、hash2()、……、hashk(),其中每个桶用于存一个长度为m的向量,将第i个桶所存向量记为Vi,每个向量的各个元素初始值均为0;(6)依次获取密文索引词集合中的密文索引词ew1、ew2、……,对每一个密文索引词分别用hash1()、hash2()、……、hashk()进行k次哈希运算,每次哈希运算映射到一个桶,这样,每个密文索引词经过k次哈希运算后会映射到k个桶中。当密文索引词经过一次哈希运算映射到的桶中所存向量为初始向量0时,将该密文索引词对应的向量作为这个桶所存的向量值;当密文索引词经过一次hash运算映射到的桶中所存向量不为初始向量0时,将映射到该桶的密文索引词对应的向量和桶中所存向量执行并操作,即对两个向量执行按位或操作,得到该桶此时对应的向量。令第i个桶所存的最终向量命名为Vi。例如,当k=3时,每个密文索引词会进行3次哈希运算,以ew1、ew2、ew3为例:对于ew1,有hash1(ew1)=1,hash2(ew1)=4,hash3(ew1)=7,则第1个桶、第4个桶和第7个桶所存向量就更新为Vector1,即V1=Vector1,V4=Vector1,V7=Vector1,经过计算可得V1={0,1,0,0,1,1},V4={0,1,0,0,1,1},V7={0,1,0,0,1,1};对于ew2,有hash1(ew2)=2,hash2(ew2)=4,hash3(ew2)=7,第2个桶所存向量就更新为Vector2,第4个桶所存向量更新为Vector1∪Vector2,第7个桶所存向量更新为Vector1∪Vector2,即V2=Vector2,V4=Vector1∪Vector2,V7=Vector1∪Vector2,经过计算可得V2={1,1,0,1,0,0},V4={1,1,0,1,1,1},V7={1,1,0,1,1,1};对于ew3,有hash1(ew3)=5,hash2(ew3)=6,hash3(ew3)=7,则第5个桶所存向量就更新为Vector3,第6个桶所存向量更新为Vector3,第7个桶所存向量更新为Vector1∪Vector2∪Vector3,即V5=Vector3,V6=Vector3,V7=Vector1∪Vector2∪Vector3,经过计算可得V5={0,1,1,0,0,0},V6={0,1,1,0,0,0},V7={1,1,1,1,1,1}。(7)对文档di进行分词后得到的索引词个数用|di|表示,取△=max{|d1|,|d2|,……,|dm|},则对于文档di,还需要添加△-|di|个索引词,即即可转化为如下需求:需要额外为文档di随机选取αi个桶,并将αi个桶中所存的最终向量第i个位的值置为1,其中αi=(△-|di|)*k;(8)对于只被一个密文索引词映射过的桶I[j],为了在增强索引安全性的同时保证查询精确性,根据映射到桶I[j]的密文索引词,找到该密文索引词映射到的k个桶,将除了桶I[j]外的其他k-1个桶中所存的最终向量的各个位进行排查,对于其中任何一位,若只有桶I[j]所存的最终向量Vj中此位的值为0,则不能将桶I[j]此位的值重置为1,否则,该桶所存的最终向量Vj中此位的值可以由0置为1,最后统计桶I[j]所存的最终向量Vj中值为0且可以置为1的位的个数μ,从这μ个位中随机选取ε个位的值重置为1。假设最终向量Vj中第i个位被选中(该向量位对应文档di),则将该位的值重置为1后,对于文档di,还需要为其随机选取αi-1个桶,并将这些桶中所存最终向量的第i个位的值重置为1。(9)将只被一个密文索引词映射过的桶中的最终向量处理完毕后,最后依次处理各个文档,此时对于其中一个文档di,随机选取αi-β个桶,对于其中的一个桶I[j],若该桶中所存的最终向量的第i个位为1,则不作任何处理。若该桶中所存的最终向量的第i个位为0,则找到映射到桶I[j]的各个密文索引词,对于任一个密文索引词,找到该密文索引词映射到的k个桶,若这k个桶中只有桶I[j]所存的最终向量Vj第i个位的值为0,则不能将最终向量Vj第i个位的值重置为1,否则,将该桶所存最终向量Vj第i个位的值由0重置为1,按照此处理流程处理完为文档di随机选取的αi-β个桶,其中β表示步骤(8)中第i个位被置1的最终向量的个数,若只被一个密文索引词映射过的桶的总数为γ,则β的取值范围为0≤β≤γ;步骤二,查询用户提交查询请求到云端,云端在基于桶的密文索引上执行查询,返回满足条件的查询结果给查询用户:具体步骤如下:1)查询用户在客户端将查询请求进行分词,得到明文查询关键词集;2)查询用户获取数据贡献者安全共享的索引词加密密钥key1,并利用key1和明文查询关键词集构建密文查询请求;3)查询用户将密文查询请求提交到云端;4)云端获取密文查询请求,并在基于桶的密文索引上执行查询;5)云端返回密文查询结果到查询用户的客户端,查询用户的客户端获取数据贡献者安全共享的数据加密密钥key2对查询结果进行解密。上述步骤2)中查询用户根据明文查询关键词集构建密文查询请求的具体步骤如下:(1)查询用户利用索引词加密密钥key1,对明文查询关键词集中每一个关键词进行AES单向加密,得到密文查询关键词集KW,KW={kwi|i=1,2,……};例如查询用户输入的查询关键词经加密后得到步骤一例子中的ew2和ew3作为密文查询关键词,即kw1=ew2,kw2=ew3;(2)对于每一个密文查询关键词kwi,进行k次哈希运算,运算结果为k个位置游标,它将对应指向密文索引的k个桶;例如对于kw1,根据步骤一中例子,有hash1(kw1)=2,hash2(kw1)=4,hash3(kw1)=7,即kw1经过三次哈希运算后得到的位置游标为{2,4,7},将分别指向密文索引的第2个桶、第4个桶和第7个桶;对于kw2,根据步骤一中例子,有hash1(kw2)=5,hash2(kw2)=6,hash3(kw2)=7,即kw2经过三次哈希运算后得到的位置游标为{5,6,7},将分别指向密文索引的第5个桶、第6个桶和第7个桶;(3)查询用户对所有密文查询关键词哈希运算后得到的位置游标取并集并去重,得到一个位置游标序列,该位置游标序列即为最终的密文查询请求;例如上述只包含kw1、kw2密文查询关键词的查询请求,取kw1、kw2对应的位置游标的并集所得到的位置游标序列为{2,4,5,6,7},即最终的密文查询请求为{2,4,5,6,7};上述步骤4)中云端根据密文查询请求在基于桶的密文索引上执行查询的具体步骤如下:(1)云端获取密文查询请求,即一个位置游标序列;(2)云端从密文查询请求中依次取出每一个位置游标,并从密文索引中取出该位置游标所映射的桶中所存的向量,最终得到一个向量集合;(3)对于单关键词查询,将向量集合中所有向量进行交运算,即对这些向量执行按位与操作,得到的向量即为该单关键词查询请求的结果向量Vector’;例如,根据步骤一中例子,只包含密文关键词kw1=ew1的密文查询请求为{2,4,7},则对应的结果向量为Vector’=V2∩V4∩V7,计算可得Vector’恰好等于ew1的倒排文档向量Vector2;只包含密文关键词kw2=ew2的密文查询请求为{5,6,7},则对应的结果向量为Vector’=V5∩V6∩V7,计算可得Vector’恰好等于ew2的倒排文档向量Vector3;(4)对于多关键词与逻辑查询,将向量集合中所有向量进行交运算,即对这些向量执行按位与操作,得到的向量即为该多关键词与逻辑查询请求的结果向量;根据步骤一中例子,包含两个密文关键词kw1=ew1、kw2=ew2的与逻辑密文查询请求为{2,4,5,6,7},则其对应的结果向量为Vector’=V2∩V4∩V5∩V6∩V7={0,1,0,0,0,0}=Vector2∩Vector3;(5)对于上述单关键词查询请求和多关键词与逻辑查询请求,云端获取结果向量中值为1的向量位对应的文档,将这些密文文档集作为查询结果返回给查询用户客户端;本例中包含密文关键词kw1=ew1、kw2=ew2的与逻辑密文查询请求对应的最终结果向量中只有第二位值为1,且向量第二位对应第二个文档,故将第二个文档d2作为查询结果返回给用户客户端,表示用户查询的两个关键词只在第二个文档中均出现。(6)对于多关键词或逻辑查询,将向量集合中所有向量进行加运算,即对这些向量执行按位加操作,得到的向量即为该多关键词与逻辑查询请求的结果向量;根据步骤一中例子,包含两个密文关键词kw1=ew1、kw2=ew2的或逻辑密文查询请求为{2,4,5,6,7},则其对应的结果向量为Vector’=V2+V4+V5+V6+V7={3,5,3,3,2,2}=Vector2+Vector3;(7)对于上述多关键词或逻辑查询请求,云端获取结果向量中值大于等于k的位对应的文档,将这些密文文档集按照结果向量中对应位的值由大到小的顺序进行排序后返回给查询用户客户端,本例中包含密文关键词kw1=ew1、kw2=ew2的或逻辑密文查询请求对应的最终结果向量第一、三、四位均为3,第二位为5,其余位为2且小于k=3,则按照文档d2、d1、d3、d4的顺序将查询结果返回给用户客户端,表示各个文档中至少出现了一个用户查询的关键词,且文档d2中包含的关键词个数最多。本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1