一种基于安全索引的可验证多关键词密文查询方法及系统
文献发布时间:2023-06-19 10:06:57
技术领域
本发明属于信息安全领域,具体涉及一种基于安全索引的可验证多关键词密文查询方法及系统,能够用于在云存储背景下多个查询用户对云服务器接收的数据密文进行基于语义的多关键词排序查询以及查询结果的正确性验证。
背景技术
随着云存储技术的发展,越来越多的用户将繁重的数据存储和管理工作外包至“诚实但好奇”的云服务器。为了保证用户数据在存储和检索过程中不被泄露,一般情况下用户需要在外包数据前对数据进行加密,然而传统的加密技术隐藏了明文的所有特征,致使基于明文的传统搜索机制无法实现密文搜索。可搜索加密技术的提出解决了数据机密性和可检索性之间的矛盾。根据使用的密码体制不同,现有的可搜索加密技术可分为:对称可搜索加密和非对称可搜索加密。但是这些技术在电子文档检索应用中存在相应的问题。
吉林省外国企业服务有限公司在其申请的专利文献“一种面向云计算的多关键字可排序密文检索方法”(专利申请号201711247475.0,公开号CN105871543A)中公开了一种基于改进的k近邻查询算法的多关键词排序密文检索方法。该方法中数据拥有者首先为每组逆关键词集文档向量集构建相应的B+索引树,并利用基于改进的k近邻查询算法进行加密;然后查询用户利用同样的密钥加密查询向量,得到查询陷门;最后云服务器计算每个文档和查询陷门的相关度得分,返回相关度得分最高的前k个文档。该方法存在的不足之处是:被授权的查询用户拥有完整的密钥,如果泄露给未授权的用户,会威胁外包数据的隐私安全。
西安电子科技大学在其申请的专利文献“多数据拥有者背景下基于属性的多关键字密文检索方法”(专利申请号201610188151.3,公开号CN105871543A)中公开了一种基于双线性对实现多关键词密文检索方法。该方法中数据拥有者首先结合可搜索加密技术与基于密文属性的加密策略,为外包密文建立关键字集索引;然后查询用户根据查询关键字集、私钥以及属性集生成陷门;最后云服务器对陷门和索引进行匹配,并返回满足匹配条件的文档密文集。数据用户利用陷门实现对密文的多关键字查询,该方法存在的不足之处是:基于非对称可搜索加密实现多关键词检索,计算开销大,查询效率低。
南京邮电大学在其申请的专利文献“一种面向云计算的可验证单关键词Top-k检索方法”(专利申请号201710225029.3,公开号CN107194282A)中公开了一种验证单关键词查询结果正确性的方法。该方法中数据拥有者首先采用Hash消息认证编码机制,为所有文档与关键词的相关度得分的偏序关系构造验证码信息;然后检索时云服务器返回与查询关键词最相关的k个文档以及相应的验证码信息;最后查询用户根据获得的检索结果重构验证码。该方法存在的不足之处是:只支持单关键词搜索,查询结果中包含许多查询用户不感兴趣的文档,浪费了带宽和计算资源;只有拥有密钥的查询用户才能验证查询结果的正确性,增加了查询用户的计算负担。
发明内容
本发明的目的在于针对上述现有技术中多关键词密文检索过程可搜索密钥可能泄露、查询效率不高以及查询结果正确性验证操作只能由拥有密钥的查询用户执行的问题,提供一种基于安全索引的可验证多关键词密文查询方法及系统,基于对称可搜索加密在不泄露可搜索密钥的情况下实现基于语义的多关键词排序查询和查询结果的正确性验证。
为了实现上述目的,本发明有如下的技术方案:
一种基于安全索引的可验证多关键词密文查询方法,包括以下步骤:
-数据拥有者为电子文档集构建一棵索引树;
-利用可搜索密钥对索引树进行加密,利用默克哈希认证方法对加密的索引树进行认证;
-数据拥有者和查询用户在不泄露可搜索密钥的情况下合作生成查询请求的陷门;
-对加密及认证后的索引树进行查询,将查询结果和相应辅助验证信息返回给查询用户;
-验证查询结果正确性。
索引树构建具体包括以下步骤:
(1a)利用tf-idf和向量空间模型,从外包电子文档集中提取关键词组成字典,为每个电子文档生成一个n维的随机向量,将字典中第ι个关键词在每个电子文档中的tf-idf值赋给相应随机向量中的第ι个元素,得到每个电子文档的初始数据向量,其中,ι=1,2,…,N,N表示字典的大小,N=n;
(1b)将所有初始数据向量作为叶子节点,构建一棵平衡二叉树,作为索引树,选取每一个非叶子节点的所有孩子节点中的初始数据向量每一维的最大值,构成一个新的初始数据向量,存储到相应的非叶子节点中。
利用可搜索密钥对索引树进行加密具体包括以下步骤:
-设置可搜索密钥和文档加密密钥:
(2a)随机生成两个n+1维的实数向量r=(r
(2b)将对称加密算法的对称密钥作为文档加密密钥;所述对称加密算法是指:高级加密算法、数据加密标准算法和国际数据加密算法中的任意一个算法;
-对索引树进行加密:
(3a)将索引树中存储的每个初始数据向量p
(3b)利用数据向量分裂方法,将每个目标数据向量分裂成两个随机向量,作为相应节点的两个子向量;
(3c)对可搜索密钥中两个可逆矩阵
(3d)利用文档加密密钥对每个外包电子文档加密,将密文存储到相应的叶子节点中。
步骤(3b)中所述数据向量分裂方法的步骤如下:
3b1,生成维数均与目标数据向量维数相同的两个随机向量,将目标数据向量中的第2n+1、2n+2个元素值赋给两个随机向量中的第2n+1、2n+2个元素;
3b2,从比特向量b=(b
3b3,判断所选的元素值是否为0,若是,则执行第3b4步,否则,执行第3b5步;
3b4,将目标数据向量中的第2ι-1个元素值赋给第一个随机向量和第二个随机向量中的第2ι-1个元素;
3b5,在实数域上随机选取一个实数,赋给第一个随机向量中的第2ι-1个元素,用目标数据向量中的第2ι-1个元素值减去该随机数,将差值赋给第二个随机向量中的第2ι-1个元素;
3b6,在实数域上随机选取一个实数,赋给第一个随机向量中的第2ι个元素,用目标数据向量中的第2ι个元素值减去该随机数,将差值赋给第二个随机向量中的第2ι个元素。
对加密的索引树进行认证,具体包括以下步骤:
(4a)利用默克哈希认证方法,计算索引树中每个节点的摘要,存储在相应的节点中;
(4b)利用数字签名算法,计算索引树根节点中摘要的签名,公开所得的根签名;所述数字签名算法是指:RSA算法、DSA算法、ECDSA算法中的任意一个算法。
步骤(4a)中所述默克哈希认证方法的步骤如下:
4a1,选取索引树中的任意一个未被处理的节点;
4a2,判断所选节点是否为叶子节点,若是,则执行第4a3步,否则,执行第4a4步;
4a3,将所选节点的两个加密子向量分别作为两个字符串,用连接运算符连接所选节点中的密文和这两个字符串,利用安全散列函数,将由连接符连接所得的字符串映射成一个长度固定的随机字符串,作为所选节点的摘要;所述安全散列函数是指:SHA-224、SHA-256,SHA-512中的任意一个算法;
4a4,将所选节点的两个加密子向量分别作为两个字符串,用连接符连接这两个字符串以及所选节点的所有孩子节点中的摘要,利用安全散列函数,将由连接符连接所得的字符串映射成一个长度固定的随机字符串,作为所选节点的摘要;所述安全散列函数是指:SHA-224、SHA-256,SHA-512中的任意一个算法。
生成查询请求的陷门具体包括以下步骤:
(5a)利用查询请求向量化方法,将查询请求W′={w
查询请求向量化方法的步骤如下:
5a1,生成一个n维的随机向量;
5a2,从查询请求W′={w
5a3,判断所选的查询关键词是否在字典中,若是,执行第5a4步,否则,执行第5a5步;
5a4,将常数1赋给随机向量中与所选查询关键词对应的元素;
5a5,将常数0赋给随机向量中与所选查询关键词对应的元素;
(5b)查询用户随机选取一个n维的实数向量作为混淆向量,将初始查询向量与混淆向量相加,得到安全查询向量,发送给数据拥有者;
(5c)数据拥有者利用查询向量分裂方法,将安全查询向量分裂成两个随机向量,作为安全查询向量的两个子向量;
查询向量分裂方法的步骤如下:
5c1,生成维数均与安全查询向量维数相同的两个随机向量;
5c2,从比特向量b=(b
5c3,判断所选的元素值是否为0,若是,执行第5c4步,否则,执行第5c5步;
5c4,在实数域上随机选取一个实数,赋给第一个随机向量对应位置上的元素,用安全查询向量中与所选元素对应的元素值减去该随机数,将差值赋给第二个随机向量中与所选元素对应的元素;
5c5,将安全查询向量中与所选元素对应的元素值赋给第一个随机向量和第二个随机向量中与所选元素对应的元素;
(5d)数据拥有者利用陷门辅助信息生成公式,为安全查询向量的两个子向量生成两个2n+2维的辅助向量
所述陷门辅助信息生成公式如下:
其中,
(5e)查询用户对陷门生成辅助信息集中的第一辅助矩阵
(5f)查询用户向云服务器提交查询请求的陷门。
对加密及认证后的索引树进行查询,具体包括以下步骤:
(6a)将索引树的根节点作为当前检索访问节点,利用深度优先搜索方法,选出k个密文,作为查询结果,其中,k表示所需查询结果的数量,且5≤k≤50;
所述深度优先搜索方法的步骤如下:
6a1,设置一个空列表,作为查询结果列表;
6a2,判断当前检索访问节点是否为非叶子节点,若是,则执行第6a3步,否则,执行第6a6步;
6a3,判断查询结果列表中的元组数量是否等于所需查询结果的数量,若是,则执行第6a4步,否则,执行第6a5步;
6a4,选取查询结果列表中最小的得分,判断当前检索访问节点的得分是否大于最小得分,若是,则执行第6a5步,否则,执行第6a10步;
6a5,将当前检索访问节点的每个孩子节点中的两个加密子向量,分别与查询请求的陷门中的两个向量相乘,两次乘积结果相加后得到相应孩子节点的得分,将得分最大的孩子节点作为新的检索访问节点,执行第6a2步;
6a6,判断查询结果列表中的元组数量是否等于所需查询结果的数量,若是,则执行第6a7步,否则,执行第6a9步;
6a7,选取查询结果列表中最小的得分,判断当前检索访问的节点的得分是否大于最小得分,若是,则执行第6a8步,否则,执行第6a10步;
6a8,删除最小得分对应的元组,将当前检索访问节点中的密文和对应的得分作为元组,存储到查询结果列表中,执行第6a10步;
6a9,将当前检索访问节点中的两个加密子向量分别与查询请求的陷门中的两个向量相乘,两次乘积结果相加后得到当前检索访问节点的得分,将当前检索访问节点中的密文和对应的得分作为元组存储到查询结果列表中,执行第6a10步;
6a10,返回上一个检索访问节点,判断当前检索访问节点是否有未被访问的孩子节点,若是,则执行第6a11步,否则,执行第6a12步;
6a11,将当前检索访问节点中未被访问的孩子节点作为新的检索访问节点,执行第6a2步;
6a12,判断当前检索访问节点是否为根节点,若是,则执行第6a13步,否则,执行第6a10步;
6a13,结束检索;
(6b)选取查询结果所在的k个叶子节点到根节点路径上每个节点中的两个加密子向量以及相应兄弟节点中的摘要,作为辅助验证信息返回给查询用户。
验证查询结果正确性具体包括以下步骤:
(7a)利用查询结果和辅助验证信息重新计算根节点的摘要;
(7b)利用数字签名的公钥对公开的根签名进行解密,得到真正的根摘要;
(7c)比较新生成的根节点的摘要与真正的根摘要,若相同,则执行步骤(7d),否则执行步骤(7e);
(7d)利用文档加密密钥解密查询结果;
(7e)丢弃收到的查询结果。
本发明还提出一种基于安全索引的可验证多关键词密文查询系统,包括:
索引树构建模块,用于为电子文档集构建一棵索引树;
索引树加密模块,用于利用可搜索密钥对索引树进行加密;
索引树认证模块,用于利用默克哈希认证方法对加密的索引树进行认证;
陷门生成模块,用于在不泄露可搜索密钥的情况下生成查询请求的陷门;
查询模块,用于对加密及认证后的索引树进行查询,获取查询结果和相应辅助验证信息;
查询结果验证模块,用于验证查询结果正确性。
相较于现有技术,本发明至少具有以下有益效果:由于本发明通过数据拥有者和查询用户一轮通信的方式生成了查询请求的陷门,克服了现有的基于对称可搜索加密的技术中被授权的查询用户知晓完整的可搜索密钥,可能将密钥泄露给未授权的查询用户,以及现有的基于非对称可搜索加密的技术中计算开销大的问题,使得本发明基于对称可搜索加密在不泄露可搜索密钥的情况下实现了多关键词排序查询。此外,由于本发明利用默克哈希认证方法对索引树进行认证,利用返回的辅助验证信息验证查询结果的正确性,克服了现有技术中“诚实但好奇的”云服务器可能返回错误的查询结果、查询结果正确性验证操作只能由拥有密钥的查询用户执行的问题,使得本发明实现了查询结果正确性的公共验证,保证了查询结果没有被篡改或伪造,而且有利于减轻查询用户的计算和存储负担。
附图说明
图1本发明基于安全索引的可验证多关键词密文查询方法流程图;
图2加密且认证后的索引树的一个示例图。
具体实施方式
下面结合附图及实施例对本发明做进一步的详细说明。
参见图1,本发明基于安全索引的可验证多关键词密文查询方法,包括以下步骤:
步骤1,构建索引树。
利用tf-idf和向量空间模型,从外包电子文档集
将所有初始数据向量作为叶子节点,构建一棵平衡二叉树,作为索引树,选取每一个非叶子节点的所有孩子节点中的初始数据向量每一维的最大值,构成一个新的初始数据向量,存储到相应的非叶子节点中。
本发明的实施例中,非叶子节点的左、右孩子节点中的初始数据向量分别为p
步骤2,设置可搜索密钥和文档加密密钥。
随机生成两个n+1维的实数向量r=(r
将对称加密算法的对称密钥作为文档加密密钥;对称加密算法是指:高级加密算法、数据加密标准算法和国际数据加密算法中的任意一个算法。
步骤3,对索引树进行加密。
将索引树的每个节点中的初始数据向量p
利用数据向量分裂方法,将每个目标数据向量
数据向量分裂方法的步骤如下:
第1步,生成维数均与目标数据向量维数相同的两个随机向量,将目标数据向量中的第2n+1、2n+2个元素值赋给两个随机向量中的第2n+1、2n+2个元素;
第2步,从可搜索密钥中的比特向量中选取一个任意未选过的第ι个元素值,其中,ι的取值范围为{1,2,…,n};
第3步,判断所选的元素值是否为0,若是,则执行第4步,否则,执行第5步;
第4步,将目标数据向量中的第2ι-1个元素值赋给第一个随机向量和第二个随机向量中的第2ι-1个元素;
第5步,随机选取一个实数,赋给第一个随机向量中的第2ι-1个元素,用目标数据向量中的第2ι-1个元素值减去该随机数,将差值赋给第二个随机向量中的第2ι-1个元素;
第6步,随机选取一个实数,赋给第一个随机向量中的第2ι个元素,用目标数据向量中的第2ι个元素值减去该随机数,将差值赋给第二个随机向量中的第2ι个元素。
本发明的实施例中,第i个节点中的两个随机向量
其中,
对可搜索密钥中两个可逆矩阵
利用文档加密密钥对每个外包电子文档加密,将密文存储到相应的叶子节点中。
步骤4,对索引树进行认证。
利用默克哈希认证方法,计算索引树中每个节点的摘要,存储在相应的节点中。
默克哈希认证方法的步骤如下:
第1步,选取索引树中的任意一个未被处理的节点;
第2步,判断所选节点是否为叶子节点,若是,则执行第3步,否则,执行第4步;
第3步,将所选节点的两个加密子向量分别作为两个字符串,用连接运算符连接所选节点中的密文和这两个字符串,利用安全散列函数,将由连接符连接所得的字符串映射成一个长度固定的随机字符串,作为所选节点的摘要;所述安全散列函数是指:SHA-224、SHA-256,SHA-512中的任意一个算法;
第4步,将所选节点的两个加密子向量分别作为两个字符串,用连接符连接这两个字符串以及所选节点的所有孩子节点中的摘要,利用安全散列函数,将由连接符连接所得的字符串映射成一个长度固定的随机字符串,作为所选节点的摘要;所述安全散列函数是指:SHA-224、SHA-256,SHA-512中的任意一个算法。
利用数字签名算法,计算索引树根节点中摘要的签名Sig,公开所得的根签名Sig;所述数字签名算法是指:RSA算法、DSA算法、ECDSA算法中的任意一个算法。
步骤5,生成查询请求的陷门。
利用查询请求向量化方法,将查询请求W′={w
查询请求向量化方法的步骤如下:
第1步,生成一个n维的随机向量;
第2步,从查询请求W′={w
第3步,判断所选的查询关键词是否在字典中,若是,则执行第4步,否则,执行第5步;
第4步,将常数1赋给随机向量中与所选查询关键词对应的元素;
第5步,将常数0赋给随机向量中与所选查询关键词对应的元素。
查询用户随机选取一个n维的实数向量作为混淆向量t=(t
数据拥有者利用查询向量分裂方法,将安全查询向量
查询向量分裂方法的步骤如下:
第1步,生成维数均与安全查询向量维数相同的两个随机向量;
第2步,从比特向量b=(b
第3步,判断所选的元素值是否为0,若是,则执行第4步,否则,执行第5步;
第4步,在实数域上随机选取一个实数,赋给第一个随机向量对应位置上的元素,用安全查询向量中与所选元素对应的元素值减去该随机数,将差值赋给第二个随机向量中与所选元素对应的元素;
第5步,将安全查询向量中与所选元素对应的元素值赋给第一个随机向量和第二个随机向量中与所选元素对应的元素。
本发明的实施例中,安全查询向量中的两个随机向量
其中,
利用陷门辅助信息生成公式,数据拥有者为安全查询向量的两个子向量生成两个2n+2维的辅助向量
陷门辅助信息生成公式如下:
其中,
查询用户对陷门生成辅助信息集中的第一辅助矩阵
步骤6,查询密文。
将索引树的根节点作为当前检索访问节点,利用深度优先搜索方法,选出k个密文,作为查询结果,其中,k表示返回的查询结果的数量,且5≤k≤50。
深度优先搜索方法的步骤如下:
第1步,设置一个空列表,作为查询结果列表;
第2步,判断当前检索访问节点是否为非叶子节点,若是,则执行第3步,否则,执行第6步;
第3步,判断查询结果列表中的元组数量是否等于所需返回的查询结果的数量,若是,则执行第4步,否则,执行第5步;
第4步,选取查询结果列表中最小的得分,判断当前检索访问节点的得分是否大于最小得分,若是,则执行第5步,否则,执行第10步;
第5步,将当前检索访问节点的每个孩子节点中的两个加密子向量分别与查询请求的陷门中的两个向量相乘,两次乘积结果相加后得到相应孩子节点的得分,将得分最大的孩子节点作为新的检索访问节点,执行第2步;
第6步,判断查询结果列表中的元组数量是否等于所需返回的查询结果的数量,若是,则执行第7步,否则,执行第9步;
第7步,选取查询结果列表中最小的得分,判断当前检索访问的节点的得分是否大于最小得分,若是,则执行第8步,否则,执行第10步;
第8步,删除最小得分对应的元组,将当前检索访问节点中的密文和对应的得分作为元组存储到查询结果列表中,执行第10步;
第9步,将当前检索访问节点中的两个加密子向量分别与查询请求的陷门中的两个向量相乘,两次乘积结果相加后得到当前检索访问节点的得分,将当前检索访问节点中的密文和对应的得分作为元组存储到查询结果列表中,执行第10步;
第10步,返回上一个检索访问节点,判断当前检索访问节点是否有未被访问的孩子节点,若是,则执行第11步,否则,执行第12步;
第11步,将当前检索访问节点中未被访问的孩子节点作为新的检索访问节点,执行第2步;
第12步,判断当前检索访问节点是否为根节点,若是,则执行第13步,否则,执行第10步;
第13步,结束查询。
选取查询结果所在的k个叶子节点到根节点路径上每个节点中的两个加密子向量以及相应兄弟节点中的摘要,作为辅助验证信息返回给查询用户。
本发明的实施例中,设由5个外包电子文档{f
步骤7,验证查询结果的正确性。
利用查询结果和辅助验证信息重新计算根节点的摘要。
本发明的实施例中,根据对图2索引树检索返回的查询结果R={c
其中,||表示连接符,H(·)表示安全散列函数。
利用数字签名的公钥对公开的根签名进行解密,得到真正的根摘要。
比较新生成的根节点的摘要与真正的根摘要,若相同,则利用文档加密密钥解密查询结果,否则,丢弃收到的查询结果。
本发明通过数据拥有者和查询用户一轮通信的方式生成查询请求的陷门,在不泄露可搜索密钥的情况下实现了多关键词排序查询。本发明利用默克哈希认证方法对索引树进行认证,实现了查询结果正确性的公共验证,有利于减轻查询用户的计算和存储负担。
以上所述的仅仅是本发明的较佳实施例,并不用以对本发明的技术方案进行任何限制,本领域技术人员应当理解的是,在不脱离本发明精神和原则的前提下,该技术方案还可以进行若干简单的修改和替换,这些修改和替换也均会落入权利要求书涵盖的保护范围之内。
- 一种基于安全索引的可验证多关键词密文查询方法及系统
- 一种用于密文数据的前后向安全和可验证的布尔查询方法