◆何宇豪 趙杰 李澤欣 張鴻 丁悅舟 胡春月
(福建江夏學(xué)院電子信息科學(xué)學(xué)院 福建 350108)
目前數(shù)字資產(chǎn)已逐漸成為社會(huì)生活中不可或缺的信息載體,例如,圖片、音視頻、文檔等。傳統(tǒng)的數(shù)字存證是依靠中心化管理系統(tǒng)來實(shí)現(xiàn)的,缺乏統(tǒng)一的接口。由于數(shù)字資產(chǎn)的易篡改性,很容易導(dǎo)致數(shù)據(jù)的丟失和泄露,而人們對于數(shù)字資產(chǎn)的保護(hù)意識薄弱,容易讓不法分子有機(jī)可乘,從而造成各種網(wǎng)絡(luò)安全事故。由此可見,急需一種新技術(shù)來確保當(dāng)前數(shù)據(jù)存證的安全性,而這個(gè)新技術(shù)就是區(qū)塊鏈。
區(qū)塊鏈技術(shù)由比特幣(Bitcoin)發(fā)展而來的,是比特幣最核心的技術(shù)。2008年發(fā)表的論文《比特幣:一個(gè)P2P 電子現(xiàn)金系統(tǒng)》[1],讓人們知道了區(qū)塊鏈具有安全透明、去中心化、不可篡改和可追溯性等特點(diǎn)。雖然不是最完美的技術(shù),但在各方面都優(yōu)于傳統(tǒng)的存證技術(shù),所以區(qū)塊鏈技術(shù)迅速發(fā)展并運(yùn)用于電子貨幣、金融科技、醫(yī)療、互聯(lián)網(wǎng)等方面。而我國在2013年1月1日把電子證據(jù)納入法定證據(jù)之范疇,正式寫入《中華人民共和國民事訴訟法》中[2],大大提升了電子證據(jù)的地位,但是由于電子證據(jù)的缺乏,以及電子證據(jù)的數(shù)字易篡改性,使其難以運(yùn)用在實(shí)際生活中,所以需要通過運(yùn)用區(qū)塊鏈技術(shù)和密碼學(xué)原理的技術(shù),來實(shí)現(xiàn)可自動(dòng)檢驗(yàn)輸入信息并尋找其中要保存的數(shù)字資產(chǎn),以保證數(shù)字資產(chǎn)的保密性和安全性。
區(qū)塊鏈技術(shù)是由IPFS、密碼算法、共識算法、智能合約、P2P通信等技術(shù)組成的技術(shù),其由多個(gè)節(jié)點(diǎn)組成,具有去中心、公開透明、不易修改等特點(diǎn)[3]。區(qū)塊鏈的結(jié)構(gòu)有區(qū)塊頭和區(qū)塊體組成。區(qū)塊頭負(fù)責(zé)實(shí)現(xiàn)區(qū)塊的重要功能,包括了前一區(qū)塊的Hash 值、本區(qū)塊的Hash值、TimeStamp、Merkle Root 等內(nèi)容;區(qū)塊體則是存放交易數(shù)據(jù)的地方,運(yùn)用Merkle Root 算法對整棵樹進(jìn)行簽名,鑒定數(shù)據(jù)的真假。
區(qū)塊鏈在不同的平臺可以劃分為公有鏈、聯(lián)盟鏈、私有鏈三種模型[4-5]。公有鏈(Public Blockchains)是指個(gè)體和企業(yè)都可以發(fā)送交易,且交易能得到區(qū)塊的確認(rèn),公有鏈的共識算法有PoS-PoW 混合(即PoA)、DPoS。聯(lián)盟鏈(Consortium Blockchain)由多個(gè)機(jī)構(gòu)共同管理維護(hù),只對聯(lián)盟內(nèi)部成員開放全部或部分功能,其公開程度是介于公有鏈和私有鏈之間的,它的共識算法包括BFT 和Kafka。私有鏈(Private Blockchain)是與公有鏈相反的,其權(quán)限值在一個(gè)人或一個(gè)機(jī)構(gòu)手里,信息是不公開的,它的共識算法包括RAFT 和Paxos,本文主要采用的是私有鏈。
數(shù)字資產(chǎn)是企業(yè)或個(gè)人具有的電子數(shù)據(jù),以備出售或正在生產(chǎn)的非貨幣性資產(chǎn)。這種資產(chǎn)價(jià)格昂貴、數(shù)量大、依附性強(qiáng)、成本遞減、互動(dòng)性強(qiáng)。政府工作報(bào)告在2015年增加了“互聯(lián)網(wǎng)+”的內(nèi)容,數(shù)字化轉(zhuǎn)型成為越來越多企業(yè)的選擇。因?yàn)閿?shù)字資產(chǎn)自身具有數(shù)字性和易篡改性等特點(diǎn),所以有效保存數(shù)字資產(chǎn)顯得尤為重要。
社會(huì)發(fā)展進(jìn)入了信息時(shí)代,計(jì)算機(jī)可以幫助人類儲(chǔ)存大量信息,同時(shí)進(jìn)行大規(guī)模運(yùn)算,由此產(chǎn)生了大量的數(shù)字資產(chǎn)。數(shù)字資產(chǎn)易變且脆弱,容易遭到破壞而使其失去價(jià)值,系統(tǒng)運(yùn)用區(qū)塊鏈技術(shù),探索數(shù)字經(jīng)濟(jì)模式的創(chuàng)新之路,以獲得可靠的數(shù)字資產(chǎn)存證。
IPFS 是一種共享的、分布式的、長久的網(wǎng)絡(luò)傳輸協(xié)議,是分布式哈希表(DHT)、比特流(Bittorrent)和Git 版本控制系統(tǒng)的綜合繼承創(chuàng)新,是由Juan Benet 設(shè)計(jì),為Protocol Labs 所擁有[6]。這是種內(nèi)容尋址的對等超媒體分發(fā)協(xié)議,可緩解傳統(tǒng)信息過度負(fù)載的情況,使訪問分散到網(wǎng)絡(luò)的其他參與節(jié)點(diǎn),減少對文件托管中心的依賴。IPFS 被稱為下一代Web 協(xié)議,因?yàn)槿缃竦腍TTP 協(xié)議受制于目標(biāo)服務(wù)器,易出現(xiàn)服務(wù)中斷、數(shù)據(jù)丟失、數(shù)據(jù)篡改等現(xiàn)象,所以IPFS 是一種比較好的協(xié)議并可以用來解決以上問題。
(1)SM2
SM2 算法是橢圓曲線密碼算法,是非對稱密碼算法。其運(yùn)行速度較快、密碼算法設(shè)計(jì)較為復(fù)雜、性能開銷較小。SM2 算法由我國自主設(shè)計(jì),包括SM2-1 橢圓曲線數(shù)字簽名算法、SM2-2 橢圓曲線密鑰交換協(xié)議、SM2-3 橢圓曲線公鑰加密算法,本系統(tǒng)擬在數(shù)據(jù)加密中使用此算法保證安全性。
算法基本原理:
用戶A 擁有公鑰PB=[dB]G(僅有PB 值),用戶B 擁有私鑰dB;
加密:C1=k*G C2=M⊕(k*PB);
解密:M′=C2 ⊕(dB*C1);
證明:dB*C1=dB*k*G=k*(dB*G)=k*PB;
因此,M′=C2⊕(dB*C1)=M⊕(k*PB)⊕(k*PB)=M,得證。
(2)哈希算法
哈希算法(Hash)又稱散列算法,是一種與指紋類似,以較短信息為保證的唯一性方法。其原理是使用一個(gè)輸入有效的明文后,會(huì)得到一個(gè)與之相對應(yīng)的、唯一確定的、固定長度的字符串[7]。Hash算法的特點(diǎn)是加密過程是單向的,輸出的密文不能反推出輸入明文,輸入的明文出現(xiàn)任何變化,輸出的結(jié)果就會(huì)大不相同[8-9]。Hash 算法在區(qū)塊鏈中最主要的作用是用來檢驗(yàn)原始數(shù)據(jù)是否被篡改,通過將上一區(qū)塊的Hash 值發(fā)送保存到下一區(qū)塊的鏈?zhǔn)浇Y(jié)構(gòu)中,來保證當(dāng)鏈條的任何一環(huán)斷開時(shí),都能被及時(shí)發(fā)現(xiàn)。
(3)數(shù)字簽名
數(shù)字簽名,是唯有信源才能產(chǎn)生的一段數(shù)字串,讓其他人無法冒充信源,這是證明信息是否真實(shí)的重要手段。它運(yùn)用了公鑰加密技術(shù)來實(shí)現(xiàn),類似于寫在紙上的簽名。一套數(shù)字簽名通常有兩種密鑰,一個(gè)用于驗(yàn)證,另一個(gè)用于簽名。數(shù)字簽名與非對稱密鑰加密技術(shù)以及數(shù)字摘要技術(shù)相結(jié)合,使用后文件具有完整性和抗否認(rèn)性。
(4)默克爾樹
默克爾樹(Merkle Tree)也被稱作哈希樹。默克爾樹在區(qū)塊鏈中是一種特殊的二叉樹,其葉子節(jié)點(diǎn)上的值由Hash 值來表示,Hash 值是由數(shù)據(jù)塊經(jīng)過Hash 算法運(yùn)算得到的。Merkle 樹的防篡改能力很強(qiáng),對于任意數(shù)據(jù)區(qū)塊上的原始內(nèi)容,即使是一個(gè)很微小的改變都會(huì)導(dǎo)致最后結(jié)果不同[10]。因此可以利用Merkle 樹的唯一確定性來保障數(shù)據(jù)的安全性,同時(shí)可以在較短時(shí)間內(nèi)對數(shù)據(jù)進(jìn)行比對,快速確定與原始數(shù)據(jù)不同內(nèi)容的位置[11]。
3.1.1 主要功能需求
系統(tǒng)為用戶提供了以下主要功能:
(1)主界面,包括加密、上鏈、授權(quán)、查詢、下載、比對以及文件內(nèi)容提取等;
(2)將需要存證的文件上傳至系統(tǒng),系統(tǒng)會(huì)返回一個(gè)hash 值,以備上鏈;
(3)通過授權(quán)的用戶可以查看被加密的文件信息;
(4)用戶不僅可以查看自己上傳的文件,還可以查看他人上傳的文件。
用戶注冊是用戶輸入用戶名和密碼,系統(tǒng)將信息存放至系統(tǒng)數(shù)據(jù)庫,使用戶獲得進(jìn)入系統(tǒng)的權(quán)限。用戶登錄需提供唯一代表其身份的用戶標(biāo)識符,如果用戶存在,則區(qū)塊鏈會(huì)自動(dòng)識別用戶身份,密碼輸入正確后就可以使用系統(tǒng)提供的服務(wù)。
文件加密功能是指在原始文件上傳后,對其進(jìn)行加密的過程,保證文件的安全性。沒有被授權(quán)的用戶,不可以訪問這個(gè)文件。
文件上鏈功能是文件進(jìn)行哈?;钪匾囊徊剑翘崛∩蟼魑募年P(guān)鍵信息,用SM2 算法加密內(nèi)容,同時(shí)參與文件的Hash 值生成,并保存至IPFS 中。
文件授權(quán)功能是指可以給第三方對象授權(quán)訪問自身所擁有的文件,讓其擁有權(quán)限可以訪問、查看以及下載。
文件查詢功能是指用戶選擇文件查詢模塊,系統(tǒng)會(huì)直接查詢出文件的信息,用戶可以在查詢出的信息中選擇自己需要的內(nèi)容。
文件下載功能是指用戶在文件查詢界面,可以選擇下載所要的文件,并得到原始文件。IPFS 文件生成哈希值的方式,并以哈希值的方式進(jìn)行下載。
文件比對功能是指用戶文件比對模塊,能比對文件是否為用戶已存證文件,是否未經(jīng)篡改。
文件內(nèi)容提取功能是指用戶選擇文件內(nèi)容提取模塊,選擇文件之后點(diǎn)擊提取,系統(tǒng)會(huì)截出關(guān)鍵信息,顯示在頁面中??梢宰層脩舸笾铝私馕募?nèi)容。
用戶在選擇用戶信息管理后,系統(tǒng)會(huì)要求用戶輸入原密碼、新密碼,并對密碼進(jìn)行修改。
3.1.2 用例分析
用例圖描述了系統(tǒng)的功能以及交互對象,如圖1所示。其中,參與者是用戶,系統(tǒng)提供注冊模塊、登錄模塊、修改密碼、文件上鏈、文件查詢、文件比對、文件授權(quán)、文件內(nèi)容提取等功能,供用戶使用。
圖1 用例圖
本系統(tǒng)的用戶子模塊主要是由注冊和登錄以及修改密碼組成。
用戶在使用本系統(tǒng)前需要進(jìn)行注冊,獲得進(jìn)入系統(tǒng)的權(quán)限,需要輸入用戶名、密碼,確認(rèn)密碼等信息后才可以進(jìn)行注冊,若信息無誤,且輸入的用戶名被未注冊,則注冊成功,即可進(jìn)入登錄并使用系統(tǒng)。
已注冊的用戶即可進(jìn)行登錄,用戶需輸入登錄信息,驗(yàn)證通過即可進(jìn)入系統(tǒng),進(jìn)行上傳文件、比對文件、查詢文件等操作。如果身份驗(yàn)證出現(xiàn)錯(cuò)誤,就回到登錄界面重新進(jìn)行登錄。
如果需要修改密碼,可以在系統(tǒng)里進(jìn)行修改,輸入舊密碼和新密碼,在確認(rèn)密碼都正確后,則修改成功,如果舊密碼不對或者確認(rèn)密碼與新密碼不符,則修改失敗。
本區(qū)塊鏈的可信數(shù)字資產(chǎn)存證系統(tǒng)是默認(rèn)上傳的文件在讀取完文件信息后,生成相應(yīng)的關(guān)鍵信息,運(yùn)用SM2 加密算法來加密文件關(guān)鍵信息,生成密文,參與區(qū)塊鏈的hash 演算并作為數(shù)據(jù)保存下來。
文件加密的流程如下:
(1)用戶上傳文件,系統(tǒng)通過對文件的讀取,獲取到文件的關(guān)鍵信息;
(2)使用SM2 公開密鑰加密算法對獲取到的文件關(guān)鍵信息進(jìn)行加密;
(3)將SM2 密文作為數(shù)據(jù)再參與區(qū)塊鏈的hash 值演算并作為數(shù)據(jù)保存下來。
(4)將文件上傳至IPFS 進(jìn)行保存。
信息檢索是存證用戶在點(diǎn)擊查詢后,系統(tǒng)直接輸出用戶權(quán)限范圍內(nèi)的文件信息,輸出的結(jié)果包括BlockID、Hash 值、PreviousHash、FilePath、TimeStamp 和Nonce 等信息,并且能夠?qū)σ汛孀C的文件進(jìn)行下載和比對。
文件授權(quán)是用戶允許授權(quán)對象訪問經(jīng)過加密的文件內(nèi)容,其他對象未經(jīng)允許是不能夠訪問查看加密的文件內(nèi)容,是文件管理的延伸,其主要是為了保障傳輸數(shù)據(jù)過程的安全性。
文件授權(quán)的流程如下:
(1)存證用戶輸入要授權(quán)的文件的BlockID;
(2)存證用戶輸入要授權(quán)的用戶的用戶名;
(3)被授權(quán)的用戶可以對文件進(jìn)行對應(yīng)的操作。
數(shù)字資產(chǎn)保全和管理模塊是本系統(tǒng)以及區(qū)塊鏈存證應(yīng)用中較重要的一個(gè)模塊,該模塊主要是實(shí)現(xiàn)上傳文件的上鏈操作。數(shù)字資產(chǎn)保全中的保全對象是系統(tǒng)所提取的關(guān)鍵信息,其為經(jīng)過SM2 加密得到的密文信息,并且把保全對象的密文信息保存到私人鏈上。
文件內(nèi)容提取模塊主要是為了選擇需要進(jìn)行內(nèi)容提取的文件,由系統(tǒng)對這個(gè)文件按照某種規(guī)則進(jìn)行分割,從而提取出關(guān)鍵信息以及文件的主要內(nèi)容,并顯示在下方,方便用戶查看。
測試過程按照系統(tǒng)需求逐一測試檢查每個(gè)模塊的功能是否完整,流程是否正確,各個(gè)模塊的銜接能否正常跳轉(zhuǎn)。主要測試文件能否正常上鏈,文件能否正常查詢,文件能否正常比對等功能。測試情況如表1所示。
表1 測試表
數(shù)字資產(chǎn)其應(yīng)用前景廣闊,但因受其數(shù)字化易篡改性特點(diǎn),易受攻擊,且大多數(shù)人不知道如何去妥善保管自身的數(shù)字資產(chǎn),而傳統(tǒng)的存證方式又存有眾多問題而難以解決。
本文使用區(qū)塊鏈的去中心化技術(shù),探尋數(shù)字經(jīng)濟(jì)模式創(chuàng)新,亟待提高傳統(tǒng)存證系統(tǒng)的安全性,實(shí)現(xiàn)一個(gè)可自動(dòng)檢驗(yàn)輸入信息,尋找要保存的數(shù)字資產(chǎn),并實(shí)現(xiàn)基于區(qū)塊鏈的可信數(shù)字資產(chǎn)存證的系統(tǒng)。系統(tǒng)主要采用的是私有鏈模式和國產(chǎn)SM2 密碼算法來保存用戶所上傳的數(shù)據(jù),總體上實(shí)現(xiàn)了系統(tǒng)設(shè)計(jì)的基本功能。
最后,對系統(tǒng)進(jìn)行的模塊測試,無論是文件上鏈、文件下載、存證文件比對,還是存證文件授權(quán)、文件內(nèi)容提取以及用戶功能等均能達(dá)到預(yù)期的效果。系統(tǒng)目前正逐步推廣應(yīng)用于大學(xué)生畢業(yè)設(shè)計(jì)系統(tǒng)等相關(guān)領(lǐng)域,未來可進(jìn)一步在文檔保密、金融數(shù)字證書以及其他相關(guān)信息安全領(lǐng)域發(fā)揮應(yīng)有的作用。