多源数据查询系统及方法转让专利

申请号 : CN202110398248.8

文献号 : CN112804050B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘琴宁渝筑

申请人 : 湖南大学

摘要 :

本发明提供一种多源数据查询系统及方法,系统包括:可信服务节点,生成n个随机数,向每个数据所有者节点发送1个随机数ssj,及将随机数之和发送给查询节点;数据所有者节点,接收ssj,每个数据记录用一个字符串Ij表示,使用伪随机函数的组合对Ij加密生成加密索引字符串Mj以及通过RSA私钥将ssj和混淆后的加密索引字符串M'j共同加密生成签名发送给服务器;查询节点,用于生成查询令牌发送给服务器;服务器,用于根据查询令牌以及Mj查找查询结果;查询节点,用于对数据完整性,查询结果正确性进行验证。本发明提出了一个安全、可验证、有效的多源数据的范围查询。

权利要求 :

1.一种多源数据查询系统,其特征在于,包括n个数据所有者节点、可信服务节点、服务器以及查询节点;其中:

所述可信服务节点,用于通过伪随机函数生成n个随机数,并向每个数据所有者节点发送1个随机数,以及将n个随机数之和SS发送给查询节点;

所述数据所有者节点,用于接收由可信服务节点发送的随机数,对数据记录进行加密生成加密数据Enc(mj),通过前缀集合的方法和编码的字典,将每个数据记录用一个字符串Ij来表示,使用伪随机函数的组合加密处理生成自身的加密索引字符串Mj以及基于所述可信服务节点分配的随机数、混淆后的加密索引字符串M'j、使用RSA私钥生成签名sigj,并将加密数据Enc(mj)、加密索引字符串Mj、签名sigj发送给服务器;

所述查询节点,用于向服务器发起查询请求,并根据所述查询请求中的检索范围生成查询令牌,将所述查询令牌发送给服务器;

所述服务器,用于根据所述查询令牌以及各个数据所有者节点发送的加密索引字符串Mj查找符合条件的查询结果,并将所述查询结果以及验证对象返回给所述查询节点;所述查询结果包括位于所述查询范围内的数据所有者节点的加密数据Enc(mj),加密的索引字符串Mj以及签名sigj;

所述查询节点,用于根据所述n个随机数之和SS,数据解密的密钥ke,混淆算法的密钥skc,RSA公钥pkr,累加器构造的公钥pka以及所验证对象对数据的完整性,查询结果的正确性、完整性进行验证。

2.根据权利要求1所述的多源数据查询系统,其特征在于,对于数据所有者节点mj,其具体用于:

对数据记录进行加密,生成加密数据Enc(mj);

利用前缀集合的思想,将所述数据记录的数值转换为一个前缀编码Ci的集合;

对于每个前缀编码Ci,根据编码字典找到每个前缀编码Ci对应的i,通过伪随机置换函数计算其在横坐标上对应的位置Ps(i),以生成所述数据所有者节点的索引字符串Ij;其中,s是伪随机置换函数Ps(.)的密钥;对于数据所有者节点mj,当mj包含前缀编码Ci时,设置 Ij[Ps(i)] 为1,否则设置为0;

根据i可以计算出:ri = F(r i),然后对每个数据所有者节点mj,通过公式Mj[ i ] = Ij[ i ] xor Gri ( j ),将Ij打乱得到一串新的比特,作为每个数据所有者节点mj的加密索引字符串Mj,其中Fr(.)、Gri(.)为伪随机映射函数;

通过混淆算法混淆加密索引字符串Mj得到混淆后的加密索引字符串M'j,并使用混淆后的加密索引字符串M'j来获取数据所有者节点mj的哈希累积;

ssj

根据可信服务节点分配的随机数ssj,生成自身的秘密共享g ;

ssj

通过RSA私钥对秘密共享g 和混淆后的索引字符串 M'j两部分共同进行加密,计算出ssj

自身的签名sigj,g 为mj的签名累积值与混淆后的加密索引字符串M'j的累积值之间的差值;

将所述加密数据Enc(mj)、加密索引字符串Mj、签名sigj发送至服务器。

3.根据权利要求1所述的多源数据查询系统,其特征在于,在查询阶段,所述查询节点具体用于:

获取查询请求中的查询范围,将所述查询范围转换为一组前缀编码的集合,Cq表示集合中的一个编码;

计算p = P(s q),fp = F(r p),将p与fp作为查询令牌发送给服务器,其中,Ps为密钥为s的伪随机置换函数,q表示所述查询范围前缀编码集合中编码Cq对应的索引。

4.根据权利要求3所述的多源数据查询系统,其特征在于,所述服务器具体用于:根据查询节点发送的查询令牌p,fp计算:Ij[p] = Mj[p] xor Gfp (j)(j∈{1,2,3……n}),n表示数据所有者节点的个数;

其中,若Ij[p] = 1 则满足查询,获取查询结果对应的加密数据Enc(mj)、加密索引字符串Mj以及签名sigj,Gfp为伪随机映射函数;

计算验证对象VO,所述验证对象VO包括:非查询结果R'的签名聚合AG(R');非查询结果R'由不满足查询的所有记录组成;

非查询结果R'的累积值dA(R');

所有数据S的累积值dA(S);S表示在服务器中集成的所有的数据记录;

查询列的加密索引字符串Mj;

将查询结果以及验证对象VO一并发送给查询节点。

5.根据权利要求3所述的多源数据查询系统,其特征在于,在验证查询结果的正确性时,所述查询节点具体用于:

对满足查询条件的数据所有者节点mj,通过mj的签名sigj判断mj是否来自对应的数据所有者节点;所述查询节点根据与数据所有者节点共享的混淆算法的私钥选择用来验证查询结果的正确性的等式;

其中,未添加模糊位的mj使用等式一,添加模糊位的mj使用等式二,判断等式:ssj  s^[ Hj (.)] e等式一:g * g  = (sigj )  mod zssj  s^[ Hj(.)+ hk(*) ] e等式二:g * g  = (sigj )  mod z是否成立,若成立,则判断数据是mj上传到服务器的数据;其中,Hj (.)为mj的哈希累积,hk(*)为混淆算法中增加的模糊位的哈希值,pkr =(z,e)为RSA的公钥。

6.根据权利要求3所述的多源数据查询系统,其特征在于,在验证数据记录的完整性时,所述查询节点具体用于:

SS 

将所有数据所有者节点的签名聚合解密得到总的秘密g 和所有数据所有者节点的混淆后的哈希累积;

根据下述等式判断数据记录是否完整:等式成立则说明数据记录完整,并且可以证明服务器返回的dA(S)是正确的,否则数据记录不完整,其中,所有签名的聚合AG(S)是不能被篡改的,混淆后的累积值和为混淆的累s^t*hk(*)

积值之间的差值为g ,由所述查询节点通过共享的混淆算法密钥可得。

7.根据权利要求3所述的多源数据查询系统,其特征在于,在验证查询结果的完整性时,所述查询节点具体用于:

根据服务器返回的查询列的加密索引字符串Mj,恢复查询列的索引字符串Ij;

执行对加密索引字符串Mj的验证;

执行对查询列的索引字符串Ij的验证;

根据加密索引字符串Mj的验证结果以及索引字符串Ij的验证结果判断查询结果的完整性。

8.根据权利要求1至7任意一项所述的多源数据查询系统,其特征在于,所述包括数据t

加解密的密钥ke,伪随机函数密钥s、r,且s,r∈{0,1} ,t为输入的安全参数,混淆算法的密钥skc,RSA私钥skr,公钥pkr,累加器构造的私钥ska和公钥pka。

9.一种多源数据查询方法,其特征在于,包括:可信服务节点通过伪随机函数生成n个随机数,并向每个数据所有者节点发送1个随机数,以及将n个随机数之和发送给查询节点;

所述数据所有者节点接收由可信服务节点发送的随机数,对数据记录进行加密生成加密数据Enc(mj),通过前缀集合的方法和编码的字典,将每个数据记录用一个字符串来表示,使用伪随机函数的组合加密处理生成自身的加密索引字符串Mj以及基于所述随机数和混淆后的加密索引字符串M'j,使用RSA私钥生成签名sigj,并将加密数据Enc(mj)、加密索引字符串Mj、签名sigj发送给服务器;

所述查询节点向服务器发起查询请求,并根据所述查询请求中的检索范围生成查询令牌,将所述查询令牌发送给服务器;

所述服务器根据所述查询令牌以及加密索引字符串Mj查找符合条件的查询结果,并将所述查询结果以及验证对象返回给所述查询节点;所述查询结果包括位于所述查询范围内的数据所有者节点的加密数据Enc(mj),加密的索引字符串Mj以及签名sigj;

所述查询节点根据所述n个随机数之和SS,数据解密的密钥ke,混淆算法的密钥skc,RSA公钥pkr,累加器构造的公钥pka以及验证对象对数据的完整性,查询结果的正确性、完整性进行验证。

说明书 :

多源数据查询系统及方法

技术领域

[0001] 本发明涉及计算机技术领域,具体而言,涉及一种多源数据查询系统及方法。

背景技术

[0002] 随着物联网的最新进展,智能设备的剧增,多源数据的在线集成服务正在受到更多的关注,它通常由一个云服务器支持来自多个设备源的数据进行聚合并为授权用户提供
统一的查询服务。然而云服务器并不完全可信,它会由于内部或外部的攻击,恶意地泄漏、
篡改和伪造数据和查询结果,使数据集成和查询的安全性、可靠性得不到保证。因此,如何
结合数据加密技术和可验证查询技术来保护数据的隐私安全,同时对集成数据和查询结果
进行真实性和完整性的验证,是多源数据在线集成服务应用的主要挑战。
[0003] 由于数据是来自多个数据所有者的,一个数据所有者提供的可验证查询服务中常用的数据签名链,签名树等验证技术不适用于多源数据。文献“Qian Chen, Haibo Hu, and 
Jianliang Xu. “Authenticated Online Data Integration Services.” ACM SIGMOD, 
2015.”利用秘密共享和RSA加密技术,设计了一种基于RSA的同态签名,提供对集成的多源
数据真实性和完整性的验证方法,然而,这个方法没有关注数据的隐私安全,数据隐私泄漏
是阻碍云技术进一步应用的关键障碍。为了保障数据隐私,每个数据所有者都需要将加密
上传,如何解决来自多个源的加密数据的集成和查询服务的提供是一个非常棘手的问题。

发明内容

[0004] 有鉴于此,本发明的目的在于提出一种多源数据查询系统及方法,以改善上述问题。
[0005] 本发明采用了如下方案:
[0006] 一种多源数据查询系统,其包括n个数据所有者节点、可信服务节点、服务器以及查询节点;其中:
[0007] 所述可信服务节点,用于通过伪随机函数生成n个随机数ssj,并向每个数据所有者节点发送1个随机数,以及将n个随机数之和SS发送给查询节点;
[0008] 所述数据所有者节点,用于接收由可信服务节发送的随机数,对数据记录进行加密生成加密数据Enc(mj),通过前缀集合的方法和编码的字典,每个数据记录可以用一个字
符串来表示,使用伪随机函数的组合加密处理生成自身的加密索引字符串Mj以及基于所述
可信服务节点分配的随机数ssj和混淆后的加密索引字符串M'j,使用RSA私钥生成签名
sigj,并将加密数据Enc(mj)、加密索引字符串Mj、签名sigj发送给服务器;
[0009] 所述查询节点,用于向服务器发起查询请求,并根据所述查询请求中的检索范围生成查询令牌,将所述查询令牌发送给服务器;
[0010] 所述服务器,用于根据所述查询令牌以及各个数据所有者节点发送的加密索引字符串Mj查找符合条件的查询结果,并将所述查询结果以及验证对象返回给所述查询节点;
所述查询结果包括位于所述查询范围内的数据所有者节点的加密数据Enc(mj),加密的索
引字符串Mj以及签名sigj;
[0011] 所述查询节点,用于根据所述n个随机数之和SS,数据解密的密钥ke,混淆算法的密钥skc,RSA公钥pkr,累加器构造的公钥pka以及所验证对象对数据的完整性,查询结果的
正确性、完整性进行验证。
[0012] 优选地,对于数据所有者节点mj,其具体用于:
[0013] 对数据记录进行加密,生成加密数据Enc(mj);
[0014] 利用前缀集合的思想,将所述数据记录的每个数值转换为一个前缀编码Ci的集合;
[0015] 对于每个编码Ci,根据编码字典找到每个编码Ci对应的i,通过伪随机置换计算其在横坐标上对应的位置Ps(i),以生成所述数据所有者节点的索引字符串Ij;其中,s是伪随
机置换函数Ps(.)的密钥;对于数据所有者节点mj,当mj包含编码Ci时,设置 Ij[Ps(i)] 为1,
否则设置为0;
[0016] 根据i可以计算出:ri=F(r i),然后对每个数据所有者节点mj,通过公式Mj[ i ] = Ij[ i ] xor Gri ( j ),将Ij打乱得到一串新的比特,作为每个数据所有者节点mj的加密索
引字符串Mj,其中Fr(.)、Gri(.)为伪随机映射函数;
[0017] 通过混淆算法混淆加密索引字符串Mj得到混淆后的加密索引字符串M'j,并使用混淆后的加密索引字符串M'j来获取数据所有者节点mj的哈希累积;
[0018] 根据可信服务节点分配的随机数ssj,生成自身的秘密共享gssj;
[0019] 通过RSA密钥对秘密共享gssj和混淆后的 M'j 两部分共同进行加密,计算出自身ssj
的签名sigj。g 为mj的签名累积值与混淆后的加密索引M'j的累积值之间的差值;
[0020] 将所述加密数据Enc(mj)、加密索引字符串Mj、签名sigj发送至服务器。
[0021] 优选地,在查询阶段,所述查询节点具体用于:
[0022] 获取查询请求中的查询范围,将所述查询范围转换为一组前缀编码的集合,Cq表示集合中的一个编码;
[0023] 计算p = P(s q),fp = F(r p),将p与fp作为查询令牌发送给服务器,其中,Ps为密钥为s的伪随机置换函数,q表示所述查询范围前缀编码集合中编码Cq对应的索引。
[0024] 优选地,所述服务器具体用于:
[0025] 根据查询节点发送的查询令牌p,fp计算:
[0026] Ij[p] = Mj[p] xor Gfp (j) (j∈{1,2,3……n}),n表示数据所有者节点的个数;
[0027] 其中,若Ij[p] = 1 则满足查询,获取查询结果对应的加密数据Enc(mj)、加密索引字符串Mj以及签名sigj,Gfp为伪随机映射函数;
[0028] 计算验证对象VO,所述验证对象VO包括:
[0029] 非查询结果R'的签名聚合AG(R');非结果集R'由不满足查询的所有记录组成;
[0030] 非查询结果R'的累积值dA(R');
[0031] 所有数据S的累积值dA(S);S表示在服务器中集成的所有的数据记录;
[0032] 查询列的加密索引Mj;
[0033] 将查询结果以及验证对象VO一并发送给查询节点。
[0034] 优选地,在验证查询结果的正确性时,所述查询节点具体用于:
[0035] 对满足查询条件的数据所有者节点mj,通过mj的签名sigj判断mj是否来自对应的数据所有者节点;所述查询节点根据与数据所有者节点共享的混淆算法的私钥选择用来验
证查询结果的正确性的等式。
[0036] 其中,未添加模糊位的mj使用等式一,添加模糊位的mj使用等式二,判断等式:
[0037] 等式一:gssj * gs^[ Hj (.)] = (sigj ) e mod z
[0038] 等式二:gssj * gs^[ Hj (.)+ hk(*) ] = (sigj ) e mod z
[0039] 是否成立,若成立,则判断数据是mj上传到服务器的数据;其中,Hj (.)为mj的哈希累积,hk(*)为混淆算法中增加的模糊位的哈希值,pk =(z,e)为RSA的公钥。
[0040] 优选地,在验证数据记录的完整性时,所述查询节点具体用于:
[0041] 将所有数据所有者节点的签名聚合解密得到总的秘密gSS和所有数据所有者节点的混淆后的哈希累积;
[0042] 根据下述等式判断数据记录是否完整:
[0043]
[0044]
[0045] 等式成立则说明数据记录完整,并且可以证明服务器返回的dA(S)是正确的,否则数据记录不完整,其中,所有签名的聚合AG(S)是不能被篡改的,混淆后的累积值和为混淆
s^t*hk(*)
的累积值之间的差值为g ,由所述查询节点通过共享的混淆算法密钥可得。
[0046] 优选地,在验证查询结果的完整性时,所述查询节点具体用于:
[0047] 根据服务器返回的查询列的加密索引字符串Mj,恢复查询列的索引字符串Ij;
[0048] 执行对加密索引字符串Mj的验证;
[0049] 执行对查询列的索引字符串Ij的验证;
[0050] 根据加密索引字符串Mj的验证结果以及索引字符串Ij的验证结果判断查询结果的完整性。
[0051] 优选地,所述密钥涉及包括数据加解密的密钥ke,伪随机函数密钥s、r,且s,r∈t
{0,1} ,t为输入的安全参数,混淆算法的密钥skc,RSA私钥skr, 公钥pkr,累加器构造的私
钥ska和公钥pka。
[0052] 本发明实施例还提供了一种多源数据查询方法,其包括:
[0053] 可信服务节点通过伪随机函数生成n个随机数,并向每个数据所有者节点发送1个随机数,以及将n个随机数之和发送给查询节点;
[0054] 所述数据所有者节点接收由可信服务节发送的随机数,对数据记录进行加密生成加密数据Enc(mj),通过前缀集合的方法和编码的字典,每个数据记录可以用一个字符串来
表示,使用伪随机函数的组合加密处理生成自身的加密索引字符串Mj以及基于所述随机
数、加密索引字符串Mj、RSA密钥生成签名sigj,并将加密数据Enc(mj)、加密索引字符串Mj、
签名sigj发送给服务器;
[0055] 所述查询节点向服务器发起查询请求,并根据所述查询请求中的检索范围生成查询令牌,将所述查询令牌发送给服务器;
[0056] 所述服务器根据所述查询令牌以及加密索引字符串Mj查找符合条件的查询结果,并将所述查询结果以及验证对象返回给所述查询节点;所述查询结果包括位于所述查询范
围内的数据所有者节点的加密数据Enc(mj),加密的索引字符串Mj以及签名sigj;
[0057] 所述查询节点根据所述包括n个随机数之和SS,数据解密的密钥ke,混淆算法的密钥skc,RSA公钥pkr,累加器构造的公钥pka以及所验证对象对数据的完整性,查询结果的正
确性、完整性进行验证。
[0058] 综上所述,本实施例与现有技术相比,至少具有以下有益效果:
[0059] (1)本实施例提出了一个安全、可验证、有效的框架,以支持加密的多源数据的范围查询;
[0060] (2) 本实施例为多源数据设计了加密索引和可计算的签名发送给云服务器,以便提供在线集成服务,包括加密数据的在线集成和可验证查询。
[0061] (3) 本实施例根据存储在服务器的加密索引和签名计算,设计了有效的验证方案来保障多源加密数据在线集成服务的可靠性,包括保证集成数据的完整性,查询结果的正
确性和完整性。

附图说明

[0062] 为了更清楚地说明本发明实施方式的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作
是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根
据这些附图获得其他相关的附图。
[0063] 图1是本发明第一实施例的多源数据查询系统的示意图。
[0064] 图2是根据数据编码集合生成索引字符串的坐标图。
[0065] 图3是查询节点对查询结果进行验证的流程示意图。

具体实施方式

[0066] 为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实
施方式是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领
域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明
保护的范围。因此,以下对在附图中提供的本发明的实施方式的详细描述并非旨在限制要
求保护的本发明的范围,而是仅仅表示本发明的选定实施方式。基于本发明中的实施方式,
本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本
发明保护的范围。
[0067] 请参阅图1,本发明第一实施例提供了一种多源数据查询系统,其包括n个数据所有者节点10、可信服务节点20、服务器30以及查询节点40;其中:
[0068] 所述可信服务节点20,用于通过伪随机函数生成n个随机数,并向每个数据所有者节点发送1个随机数,以及将n个随机数之和发送给查询节点。
[0069] 在本实施例中,例如可先通过伪随机函数(如随机函数AES‑256)产生n个随机数分别发送给n个数据所有者节点10,并将产生的n个随机数之和SS发送给查询节点40。
[0070] 在本实施例中,假设所述可信服务节点20为n个数据所有者节点生成n个随机数ssj,则n个随机数之和(即总的秘密) 。
[0071] 所述数据所有者节点10,用于接收由可信服务节20发送的随机数,对数据记录进行加密生成加密数据Enc(mj),通过前缀编码以及加密处理生成自身的加密索引字符串Mj以
及基于所述可信服务节点20分配的随机数还和混淆后的加密索引字符串Mj,使用RSA密钥
生成签名sigj,并将加密数据Enc(mj)、加密索引字符串Mj、签名sigj发送给服务器。
[0072] 在本实施例中,对于每个数据所有者节点10,其在接收到分配的随机数ssj后,将执行如下操作:
[0073] (1)、对需要上传的数据记录进行加密,生成加密数据Enc(mj)。
[0074] (2)、利用前缀集合的思想,将数据记录的每个数值转换为一个前缀编码Ci的集合。
[0075] 本实施例利用前缀集合的思想,将一个数值转换为一个前缀编码 Ci的集合,例如:m1:1转换为PFC1= {(001) 、(00*)、(0**)、(***)}。
[0076] (3)、对于每个编码Ci,通过伪随机置换计算其在横坐标上对应的位置Ps(i),以生成所述数据所有者节点的索引字符串Ij;其中,s是伪随机置换函数Ps(.)的密钥;对于数据
所有者节点mj,当mj包含编码Ci时,设置 Ij[Ps(i)] 为1,否则设置为0。
[0077] (4)、根据每个编码Ci对应的i,计算出:ri= F(r i),然后对每个数据所有者mj,通过公式Mj[ i ] = Ij[ i ] xor Gri ( j ),将Ij打乱得到一串新的比特,作为每个数据所有者
节点的加密索引字符串Mj,其中Fr(.)、Gri(.)为伪随机映射函数,如可选取为HMAC。
[0078] 其中,对于每个编码Ci,本实施例的思想是,对于每一个数据所有者节点的编码集合,都用一个固定长度的0‑1 bit的数组来表示它。具体操作是通过伪随机函数为每个编码
Ci计算其在横坐标上对应的位置Ps(i),Ps(.)是一个伪随机置换函数。对于每个数据所有者
mj,1≦j≦n ,Ij是数据所有者的索引字符串,当mj包含编码Ci时,设置 Ij[Ps(i)] 为1,否则
设置为0。由此可以为每个数据所有者节点的数据记录都计算出一个索引字符串Ij,因为编
码Ci和其在横坐标上的位置是一一对应的,恶意的服务器如果多次查询可以进行选择明文
攻击,所以不能直接将索引字符串Ij发送给服务器,而是根据每个编码Ci对应的i,计算出:
ri = F(r i),然后对每个数据所有者节点mj,通过公式Mj[i] = Ij[ i ] xor Gri( j ) ,即
通过异或将Ij打乱得到一串新的比特,作为每个数据所有者节点的加密索引字符串Mj,其中
Fr(.)、Gri(.)为伪随机映射函数。
[0079] (5)、通过混淆算法混淆加密索引字符串Mj得到混淆后的加密索引字符串M'j,并使用混淆后的加密索引字符串M'j来获取其哈希累积。
[0080] (6)、根据自身分配的随机数ssj,生成自身的秘密共享gssj;
[0081] (7)、通过RSA密钥对秘密共享gssj和混淆后的加密索引字符串 M'j 两部分共同进ssj
行加密,计算出自身的签名sigj,g 为mj的签名累积值与Mj的累积值之间的差值。
[0082] 在本实施例中,要保证不可信的服务器30诚实地聚合来自多个数据所有者节点10的数据,即需要对集成后的数据完整性进行验证。单个数据源的场景通常由数据所有者节
点10为整个数据集设计数字签名链或签名树发送给服务器30,针对多个数据源的场景,每
个数据所有者节点都需要计算自己的签名发送给服务器30,则需要发送多个签名,为了减
少签名验证的开销,本实施例通过基于RSA的同态签名开发了一个针对多源加密数据的可
ssj
以聚合计算和验证的签名Sigj。签名由两部分组成:1)以g 形式的秘密共享和2)混淆后的
加密索引字符串M'j的哈希累积H'(.)。
[0083] 1)秘密共享的思想是,由一个可信机构为n个数据所有者mj生成n个随机数ssj作为ssj
其秘密共享,总的秘密  ,秘密共享以g  的形式给出,以保护秘密共享的明
文,,将秘密共享封装加密作为数据所有者签名的一部分,也就是说,只有每一个数据所有
者的数据都没有丢失,被篡改或造假,通过所有数据的签名才能正确地恢复整个数据集的
秘密SS。
[0084] 2)、哈希累积H'(.): 事实上,在本实施例中,不能直接使用加密索引字符串Mj来ssj
获取哈希累积,因为这将导致秘密共享g 泄露到服务器30。因此本实施例进一步提出一个
混淆算法去混淆加密索引字符串Mj,并使用混淆后的加密索引字符串M'j来获取其哈希累
积。
[0085] 具体来说,本实施例通过随机选择算法选择一些数据所有者节点10,然后为这些数据所有者节点10的加密索引字符串Mj增加模糊位,即加入一个查询范围以外的哈希值作
ssj
为噪声,得到混淆后的 M'j,可以避免服务器30得到g 后恶意构造假的验证对象VO,同时
ssj
不会影响查询的结果。每个数据所有者节点10利用RSA密钥(如RSA‑2048)对秘密共享g 和
混淆后的 M'j两部分共同进行加密,计算出自己的签名sigj,该签名具有乘法同态性。
[0086] 将所述加密数据Enc(mj)、加密索引字符串Mj、签名sigj发送至服务器30。
[0087] 为便于理解,下面将一具体例子来说明本实施例生成加密索引字符串Mj、签名sigj的过程(这里假设有四个数据所有者节点m1,m2,m3,m4):
[0088] 请一并参阅图2,横向坐标表示每个数据所有者节点的索引字符串Ij:例如:I1 = 1 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0
[0089] 根据加密索引算法得到每个数据所有者的Mj:
[0090] 例如:M1 = 1 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0
[0091] 根据混淆算法选择了m2、m4进行混淆,得到混淆后的加密索引M'j:
[0092] m1: M'1 =1001100010010000 m2:M'2= 0100010000011001
[0093] m3:M'3 = 0001010100001000 m4:M'4 = 0010000010001001
[0094] 通过混淆后的加密索引字符串M'j计算数据所有者节点的签名:
[0095] 所述查询节点40,用于向服务器30发起查询请求,并根据所述查询请求中的检索范围生成查询令牌,将所述查询令牌发送给服务器。
[0096] 在本实施例中,用户可访问服务器30来提出一个查询请求来检索一个范围, 对于一个确切的检索范围,查询节点40将它转换为一组前缀编码的集合PFCq,首先根据其包含
的编码 Cq找到编码所对应的索引q,例如:检索范围Query = [2,3],PFCq = {(01*)},找到
对应的索引q为0111;
[0097] 然后计算p = P(s q),fp = F(r p),将p与fp发送给服务器30,作为查询令牌。
[0098] 所述服务器30,用于根据所述查询令牌以及加密索引字符串Mj查找符合条件的查询结果,并将所述查询结果以及验证对象返回给所述查询节点;所述查询结果包括位于所
述查询范围内的数据所有者节点的加密数据Enc(mj),加密的索引字符串Mj以及签名sigj。
[0099] 在本实施例中,服务器30根据用户给的p,fp计算:
[0100] Ij[p] = Mj[p] xor Gfp (j) (j∈{1,2,3……n}),n表示数据所有者节点的个数;
[0101] 若Ij[p] = 1 则满足查询,如I2,I3满足查询,则将查询结果R:{m2、m3}相关的信息Enc(m2)、sig2、Enc(m3)、sig3返回给用户,其余的mj均为非查询结果。
[0102] 在本实施例中,所述服务器还需要计算验证对象VO并返回给查询节点40,所述验证对象VO包括:
[0103] 非查询结果R'的签名聚合:AG(R'),其中,非结果集R'由不满足查询的所有记录m1、m4组成;
[0104] 非查询结果R'的累积值:;
[0105] 所有数据S的累积值:;S表示在服务器30中集成的所有的数据记录;
[0106] 查询列Mj[0111]的加密索引值为:1 0 1 0
[0107] 其中,Mj[.]的位置上为1,返回其签名的聚合:
[0108] AG(1 .)=AG(m1) * AG(m3)、π1;
[0109] Mj[.]的位置上为0,返回其签名的聚合:
[0110] AG(0 .)= AG(m2) * AG(m4)、π0。
[0111] 所述查询节点40,用于根据所述n个随机数之和SS、RSA公钥、累加器构造的公钥以及所验证对象对数据完整性,查询结果的正确性、完整性进行验证。
[0112] 如图3所示,其中,查询结果的正确性验证是用于验证满足条件的查询结果是来自数据所有者节点,而不是服务器30伪造的。
[0113] 例如:用户收到满足查询的m2的数据记录,可以通过数据所有者节点m2的签名sig2来判断该数据记录是否来自m2 ,m2是被混淆过的,所以用上面提到的等式二来判断:
[0114] gss2 * gs^[ H2(.)+hk(1111)] = (sig2 ) e mod z
[0115] 其中,ss2为数据所有者节点m2从可信节点20处接收的随机数,H(2 .)为数据所有者节点m2的哈希累积。只有由数据所有者节点m2发送的数据记录才可以生成签名sig2,上述等
式成立则可以确保这个数据记录是数据所有者节点m2上传到服务器30的数据,同理满足查
询的m3的数据记录也可以验证,若验证通过,则进行下一步验证,若验证不通过,则说明服
务器30返回了错误的查询结果,不予接受。
[0116] 数据的完整性验证,用于验证数据所有者节点发送到服务器30中的数据记录没有被增删或者篡改。
[0117] 在验证时,将所有数据所有者节点的签名聚合解密应该得到总的秘密gSS 和所有数据所有者节点m1、m2、m3、m4混淆后的哈希累积值,判断下面等式是否成立:
[0118]
[0119]
[0120] 只有通过所有由数据所有者节点10发送的数据记录才能计算出所有数据的签名聚合,若等式成立,可以验证数据所有者节点10发送到服务器30中的数据没有被服务器恶
意增删和篡改,并且服务器返回的dA(S)是正确的,进行下一步验证,若等式不成立,则说明
服务器没有诚实地聚合来自多个数据所有者节点的数据,不予接受。
[0121] 查询结果完整性的验证,用于验证查询结果的完整性。
[0122] 具体地,本实施例要根据服务器30返回的查询列的加密索引字符串Mj[.],恢复查询列的索引字符串Ij,所以先执行对加密索引字符串Mj[.]的验证,再执行对查询列的索引
字符串Ij的验证。
[0123] m1:M1 = 1 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0
[0124] m2:M2 = 0 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0
[0125] m3:M3 = 0 0 0 1 0 1 0 1 0 0 0 0 1 0 0 0
[0126] m4:M4 = 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0
[0127] VO:对于查询列为Mj[0111],其加密索引值Ij为:1 0 1 0
[0128] 验证M2、4[ 0111 ]位置上为0→若M2、4[ 0111 ]位置上为0,则M2、4与元素[0111]不相交,服务器30可以通过M2、4的累积值和[0111]的累积值,计算出不相交的证明信息π0,验
证M2、4[ 0111 ]位置上为0,即验证M2、4与元素[0111]不相交:
[0129] 服务器计算30:
[0130]
[0131] 用户可以通过签名的聚合计算得到M2、4的累积值d(A M2、4):
[0132]
[0133] 通过 :e( dA(x1),dB(x2) )=e(π,g)判断等式是否成立:
[0134]
[0135] 等式成立则说明M2、4与元素[0111]不相交,M2、4[ 0111 ]位置上为0,其中t*hk(1111)是Mj与M'j累积值之间的差值,m2、4哈希值的累积为:
[0136]
[0137] 2、验证M1、3 [ 0 1 1 1 ]位置上为1→若M1、3[0 1 1 1 ]位置上为1,则M1、3与元素
[0111]相交,对于M1、3来说,去掉M1、3 [ 0111 ]这两个位置上的“1” 之后,剩余的部分应该刚好与元素[ 0111 ]不相交,可以通过剩余元素M1、3的累积值和[0111]的累积值计算出不
相交的证明信息π1,验证M1、3[ 0111 ]位置上为1,即验证M1、3与元素[0111]不相交:
[0138] 服务器30计算:
[0139]
[0140] 用户可以通过签名的聚合计算得到M1、3的累积值:
[0141]
[0142] 对于M1、3来说,去掉M1、3 [ 0111 ]这两个位置上的“1” 之后,剩余的部分的累积值:
[0143]
[0144] 通过:e(dA(x1),dB(x2)) = e(π,g)判断等式是否成立:
[0145]
[0146] 等式成立则说明去掉M1、3[0111]位置上的“1”之后,得到的M1、3刚好与元素[0111]不相交,证明M1、3[0111]位置上确实为1。其中m1、3的哈希累积为:
[0147]
[0148] 恢复查询列的Ij[.],验证查询结果是否完整:
[0149] 例如:Query:[2,3] →P(s 01*)=0111
[0150] Mj(0111) xor Gfp(j) =Ij(0111)
[0151] m1:1 xor Gfp(1)=1 →0
[0152] m2:0 xor Gfp(2)=1 →1
[0153] m3:1 xor Gfp(3)=0 →1
[0154] m4:0 xor Gfp(4)=0 →0
[0155] 若只有I2[0111]与I3[0111]的位置上为1,其余位置上都为0,则可以验证真正满足查询的只有m2、m3,服务器30了正确且完整的查询结果。
[0156] 若服务器故意遗漏m2,查询节点40可以通过返回正确的Mj(7)=1010,计算Gf(2) = 1,恢复出Ij(7)为1,可以知道m2是满足查询的,可以验证出服务器30遗漏了正确结果,不予
接受。
[0157] 综上所述,本实施例与现有技术相比,至少具有以下有益效果:
[0158] (1)本实施例提出了一个安全、可验证、有效的框架,以支持加密的多源数据的范围查询;
[0159] (2) 本实施例为多源数据设计了加密索引和可计算的签名发送给云服务器,以便提供在线集成服务,包括加密数据的在线集成和可验证查询。
[0160] (3) 本实施例根据存储在服务器的加密索引和签名计算,设计了有效的验证方案来保障多源加密数据在线集成服务的可靠性,包括保证集成数据的完整性,查询结果的正
确性和完整性。
[0161] 为便于对本发明的理解,下面对本发明的一些论证过程进行详细的描述。
[0162] 在上述实施例中,采用了混淆的加密索引字符串M'j来构造哈希累积,以下将基于双线性对的累加器构造算法,验证不相交算法来证明解释不能用Mj来构造哈希累积的原
因)。
[0163] 基于双线性对的累加器构造算法:
[0164] Ska =(s) Zp → s(随机数)
[0165]
[0166] setup:( X, pka ) → acc(X)
[0167] 例如:集合X = {x1,x2,...,xn} = {1,2,...,4},集合X的累积acc( X ) = ( dA( X ),dB( X ));
[0168]
[0169]
[0170] 不知道私钥ska =(s)也能根据公钥:
[0171] 计算出集合X的累积值;
[0172] 验证不相交算法:根据双线性对累加器的性质可以验证两个集合不相交。
[0173] 验证两个集合不相交需要的证明信息ProveDisjoint(x1,x2,pka):
[0174]
[0175] 例如:x1 ={a,b} ,x2 = {c,d} , A(x1) =sa+sb , B(x2) =sq‑c +sq‑d
[0176]
[0177] 验证算法VerifyDisjoint(acc(x1),acc(x2),π, pk),判断等式是否成立e(dA(x1),dB(x2))=e(π,g)
[0178] 例如: x1 ={a,b}, x2 = {c,d} , A(x1) =sa+sb, B(x2) =sq‑c +sq‑d
[0179] e(dA(x1),dB(x2))= e(π,g)
[0180]
[0181] 根据e(ua , vb) = e( u,v )ab
[0182]
[0183] 通过以下例子证明不能直接用Mj来构造哈希累积的原因:
[0184] 本实施例中服务器30通过数据所有者节点的加密索引Mj 来计算其累计值并且使用混淆后的加密索引M'j来构造数据的签名。
[0185] 服务器30可以计算所有数据的累积值dA(S),并且可以得到数据签名的聚值AG(S):
[0186] 例如:S : { hk( P(s i)) |(Mj[ P(s i)])=1) | j=1、2、3、4},即Mj上为1的位置的哈希值累加。
[0187]
[0188] 上述等式中,t *hk(1111)的累积是M'j与Mj计算的累积值之间的差值,t由共享的混淆算法密钥skc可以得到,数据所有者节点与查询节点40知道,而对服务器30保密。
[0189] 若不对加密索引做混淆,数据所有者节点10计算的签名sigj和服务器30计算的累积值dA( mj )都是根据加密索引Mj:
[0190] 所有数据记录的签名聚合:
[0191] 所有数据的累积值:
[0192] 即不存在差值,由此服务器30可以计算出gssj。
[0193] 例如:服务器30收到m4发送的加密索引M4,可以计算其累积值,还收到由秘密共享ss4和M4的哈希累积计算的签名sig4;已知:
[0194]
[0195] 解密得到累计值gss4+s^[ hk(0010)+hk(1000)+hk(1100)]
[0196] 已知:M4 = 0 0 1 0 0 0  0 0 1 0  0 0 1 0 0 0,计算m4的累计值为:gs^ [ hk(0010) + hk(1000) + hk(1100) ] ss4
,m4的签名累积值与M4的累积值之间的差值就是g 。
[0197] 若服务器30故意遗漏m4,同时服务器30返回遗漏了m4签名的AG'(.)和错误的d'A( S )给用户来进行验证,签名聚合和累积值可以计算为:
[0198] 签名聚合:AG(.) = AG'( gss1 +ss2+ss3,gs^[ H1(.)+H2(.)+H3(.) ] )
[0199] 累积值:d'A(  S  )  =  g  s^[  H1(.)+  H2(.) + H3(.)  ] /  gss4  =  g( s^ [ H1(.)+ H2(.)+ H3(.) ]‑ ss4 )
[0200] 则根据服务器30返回的AG'(.)、d'A( S ),查询节点40不能验证出数据有遗漏,以下等式是成立的:
[0201] gSS  . g( s^ [ H1(.)+ H2(.)+ H3(.) ]‑ ss4 ) = ( AG'( gss1 +ss2+ss3,gs^[ H1(.)+H2(.)+H3(.) ] ) e mod z
[0202] g  [  (ss1+ss2+ss3+ss4  ) + s^[  H1(.)+ H2(.)+ H3(.)]  ‑  ss4 )] =  g ( ss1+ss2+ss3+s^[ H1(.)+H2(.)+H3(.) ] )
[0203] 由以上可知,若不对加密索引做混淆,使用混淆过后的M'j来构造数据的签名,服ssj ssj
务器30就可以计算出g ,并且利用g 构造假的验证对象VO来通过用户的验证,破坏数据
的完整性。
[0204] 本发明第二实施例还提供了一种多源数据查询方法,其包括:
[0205] 可信服务节点通过伪随机函数生成n个随机数,并向每个数据所有者节点发送1个随机数,以及将n个随机数之和发送给查询节点;
[0206] 所述数据所有者节点接收由可信服务节发送的随机数,对数据记录进行加密生成加密数据Enc(mj),通过前缀集合的方法和编码的字典,每个数据记录可以用一个字符串来
表示,使用伪随机函数的组合加密处理生成自身的加密索引字符串Mj以及基于所述随机数
和加密索引字符串Mj,使用RSA私钥生成签名sigj,并将加密数据Enc(mj)、加密索引字符串
Mj、签名sigj发送给服务器;
[0207] 所述查询节点向服务器发起查询请求,并根据所述查询请求中的检索范围生成查询令牌,将所述查询令牌发送给服务器;
[0208] 所述服务器根据所述查询令牌以及加密索引字符串Mj查找符合条件的查询结果,并将所述查询结果以及验证对象返回给所述查询节点;所述查询结果包括位于所述查询范
围内的数据所有者节点的加密数据Enc(mj),加密的索引字符串Mj以及签名sigj;
[0209] 所述查询节点根据所述包括n个随机数之和SS,数据解密的密钥ke,混淆算法的密钥skc,RSA公钥pkr,累加器构造的公钥pka以及所验证对象对数据的完整性,查询结果的正
确性、完整性进行验证。
[0210] 在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图
和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系
架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代
码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能
的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以
不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们
有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图
中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专
用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0211] 另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0212] 所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说
对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计
算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个
人计算机,电子设备,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步
骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑Only Memory)、随机存
取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包
含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括
没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素
的过程、方法、物品或者设备中还存在另外的相同要素。
[0213] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修
改、等同替换、改进等,均应包含在本发明的保护范围之内。