基于区块链技术的文档防篡改系统
2021-02-27王升范思宇杜玉洁李浩维郭元祯张良
◆王升 范思宇 杜玉洁 李浩维 郭元祯 张良
基于区块链技术的文档防篡改系统
◆王升 范思宇 杜玉洁 李浩维 郭元祯 张良指导老师
(北京信息科技大学计算机学院 北京 100101)
就目前而言,电子文档存在着依赖第三方的公信力与文档可能被篡改等问题。在本系统中利用区块链技术辅以IPFS分布式存储技术,保证了电子文档在上传、存储、查验时无须依赖于第三方的公信力,实现文档存储于IPFS并转换成哈希值,将哈希值上传到以太坊后完成可溯源以及防篡改。
区块链;文档;防篡改;系统
1 引言
纸质文档不易带、不易随时查看等缺点正逐步显现,电子文档代替纸质文件已成必然。而电子文档由于极度依赖第三方的认证才能保证具有公信力,在电子文档传递到认证机构上时难免出现泄密、遭到篡改与不公开等问题。区块链本身具有的去中心化、不可篡改与透明等特点可以帮我们解决这个问题。使用区块链技术辅以分布式存储系统,可以先让处于区块链中的节点签署智能合约,然后节点上传的文档经过计算,将其哈希值上传到以太坊上保存。又因为文件存储在以太坊中极其昂贵,所以我们使用IPFS存储我们的文件,其本身分布式存储、去中心,高效便宜的特点大大提高了我们存储下载文件的效率。当文档被篡改,那么其转码后哈希值就会发生很大的变化。因而只要在链上的文档的哈希值得不到验证,就可以发现文档被篡改。这样既保证了文档的不可篡改又解决了依赖第三方认证的问题。
2 技术原理
2.1 区块链技术和以太坊
区块链包括三个基本概念:(1)交易(2)区块(3)链。交易表示一次对账本的操作,区块表示一段时间内节点对账本状态的共识,链表示由区块发生顺序串联而成,是整个账本状态变换的记录。区块链结构见图1。
图1 区块链结构
以太坊Ethereum项目是在区块链领域中相当出名的开源项目。作为公有区块链平台,以太坊将Bitcoin针对数字货币交易的功能进行了拓展,加强了面对更为复杂和灵活的应用场景时的能力。在以太坊平台中开发了两个类型的网络,分别是TestNet测试网络与生产环境网络。对于开发而言,我们还可以使用私有网络,在私有网络中我们可以根据需求任意的创建和销毁,从而使智能合约在开发过程中更加方便。并且我们可以利用本地版以太坊私有链Ganache进行开发,会大大节约开发时间。
2.2 智能合约
以太坊中的智能合约是发布在区块链上的一种可运行的程序代码,它可以实现某种特定的情则。以太坊的账户与合约如图2。
图2 账户与合约
对于以太坊而言,开发者可以在以太坊上开发属于自己的智能合约。以太坊的账户可以分为两种,一种存有智能合约的账户叫合约账户。相应地,由密钥控制的账户称为外部账户。要运行一次智能合约,应由外部账户对合约账户发起一次交易,从而启动合约账户中的代码。
在本系统中智能合约利用solidity语言编写,并在以太坊智能合约在线编译网站Remix上完成编写与编译。
2.3 IPFS分布式存储
IPFS是全称为Inter Planetary File System,即星际文件系统,是一个点对点的分布式文件存储和分享的协议。IPFS基于内容寻址,将信息保存到IPFS节点中,IPFS系统将返回该信息的唯一哈希值,哈希值与信息内容一一对应,即使改变了一比特也会得到完全不同的哈希值。当IPFS被请求一个哈希时,它会找到该文件的节点取回文件。并且当其他用户上传相同的文件时,会因为具有相同的哈希值而上传失败,这样便可以大大节约存储空间。而IPFSDesktop是一个由IPFS官方孵化出来的应用项目,可以帮我们自动创建本地web服务。
3 系统设计
3.1 系统架构的设计
为了实现文档的防篡改、透明、可追溯等功能,采用区块链技术与IPFS分布式存储相结合来完成本系统。该系统将文档首先上传到IPFS中,之后IPFS返回一个哈希值,再将哈希值存储到以太坊区块链中,区块链执行完智能合约后将执行结果打包成区块。在前端界面,通过文件命名和区块高度对存储到哈希值进行描述和编号排序。每当用户希望查看文件是否遭到篡改或验证时,可以通过将hash放到IPFS中进行文件查阅。架构设计如图3,进行流程如图4。
图3 架构设计
图4 流程
3.2 开发框架与智能合约设计
Truffle是一套基于以太坊技术的开发框架,通过truffle init命令便可进行初始化。主要目录为contract和migrations,它们分别用来存放智能合约代码和发布脚本文件,前端界面存放于src目录。
在智能合约Election.sol中设计了一个结构体:product。结构体与合约成员函数解释如图5所示。
图5 结构体与合约成员函数解释图
3.3 前端页面功能设计
前端部分为了便于用户添加文件与连接以太坊,系统主要功能设计如下:
(1)文档上传:用户可以选择本地文件保存到IPFS中,并返回唯一HASH值。
图6 文档上传
(2)写入区块链:用户将文件的描述、类别、哈希值写入区块链,并通过智能合约打包成区块写入账本。
图7 写入区块链
(3)显示所有链上文件:根据区块高度对区块进行编号,按生成时间顺序显示所有链上信息。
图8 显示所有链上文件
(4)通过查询哈希值显示文件:根据文档唯一哈希值查询文档的IPFS网关,利用网关地址显示文档信息。
图9 通过查询哈希值显示文件
4 基于区块链技术的文档防篡改系统的实现与运行
运行以太坊Dapp需要消耗相应的以太币,所以需要用专门的钱包来对账户进行管理,提供以太币的存储和转移。在本系统中,我们使用Chrome浏览器的拓展插件MetaMask来解决以及本地以太坊开发工具Ganache完成链的部署。在Windows的Windows PowerShell(管理员)命令行进入项目根目录中输入:
(1)truffle compile //进行合约编译
(2)truffle migrate //进行项目的发布,此时Ganache会产生四个区块
(3)npm run dev //启动服务
在页面部分有上传、上链、显示、查询的功能。当用户上传文档到IPFS时,IPFS返回唯一的hash值。用户将文件描述、分类和哈希值上链。每当上链一个文档时,刷新一次页面显示当前所有的区块。当用户通过哈希值查找时会返回一个IPFS网址,利用网址即可下载原文件。由于区块链本身的性质,上传的交易不可篡改,可溯源。在查阅原文件时便可以确定文档是否被篡改。又因为hash是唯一的,若上传的文档发生了改变,那么hash值也会跟之前的hash有很大区别。从而实现电子文档的透明、安全、可溯源的功能。
5 结论
在本项目中通过区块链技术通过上传摘要hash的形式,辅以IPFS的分布式存储实现了对于文档电子签名化、防篡改以及下载等功能。我们通过这个项目可以看到区块链技术在安全性和轻便性都远远大于如今的纸质化交易,我们有理由相信在将来利用区块链技术构造商业网络的那时,便能够构建一个公开去中心化的交易平台,实现交易高效的同时无法篡改,我们可以大幅度的缩减交易的成本,提高社会的沟通和合作效率。
[1]张小雪,陆萍.基于以太坊的众筹系统的设计与实现[J].甘肃科技纵横,2020(3):30-34.
[2]周艺华,李洪明.基于区块链的数据管理方案[J].信息安全研究,2020(1):37-49.
[3]杜歆文.基于区块链2.0以太坊公链的版权管理系统[J].现代电报技术,2019( 12):97-101.
[4]杨保华,陈昌.区块链原理、设计与应用[M].机械工业出版社:北京,2018:93-97.
[5]殷龙,王宏伟.基于IPFS的分布式数据共享系统的研究[J].物联网技术,2016,6:60-62.
由北京信息科技大学2020年大学生创新创业训练计划项目资助