◆王升 范思宇 杜玉潔 李浩維 郭元禎 張良
基于區(qū)塊鏈技術(shù)的文檔防篡改系統(tǒng)
◆王升 范思宇 杜玉潔 李浩維 郭元禎 張良指導(dǎo)老師
(北京信息科技大學(xué)計算機學(xué)院 北京 100101)
就目前而言,電子文檔存在著依賴第三方的公信力與文檔可能被篡改等問題。在本系統(tǒng)中利用區(qū)塊鏈技術(shù)輔以IPFS分布式存儲技術(shù),保證了電子文檔在上傳、存儲、查驗時無須依賴于第三方的公信力,實現(xiàn)文檔存儲于IPFS并轉(zhuǎn)換成哈希值,將哈希值上傳到以太坊后完成可溯源以及防篡改。
區(qū)塊鏈;文檔;防篡改;系統(tǒng)
紙質(zhì)文檔不易帶、不易隨時查看等缺點正逐步顯現(xiàn),電子文檔代替紙質(zhì)文件已成必然。而電子文檔由于極度依賴第三方的認證才能保證具有公信力,在電子文檔傳遞到認證機構(gòu)上時難免出現(xiàn)泄密、遭到篡改與不公開等問題。區(qū)塊鏈本身具有的去中心化、不可篡改與透明等特點可以幫我們解決這個問題。使用區(qū)塊鏈技術(shù)輔以分布式存儲系統(tǒng),可以先讓處于區(qū)塊鏈中的節(jié)點簽署智能合約,然后節(jié)點上傳的文檔經(jīng)過計算,將其哈希值上傳到以太坊上保存。又因為文件存儲在以太坊中極其昂貴,所以我們使用IPFS存儲我們的文件,其本身分布式存儲、去中心,高效便宜的特點大大提高了我們存儲下載文件的效率。當(dāng)文檔被篡改,那么其轉(zhuǎn)碼后哈希值就會發(fā)生很大的變化。因而只要在鏈上的文檔的哈希值得不到驗證,就可以發(fā)現(xiàn)文檔被篡改。這樣既保證了文檔的不可篡改又解決了依賴第三方認證的問題。
區(qū)塊鏈包括三個基本概念:(1)交易(2)區(qū)塊(3)鏈。交易表示一次對賬本的操作,區(qū)塊表示一段時間內(nèi)節(jié)點對賬本狀態(tài)的共識,鏈表示由區(qū)塊發(fā)生順序串聯(lián)而成,是整個賬本狀態(tài)變換的記錄。區(qū)塊鏈結(jié)構(gòu)見圖1。

圖1 區(qū)塊鏈結(jié)構(gòu)
以太坊Ethereum項目是在區(qū)塊鏈領(lǐng)域中相當(dāng)出名的開源項目。作為公有區(qū)塊鏈平臺,以太坊將Bitcoin針對數(shù)字貨幣交易的功能進行了拓展,加強了面對更為復(fù)雜和靈活的應(yīng)用場景時的能力。在以太坊平臺中開發(fā)了兩個類型的網(wǎng)絡(luò),分別是TestNet測試網(wǎng)絡(luò)與生產(chǎn)環(huán)境網(wǎng)絡(luò)。對于開發(fā)而言,我們還可以使用私有網(wǎng)絡(luò),在私有網(wǎng)絡(luò)中我們可以根據(jù)需求任意的創(chuàng)建和銷毀,從而使智能合約在開發(fā)過程中更加方便。并且我們可以利用本地版以太坊私有鏈Ganache進行開發(fā),會大大節(jié)約開發(fā)時間。
以太坊中的智能合約是發(fā)布在區(qū)塊鏈上的一種可運行的程序代碼,它可以實現(xiàn)某種特定的情則。以太坊的賬戶與合約如圖2。

圖2 賬戶與合約
對于以太坊而言,開發(fā)者可以在以太坊上開發(fā)屬于自己的智能合約。以太坊的賬戶可以分為兩種,一種存有智能合約的賬戶叫合約賬戶。相應(yīng)地,由密鑰控制的賬戶稱為外部賬戶。要運行一次智能合約,應(yīng)由外部賬戶對合約賬戶發(fā)起一次交易,從而啟動合約賬戶中的代碼。
在本系統(tǒng)中智能合約利用solidity語言編寫,并在以太坊智能合約在線編譯網(wǎng)站Remix上完成編寫與編譯。
IPFS是全稱為Inter Planetary File System,即星際文件系統(tǒng),是一個點對點的分布式文件存儲和分享的協(xié)議。IPFS基于內(nèi)容尋址,將信息保存到IPFS節(jié)點中,IPFS系統(tǒng)將返回該信息的唯一哈希值,哈希值與信息內(nèi)容一一對應(yīng),即使改變了一比特也會得到完全不同的哈希值。當(dāng)IPFS被請求一個哈希時,它會找到該文件的節(jié)點取回文件。并且當(dāng)其他用戶上傳相同的文件時,會因為具有相同的哈希值而上傳失敗,這樣便可以大大節(jié)約存儲空間。而IPFSDesktop是一個由IPFS官方孵化出來的應(yīng)用項目,可以幫我們自動創(chuàng)建本地web服務(wù)。
為了實現(xiàn)文檔的防篡改、透明、可追溯等功能,采用區(qū)塊鏈技術(shù)與IPFS分布式存儲相結(jié)合來完成本系統(tǒng)。該系統(tǒng)將文檔首先上傳到IPFS中,之后IPFS返回一個哈希值,再將哈希值存儲到以太坊區(qū)塊鏈中,區(qū)塊鏈執(zhí)行完智能合約后將執(zhí)行結(jié)果打包成區(qū)塊。在前端界面,通過文件命名和區(qū)塊高度對存儲到哈希值進行描述和編號排序。每當(dāng)用戶希望查看文件是否遭到篡改或驗證時,可以通過將hash放到IPFS中進行文件查閱。架構(gòu)設(shè)計如圖3,進行流程如圖4。

圖3 架構(gòu)設(shè)計

圖4 流程
Truffle是一套基于以太坊技術(shù)的開發(fā)框架,通過truffle init命令便可進行初始化。主要目錄為contract和migrations,它們分別用來存放智能合約代碼和發(fā)布腳本文件,前端界面存放于src目錄。
在智能合約Election.sol中設(shè)計了一個結(jié)構(gòu)體:product。結(jié)構(gòu)體與合約成員函數(shù)解釋如圖5所示。

圖5 結(jié)構(gòu)體與合約成員函數(shù)解釋圖
前端部分為了便于用戶添加文件與連接以太坊,系統(tǒng)主要功能設(shè)計如下:
(1)文檔上傳:用戶可以選擇本地文件保存到IPFS中,并返回唯一HASH值。

圖6 文檔上傳
(2)寫入?yún)^(qū)塊鏈:用戶將文件的描述、類別、哈希值寫入?yún)^(qū)塊鏈,并通過智能合約打包成區(qū)塊寫入賬本。

圖7 寫入?yún)^(qū)塊鏈
(3)顯示所有鏈上文件:根據(jù)區(qū)塊高度對區(qū)塊進行編號,按生成時間順序顯示所有鏈上信息。

圖8 顯示所有鏈上文件
(4)通過查詢哈希值顯示文件:根據(jù)文檔唯一哈希值查詢文檔的IPFS網(wǎng)關(guān),利用網(wǎng)關(guān)地址顯示文檔信息。

圖9 通過查詢哈希值顯示文件
運行以太坊Dapp需要消耗相應(yīng)的以太幣,所以需要用專門的錢包來對賬戶進行管理,提供以太幣的存儲和轉(zhuǎn)移。在本系統(tǒng)中,我們使用Chrome瀏覽器的拓展插件MetaMask來解決以及本地以太坊開發(fā)工具Ganache完成鏈的部署。在Windows的Windows PowerShell(管理員)命令行進入項目根目錄中輸入:
(1)truffle compile //進行合約編譯
(2)truffle migrate //進行項目的發(fā)布,此時Ganache會產(chǎn)生四個區(qū)塊
(3)npm run dev //啟動服務(wù)
在頁面部分有上傳、上鏈、顯示、查詢的功能。當(dāng)用戶上傳文檔到IPFS時,IPFS返回唯一的hash值。用戶將文件描述、分類和哈希值上鏈。每當(dāng)上鏈一個文檔時,刷新一次頁面顯示當(dāng)前所有的區(qū)塊。當(dāng)用戶通過哈希值查找時會返回一個IPFS網(wǎng)址,利用網(wǎng)址即可下載原文件。由于區(qū)塊鏈本身的性質(zhì),上傳的交易不可篡改,可溯源。在查閱原文件時便可以確定文檔是否被篡改。又因為hash是唯一的,若上傳的文檔發(fā)生了改變,那么hash值也會跟之前的hash有很大區(qū)別。從而實現(xiàn)電子文檔的透明、安全、可溯源的功能。
在本項目中通過區(qū)塊鏈技術(shù)通過上傳摘要hash的形式,輔以IPFS的分布式存儲實現(xiàn)了對于文檔電子簽名化、防篡改以及下載等功能。我們通過這個項目可以看到區(qū)塊鏈技術(shù)在安全性和輕便性都遠遠大于如今的紙質(zhì)化交易,我們有理由相信在將來利用區(qū)塊鏈技術(shù)構(gòu)造商業(yè)網(wǎng)絡(luò)的那時,便能夠構(gòu)建一個公開去中心化的交易平臺,實現(xiàn)交易高效的同時無法篡改,我們可以大幅度的縮減交易的成本,提高社會的溝通和合作效率。
[1]張小雪,陸萍.基于以太坊的眾籌系統(tǒng)的設(shè)計與實現(xiàn)[J].甘肅科技縱橫,2020(3):30-34.
[2]周藝華,李洪明.基于區(qū)塊鏈的數(shù)據(jù)管理方案[J].信息安全研究,2020(1):37-49.
[3]杜歆文.基于區(qū)塊鏈2.0以太坊公鏈的版權(quán)管理系統(tǒng)[J].現(xiàn)代電報技術(shù),2019( 12):97-101.
[4]楊保華,陳昌.區(qū)塊鏈原理、設(shè)計與應(yīng)用[M].機械工業(yè)出版社:北京,2018:93-97.
[5]殷龍,王宏偉.基于IPFS的分布式數(shù)據(jù)共享系統(tǒng)的研究[J].物聯(lián)網(wǎng)技術(shù),2016,6:60-62.
由北京信息科技大學(xué)2020年大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計劃項目資助