一种基于区块链的数据完整性检测方法及系统。包括:1.用户使用加密算法及纠删码对文件进行处理得到多个文件块。2.用户对得到的每一个文件块使用用户私钥进行签名。3.用户将得到的数据块及签名上传给云端。4.云端使用签名验证算法对接收到的数据块及其数字签名进行验证。5.若4中验证成功,则云端保存接收到的数据块及其签名,并使用云端私钥对数据块签名进行二次签名后将其公布到区块链中,并将相应存储地址回传给用户。6.用户使用哈希算法、2中所述用户私钥以及云端公钥、5中所述存储地址对云端数据进行完整性校验。7.云端使用哈希算法、用户公钥以及云端公钥、5中所述的存储地址对数据进行完整性校验。
1.一种基于区块链的云端数据完整性检测方法,其特征在于,所述方法包括以下步骤:
步骤1,用户使用加密算法及纠删码对文件进行处理得到n个数据块,记为F1,...,Fn,其中下标1,2,...,n代表数据块号;
步骤2,用户对由步骤1中得到的n个数据块使用用户私钥进行签名,对每一个数据块Fi得到其对应的数字签名Si,其中i代表数据块号,且有i=1,2,...,n;
步骤3,用户将由步骤1中得到的数据块F1,...,Fn及由步骤2中得到的签名S1,...,Sn上传给云端;
步骤4,云端使用用户公钥和签名验证算法对接收到的数据块F1,...,Fn及其数字签名S1,...,Sn进行验证;
步骤5,若步骤4中验证成功,则云端保存接收到的数据块F1,...,Fn及其签名S1,...,Sn,并使用云端私钥对数据块签名S1,...,Sn分别计算其对应的二次签名S1’,...,S′n,将二次签名作为数据凭证公布到区块链中,并将相应存储地址回传给用户;
步骤6,用户使用哈希算法、步骤2中所述用户私钥以及云端公钥、步骤5中所述存储地址对云端数据进行完整性校验;所述完整性校验的具体步骤如下:
步骤6.1:用户从云端下载步骤3中上传的数据块F1,...,Fn;
步骤6.2:用户使用存储地址K从区块链请求得到数据块F1,...,Fn对应的凭证S1’,...,Sn’;
步骤6.3:针对每一个下载得到的数据块Fi,其中i代表数据块号,且有i=1,2,...,n,用户使用哈希算法得到数字签名的哈希值Hash(Fi),并使用用户私钥对其进行签名得到数字签名Sign(Hash(Fi));
步骤6.4:针对每一个数据块凭证Si’,其中i代表数据块号,且有i=1,2,...,n,用户使用云端公钥对其进行解密得到Dec(Si’),若Sign(Hash(Fi))与Dec(Si’)相同,则用户可知数据完整,否则数据完整性遭到破坏;
步骤7,云端使用哈希算法、用户公钥以及云端公钥、步骤5中所述的存储地址对数据进行完整性校验;所述完整性校验的具体步骤如下:
步骤7.1:云端使用存储地址K从区块链请求得到数据块对应的凭证S1’,...,Sn’;
步骤7.2:针对每一个在步骤3中接收到的数据块Fi,云端使用哈希算法得到其哈希值Hash(Fi);
步骤7.3:针对每一个数据块凭证Si’,云端使用云端公钥和用户公钥依次解密得到Dec(Dec(Si’)),若Hash(Fi)与Dec(Dec(Si’))相同,则云端可知数据完整,否则数据完整性遭到破坏。
2.如权利要求1所述的方法,其特征在于,所述哈希算法为SHA256算法。
3.如权利要求1所述的方法,其特征在于,所述加密算法为AES加密算法。
4.如权利要求1所述的方法,其特征在于,所述云端为数家云服务商组成的多云云端。
5.如权利要求1所述的方法,其特征在于,所述区块链为任意区块链公有链。
6.一种云端数据的完整性检测系统,其特征在于,包括:用户上传模块、云端受理模块、用户检测模块和云端检测模块;其中,
用户上传模块,用于对文件进行处理并上传到云端受理模块;
云端受理模块,用于云端对接收到的数据块及数字签名进行验证,若验证成功则对数据块进行二次签名并将其上传到区块链网络,并将区块链网络返回的地址回传用户上传模块;
用户检测模块,用于用户对云端数据进行完整性校验,从云端受理模块获得存储的数据以及获得从区块链网络回传的地址,用户检测模块使用获得的数据和地址对云端数据完整性进行检测;所述完整性检测的具体步骤如下:
1):用户从云端下载经过签名并上传的数据块F1,...,Fn;
2):用户使用存储地址K从区块链请求得到数据块F1,...,Fn对应的凭证S1’,...,Sn’;
3):针对每一个下载得到的数据块Fi,用户使用哈希算法得到数字签名的哈希值Hash(Fi),并使用用户私钥对其进行签名得到数字签名Sign(Hash(Fi));
4):针对每一个数据块凭证Si’,用户使用云端公钥对其进行解密得到Dec(Si’),若Sign(Hash(Fi))与Dec(Si’)相同,则用户可知数据完整,否则数据完整性遭到破坏;
云端检测模块,用于云端对数据进行完整性校验,云端检测模块使用从区块链网络获得的凭证和现有数据进行云端数据完整性检测;所述完整性检测的具体步骤如下:
1):云端使用存储地址K从区块链请求得到数据块对应的凭证S1’,...,Sn’;
2):针对每一个数据块Fi,云端使用哈希算法得到其哈希值Hash(Fi);
3):针对每一个数据块凭证Si’,云端使用云端公钥和用户公钥依次解密得到Dec(Dec(Si’)),若Hash(Fi)与Dec(Dec(Si’))相同,则云端可知数据完整,否则数据完整性遭到破坏。
【技术领域】
[0001]本发明属于云存储技术领域,特别涉及一种云端数据的完整性检测方法和系统。
【背景技术】
[0002]云存储是一种由第三方云服务提供商维护和管理数据的数据服务模型。为了保证云存储的可用性,用户需要定期付费购买服务,以使得他们可以在任何智能设备上访问数据。由于数据量的增加和个人存储设备的有限性,云存储被各种各样的客户广泛使用,包括个人用户和企业用户。云存储技术给人们的生活带来了很多便利,然而,云存储服务故障时有发生。数据在存储和传输过程中因为网络传输错误或黑客攻击和管理员的误操作导致用户数据出错,使用户数据的完整性无法保证。
[0003]区块链是一个“去中心化”的分布式账簿系统,其特点就是不可更改、不可伪造,作为一种新兴的技术其不可篡改的特点吸引了很多行业的关注,其中包括金融、医疗保健、公用事业、房地产和政府机构。区块链网络中的每一个节点都可以共享实体,但是没有一个节点可以控制修改实体。这项技术被设计用来在竞争激烈的环境中对抗进行违法操作的对手。
[0004]当用户将数据上传至云端,用户失去了对数据的掌控,判断云端数据是否完整是一个新的挑战。
【发明内容】
[0005]本发明的目的是针对用户和云端互不信任的情况下,对用户的云端数据的完整性提供一种基于区块链技术的云端数据的完整性检测方法及系统,能够有效地对云端数据的完整性进行检测,针对用户上传云端的多份不同数据可以快速判断出某份数据是否遭到篡改。为实现上述发明的目的,本发明首先提供了一种基于区块链的云端数据的完整性检测方法。
[0006]参照
[0007]图1,其主要步骤包括:
[0008]步骤1(101),用户使用加密算法及纠删码对文件进行处理得到多个文件块。
[0009]步骤2(102),用户对由101得到的每一个文件块使用用户私钥进行签名。
[0010]步骤3(103),用户将由101中得到的数据块及由102中得到的签名上传给云端。
[0011]步骤4(104),云端使用签名验证算法对接收到的数据块及其数字签名进行验证。
[0012]步骤5(105),若104中验证成功,则云端保存接收到的数据块及其签名,并使用云端私钥对数据块签名进行二次签名后将这个二次签名公布到区块链中,并将相应存储地址回传给用户。
[0013]步骤6(106),用户使用102中所述的哈希算法、用户私钥以及105中所述的云端公钥、存储地址对云端数据进行完整性校验;所述完整性校验的具体步骤如下:
[0014]步骤6.1:用户从云端下载步骤3中上传的数据块F1,…,Fn;
[0015]步骤6.2:用户使用存储地址K从区块链请求得到数据块F1,…,Fn对应的凭证S1’,…, Sn’;
[0016]步骤6.3:针对每一个下载得到的数据块Fi,用户使用哈希算法得到数字签名的哈希值Hash(Fi),并使用用户私钥对其进行签名得到数字签名Sign(Hash(Fi));
[0017]步骤6.4:针对每一个数据块凭证Si’,用户使用云端公钥对其进行解密得到Dec(Si’),若Sign(Hash(Fi))与Dec(Si’)相同,则用户可知数据完整,否则数据完整性遭到破坏。
[0018]步骤7(107),云端使用102中所述的哈希算法、用户公钥以及105中所述的云端公钥、存储地址对数据进行完整性校验;所述完整性校验的具体步骤如下:
[0019]步骤7.1:云端使用存储地址K从区块链请求得到数据块对应的凭证S1’,…,Sn’;
[0020]步骤7.2:针对每一个在步骤3中接收到的数据块Fi,云端使用哈希算法得到其哈希值Hash(Fi);
[0021]步骤7.3:针对每一个数据块凭证Si’,云端使用云端公钥和用户公钥依次解密得到 Dec(Dec(Si’)),若Hash(Fi)与Dec(Dec(Si’))相同,则云端可知数据完整,否则数据完整性遭到破坏。
[0022]可选地,所述哈希算法为SHA256算法。
[0023]可选地,所述非加密算法为AES加密算法。
[0024]可选地,所述云端为由数家云服务商组成的多云云端。
[0025]可选地,所述区块链为以比特币为代表的区块链网络。
[0026]为实现上述发明目的,本发明还提供了一种基于区块链的云端数据的完整性检测系统,并在实验环境中验证了该系统的有效性。参照图4 ,该系统包括:用户上传模块、云端受理模块、用户检测模块和云端检测模块。其中,
[0027]用户上传模块,用于对文件进行处理并上传到云端受理模块;
[0028]云端受理模块,用于云端对接收到的数据块及数字签名进行验证,若验证成功则对数据块进行二次签名并将其上传到区块链网络,并将区块链网络返回的地址回传用户上传模块;
[0029]用户检测模块,用于用户对云端数据进行完整性校验,从云端受理模块获得存储的数据,及从区块链网络回传的地址,用户检测模块使用获得的数据和地址对云端数据完整性进行检测;所述完整性检测的具体步骤如下:
[0030]1):用户从云端下载经过签名并上传的数据块F1,…,Fn;
[0031]2):用户使用存储地址K从区块链请求得到数据块F1,…,Fn对应的凭证S1’,…,Sn’;
[0032]3):针对每一个下载得到的数据块Fi,用户使用哈希算法得到数字签名的哈希值Hash(Fi),并使用用户私钥对其进行签名得到数字签名Sign(Hash(Fi));
[0033]4):针对每一个数据块凭证Si’,用户使用云端公钥对其进行解密得到Dec(Si’),若Sign(Hash(Fi))与Dec(Si’)相同,则用户可知数据完整,否则数据完整性遭到破坏;
[0034]云端检测模块,用于云端对数据进行完整性校验,云端检测模块使用从区块链网络获得的地址凭证和现有数据进行云端数据完整性检测;所述完整性检测的具体步骤如下:
[0035]1):云端使用存储地址K从区块链请求得到数据块对应的凭证S1’,…,Sn’;
[0036]2):针对每一个数据块Fi,云端使用哈希算法得到其哈希值Hash(Fi);
[0037]3):针对每一个数据块凭证Si’,云端使用云端公钥和用户公钥依次解密得到 Dec(Dec(Si’)),若Hash(Fi)与Dec(Dec(Si’))相同,则云端可知数据完整,否则数据完整性遭到破坏。
[0038]本发明的优点和有益效果在于,能够有效地对云端数据的完整性进行检测,针对用户上传云端的多份不同数据可以快速判断出某份数据是否遭到篡改,本发明能够广泛适用于云存储的完整性检测领域。
【附图说明】
[0039]图1是本发明的云端数据的完整性检测方法流程图;
[0040]图2是本发明的云端数据的完整性检测方案处理文件的方法流程图;
[0041]图3是本发明的云端数据的完整性检测方案检测过程的程序输出;
[0042]图4是本发明的云端数据的完整性检测系统示意图;
[0043]图5是本发明的云端数据的完整性检测实验的时间效果对比图。
【具体实施方式】
[0044]为便于理解本发明的上述目的、特征和优点,下面结合附图和具体实施方案对本发明作进一步的详细说明。显然,下述实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的算法思想和实施例,本领域的技术人员所获得的其他实施例,都属于本发明的保护范畴。
[0045]本实施例中,用户与云端是互不信任的双方,为了审计保存在云端的数据是否被篡改,依靠区块链作为存储验证凭证的公开账本。区块链是一种公开的分布式账本,重写或者修改交易的代价十分高。一旦信息经过验证并添加至区块链中,该信息就会永久的存储起来,除非能够同时控制住系统中大多数的节点,否则单个节点上对信息的修改是无效的,因此区块链可视为具有不可篡改的特性;并且区块链具有公开性,区块链的数据对所有人公开,任何人都可以访问区块链数据和开发相关应用。因此区块链可以作为独立于用户和云端的可信第三方。
[0046]实施例1、
[0047]本发明提供的基于区块链的云端数据的完整性检测方法,如
[0048]图1所示,主要步骤包括:
[0049]步骤1:用户使用加密算法及纠删码对文件进行处理得到多个文件块。
[0050]所述处理包括对文件进行加密。所述对文件进行加密是为了防止数据内容被不受信的用户访问。云存储场景下用户的文件可能包含隐私和机密信息,且用户不信任云服务商,因此为了防止云服务商读取用户文件的内容,保证数据安全,在文件上传之前需要对其进行加密处理。
[0051]具体地,所述加密处理可以根据不同场景选择使用对称加密算法或非对称加密算法来对文件进行加密。当用户所上传的文件只允许自己读取、不分享给系统中的其它用户时,使用对称加密方法,即加密和解密使用同一个密钥。用户在执行加密算法之前随机生成一个加密密钥,用该密钥加密文件,解密时也使用该密钥。当用户所上传的文件允许其他用户读取时,使用非对称加密方法,用户在执行加密算法之前随机生成一对公钥和私钥,用户使用私钥加密文件,并将公钥公开给被允许读取该文件的受信用户,这些用户可以使用公钥对文件进行解密从而读取文件内容。
[0052]特别地,对于所述密钥,用户可以将其保存在用户个人电脑中或是安全地存储在云端。所述“安全地存储在云端”的方法为通过秘密共享方法将加密密钥散布到多台服务器上。
[0053]示例性地,当用户想要将一个8M大小的文件保存在云端并不允许除自己之外的用户读取文件内容时,其先使用随机算法生成一个随机密钥,然后使用AES加密算法对文件进行加密,即将文件明文和新生成的密钥作为AES加密函数的输入,函数输出加密过后的密文。加密处理使得即使攻击者读取了保存在云端的数据,也会因为无法解密密文而获取不到任何关于文件明文的信息。用户在本地保存加密时使用的密钥,当用户想要读取该文件时,只要从云端下载密文并使用之前保存的密钥对文件进行解密,便可以成功读取文件内容。
[0054]所述处理过程还包括使用纠删码对文件进行冗余编码。所述纠删码的使用是为了提高存储的可靠性,使得文件即使在发生了篡改、部分损坏等意外情况时仍旧能够被读取。当用户把文件存储到云端之后,便失去了对文件的控制权;而云服务器上有可能会遭遇各种故障和攻击:用户的文件有可能因为磁盘故障而丢失一部分信息,有可能遭到攻击而导致数据遭到部分篡改,等等。这些故障和攻击将导致文件永久损坏而无法读取。为了提高存储的可靠性,使用纠删码技术将文件分割为大小相等的若干文件块,这些文件块中包含一些冗余信息,因此即使有部分文件块遭到损坏,仍旧可以利用未遭到损坏的文件块来恢复出文件。
[0055]具体地,当使用参数为(k,n)的RS码对一个大小为F的文件进行编码时,首先将文件切分为长度均为F/k的文件块;特别地,如果最后一个文件块长度小于F/k,则在其末尾补0至长度等于F/k。利用这k个块计算出另外的(n-k)个块的值,这(n-k)个块的长度也都等于F/k。由此得到n个文件块,从这n个文件块中任意选取k个块即可以恢复出原文件。
[0056]示例性地,使用参数为(4,6)的RS码对一个8MB的文件进行编码。首先将文件切分为长度为2MB的4个文件块,利用这4个块计算出另外2个块的值,得到6个文件块。那么,从这6个文件块中任意选取4个即可以恢复出原文件。
[0057]如图2所示,所述利用加密算法和纠删码对文件进行处理得到多个文件块的具体过程如下:
[0058]步骤1.1:针对一个文件,用户使用加密算法对文件进行加密得到密文。
[0059]所述加密算法指AES加密。
[0060]步骤1.2:针对加密得到的密文,用户使用纠删码对密文进行编码得到大小相等的多个数据块。
[0061]所述纠删码指参数为(k,n)的RS码,参数的值由用户指定。所述用该RS码编码后得到的数据块的个数为n个。
[0062]步骤2:用户对由101得到的每一个文件块使用用户签名私钥进行签名。
[0063]所述签名过程包括如下两个步骤:
[0064]步骤2.1:对每一个数据块Fi,用户使用哈希算法得到数据块的哈希值Hi。
[0065]哈希算法是一种常见的压缩映射方法,其可以将任意长度的输入数据映射为固定长度的输出数据,称为该输入数据的“哈希值”。SHA(Secure Hash Algorithm)安全哈希系列算法能够保证两个不同的输入数据不会产生相同的哈希值,即一旦输入数据发生变化输出的哈希值也会不同,因此可以通过校验数据哈希值来验证数据完整性。不同的SHA算法可以生成不同长度的哈希值,SHA256算法生成的哈希值长度为256比特。
[0066]示例性地,使用SHA256哈希算法对一个长度为2MB的文件块进行哈希运算得到一个长度为256比特的字符串。
[0067]步骤2.2:对每一个数据块哈希值Hi,用户使用用户私钥进行加密得到数字签名Si。
[0068]所述用户签名私钥不同于使用非对称加密算法加密文件时所使用的私钥。所述签名私钥为用户注册时生成,只用于用户对文件块进行签名。签名私钥由用户本地保管,签名公钥公开给云服务商及其它可信用户。签名算法中定义了使用签名私钥进行的签名算法和使用签名公钥进行的签名验证算法。
[0069]示例性地,用户在第一次加入系统时,通过运行椭圆曲线算法中定义的密钥生成算法生成一对用于签名的私钥和公钥,同时,该算法也定义了使用签名私钥进行的签名算法和使用签名公钥进行的签名验证算法。用户将签名私钥安全地保存在本地,将签名公钥公开给云服务商。这之后每一次签名,用户都使用这次所生成的签名私钥,运行签名算法来进行签名;而只有拥有签名公钥的云服务商才能够运行签名验证算法来验证用户发来的数据与其签名是否一致,从而验证签名者身份以及数据的完整性。
[0070]步骤3:用户将由101中得到的数据块及由102中得到的签名上传给云。
[0071]所述上传过程所使用的信道是可信信道,不会发生信息窃取的攻击,即信息不会泄露。但所述可信信道在传输过程中可能会出现错误,数据块的签名正是为了防止此类问题。云服务商在接收到数据块及其签名后可以通过运行签名验证算法来验证接收到的数据块的完整性从而及时检测到数据错误。至此,用户对于文件的处理结束。
[0072]步骤4:云端使用签名验证算法对接收到的数据块及其数字签名进行验证。
[0073]所述签名验证算法即102中步骤2.2所述的签名验证算法。云端使用用户的签名公钥运行签名验证算法,可以验证签名者身份以及数据块的完整性。如果发生了103中所述的传输错误,或者是用户对文件的签名过程出现错误,可以在本步骤中通过签名验证算法快速检测出来,从而避免了云端保存错误的数据。这是对于数据完整性的第一次检测。特别地,当验证失败时,云端会将结果反馈给用户并请求数据重传。
[0074]示例性地,对应102中的示例,云端针对每一个接收到的数据块Fi,使用SHA256哈希算法得到其哈希值Hash(Fi)。针对每一个接收到的数字签名Si,云端使用用户公钥进行解密得到Dec(Si),若Hash(Fi)和Dec(Si)相同则验证成功,输出0,否则输出1。
[0075]所述验证过程是确保了从用户到云端的上传过程未发生意外情况:Hash(Fi)和Dec(Si) 相同说明云端接收到的数据与用户上传的数据是相同的,即上传过程未发生意外。
[0076]步骤5:若104中验证成功,则云端保存接收到的数据块及其签名,并使用云端签名私钥对数据块签名进行二次签名后将其公开到区块链中,并将相应存储地址回传给用户。
[0077]所述云端签名私钥与102中所述用户签名私钥功能相同,用于云端进行签名。其对应的签名公钥由云端公开给所有用户,用于进行签名验证。所述签名方法与102中所述签名方法相同,包含102中所述两个步骤。
[0078]具体地,云端通过运行椭圆曲线算法生成一对用于签名的私钥和公钥,同时,该算法也定义了使用签名私钥进行的签名算法和使用签名公钥进行的签名验证算法。云端将签名私钥安全地保存,并将签名公钥公开给所有用户,所有用户都可以用这一签名公钥对云的签名及签名内容进行验证。在104中所述验证结果为成功时,云端保存103中接收到的数据块及其签名,并利用私钥对这些数据块签名再做一次签名,即二次签名,然后将这些二次签名公布到区块链中。
[0079]所述二次签名指的是云端将接收到的数据块签名作为签名算法的输入数据从而产生的一个新的签名,相当于是对原数据块的第二次签名。
[0080]所述区块链为一类只能执行增添和查找操作的分布式数据库,其具有链上内容不可篡改的属性。比特币区块链用于记录比特币网络中的比特币交易,每笔交易中保留一定的空间用作交易留言,该空间大于本步骤中计算得到的凭证(即二次签名)的大小,因此可以将凭证存入区块链的交易中。由于每一笔交易标识符唯一,因此凭证的地址是唯一的,用户根据地址可以找回凭证。比特币区块链是当前可靠性和稳定性最强的区块链。将凭证存储到区块链时可以选择诸如比特币区块链、以太坊区块链的全球性的公链,或者系统开发者新构造出的仅由云端和用户组成的私链。若使用公链,则所述公布过程使用现有的api来将签名写入区块链中;若使用私链,则公布过程即云端在网络内成功发起一笔交易且交易成功被打包到区块中且被网络中的大多数节点接受。
[0081]所述存储地址与公开到区块链上的数据内容一一对应,任何拥有该存储地址的用户都可以向区块链请求这一存储地址所对应的数据内容。
[0082]示例性地,当验证成功后,云端将数据块F1,…,Fn和数字签名S1,…,Sn保存。针对每一个接收到的数字签名Si,云端使用云端私钥对其进行签名得到Si’,然后使用Tierion提供的公开api,按照规定格式通过http请求将Si’发送出去,并通过Chainpoint协议将Si’锚定到比特币区块链中,锚定成功后云端会接收到Tierion返回的锚定成功信息及存储地址。锚定成功信息用于证明Si’成功锚定到了比特币区块链,存储地址用于读取Si’。
[0083]至此步骤,数据的上传已经完成。用户和云端可以随时对已经上传的数据进行完整性检测。
[0084]步骤6:用户使用102中所述的哈希算法、用户私钥以及105中所述的云端公钥、存储地址对云端数据进行完整性校验。
[0085]所述完整性校验的具体步骤如下:
[0086]步骤6.1:用户从云端下载103中上传的数据块F1,…,Fn。
[0087]步骤6.2:用户使用存储地址K从区块链请求得到数据块F1,…,Fn对应的凭证S1’,…, Sn’。
[0088]示例性地,用户通过Tierion提供的api接口,按照规定的格式发送http请求,请求包含105中得到的存储地址,Tierion会返回给用户锚定到区块链上的内容,即本步骤所请求的凭证。
[0089]步骤6.3:针对每一个下载得到的数据块Fi,用户使用哈希算法得到数字签名的哈希值Hash(Fi),并使用用户私钥对其进行签名得到数字签名Sign(Hash(Fi))。
[0090]步骤6.4:针对每一个数据块凭证Si’,用户使用云端公钥对其进行解密得到Dec(Si’),若Sign(Hash(Fi))与Dec(Si’)相同,则用户可知数据完整,否则数据完整性遭到破坏。
[0091]示例性地,一个8MB大小的文件包含的字节数为8388600个,进行末尾补齐使该文件为16的倍数得到的文件的字节数为8388608,用AES加密之后密文的长度与明文长度相同。经过参数为(4,6)的RS码编码,得到6个字节数为2097152的文件块。按照101 中所述方法进行处理得到6个大小均为2MB文件块(此处我们使用参数为(4,6)的RS 码)。用第一个文件块举例,使用用户签名私钥进行签名得到256位的签名 3F789D362290A847B432
[0092]步骤7:云端使用102中所述的哈希算法、用户公钥以及105中所述的云端公钥、存储地址对数据进行完整性校验。
[0093]所述完整性校验的具体步骤如下:
[0094]步骤7.1:云端使用存储地址K从区块链请求得到数据块对应的凭证S1’,…,Sn’。
[0095]示例性地,云端通过Tierion提供的api接口,按照规定的格式发送http请求,请求包含105中得到的存储地址,Tierion会返回给云端锚定到区块链上的内容,即本步骤所请求的凭证。
[0096]步骤7.2:针对每一个在103中接收到的数据块Fi,云端使用哈希算法得到其哈希值 Hash(Fi)。
[0097]步骤7.3:针对每一个数据块凭证Si’,云端使用云端公钥和用户公钥依次解密得到 Dec(Dec(Si’)),若Hash(Fi)与Dec(Dec(Si’))相同,则云端可知数据完整,否则数据完整性遭到破坏。
[0098]示例性地,使用所述完整性校验方法实现出的程序代码具有检测数据块完整性的功能,当一个数据块是完整的,程序将返回完整性验证通过;当一个数据块遭到了篡改,程序将返回完整性验证失败,表明数据块遭到了篡改。实验结果输出如图3所示。如图3中的In147 行所示,当我们从云端下载到的数据块是完整的,完整性检测输出“goodsignature”(正确的签名);如图3中的In148行所示,当我们从云端下载到的数据块是被篡改的,完整心难测数据“BADSIGNATURE”(坏的签名)。
[0099]实施例2、
[0100]本发明的另一个实施例还提供了一种云端数据的完整性检测系统,如图4所示,该系统包括:用户上传模块、云端受理模块、用户检测模块和云端检测模块。其中,
[0101]用户上传模块,用于对文件进行处理并上传到云端受理模块,具体方法可参考实例1 中步骤101、102和103;
[0102]云端受理模块,用于云端对接收到的数据块及数字签名进行验证,若验证成功则对数据块进行二次签名并将其上传到区块链网络,并将区块链网络返回的地址回传用户上传模块,具体方法可参考实例1中步骤104和105;
[0103]用户检测模块,用于用户对云端数据进行完整性校验,从云端受理模块获得存储的数据,以及从云端受理模块回传的区块链网络地址凭证,用户检测模块使用获得的数据和凭证对云端数据完整性进行检测,具体方法可参考实例1中步骤106;
[0104]云端检测模块,用于云端对数据进行完整性校验,云端检测模块使用从区块链网络获得的地址凭证和现有数据进行云端数据完整性检测,具体方法可参考实例1中步骤107。
[0105]使用该完整性检测系统对一个大小为8MB的文件进行处理,将文件处理过程中的RS 码的参数设置为(3,6)。在我们所建立的模拟云环境下,对该完整性检测系统测试,得到的文件上传、下载和完整性检测所需要的时间如图5 所示。
[0106]以上对本发明的基于区块链的云端数据的完整性检测方法及系统进行了详细介绍,本发明中应用了具体个例对本发明的原理及实施方式进行阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。