1.本发明涉及一种数据持有验证方法及系统,属于云计算服务领域。
背景技术:2.随着云计算在电力系统中的应用越来越普遍,以及电力系统智慧物联云平台体系规模发展,电力系统的终端数据规模将呈现爆炸式增长。虚拟化数据存储服务是云计算的一项基本服务,它允许各电力用户将数据存储在云服务器中。这种虚拟化数据存储模式不仅可以实现各电力用户集中式管理,而且能够减轻各电力用户存储管理的负担。通过虚拟化数据存储,各电力用户可以专注于自己的业务,而不必担心如何管理和访问大量数据。
3.但是基于互联网模式的电力云服务场景,用户与云服务器的网络数据交互不可避免的产生安全问题,同时在多用户存在,且运行重要的电力数据的情况下,不可避免的引来网络攻击者伪造数据,因此需要一种数据持有验证方案,验证数据完整不被篡改。
技术实现要素:4.本发明提供了一种数据持有验证方法、系统、存储介质及计算设备,解决了背景技术中披露的问题。
5.为了解决上述技术问题,本发明所采用的技术方案是:
6.一种数据持有验证方法,包括:
7.接收云用户侧发送的数据块和数据块签名,其中,数据块为数据拆分而成的数据单元;
8.若接收到验证侧发送的验证请求,根据验证请求对应数据的数据块和数据块签名,生成验证证据;
9.将验证证据反馈发送给验证侧,进行数据持有验证。
10.在接收数据块和数据块签名之前,接收云用户侧生成的公钥;其中,数据块签名为根据数据块和私钥生成的签名。
11.数据块签名生成公式为:
[0012][0013]
其中,σ
ti
为m
ti
的签名,m
ti
为数据拆分的第i个数据块,h为hash函数,tid为数据所属第t个云用户的标识,ti为m
ti
的标识,s为m
ti
中子数据块的数量,m
tij
为m
ti
中第j个子数据块,sk
tj
为第j个私钥,u
t
为随机生成的第t个云用户元素,u
t
∈g但不是g的单位元素,g为乘法循环群,为s个私钥之和。
[0014]
验证证据生成公式为:
[0015]
p={σ,μ={μ
t
,1≤t≤n}}
[0016][0017][0018]
其中,p为验证证据,h为hash函数,α为随机生成的整数,ti为m
ti
的标识,m
ti
为数据m
t
拆分的第i个数据块,s为m
ti
中子数据块的数量,m
tij
为m
ti
中第j个子数据块,σ
ti
为m
ti
的签名,φ为签名的集合,σ、μ为p的两个元素,μ为随机生成的云用户元素的集合,u
t
为随机生成的第t个云用户元素,u
t
∈g但不是g的单位元素,g为乘法循环群,μ
tj
为第t个云用户的第j个子数据块的验证证据元素,为异或运算。
[0019]
一种数据持有验证系统,包括:
[0020]
数据接收模块:接收云用户侧发送的数据块和数据块签名,其中,数据块为数据拆分而成的数据单元;
[0021]
证据生成模块:若接收到验证侧发送的验证请求,根据验证请求、验证请求对应数据的数据块和数据块签名,生成验证证据;
[0022]
证书发送模块:将验证证据反馈发送给验证侧,进行数据持有验证。
[0023]
证据生成模块生成验证证据的公式为:
[0024]
p={σ,μ={μ
t
}}
[0025][0026][0027]
其中,p为验证证据,h为hash函数,α为随机生成的整数,ti为m
ti
的标识,m
ti
为数据m
t
拆分的第i个数据块,s为m
ti
中子数据块的数量,m
tij
为m
ti
中第j个子数据块,σ
ti
为m
ti
的签名,φ为签名的集合,σ、μ为p的两个元素,μ为随机生成的云用户元素的集合,u
t
为随机生成的第t个云用户元素,u
t
∈g但不是g的单位元素,g为乘法循环群,μ
tj
为第t个云用户的第j个子数据块的验证证据元素,为异或运算。
[0028]
一种数据持有验证方法,包括:
[0029]
生成验证请求,并将验证请求发送至云服务器侧;
[0030]
若接收云服务器侧反馈的验证证据,根据验证证据和验证请求,进行数据持有验证。
[0031]
生成验证请求,并将验证请求发送至云服务器侧,具体过程为:
[0032]
根据随机生成的整数、云用户的标识和云用户数据的数据块标识,生成验证请求;
[0033]
将验证请求发送至云服务器侧。
[0034]
生成并发送验证请求之前,接收云用户侧生成的公钥;若接收云服务器侧反馈的验证证据,根据公钥、验证证据和验证请求,进行数据持有验证。
[0035]
进行数据持有验证的过程为:
[0036]
若公钥、验证证据和验证请求满足预设验证公式,则数据持有验证通过,否则数据持有验证不通过。
[0037]
预设验证公式为:
[0038][0039]
其中,为双线性映射,n为云用户数量,m
ti
为数据m
t
拆分的第i个数据块,h为hash函数,tid为数据m
t
所属第t个云用户的标识,ti为m
ti
的标识,α为随机生成的整数,为sk
tr
对应的参数,为s个私钥之和,g为乘法循环群的生成元,s为m
ti
中子数据块的数量,pk
tj
为第j个公钥,u
t
为随机生成的第t个云用户元素,μ
tj
为第t个云用户的第j个子数据块的验证证据元素,σ为验证证据的元素,为异或运算。
[0040]
一种数据持有验证系统,包括:
[0041]
请求发送模块:生成验证请求,并将验证请求发送至云服务器侧;
[0042]
验证模块:若接收云服务器侧反馈的验证证据,根据验证证据和验证请求,进行数据持有验证。
[0043]
请求发送模块包括:
[0044]
验证请求生成模块:根据随机生成的整数、云用户的标识和云用户数据的数据块标识,生成验证请求;
[0045]
验证请求发送模块:将验证请求发送至云服务器侧。
[0046]
本发明所达到的有益效果:本发明在云服务器侧根据验证侧的验证请求、验证请求对应数据的数据块和数据块签名,生成验证证据,并将验证证据发送至验证侧进行数据持有验证,可有效验证云服务器持有数据的完整性,避免基于云服务业务对数据的伪造,不仅使用单云用户场景,也使用多云用户场景。
附图说明
[0047]
图1为国网智慧物联体系;
[0048]
图2为本发明方法的流程图。
具体实施方式
[0049]
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
[0050]
一种数据持有验证方法,包括:
[0051]
云服务器侧方法:
[0052]
a1)接收云用户侧发送的数据块和数据块签名,其中,数据块为数据拆分而成的数据单元;
[0053]
a2)若接收到验证侧发送的验证请求,根据验证请求对应数据的数据块和数据块签名,生成验证证据;
[0054]
a3)将验证证据反馈发送给验证侧,进行数据持有验证;
[0055]
验证侧方法:
[0056]
b1)生成验证请求,并将验证请求发送至云服务器侧;
[0057]
b2)若接收云服务器侧反馈的验证证据,根据验证证据和验证请求,进行数据持有验证。
[0058]
上述方法在云服务器侧根据验证侧的验证请求、验证请求对应数据的数据块和数据块签名,生成验证证据,并将验证证据发送至验证侧进行数据持有验证,可有效验证云服务器持有数据的完整性,避免基于云服务业务对数据的伪造,不仅使用单云用户场景,也使用多云用户场景。
[0059]
上述方法主要运用在如图1所示的国网智慧物联体系中,在国网智慧物联体系下,各电力应用场景的业务分别部署在平台层和应用层,对于各业务应用的多云用户基于感知层的边缘物联代理接入业务应用。
[0060]
如图2所示,上述方法具体有三方:单个或多个云用户侧、云服务器侧和验证侧。
[0061]
云用户侧的具体过程如下:
[0062]
1)生成密钥对,并将公钥发送给云服务器侧和验证侧;
[0063]
第t个云用户(1≤t≤n,n为云用户数量)生成密钥对(pk
t
,sk
t
),并将公钥pk
t
发送给云服务器侧和验证侧。为了保证云服务器侧和验证侧获得正确的密钥,密钥分发通道应该提供完整性保护。
[0064]
密钥生成算法(keygen)具体如下:
[0065]
输入安全参数λ,输出公钥pk
t
和私钥sk
t
,算法中λ为私钥的长度,它决定了完整性检查方法的安全等级。
[0066]
第t个云用户随机生成一个集合{sk
t1
,...,sk
ti
,...,sk
ts
∈z
q
,u
t
∈g},z
q
为整数,u
t
为随机生成的第t个云用户元素,g为乘法循环群,计算最后获得的私钥sk
t
={sk
tr
,sk
t1
,...,sk
ts
}、公钥pk
t
={pk
tr
,pk
t1
,...,pk
ts
,u
t
}。
[0067]
2)将数据进行拆分,根据数据块和私钥生成数据块签名;
[0068]
设第t个云用户的数据m
t
,将m
t
拆分成一组数据块m
t
={m
t1
,...,m
tv
},将每个数据块m
ti
∈m
t
进一步拆分成s个子数据块m
ti
={m
ti1
,...,m
tis
∈z
q
},为每个数据块生成一个签名。
[0069]
签名生成算法(sijgen)具体如下:
[0070]
输入(tid,ti,m
ti
,sk
t
),输出σ
ti
;其中,tid为数据所属第t个云用户的标识,ti为m
ti
的标识;
[0071]
公式如下:
[0072][0073]
其中,σ
ti
为m
ti
的签名,m
ti
为数据拆分的第i个数据块,h为hash函数,s为m
ti
中子数据块的数量,m
tij
为m
ti
中第j个子数据块,sk
tj
为第j个私钥,为s个私钥之和。
[0074]
从上述签名生成算法中可以看出,主要采用模乘算法,一个数据块中的多个子数
据块共享两个模幂运算,由于模乘是高效的,所以签名成本可以非常低。
[0075]
3)将数据块和数据块签名发送至云服务器侧;
[0076]
若n个云用户发送,那么云服务器侧即可持有m={m
t
,1≤t≤n}和φ={φ
t
,1≤t≤n},其中,φ
t
={σ
ti
}。
[0077]
云服务器侧具体过程如下:
[0078]
11)接收云用户侧生成的公钥。
[0079]
12)接收云用户侧发送的数据块和数据块签名。
[0080]
13)若接收到验证侧发送的验证请求,根据公钥、验证请求、验证请求对应数据的数据块和数据块签名,生成验证证据;
[0081]
验证证据生成算法(proofgen)如下:
[0082]
输入(m,φ),输出p;
[0083]
具体的生产公式为:
[0084]
p={σ,μ={μ
t
}}
[0085][0086][0087]
其中,p为验证证据,h为hash函数,α为随机生成的整数,ti为m
ti
的标识,m
ti
为数据m
t
拆分的第i个数据块,s为m
ti
中子数据块的数量,m
tij
为m
ti
中第j个子数据块,σ
ti
为m
ti
的签名,φ为签名的集合,σ、μ为p的两个元素,μ为随机生成的云用户元素的集合,μ
tj
为第t个云用户的第j个子数据块的验证证据元素,为异或运算。
[0088]
从验证证据生成算法可以看出,每个签名仅使用一个模幂,多个子数据块则由模乘运算处理,因此,如果云用户增加,该算法中的模幂运算总次数可以被显著减少,因此,云服务器上的验证证据生成成本可以被显著降低。
[0089]
14)将验证证据反馈发送给验证侧,进行数据持有验证。
[0090]
验证侧具体过程如下:
[0091]
21)接收云用户侧生成的公钥。
[0092]
22)生成验证请求,并将验证请求发送至云服务器侧;
[0093]
具体过程为:
[0094]
s1)根据随机生成的整数、云用户的标识和云用户数据的数据块标识,生成验证请求;
[0095]
验证侧持有云用户的标识集id={1id,...,tid,...,nid}和数据块标识集i={{1i},...,{ti},...,{ni}};
[0096]
验证请求生成算法(rewgen)如下:
[0097]
输入(α,id,i),输出q,其中,α∈z
q
为随机生成的整数;
[0098]
s2)将验证请求发送至云服务器侧。
[0099]
23)若接收云服务器侧反馈的验证证据,根据公钥、验证证据和验证请求,进行数据持有验证。
[0100]
验证过程为:若公钥、验证证据和验证请求满足预设验证公式,则数据持有验证通过,即输出true,否则数据持有验证不通过,即输出false;
[0101]
验证算法(proofver)如下:
[0102]
输入(p,q,pk),输出{true,false};
[0103]
预设验证公式为:
[0104][0105]
其中,为双线性映射,n为云用户数量,m
ti
为数据m
t
拆分的第i个数据块,h为hash函数,tid为数据m
t
所属第t个云用户的标识,ti为m
ti
的标识,为sk
tr
对应的参数,为s个私钥之和,g为乘法循环群的生成元,g为乘法循环群的生成元,s为m
ti
中子数据块的数量,pk
tj
为第j个公钥。
[0106]
从验证公式可以看出,验证采用的模幂运算的个数仅取决于数据块的个数。因此,如果云用户增加,验证成本也可以大大降低。从上述算法可以看出,q的长度与要验证的子数据块的数量无关,因此,数据持有证明检查的通信成本相当低。
[0107]
为了验证上述方法的安全性,定义a用户能伪造云用户数据,另外一个c用户利用a这个过程来解决gdh(group diffie
‑
hellman是group缝隙diffie
‑
hellman群)问题。
[0108]
在以下三种场景下证明上述方法的安全性:
[0109]
第一种,一个云用户,一个数据块由一个子数据块组成,要验证的子数据块的数量是1;
[0110]
对于上述场景,数据持有验证方法的构造如下:
[0111][0112][0113]
reqgen:q={α,id,i}
[0114][0115][0116]
定理1:在签名查询时间后,如果a能在时间t内以概率ε伪造了云用户的子数据块,那么c就能在时间t
′
=t+(3q
s
+2)t
me
内以概率解决gdh问题,其中t
me
是数模运算的时间成本。
[0117]
第二种,一个云用户,一个数据块由一个子数据块组成,并且有多个子数据块需要验证;
[0118]
对于上述场景,仅在proofgen和proofver与第一种有所区别:
[0119][0120][0121]
上述proofver可以表述为以下形式:
[0122][0123]
其中,
[0124][0125]
这是因为:
[0126][0127][0128]
也就是说,第二种场景是多个第一种场景的组合。
[0129]
因此如果成功入侵第二种场景,相当于入侵第一种场景,用以下示例说明这一点:如果对手在第二场景中通过proofver算法伪造了(m
t
′
i
,σ
t
′
i
),我们就能得到:
[0130][0131]
由于
[0132]
得出
[0133]
等价于这与定理1矛盾。
[0134]
第三种,一个云用户,一个数据块由多个子数据块组成,并且有多个子数据块需要验证;第四种,多个云用户,一个数据块由多个子数据块组成,并且有多个子数据块需要验证;
[0135]
第三种、第四种场景均可以被看作多个第一种场景的组合,因此它们的安全性分析可以用和第二种场景同样的方法。
[0136]
上述方法相应的软件系统,包括云服务器侧系统和验证侧系统;
[0137]
云服务器侧系统包括:
[0138]
数据接收模块:接收云用户侧发送的数据块和数据块签名,其中,数据块为数据拆分而成的数据单元;
[0139]
证据生成模块:若接收到验证侧发送的验证请求,根据验证请求、验证请求对应数据的数据块和数据块签名,生成验证证据;
[0140]
证据生成模块生成验证证据的公式为:
[0141]
p={σ,μ={μ
t
}}
[0142][0143][0144]
其中,p为验证证据,h为hash函数,α为随机生成的整数,ti为m
ti
的标识,m
ti
为数据m
t
拆分的第i个数据块,s为m
ti
中子数据块的数量,m
tij
为m
ti
中第j个子数据块,σ
ti
为m
ti
的签名,φ为签名的集合,σ、μ为p的两个元素,μ为随机生成的云用户元素的集合,u
t
为随机生成的第t个云用户元素,u
t
∈g但不是g的单位元素,g为乘法循环群,μ
tj
为第t个云用户的第j个子数据块的验证证据元素,为异或运算;
[0145]
证书发送模块:将验证证据反馈发送给验证侧,进行数据持有验证。
[0146]
验证侧系统包括:
[0147]
请求发送模块:生成验证请求,并将验证请求发送至云服务器侧;
[0148]
请求发送模块包括:
[0149]
验证请求生成模块:根据随机生成的整数、云用户的标识和云用户数据的数据块标识,生成验证请求;
[0150]
验证请求发送模块:将验证请求发送至云服务器侧;
[0151]
验证模块:若接收云服务器侧反馈的验证证据,根据验证证据和验证请求,进行数据持有验证。
[0152]
一种存储一个或多个程序的计算机可读存储介质,所述一个或多个程序包括指令,所述指令当由计算设备执行时,使得所述计算设备执行数据持有验证方法。
[0153]
一种计算设备,包括一个或多个处理器、一个或多个存储器以及一个或多个程序,其中一个或多个程序存储在所述一个或多个存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序包括用于执行数据持有验证方法的指令。
[0154]
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd
‑
rom、光学存储器等)上实施的计算机程序产品的形式。
[0155]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0156]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指
令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0157]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0158]
以上仅为本发明的实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均包含在申请待批的本发明的权利要求范围之内。