2. 西安电子科技大学 通信工程学院 陕西 西安 710071
2. College of Information Engineering, Xidian University, Xi′an 710071, China
如今无论是办公自动化管理系统,还是信息传播工具等都会涉及信息的使用、传输、处理,此过程中会产生大量重要信息[1],这些数据如果保存不当,或将会造成难以估量的损失。
作为分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式[2],区块链可以有效保证数据的完整性和真实性,其技术特性符合可靠存储的应用需求[3]。然而,现有的区块链因其本身存储数据有限,导致容量大的文件不能直接上链保存,存储成本昂贵,并且区块确认时间难以缩短,系统吞吐量低[4]。
针对上述问题,科研人员关于区块链安全存储开展了许多研究。对于大数据存储,Cheng等[5]提出了一种基于云的大数据安全存储和共享方案保证数据安全性,但存在云服务器的数据隐私和安全难以保证。余海波等[6]提出一种基于区块链的云存储方案,有效解决了数据完整性问题和隐私保护问题,但系统可靠性、运行速度不稳定。王辉等[7]采用改进的PBFT共识算法和优化哈希加密算法,将数据存储于分布式数据库中,但分布式数据库结点数量有限。Storj[8]项目是基于以太坊发行的去中心化云存储网络,但是网络中用户必须一直在线,以便验证矿工是否存储了文件,而且容易受到攻击且无法支撑高频率的交易。Sia[9]是基于工作量证明(PoW)的区块链去中心化存储的项目, 采用的PoW共识机制会导致严重的算力浪费和耗电问题,也难以公平反映用户的存储和带宽的资源供给能力。
通过对区块链数据存储的文献调研发现,基于区块链的存储研究已经有了一定的成果。目前区块链数据存储首要解决的问题是安全性,在此基础上还要实现性能可靠、存储承载量大等功能。本文提出一种基于容量证明(proof of capacity,PoC)共识机制的区块链和IPFS的去中心化可靠存储方案,在此基础上设计并实现了基于PoC共识的区块链可靠存储系统。通过采用PoC共识的区块链,结合IPFS技术,将需要存储的重要数据进行加密后上传存储,用于保障数据完整、安全,同时实现了上传文件的提取、查询交易、钱包转账等功能。
1 相关技术 1.1 区块链技术区块链技术是一种去中心化的存储技术,其本质是一种分布式全局账本数据库,具有去中心化、开放性、独立性、安全性、匿名性等特点[10-11]。这种链式结构使得某一个区块中的数据一旦被修改,则会使得后续的区块都无法通过验证,所以数据很难被篡改[12]。
区块链技术运用共识算法,在结点之间建立“信任”的网络,主流的共识算法包括PoW、权益证明(PoS)和PoC等。本文选择PoC作为共识算法。
1.2 IPFS系统星际文件系统(inter planetary file system, IPFS)通过引入基于内容的寻址方案,采用去中心化的对等网络进行信息交换,可广泛应用于数据共享和数据传播,并确保数据的真实性[13]。IPFS具有下载速度快、全球存储、安全、数据永存等优势,可以解决HTTP的中心化、低效等问题,不高度依赖主干网络,且没有单点故障[14]。
1.3 PoC共识PoC共识是一种利用本地计算机硬盘驱动器里的闲置空间来进行挖矿的共识算法。PoC共识具有存储硬化、I/O不敏感、网络带宽不敏感等特点[15]。PoC共识是通过提前计算,将计算初始结果存储在本地硬盘上,在矿工竞争记账权时,通过检索矿工本地硬盘数据来寻找对应结果,从而降低共识过程中大量计算造成的浪费[16]。
PoC共识由证明者P(prover)和验证者V(verifier)组成,算法分成两个阶段[17]。第一个阶段为初始化阶段,V生成一个随机大小的文件发送给P进行存储,而V只需要存储文件的部分内容[18]。第二个阶段V对P是否进行存储指定文件验证,V令P发送一个指定位置的文件片段,这样P为保证正确回答问题,必须保存整个文件,而V只需要保存一段数据即可。
2 存储系统实现 2.1 开发环境与技术架构 2.1.1 系统开发环境本系统基于Windows环境进行开发,平台的搭建后端使用Java语言编写,前端开发基于Bootstrap框架,系统访问页面使用HTML、JavaScript实现,采用H2数据库,系统架构主要分为web前端和区块链网络。
2.1.2 系统技术架构基于PoC的区块链可靠存储方案的系统功能模型如图 1所示。交易模块完成数据上链和区块同步管理。挖矿模块包含P盘扫盘模块、爆块验证模块,完成数据的交易信息确认,打包到区块链上并产生虚拟币,在本系统的设计中矿工共享多余的存储容量,提前将数据写入硬盘中,在竞争记账权时,从一个或多个本地Plot文件中读取随机数(nonce)值,并验证区块倒计时(Deadline)有效性。当其生效时,钱包开始锻造新的区块并进行广播,从而作为记账的激励,矿工将会获得虚拟币奖励用于系统存储或下载文件。存储模块主要完成重要文件IPFS存储和提取码加密上链存储,实现文件信息的上传和下载。P2P模块包含区块链中的结点同步和结点管理。
![]() |
图 1 系统功能模型图 Fig. 1 System function model diagram |
本系统技术架构分为三层。第一层为展示层,即用户通过web客户端进行操作。第二层为合约层,封装了各类智能合约、脚本和算法。第三层为数据层包括所有的数据内容,如区块数据、链式结构、数字签名、散列函数、非对称加密、时间戳等。系统调用IPFS存储接口将文件存入IPFS结点中,IPFS系统通过计算将文件拆分成若干个256 kB大小的块,且为每一个块赋予唯一的哈希值,将每一个哈希值按照一定的次序排成哈希列表记录文件存储位置,用于进行文件的查询、下载。IPFS存储文件后返回最终生成的哈希值,加密后进行区块打包,创建未确认交易,待验证后写入区块链中。本系统使用H2数据库,它本身只是一个类库,即只有一个jar文件,可以直接嵌入Java应用程序中,以客户端-服务器模式运行使用,同应用程序打包一起发布。
2.1.3 PoC共识搭建PoC共识算法的搭建主要分为生成Plot文件和区块锻造两个过程。
1) 生成Plot文件
Step1 选择nonce与矿工AccountID构成初始种子进行Shabal256计算,得到第一个哈希结果Hash#8191。
Step2 将Step1得到的Hash#8191添加到AccountID和nonce之前,再进行一次Shabal256计算,得到Hash#8190。
Step3 按以上方式进行8 192次循环后,矿工得到8 192个哈希值,然后再进行一次Shabal256计算。
Step4 将之前的8 192个哈希值逐个与最终哈希值进行异或运算,得到的8 192个异或后的哈希值保存下来,这些数据就是未来挖矿时需要搜索的范围。
Step5 将8 192个哈希值每两个合并为一个Scoop填入nonce cell,最终得到4 096个nonce cell。
Step6 对nonce cell进行优化排列,直至填满Plot文件。
2) 区块锻造
Step1 矿工将签名和块高度进行组合作为种子,进行Shabal256计算,生成哈希值,并进行取模运算,得到答案所属Scoop Number。
Step2 取出Plot文件中所有的Scoop数据,将该数据和签名进行组合作为种子,再进行Shabal256计算,得到Target。
Step3 将Target除以代表难度的系统参数BaseTarget,得到Deadline。
Step4 若上一区块距离当前所经过的时间达到或超过了找到的Deadline,并且没有其他矿工提交更小的Deadline,则该矿工就获得了该区块的打包和锻造权。
2.2 文件存储功能实现 2.2.1 用户注册登录本存储系统通过密码登录区块链钱包。用户在使用前需要先注册账户信息,系统自动生成12个助记词,作为登录的唯一方式。字符串类型的助记词转成字节型数据存储后生成32 B的公钥。系统通过生成的公钥,创建区块链钱包的账户和地址。
2.2.2 文件存储上链用户选择文件存储功能,在上传前需要扣除一定的虚拟币作为使用权限。
文件上传至IPFS网络,IPFS用SHA-256(secure Hash algorithm-256)算法将大文件进行切片分割成256 kB的数据块,通过容错机制进行备份,保证文件可以完整恢复。分割后的数据块存储在各个结点中,最终返回256位的文件提取哈希值。IPFS网络里的每个结点都维护一张分布式哈希表(DHT),其中包含查找相应的哈希值与哈希值存在位置的对应映射关系。
由于系统采用SM2加密算法的相关运算是基于字节型字符串,所以客户端将字符串类型文件哈希值通过getBytes()方法转成字符型数据,再通过SM2的processBlock()方法生成字符型加密信息M,最终通过Hex.toHexString(M)转成字符串类型的提取码,系统向用户返回存储成功的反馈并告知用户文件成功上传。客户端将文件名、文件描述、加密的提取码等信息打包至区块信息中,创建未确认交易,等待结点共识。在交易确认完成爆块操作后,区块文件信息等将会写入区块链。文件存储流程如图 2所示。
![]() |
图 2 文件存储流程图 Fig. 2 File storage flowchart |
用户登录区块链钱包后可以通过文件存储列表选择需要下载的文件, 系统对提取码进行解密从IPFS网络下载到本地。本存储系统是去中心化的,文件分割后存在多个结点中,下载时从多个结点同时并行下载,速度远远大于直接下载完整文件的速度,最后在本地拼成完整的文件,下载过程速度快且安全。用户成功登录后,在存储文件列表中可以选择查看具体的存储信息并下载。下载页面会凭借账户自动加载SM2加密后的哈希值,通过用户输入私钥和需要存储的地址,系统将字符串类型加密数据用toByteArray()方法转化为字符类型,再用SM2中engine.processBlock()方法将传入的私钥、加密数据进行解密,将解密的字符类型数据转化成字符串类型,调用IPFS中Multihash.fromBase58()函数得到原哈希值后即可下载文件。当交易信息被确认后,其他用户虽然可以看到交易信息,没有私钥,不能得到文件提取码,从而保证了文件安全。文件下载流程如图 3所示。
![]() |
图 3 文件下载流程图 Fig. 3 File download flowchart |
本系统重点测试注册登录钱包、文件存储、文件下载等功能。启动钱包后,区块链会利用P2P网络同步更新,获取结点同步信息自动同步其他结点的数据,同步结束后即可进行交易的查询和转账等操作,具体如下所示。
3.1 用户登录用户首次打开web钱包展示的欢迎页面,提供登录和注册功能。注册账户会自动生成12个助记单词用来登录,成功登录的账户会由系统发放虚拟币作为使用权限。用户登录成功后,在本地用SM2加密算法生成公、私钥对用来加密存储信息。
3.2 文件上传用户登录成功后,选择存储文件功能,在余额充足的条件下,上传文件至IPFS并返回哈希值,为了保障文件的存储安全,不能直接把哈希值打包至区块链,需要经过SM2加密后,将密文和文件相关信息一起打包到未确认交易池中,等矿工挖矿成功后将区块数据写入区块链并进行广播。
3.3 文件下载存储文件的部分信息可以在存储列表中展示,未确认的交易待矿工挖矿成功后,交易信息会在交易列表中显示,虽然所有用户都能看到,但是只能看到密文,从而保证交易信息安全。用户选择需要下载的文件,输入用户私钥及存储地址下载。
4 系统分析 4.1 性能分析系统通过上传图片、视频等文件到区块链,经过上传测试,上传平均速度83.1 M/s。系统通过从IPFS网络下载文件,IPFS的整个哈希表用二叉树的算法,平均查询联系结点的复杂度是O(log2N),下载文件时从多个结点下载,采用P2P方式,经过测试,下载平均速度为90.2 MB/s。使用Jmeter工具对系统打包上链接口进行多线程压力测试,http响应时间平均在0.5 ms左右。
PoC共识机制产生的Plot文件可以一次生成、长期保存并重复使用,并且在生成过程中仅需要网络传播、检索以及简单的验证性计算,故PoC机制对高性能计算资源以及电力能源的消耗可以被降到最低限度,且解决了PoW的能源消耗问题。本系统单区块最大承载交易数测试值为7 553,即单次交易承载量可以满足溯源系统的区块交易需求。TPS(transactions per second) 是指系统每秒能够处理的事务数值,是衡量区块链系统性能的重要指标之一,随着区块链的不断更新发展,部分主流区块链项目因网络阻塞问题致其无法在高并发业务领域实施。表 1为本系统与比特币的测试对比。
![]() |
表 1 本系统与比特币的交易测试 Tab. 1 Transaction test between the system and bitcoin |
1) 区块链安全分析
本系统中用户的代币即权限,只有授权的用户才可以参与记账,有效限制了攻击。区块链中所有交易以Merkle树形式存放在区块中,一旦数据被篡改,所有人都不认可此数据,从而保证区块中数据不被篡改。系统在配置文件中设置了只能处理本机的网络URL请求,恶意结点无法用DDoS攻击破坏区块链中交易功能。
2) 数据存储安全分析
用户将待存储文件上传至IPFS网络中,IPFS基于内容寻址,利用存储文件的内容生成唯一的哈希值,重复的文件内容只存储一次,保证了文件内容的真实性和不可篡改性。IPFS系统本身没有加密功能,为了数据隐私安全,用户可以利用SM2算法对存储文件的哈希值进行公钥加密,密文可以保证存储文件不被其他结点随意下载、查看。存储文件的IPFS哈希值以加密的形式存储在区块链上,用户只有使用私钥解密,才能获取密钥解密后的提取码,恶意用户无法解密该文件。
底层账本技术带有存储功能,但并不适合存储大量数据。IPFS处理大量数据,并将加密后不可变的永久IPFS哈希值放入区块链事务中,可以保证文件内容安全,而不必将数据放在容量有限的区块链上。这样即可实现交易公开透明、数据安全可靠、海量数据可存储的真实可信系统。
3) IPFS安全分析
用户在IPFS网络中存储一个文件,这个文件被SHA-256加密算法分割成若干个碎片,分散存储在世界各地存储器中,IPFS的容错机制会保证数据复制了足够多数量并存放在不同区域,即使某一地区的数据因不可抗力完全摧毁,通过其他地区备份也可完全恢复数据,保证存储在IPFS上的数据安全。另外,IPFS会把每个数据文件都进行加密,只有使用密钥才能打开访问,并且密钥只有用户自己拥有。即使黑客或攻击者可以窃取数据,没有密钥,无法破解,就算花大量时间破解了密钥,也只是片段化的无用数据,保证了IPFS存储的隐私性。IPFS所有访问将会被分散到不同的结点,能够抵御目前互联网的主要攻击类型,包括DDOS攻击、外包攻击等。
4) PoC共识算法安全分析
PoC共识使用硬盘代替了CPU挖矿,锻造人通过提供更大的存储空间容量来提高锻造区块的成功率,而生成攻击是一类针对存储证明网络的攻击形式,通过高效率低成本的软件,生成大量的存储资源信息,从而“欺骗”共识网络层的结点验证,这种方式使得恶意矿工能获取大量的区块收益。PoC共识为了防止生成攻击,通过调整难度将预期的出块时间限制在4 min。对每一个锻造人合理估算,当矿工每次提交答案,共识系统都会对其进行验证。
本方案基于PoC共识的区块链可靠存储系统,在区块链去中心化存储的基础上,扩展了存储容量,提升了系统性能,满足实际应用需求。同时,本方案在性能安全方面和其他文献中的存储方案相比,具有优势。方案[6]、[7]不是完全的去中心化,在应用中无法确保数据可信,方案[9]依靠PoW共识, 在生成区块信息时造成了大量的无用计算。本方案在实现去中心化系统搭建上,采用IPFS提升其可靠存储能力,同时基于PoC的算法共识将高能源消耗替代为低能耗的硬盘查找,保证底层的安全性,满足区块链存储系统的应用要求。
5 结语将区块链技术应用数据存储领域是一个重要的研究方向,解决了数据存储面临的中心化、安全等问题。本文提出的基于PoC共识的区块链可靠存储系统结合IPFS技术,能够在保证存储数据文件完整、可信的前提下,实现重要文件存储、下载及查询等功能。本系统采用PoC共识的算法将高能源消耗替代为低能耗的硬盘查找,凭借高安全性、低能耗、公平、开放等特点,实现绿色节能且安全的可靠存储系统。
本文虽然实现了基于共识的区块链可靠存储系统,但随着区块链不断发展,共识机制不断改进与加密技术不断更新升级,未来将对本方案继续改进。
[1] |
王晨, 钱雪. 去中心化的未来数据存储[J]. 上海信息化, 2020(10): 38-40. WANG C, QIAN X. Decentralized future data storage[J]. Shanghai informatization, 2020(10): 38-40. ( ![]() |
[2] |
毕晓冰. 基于iOS的区块链数字钱包设计与实现[D]. 北京: 北京邮电大学, 2020. BI X B. Design and implementation of digital wallet based on iOS blockchain[D]. Beijing: Beijing University of Posts and Telecommunications, 2020. ( ![]() |
[3] |
宋世昕. 基于区块链和IPFS的去中心化电子存证系统的研究与实现[D]. 北京: 北京工业大学, 2019. SONG S X. Research and implementation of decentralized electronic depository system based on blockchain and IPFS[D]. Beijing: Beijing University of Technology, 2019. ( ![]() |
[4] |
高文涛. 基于双链区块链的数据存储与共识算法研究[D]. 天津: 天津师范大学, 2020. GAO W T. Research on data storage and consensus algorithm based on double chain blockchain[D]. Tianjin: Tianjin Normal University, 2020. ( ![]() |
[5] |
CHENG H B, RONG C M, HWANG K, et al. Secure big data storage and sharing scheme for cloud tenants[J]. China communications, 2015, 12(6): 106-115. DOI:10.1109/CC.2015.7122469 ( ![]() |
[6] |
余海波, 陈洁, 张凯. 一种基于区块链的安全云存储方案设计[J]. 计算机应用与软件, 2021, 38(4): 64-68. YU H B, CHEN J, ZHANG K. Design of a secure cloud storage scheme based on blockchain[J]. Computer applications and software, 2021, 38(4): 64-68. ( ![]() |
[7] |
王辉, 刘玉祥, 曹顺湘, 等. 融入区块链技术的医疗数据存储机制[J]. 计算机科学, 2020, 47(4): 285-291. WANG H, LIU Y X, CAO S X, et al. Medical data storage mechanism integrating blockchain technology[J]. Computer science, 2020, 47(4): 285-291. ( ![]() |
[8] |
WILKINSON S, BOSHEVSKI T, BRANDOFF J, et al. Storj a peer-to-peer cloud storage network[EB/OL]. (2019-05-23)[2021-05-30]. https://storj.io/storj2014.pdf.
( ![]() |
[9] |
THWIN T T. VASUPONGAYYA S. Performance and cost analysis of sia a blockchain-based storage platform[J]. International journal of networked and distributed computing, 2020, 8(3): 139-151. DOI:10.2991/ijndc.k.200515.002 ( ![]() |
[10] |
CHEN Y, DING S, XU Z, et al. Blockchain-based medical records secure storage and medical service framework[J]. Journal of medical systems, 2019, 43(1): 1-9. DOI:10.1007/s10916-018-1115-2 ( ![]() |
[11] |
韩璇, 袁勇, 王飞跃. 区块链安全问题: 研究现状与展望[J]. 自动化学报, 2019, 45(1): 206-225. HAN X, YUAN Y, WANG F Y. Security problems on blockchain: the state of the art and future trends[J]. Acta automatica sinica, 2019, 45(1): 206-225. ( ![]() |
[12] |
张利华, 蓝凡, 姜攀攀, 等. 基于双区块链的医疗记录安全存储与共享方案[J]. 计算机工程与科学, 2019, 41(9): 1581-1587. ZHANG L H, LAN F, JIANG P P, et al. A secure medical record storage and sharing scheme based on dual-blockchain[J]. Computer engineering & science, 2019, 41(9): 1581-1587. ( ![]() |
[13] |
KUMAR R, TRIPATHI R. Implementation of distributed file storage and access framework using IPFS and blockchain[C]//The Fifth International Conference on Image Information Processing. Piscataway: IEEE Press, 2019: 246-251.
( ![]() |
[14] |
王纪樟. 基于区块链+IPFS的数据共享平台实现[D]. 杭州: 浙江工商大学, 2018. WANG J Z. Implementation of data sharing platform based on blockchain+IPFS[D]. Hangzhou: Zhejiang Gongshang University, 2018. ( ![]() |
[15] |
ATENIESE G, BONACINA I, FAONIO A, et al. Proofs of space: when space is of the essence[M]//Lecture notes in computer science. Cham: Springer International Publishing, 2014: 538-557.
( ![]() |
[16] |
DZIEMBOWSKI S, FAUST S, KOLMOGOROV V, et al. Proofs of space[M]//Lecture notes in computer science. Cham: Springer International Publishing, 2015: 585-605.
( ![]() |
[17] |
代小龙. 基于区块链的分布式数据存取应用方案研究[D]. 重庆: 重庆邮电大学, 2020. DAI X L. Research on distributed data access application scheme based on blockchain[D]. Chongqing: Chongqing University of Posts and Telecommunications, 2020. ( ![]() |
[18] |
ABUSALAH H, ALWEN J, COHEN B, et al. Beyond hellman's time-memory trade-offs with applications to proofs of space[M]//Advances in cryptology. Cham: Springer International Publishing, 2017: 357-379.
( ![]() |