一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于以太坊和星际文件系统的云文件动态完整性保护和验证方法

2022-11-02 00:33:46 来源:中国专利 TAG:


1.本发明属于云存储领域,特别涉及一种基于以太坊和星际文件系统的云文件动态完整性保护和验证方法。


背景技术:

2.在云计算出现以前,用户的数据通常都是保存于本地主机。如果用户想要确定自己的数据是否完整,最简单的办法便是亲自检查一下数据,就可以知道数据是否完整,这种方法适用于数据量并不大的时候。如果数据量变得非常大,一种解决办法是采用哈希的方式通过比较数据标签以检查数据完整性。但是以上方法都需要人为检查数据相关信息,总会存在一定的纰漏。
3.随着互联网的广泛普及、发展和应用,数据爆发式的增长,云计算应运而生。它是一种新的运作模式,通过优化资源分配,将计算资源以服务的方式提供给用户,实现网络可访问、弹性扩展的共享资源池。云存储就是将储存资源放到云上供人存取的一种新兴方案。用户可以在任何时间、任何地方、通过任何可联网的设备连接到云上方便地存取数据。为节约本地空间,越来越多的用户倾向于将自身数据放在云服务器上。在云环境下,用户为了知道保存在云端的数据是否完整,可以将存在云端的数据下载下来,然后自己查看,但是这种方式浪费了大量的网络传输资源,且依然受限于云端数据量过大的问题。另一方面,从用户的角度考虑,云数据特有的集中式存储方式造成了用户所有权和管理权的分离。云服务提供商并不完全可信,因为他们有可能出于自身利益的考虑,将一些用户很少使用的数据私自删除或者隐瞒意外的数据破坏和更改。
4.为解决以上问题,很多研究提出了一系列完整性校验模型,可以分为云租户与云服务商交互验证(私有校验)和用户授权可信第三方(委托校验)进行验证两类。
5.前一类需要用户具有足够强大的计算能力与存储空间,这在某些情况下不太现实;而后一类存在泄露用户数据隐私和绑定第三方导致的可扩展性不好的问题。传统的完整性校验方法大致上有数据持有性证明(pdp)和数据恢复性证明(por)两种,但是它们在不完全可信的环境下并不可靠。所以能否以一种去中心化的方式进行云存储和实现数据完整性验证,以规避上述模型和方法带来的问题,成为了目前研究的一大热点和挑战。
6.自satoshi nakamoto在2008年提出的比特币白皮书起,区块链作为一种共享、分布式和容错的数据库引起了大家广泛的兴趣和关注。区块链网络本质上是一个分布式公共分类帐,其中任何单个交易都由网络节点见证和验证。它的去中心化架构不仅可以为云计算环境提供可信、受保护的数据来源,也能一定程度上维护用户的隐私。同时,区块链的透明性、不可篡改性使得用户和云服务提供商之间的信任可以轻易建立起来。可以说,区块链技术可以很好地满足和解决当前云存储以及完整性校验存在的一些需求和问题。


技术实现要素:

7.本发明的目的在于提供一种基于以太坊和星际文件系统的云文件动态完整性保护和验证方法。
8.本发明为解决其技术问题采用如下技术方案,具体包括如下步骤:
9.步骤1:本地准备文件并将文件组织成一颗merkletree,获得文件的root哈希值;
10.步骤2,本地将获得的root哈希值以文件的形式存储到星际文件系统并将返回的哈希写入以太坊区块链中,同时将相关信息上传到云存储服务器端;
11.步骤3,本地发出验证请求,云存储服务器端和以太坊区块链端利用反馈的验证信息与智能合约对文件进行静态或动态完整性验证并返回结果,同时对已被损坏的云文件进行恢复。
12.本发明与现有技术相比,其显著优点在于:
13.1)在本地将文件分割成固定大小的块,并组织成一颗merkle tree,不仅可以通过比较根哈希值快速地验证云上文件内容是否被篡改或损坏,也可以根据辅助路径准确地定位到损坏文件块的位置,在后续的内容恢复中只需替换掉相应的块即可,减少了将整个文件重新传到云上进行恢复的开销。
14.2)鉴于ipfs带宽与容量的限制,将整个云文件直接存入ipfs中以获得基于内容的哈希开销过大,时间过长。而采用将整个文件存于更廉价又快速的普通云服务器上,只将文件生成根哈希值存入ipfs中的方式,可以有效地解决大文件存储与传输开销过大的问题。
15.3)以太坊区块链上存储数据是非常昂贵的,而利用ipfs与以太坊的api接口,只需将星际文件系统生成的基于内容的哈希写入以太坊区块链中,可以极大地减少交易的gas花费。同时,以太坊作为一种公有链,交易是公开透明的,通过ipfs对根哈希值的再加密再写入区块链中,保证了一定的隐私性。
16.4)通过编写智能合约,可以在数据写入区块链时进行以太坊地址的验证,以实现授权修改文件内容、ipfs哈希和写入区块链的功能,防止其他人员篡改完整性验证数据,并支持文件动态完整性验证。
17.5)针对不同的外部计算环境,在本地和云服务器上生成merkletree时可以采用不同的加密算法。例如在较为可信的环境下,采用adler32可以有效减轻运算负担;而在不可信的环境中,采用sha-256、tiger等加密算法更为安全。
18.下面结合附图和具体实施方式对本发明作进一步详细描述。
附图说明
19.图1为本发明的系统模型图。
20.图2为本发明中的文件准备流程图。
21.图3为本发明中的文件静态完整性验证流程图。
22.图4为本发明中的文件动态完整性验证流程图。
23.图5为本发明的步骤流程图。
具体实施方式
24.一种基于以太坊和星际文件系统的云文件动态完整性保护和验证方法,包含四类
实体:本地用户(client,c),云存储服务器(cloud storage server,css),星际文件系统端(inter-planetary file system,ipfs),以太坊区块链端(ethereum blockchain,ebc)。
25.如图1所示,首先本地对文件数据进行分割处理,组织成一颗merkle tree。通过星际文件系统生成的基于内容的哈希与区块链这一去中心化分布式不可篡改的账本记录对源文件完整性进行保证,再经过所设计的完整性验证流程对上传至云存储服务器css的文件进行静态验证或是修改文件后的动态验证,在验证文件完整性的同时可以对云上被损坏的文件进行恢复。
26.如图5所示,具体包括以下步骤:
27.步骤1:本地准备文件并将文件组织成一颗merkletree,获得文件的root哈希值,具体为:
28.步骤1-1:设定文件sourcefile所在位置的绝对路径absolute_path_sourcefile,并设定好将文件分割后进行保存的块文件目录absolute_path_blocks;设置文件分割块的固定大小blocksize,计算文件sourcefile分割后的总块数:
29.blocknum=sourcefile
leng
/blocksize
30.步骤1-2:设置大小为buffersize的缓冲区用于保存当前读取的文件对象,并将blocksize/buffersize的个数的缓冲区文件内容写入一个分割块blocki(0≤i≤blocknum-1),存入absolute_path_blocks目录中;
31.步骤1-3:分别读取分割好的块文件blocki(0≤i≤blocknum-1),计算blocki的文件哈希值blockihash并保存;
32.步骤1-4:以blocknum个文件哈希值作为叶子节点的哈希值,按顺序两两配对组合成新的哈希值blockihash||block
i 1
hash(0≤i≤blocknum-2且i为偶数),将新的哈希值作为父节点哈希值,这样循环下去,组织成一颗merkle tree,并获得唯一的root哈希值roothash。
33.步骤2,本地将获得的root哈希值以文件的形式存储到星际文件系统并将返回的哈希写入以太坊区块链中,同时将相关信息上传到云存储服务器端,具体为:
34.步骤2-1:将步骤1获得的root哈希值roothash转换为字节流的形式写入一个新的文件rootfile中,并指定相应的目录位置absolute_path_rootfile进行保存;
35.步骤2-2:通过ipfs-js-api抓取absolute_path_rootfile位置的文件,以缓存区的形式上传至ipfs星际文件系统中,并获得该文件基于内容的ipfs哈希ipf shash;
36.步骤2-3:编写智能合约,其中包括将步骤2-2中获得的ipfs哈希写入以太坊区块链中的sethash方法;
37.根据生成的智能合约地址smartcontract_address和abi通过以太坊账户在区块链中进行部署,并通过eth-api调用sethash方法将ipfs哈希写入以太坊交易中,打包成区块记录下来,如若成功,则返回相关的区块交易信息,若包括智能合约地址smartcontract_address,区块编号ethblocknum,交易哈希值transactionhash;
38.若不成功,则返回报错信息,并重新申请区块写入;
39.步骤2-4,本地将源文件分块和各分块辅助路径上传至云存储服务器。
40.步骤3,本地发出验证请求,云存储服务器端和以太坊区块链端利用反馈的验证信息与智能合约对文件进行静态或动态完整性验证并返回结果,同时对已被损坏的云文件进
行恢复。
41.进一步的,所述步骤3中的本地发出验证请求,具体包括文件静态完整性验证和文件动态完整性验证:
42.a:文件静态完整性验证,判断以太坊区块链端中所存ipfs哈希是否与云存储服务器端中所计算得到的ipfs哈希相等;
43.若相等,则返回文件完整;若不相等,则找出相应的损坏块进行重上传修复,具体过程为:
44.a-1:云存储服务器根据步骤2中获得的源文件分块计算出新的根哈希值roothash1;
45.a-2:云存储服务器获得roothash1在ipfs星际文件系统端返回的新ipfs哈希ipfshash1;
46.a-3:根据步骤2所保存的区块交易信息查询相对应的区块交易内容,得到原ipfs哈希ipfshash,比较的结果:若相等,则返回文件完整;
47.若不相等,则云存储服务器根据各分块辅助路径找到损坏块的位置,向本地用户重新请求新的未损坏块进行恢复,用户重新上传相应损坏块到云存储服务器,成功后返回步骤a-1。
48.b:文件动态完整性验证,当需要对文件进行修改时,采用动态完整性验证;
49.用户对文件进行修改,重新计算新的根哈希值,存到ipfs星际文件系统上并返回新的ipfs哈希。智能合约对用户当前的以太坊地址进行验证,若相同则写入以太坊区块链中,返回信息予以验证,具体为:
50.b-1:本地对文件进行修改,按照步骤1的方法生成新的根哈希值,按照步骤2的方法生成新的ipfs哈希值;
51.b-2:在本地将b-1生成的ipfs哈希值存入以太坊区块链以前,先通过智能合约对用户的以太坊地址进行验证,若与原用户地址相同则授权成功,用新的有效ipfs哈希更新旧ipfs哈希,重写入区块链中,返回必要的交易信息;若不同,则授权失败,不进行更新。
52.b-3本地将新的文件分块与辅助路径信息上传到云存储服务器上,进行文件静态完整性验证过程,并返回文件完整性结果。
53.一种基于以太坊和星际文件系统的云文件动态完整性保护和验证系统,包括以下模块:
54.文件预处理模块:用于将文件组织成一颗merkletree,获得文件的root哈希值;
55.写入与上传模块:用于将文件的root哈希值以文件的形式存储到星际文件系统并将返回的哈希写入以太坊区块链中,同时将相关信息上传到云存储服务器端;
56.验证与恢复模块:用于发出验证请求,云存储服务器端和以太坊区块链端利用反馈的验证信息与智能合约对文件进行静态或动态完整性验证并返回结果,同时对已被损坏的云文件进行恢复。
57.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
58.步骤1:本地准备文件并将文件组织成一颗merkletree,获得文件的root哈希值;
59.步骤2,本地将获得的root哈希值以文件的形式存储到星际文件系统并将返回的
哈希写入以太坊区块链中,同时将相关信息上传到云存储服务器端;
60.步骤3,本地发出验证请求,云存储服务器端和以太坊区块链端利用反馈的验证信息与智能合约对文件进行静态或动态完整性验证并返回结果,同时对已被损坏的云文件进行恢复。
61.一种计算机可存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
62.步骤1:本地准备文件并将文件组织成一颗merkletree,获得文件的root哈希值;
63.步骤2,本地将获得的root哈希值以文件的形式存储到星际文件系统并将返回的哈希写入以太坊区块链中,同时将相关信息上传到云存储服务器端;
64.步骤3,本地发出验证请求,云存储服务器端和以太坊区块链端利用反馈的验证信息与智能合约对文件进行静态或动态完整性验证并返回结果,同时对已被损坏的云文件进行恢复。
65.实施例
66.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
67.结合图2,在本地准备实验文件并进行相关验证前的准备工作,具体过程包括:
68.步骤1-1,设定好实验文件(大小为4mb)testfile所在位置的绝对路径e:\data\testfile,并预先设定好将文件分割后进行保存的块文件目录e:\data\blocks;设置分割块的固定大小blocksize=1mb,计算文件分割后的总块数ocksize=1mb,计算文件分割后的总块数
69.步骤1-2、设置缓冲区为buffersize=1kb大小用于保存当前读取的文件对象,并将个数的缓冲区文件内容写入一个新的分割块blocki(0≤i≤3),存入e:\data\blocks目录中。
70.步骤1-3,分别读取分割好的块文件blocki(0≤i≤3),计算blocki的文件哈希值blockihash并保存。这里选取sha-256加密哈希算法,生成的16进制64位字符串哈希值分别为:
71.block0hash
72.=f71cbcef48edac604b3614ac0bcd84d6cf48af117b131af3a474f6258f0e4d41
73.block1hash
74.=08c9e8eb1900c5f2c98bb3feb3a2fcbdabe1729c3c4952005d84484c82d5d937
75.block2hash
76.=a0687fe4fca348cff398350ea90199c1ae01243d7f094cdc404782d6c2c02504
77.block3hash
78.=f023f88c217694b0bcbeaaedadf500e48fc9b818be8aa36ffa4acf9f91892e52
79.步骤1-4,以上述各哈希值作为叶子节点的哈希值,按顺序两两配对组合成新的哈希值blockihash||block
i 1
hash(0≤i≤blocknum-2且i为偶数),再次哈希作为父节点哈希值,这样循环下去,组织成一颗merkle tree,并获得唯一的根节点值roothash。这里中间节
点加密算法同样选择sha-256,最终得到的根哈希值为:
80.roothash
81.=db3409e8ff156b3e7b1875dce0d490698c9ba36389a7dbce29e9f538818c7332
82.步骤2:结合图2,本地将获得的root哈希值以文件的形式存储到星际文件系统并将返回的哈希写入以太坊区块链中,同时将相关信息上传到云存储服务器端,具体为:
83.步骤2-1,将步骤1获得的根节点值roothash转换为字节流的形式写入一个新的文件rootfile中,并指定相应的目录位置e:\data\outputrootfile进行保存;
84.步骤2-2,通过ipfs-js-api抓取e:\data\outputrootfile位置的文件,以缓存区的形式上传至ipfs星际文件系统中,并获得该文件基于内容的ipfs哈希ipfshash。
85.这里获得的为
86.ipfshash=qmnnrjofd1g1yaoiyqorxex4w5vdmrcwfcva2admtmsjvm
87.具体实现代码为:
88.await ipfs.add(this.state.ipfsbuffer,(err,returnhash)=》{
89.console.log(err,returnhash);
90.this.setstate({ipfshash:returnhash[0].hash});
[0091]
步骤2-3,编写智能合约,其中包含将步骤2-2中获得的ipfs哈希写入以太坊区块链中的sethash方法。
[0092]
根据生成的智能合约地址smartcontract_address和abi通过以太坊账户在区块链中进行部署,并通过eth-api调用sethash方法将ipfs哈希写入以太坊交易中,打包成区块记录下来,返回相关的区块交易信息(智能合约地址smartcontract_address,区块编号ethblocknum,交易哈希值transactionhash等)。
[0093]
这里生成的智能合约地址为
[0094]
smartcontract_address=0x9272757eff971fa2cff1958feb65669b74d75fd1将ipfs哈希写入以太坊区块链(公用测试链)交易后,获得的区块编号、交易哈希值以及所花费的gas消耗如下:
[0095]
transactionhash
[0096]
=0xc4b78252b95c418db9273348cc319567729deac774359bb659f35d5da91c13a0
[0097]
ethblocknum=9932872
[0098]
gas=89303
[0099]
通过eth-api调用智能合约sethash方法生成交易获得交易哈希具体实现代码为:
[0100][0101]
交易完成后返回交易相关信息具体实现代码为:
[0102][0103]
步骤2-4,本地将源文件分块和各分块辅助路径上传至云存储服务器。
[0104]
步骤3,本地发出验证请求,云存储服务器端和以太坊区块链端利用反馈的验证信息与智能合约对文件进行静态或动态完整性验证并返回结果,同时对已被损坏的云文件进行恢复;
[0105]
具体包括文件静态完整性验证和文件动态完整性验证
[0106]
结合图3,文件静态完整性验证具体流程为:
[0107]
a:文件静态完整性验证,判断以太坊区块链端中所存ipfs哈希是否与云存储服务器端中所计算得到的ipfs哈希相等;
[0108]
若相等,则返回文件完整;若不相等,则找出相应的损坏块进行重上传修复,具体过程为:
[0109]
a-1:云存储服务器根据步骤2中获得的源文件分块计算出新的根哈希值roothash1;
[0110]
a-2:云存储服务器获得roothash1在ipfs星际文件系统端返回的新ipfs哈希ipfshash1;
[0111]
a-3:根据步骤2所保存的区块交易信息查询相对应的区块交易内容,得到原ipfs哈希ipfshash,比较的结果:若相等,则返回文件完整;
[0112]
若不相等,则云存储服务器根据各分块辅助路径找到损坏块的位置,向本地用户重新请求新的未损坏块进行恢复。
[0113]
b:文件动态完整性验证,当需要对文件进行修改时,采用动态完整性验证,如图4所示;
[0114]
用户对文件进行修改,重新计算新的根哈希值,存到ipfs星际文件系统上并返回新的ipfs哈希。智能合约对用户当前的以太坊地址进行验证,若相同则写入以太坊区块链中,返回信息予以验证,具体为:
[0115]
b-1:本地对文件进行修改,按照步骤1的方法生成新的根哈希值,按照步骤2-1和步骤2-2生成新的ipfs哈希值;
[0116]
b-2:在本地将步骤3-2-1生成的ipfs哈希值存入以太坊区块链以前,先通过智能合约对用户的以太坊地址进行验证,若与原用户地址相同则授权成功,用新的有效ipfs哈希更新旧ipfs哈希,重写入区块链中,返回必要的交易信息;若不同,则授权失败,不进行更新。
[0117]
b-3:本地将新的文件分块与辅助路径信息上传到云存储服务器上,进行文件静态
完整性验证过程,并返回文件完整性结果。
[0118]
综上,本发明提出了一种基于以太坊和星际文件系统的云文件动态完整性保护和验证方法,本发明采用merkletree的结构来处理并记录文件的特征信息,不仅可以通过比较根哈希值快速地验证云上文件内容是否被篡改或损坏,也可以根据辅助路径准确地定位到损坏文件块的位置,在后续的内容恢复中只需替换掉相应的块即可,避免了将整个文件重新传到云上的开销。同时,只需将文件根哈希值存入星际文件系统中,而不是传统地将整个文件的副本存入其中,有效地解决了大文件存储和传输开销过大的问题。此外,利用ipfs与以太坊的api接口,将星际文件系统生成的基于内容的哈希写入以太坊区块链中,在保证完整性、隐私性的同时,减轻了区块链上存储数据非常昂贵的负担。最后,使用以太坊提供的智能合约,设计更新ipfs上文件根哈希值的机制,通过授权实现针对文件修改等动态操作的动态完整性验证。
[0119]
以上显示和描述了本发明的基本原理、主要特征及优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献