一种基于区块链的数据完整性审计方法和系统转让专利

申请号 : CN201910531077.4

文献号 : CN110263584B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李春花周可胡家琦张洲

申请人 : 华中科技大学

摘要 :

本发明公开了一种基于区块链的数据完整性审计方法,包括:客户端向区块链平台发送审计请求;区块链平台在收到来自客户端的审计请求后产生p个不重复的随机数,使用所有p个随机数{s1,s2,…sp}作为索引号,分别获取存储在区块链平台的映射数组中对应位置的块号v,所有块号组成挑战数组,将挑战数组封装在审计挑战请求中,并将审计挑战请求发送到服务端,服务端对来自区块链平台的审计挑战请求进行解析,从而得到挑战数组,对该挑战数组进行遍历,以得到其中每个元素j对应的分块mj和标签σj,根据双线性运算算法对元素j、分块mi、以及标签σi进行运算。本发明是使用区块链平台作为审计第三方,提高了数据完整性审计时的安全性。

权利要求 :

1.一种基于区块链的数据完整性审计方法,其是应用在包括客户端、服务端、以及区块链平台的云环境中,其特征在于,所述数据完整性审计方法包括以下步骤:(1)客户端向区块链平台发送审计请求;

(2)区块链平台在收到来自客户端的审计请求后产生p个不重复的随机数,使用所有p个随机数{s1,s2,…sp}作为索引号,分别获取存储在区块链平台的映射数组中对应位置的块号v,所有块号组成挑战数组chal={v1,v2,…vp},将挑战数组chal封装在审计挑战请求中,并将审计挑战请求发送到服务端,其中随机数集合中的每个随机数均小于映射数组的大小n;本步骤中的映射数组是通过以下步骤生成:(2-1)客户端接收用户输入的随机数α,并调用封装了双线性运算功能的Java类库接口生成随机元素g;

(2-2)客户端根据随机数α和随机元素g并使用双线性运算算法生成用户公钥w;

(2-3)客户端生成新的随机数u,将待审计文件根据分块大小平均分成n个分块,其初始状态下的块号为1,2,3,…,n,根据双线性运算算法、并利用私钥α和随机数u对每个分块进行处理,以得到每个分块的标签,将所有分块及其标签上传到服务端,将随机元素g、随机数u、用户公钥w、分块的数量n上传到区块链平台;

(2-4)区块链平台根据接收到的分块的数量n产生大小为n的映射数组,并调用存储接口将映射数组、该映射数组中块号的最大值max、随机元素g、随机数u、用户公钥w保存在区块链平台中;

(3)服务端对来自区块链平台的审计挑战请求进行解析,从而得到挑战数组chal,对该挑战数组chal进行遍历,以得到其中每个元素j对应的分块mj和标签σj,根据双线性运算算法对元素j、分块mi、以及标签σi进行运算,以产生审计结果μ和β,并将审计结果μ和β、挑战数组chal、分块mi的哈希值h(mi)发送到区块链平台,其中j∈[v1,v2,…vp];

(4)区块链平台根据来自服务端的审计结果μ和β、挑战数组chal、哈希值h(mi)判断审计是否成功,并将审计的最终结果通知客户端。

2.根据权利要求1所述的数据完整性审计方法,其特征在于,审计请求中存储有待审计文件的文件ID。

3.根据权利要求1所述的数据完整性审计方法,其特征在于,步骤(2)中产生的随机数个数p的取值是取决于审计请求对应的数据块挑中损坏数据块的概率Px、数据块的总数f、以及损坏数据块的数量x。

4.根据权利要求1所述的数据完整性审计方法,其特征在于,第i个分块的标签

其中i表示序号,且i∈[1,n],mi表示第i个分块,h

(·)表示密码学hash函数,Cover(·)表示{0,1}*→G的一个映射函数,H(·)表示{0,1}*→Zr的映射函数,G表示阶数为p的乘法循环群。

5.根据权利要求1所述的数据完整性审计方法,其特征在于,

当区块链平台接收到来自于客户端的文件分块更新请求时,对其进行解析,从而获取更新操作的类型、更新操作的位置、以及更新操作的文件ID;

当更新操作是插入操作时,在映射数组中该更新操作的位置处插入块号max+1,并将max更新为max+1;

当更新操作是删除操作时,则删除映射数组中该更新操作的位置处的块号;

当更新操作是替换操作时,则将映射数组中该更新操作的位置处的块号替换为max+1,并将max更新为max+1。

6.根据权利要求1所述的数据完整性审计方法,其特征在于,步骤(3)中的审计结果是通过以下公式进行计算:

7.根据权利要求6所述的数据完整性审计方法,其特征在于,步骤(4)中判断审计是否成功,并将审计的最终结果通知客户端,具体是判断是否有等式成立,如果成立则向客户端输出审计成功的

通知,否则向客户端输出审计失败的通知。

8.一种基于区块链的数据完整性审计系统,其是应用在包括客户端、服务端、以及区块链平台的云环境中,其特征在于,所述数据完整性审计系统包括:第一模块,其设置于客户端中,用于向区块链平台发送审计请求;

第二模块,其设置于区块链平台中,用于在收到来自客户端的审计请求后产生p个不重复的随机数,使用所有p个随机数{s1,s2,…sp}作为索引号,分别获取存储在区块链平台的映射数组中对应位置的块号v,所有块号组成挑战数组chal={v1,v2,…vp},将挑战数组chal封装在审计挑战请求中,并将审计挑战请求发送到服务端,其中随机数集合中的每个随机数均小于映射数组的大小n;第二模块中的映射数组是通过以下子模块生成:第一子模块,其设置于客户端中,用于接收用户输入的随机数α,并调用封装了双线性运算功能的Java类库接口生成随机元素g;

第二子模块,其设置于客户端中,用于根据随机数α和随机元素g并使用双线性运算算法生成用户公钥w;

第三子模块,其设置于客户端中,用于生成新的随机数u,将待审计文件根据分块大小平均分成n个分块,其初始状态下的块号为1,2,3,…,n,根据双线性运算算法、并利用私钥α和随机数u对每个分块进行处理,以得到每个分块的标签,将所有分块及其标签上传到服务端,将随机元素g、随机数u、用户公钥w、分块的数量n上传到区块链平台;

第四子模块,其设置于区块链平台中,用于根据接收到的分块的数量n产生大小为n的映射数组,并调用存储接口将映射数组、该映射数组中块号的最大值max、随机元素g、随机数u、用户公钥w保存在区块链平台中;

第三模块,其设置于服务端中,用于对来自区块链平台的审计挑战请求进行解析,从而得到挑战数组chal,对该挑战数组chal进行遍历,以得到其中每个元素j对应的分块mj和标签σj,根据双线性运算算法对元素j、分块mi、以及标签σi进行运算,以产生审计结果μ和β,并将审计结果μ和β、挑战数组chal、分块mi的哈希值h(mi)发送到区块链平台,其中j∈[v1,v2,…vp];

第四模块,其设置于区块链平台中,用于根据来自服务端的审计结果μ和β、挑战数组chal、哈希值h(mi)判断审计是否成功,并将审计的最终结果通知客户端。

说明书 :

一种基于区块链的数据完整性审计方法和系统

技术领域

[0001] 本发明属于计算机安全领域,更具体地,涉及一种基于区块链的数据完整性审计方法和系统。

背景技术

[0002] 云存储是在云计算的基础上发展出来的一种在线存储,其拥有诸多优点,例如能够减轻本地存储负担、网络备份、成本较低等,因此越来越多的用户和企业选择将数据存储在云存储中。然而,云存储在给用户提供便捷服务的同时也面临着许多新的安全挑战,主要体现在用户不能参与对数据访问的决策,并且对文件是否如实地存储在云存储提供商(Cloud Storage provider,简称CSP)是存疑的,因此需要对用户存储在云端的数据进行审计(Audit),其主要目标是,在不获取原始数据的情况下确认服务端存储有用户数据。
[0003] 目前主流的审计方案大多是基于数据持有性证明(Provable data procession,简称PDP)方法来实现,其中根据审计发起方的不同和文件索引结构的不同有不同的审计方法,目前比较常见的是基于可信第三方的审计方法,例如使用默克尔树作为索引结构的默克尔哈希树-数据持有性证明(Merkle Hash Tree-PDP,简称MHT-PDP)方法,该方法通过将文件分块,然后使用默克尔树存储文件分块的索引结构,最后使用可信第三方来发起审计请求并进行验证的方式实现数据审计操作。
[0004] 然而,上述基于可信第三方的审计方法存在一些不可忽略的技术问题:在真实网络环境中,审计第三方可能被网络攻击者胁迫,或与CSP共谋,从而导致审计第三方最终出具的审计结果不可靠,并进一步影响用户数据验证结果的准确性。

发明内容

[0005] 针对现有技术的以上缺陷或改进需求,本发明提供了一种基于区块链的数据完整性审计方法,其目的在于,通过使用区块链在不可信环境中仍能以可信的方式工作的特性,解决上述现有的方法中存在的由于审计第三方不可信导致的审计结果不可靠、进而影响用户数据验证结果准确性的技术问题。
[0006] 为实现上述目的,按照本发明的一个方面,提供了一种基于区块链的数据完整性审计方法,其是应用在包括客户端、服务端、以及区块链平台的云环境中,所述数据完整性审计方法包括以下步骤:
[0007] (1)客户端向区块链平台发送审计请求;
[0008] (2)区块链平台在收到来自客户端的审计请求后产生p个不重复的随机数,使用所有p个随机数{s1,s2,…sp}作为索引号,分别获取存储在区块链平台的映射数组中对应位置的块号v,所有块号组成挑战数组chal={v1,v2,…vp},将挑战数组chal封装在审计挑战请求中,并将审计挑战请求发送到服务端,其中随机数集合中的每个随机数均小于映射数组的大小n。
[0009] (3)服务端对来自区块链平台的审计挑战请求进行解析,从而得到挑战数组chal,对该挑战数组chal进行遍历,以得到其中每个元素j对应的分块mj和标签σj,根据双线性运算算法对元素j、分块mi、以及标签σi进行运算,以产生审计结果μ和β,并将审计结果μ和β、挑战数组chal、分块mi的哈希值h(mi)发送到区块链平台,其中j∈[v1,v2,…vp];
[0010] (4)区块链平台根据来自服务端的审计结果μ和β、挑战数组chal、哈希值h(mi)判断审计是否成功,并将审计的最终结果通知客户端。
[0011] 优选地,审计请求中存储有待审计文件的文件ID。
[0012] 优选地,步骤(2)中产生的随机数p的取值是取决于审计请求对应的数据块挑中损坏数据块的概率Px、数据块的总数f、以及损坏数据块的数量x。
[0013] 优选地,步骤(2)中的映射数组是通过以下步骤生成:
[0014] (2-1)客户端接收用户输入的随机数α,并调用封装了双线性运算功能的Java类库接口生成随机元素g;
[0015] (2-2)客户端根据随机数α和随机元素g并使用双线性运算算法生成用户公钥w;
[0016] (2-3)客户端生成新的随机数u,将待审计文件根据分块大小平均分成n个分块,其初始状态下的块号为1,2,3,…,n,根据双线性运算算法、并利用私钥α和随机数u对每个分块进行处理,以得到每个分块的标签,将所有分块及其标签上传到服务端,将随机元素g、随机数u、用户公钥w、分块的数量n上传到区块链平台;
[0017] (2-4)区块链平台根据接收到的分块的数量n产生大小为n的映射数组,并调用存储接口将映射数组、该映射数组中块号的最大值max、随机元素g、随机数u、用户公钥w保存在区块链平台中;
[0018] 优选地,第i个分块的标签 其中i表示序号,且i∈[1,n],mi表示第i个分块,h(·)表示密码学hash函数,Cover(·)表示{0,1}*→G的一个映射函数,H(·)表示{0,1}*→Zr的映射函数,G表示阶数为p的乘法循环群,[0019] 优选地,当区块链平台接收到来自于客户端的文件分块更新请求时,对其进行解析,从而获取更新操作的类型、更新操作的位置、以及更新操作的文件ID;当更新操作是插入操作时,在映射数组中该更新操作的位置处插入块号max+1,并将max更新为max+1;当更新操作是删除操作时,则删除映射数组中该更新操作的位置处的块号;当更新操作是替换操作时,则将映射数组中该更新操作的位置处的块号替换为max+1,并将max更新为max+1。
[0020] 优选地,步骤(3)中的审计结果是通过以下公式进行计算:
[0021]
[0022]
[0023] 优选地,步骤(4)中判断审计是否成功,并将审计的最终结果通知客户端,具体是判断是否有等式 成立,如果成立则向客户端输出审计成功的通知,否则向客户端输出审计失败的通知。
[0024] 按照本发明的另一方面,提供了一种基于区块链的数据完整性审计系统,其是应用在包括客户端、服务端、以及区块链平台的云环境中,所述数据完整性审计系统包括:
[0025] 第一模块,其设置于客户端中,用于向区块链平台发送审计请求;
[0026] 第二模块,其设置于区块链平台中,用于在收到来自客户端的审计请求后产生p个不重复的随机数,使用所有p个随机数{s1,s2,…sp}作为索引号,分别获取存储在区块链平台的映射数组中对应位置的块号v,所有块号组成挑战数组chal={v1,v2,…vp},将挑战数组chal封装在审计挑战请求中,并将审计挑战请求发送到服务端,其中随机数集合中的每个随机数均小于映射数组的大小n。
[0027] 第三模块,其设置于服务端中,用于对来自区块链平台的审计挑战请求进行解析,从而得到挑战数组chal,对该挑战数组chal进行遍历,以得到其中每个元素j对应的分块mj和标签σj,根据双线性运算算法对元素j、分块mi、以及标签σi进行运算,以产生审计结果μ和β,并将审计结果μ和β、挑战数组chal、分块mi的哈希值h(mi)发送到区块链平台,其中j∈[v1,v2,…vp];
[0028] 第四模块,其设置于区块链平台中,用于根据来自服务端的审计结果μ和β、挑战数组chal、哈希值h(mi)判断审计是否成功,并将审计的最终结果通知客户端。
[0029] 优选地,第二模块中的映射数组是通过子模块生成:
[0030] 第一子模块,其设置于客户端中,用于接收用户输入的随机数α,并调用封装了双线性运算功能的Java类库接口生成随机元素g;
[0031] 第二子模块,其设置于客户端中,用于根据随机数α和随机元素g并使用双线性运算算法生成用户公钥w;
[0032] 第三子模块,其设置于客户端中,用于生成新的随机数u,将待审计文件根据分块大小平均分成n个分块,其初始状态下的块号为1,2,3,…,n,根据双线性运算算法、并利用私钥α和随机数u对每个分块进行处理,以得到每个分块的标签,将所有分块及其标签上传到服务端,将随机元素g、随机数u、用户公钥w、分块的数量n上传到区块链平台;
[0033] 第四子模块,其设置于区块链平台中,用于根据接收到的分块的数量n产生大小为n的映射数组,并调用存储接口将映射数组、该映射数组中块号的最大值max、随机元素g、随机数u、用户公钥w保存在区块链平台中
[0034] 总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:由于本发明使用了区块链技术作为审计发起方和审计验证方,从而能够避免审计方被网络攻击者胁迫或与CSP共谋的情况出现,从而能够保证最终出具的审计结果的可靠性,并进一步增强了用户数据验证结果的准确性。

附图说明

[0035] 图1是本发明基于区块链的数据完整性审计方法的流程图。

具体实施方式

[0036] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0037] 以下首先就本发明的技术术语进行解释和说明:
[0038] 双线性运算:设G和GT为阶数为p的乘法循环群,Zr为实数群,假设g为G中的一个随机元素,当e:G×G->GT满足以下条件时,称e为一个双线性映射。
[0039] 1、可计算性:对G中任意两个元素g1和g2,存在有效算法可以计算e(g1,g2)。
[0040] 2、双线性:对G中任意两个元素g1和g2,Zr中任意两个元素a,b,有
[0041] 3、不退化性:对G中任意一个不为0的元素g,有e(g,g)≠1。
[0042] 基于以上三种条件,可以推出双线性映射还有以下性质:
[0043] 1、对G中任意三个元素g1,g2和g3,都有e(g1·g3,g2)=e(g1,g2)·e(g3,g2)。
[0044] 2、对G中任意三个元素g1,g2和g3,都有e(g1,g2·g3)=e(g1,g2)·e(g1,g3)。
[0045] 区块链平台:区块链平台(Hyperledger)是一种区块链3.0下的全新区块链平台,旗下有诸多子项目,其中最常用的区块链网络是Fabric,区块链平台摆脱了传统区块链金融的虚拟货币的束缚,将区块链扩展到更具有普适性的区块链平台中。由于去掉了虚拟货币,不需要公开记账保证数据的安全性,故区块链平台并不是公有链,而是转为联盟链,用户需要通过组织认证服务器验证才能加入组织,这样可以保证文件的隐私。
[0046] 数据持有性证明:数据持有性证明(Provable data possession,简称PDP)是Ateniese于2007年提出的用于客户端在不检索原始数据的情况下验证服务器是否拥有原始数据的完整性审计方案,PDP审计过程一般包含五个步骤,分别为密钥生成、标签生成、发起挑战、产生证据和验证证据。
[0047] 如图1所示,本发明基于区块链的数据完整性审计方法,其是应用在包括客户端、服务端(在本发明中,该服务端是云存储提供商,即Cloud Storage Provider)、以及区块链平台的云环境中,该数据完整性审计方法包括以下步骤:
[0048] (1)客户端向区块链平台发送审计请求;
[0049] 具体而言,该审计请求中存储有待审计文件的文件ID。
[0050] (2)区块链平台在收到来自客户端的审计请求后产生p个不重复的随机数,使用所有p个随机数{s1,s2,…sp}作为索引号,分别获取存储在区块链平台的映射数组中对应位置的块号v,所有块号组成挑战数组chal={v1,v2,…vp},将挑战数组chal封装在审计挑战请求中,并将审计挑战请求发送到服务端,其中随机数集合中的每个随机数均小于映射数组的大小n。
[0051] 具体而言,p的取值是取决于审计请求对应的数据块挑中损坏数据块的概率Px、数据块的总数f、以及损坏数据块的数量x。
[0052] 根据古典概率的不放回取样原则,有如下推导:
[0053]
[0054] 其中X是一个随机变量,表示审计请求对应的数据块恰好挑中损坏数据块的数量。
[0055] 因为 故
[0056] 若 且要求Px分别大于95%、99%、99.9%,则p的取值分别为300、460、688。
[0057] 本步骤中的映射数组是通过以下步骤生成:
[0058] (2-1)客户端接收用户输入的随机数α,并调用封装了双线性运算功能的Java类库接口生成随机元素g;
[0059] 例如,g为(12345678,87654321,0),其中第三位是标识位,当其为0时表示该随机元素g可以修改,为1时表示不能修改。
[0060] (2-2)客户端根据随机数α和随机元素g并使用双线性运算算法生成用户公钥w;
[0061] 具体而言,用户公钥w=gα。
[0062] (2-3)客户端生成新的随机数u,将待审计文件根据分块大小平均分成n个分块,其初始状态下的块号为1,2,3,…,n,根据双线性运算算法、并利用私钥α和随机数u对每个分块进行处理,以得到每个分块的标签,将所有分块及其标签上传到服务端,将随机元素g、随机数u、用户公钥w、分块的数量n上传到区块链平台;
[0063] 其中,第i个分块的标签 其中i表示序号,且i∈[1,n],mi表示第i个分块,h(·)表示密码学hash函数,Cover(·)表示{0,1}*→G的*
一个映射函数,H(·)表示{0,1}→Zr的映射函数;
[0064] 具体而言,分块大小可以自由设定,分块大小越大,块的数量n越少,审计过程耗费的时间越长,反之则块的数量n越多,审计过程耗费的时间越短。
[0065] (2-4)区块链平台根据接收到的分块的数量n产生大小为n的映射数组,并调用存储接口将映射数组、该映射数组中块号的最大值max(其初始状态下就等于n)、随机元素g、随机数u、用户公钥w保存在区块链平台中;
[0066] 当区块链平台接收到来自于客户端的文件分块更新请求时,首先对其进行解析,从而获取更新操作的类型(插入、删除或者替换)、更新操作的位置、以及更新操作的文件ID;当更新操作是插入操作时,在映射数组中该更新操作的位置处插入块号max+1,并将max更新为max+1;当更新操作是删除操作时,则删除映射数组中该更新操作的位置处的块号;当更新操作是替换操作时,则将映射数组中该更新操作的位置处的块号替换为max+1,并将max更新为max+1。
[0067] (3)服务端对来自区块链平台的审计挑战请求进行解析,从而得到挑战数组chal,对该挑战数组chal进行遍历,以得到其中每个元素j对应的分块mj和标签σj,根据双线性运算算法对元素j、分块mi、以及标签σi进行运算,以产生审计结果μ和β,并将审计结果μ和β、挑战数组chal、哈希值h(mi)发送到区块链平台,其中j∈[v1,v2,…vp];
[0068]
[0069]
[0070] (4)区块链平台根据来自服务端的审计结果μ和β、挑战数组chal、哈希值h(mi)判断是否有等式 成立,如果成立则向客户端输出审计成功的通知,否则向客户端输出审计失败的通知。
[0071] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。