孫國(guó)梓,冒小樂(lè),陳鼎潔,雷 鵬,李華康
(南京郵電大學(xué)計(jì)算機(jī)學(xué)院、軟件學(xué)院、網(wǎng)絡(luò)空間安全學(xué)院,江蘇南京210023)
在過(guò)去的幾年中,區(qū)塊鏈技術(shù)獲得了巨大的發(fā)展,主要?dú)w功于加密貨幣比特幣的成功。區(qū)塊鏈(也稱為分布式總賬)本質(zhì)上是由一組不相互完全信任的節(jié)點(diǎn)維護(hù)的共享數(shù)據(jù)庫(kù)。但是隨著應(yīng)用場(chǎng)景不斷發(fā)展,比特幣已經(jīng)在很多區(qū)塊鏈場(chǎng)景下不適用。在這種情況下,一個(gè)多層的、基于密碼學(xué)的開(kāi)源技術(shù)協(xié)議的以太坊便應(yīng)運(yùn)而生。以太坊通過(guò)整體設(shè)計(jì)集成了不同的功能模塊,是一個(gè)創(chuàng)建和去中心化應(yīng)用的綜合平臺(tái)[1]。
電子數(shù)據(jù)存證是一種便于瀏覽,便于舉證,便于鑒定,便于保存的系統(tǒng)結(jié)構(gòu)。它首先要對(duì)數(shù)據(jù)按數(shù)據(jù)類型進(jìn)行很好的存儲(chǔ)保存,其次還要對(duì)數(shù)據(jù)的可信性,完整性要有很好的保障。電子數(shù)據(jù)的存證要方便對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)、共享、驗(yàn)證,并安全地提供有效的數(shù)據(jù)分享。區(qū)塊鏈技術(shù)可以提供完善的安全加密技術(shù)和用戶驗(yàn)證系統(tǒng)[2]。
目前,國(guó)內(nèi)外關(guān)于區(qū)塊鏈應(yīng)用是研究熱點(diǎn)問(wèn)題。文獻(xiàn)[3]研究了醫(yī)療數(shù)據(jù)共享系統(tǒng)中的訪問(wèn)控制管理問(wèn)題,主要設(shè)計(jì)了一個(gè)基于區(qū)塊鏈的數(shù)據(jù)共享方案,允許數(shù)據(jù)用戶/所有者在身份驗(yàn)證后,從共享數(shù)據(jù)庫(kù)訪問(wèn)電子病歷。文獻(xiàn)[4]在基于區(qū)塊鏈的電子數(shù)據(jù)存證應(yīng)用研究中,從電子數(shù)據(jù)存儲(chǔ)應(yīng)用場(chǎng)景出發(fā),研究了如何將業(yè)務(wù)與區(qū)塊鏈技術(shù)相結(jié)合,提出一種優(yōu)化當(dāng)前數(shù)據(jù)存儲(chǔ)的方法,以此高效地為用戶服務(wù)。文獻(xiàn)[5]在基于區(qū)塊鏈的云取證系統(tǒng)中,采用區(qū)塊鏈的分布式數(shù)據(jù)庫(kù)特點(diǎn),首尾相連的鏈?zhǔn)浇Y(jié)構(gòu)技術(shù),設(shè)計(jì)了一中去中心化、可驗(yàn)證、不可篡改的系統(tǒng)。
到目前為止,關(guān)于存證系統(tǒng)還有以下幾個(gè)問(wèn)題有待于解決。如系統(tǒng)過(guò)程中自動(dòng)化程度不高;系統(tǒng)過(guò)程中電子數(shù)據(jù)存證風(fēng)險(xiǎn)較大;第三方機(jī)構(gòu)法律處理流程繁瑣;電子數(shù)據(jù)安全缺失等。
本文提出了一個(gè)安全的、可擴(kuò)展的基于區(qū)塊鏈的電子數(shù)據(jù)存證系統(tǒng)。采用數(shù)據(jù)與用戶對(duì)應(yīng)映射關(guān)系查找方式,來(lái)確保對(duì)電子數(shù)據(jù)池的高效訪問(wèn)控制。并設(shè)計(jì)了一個(gè)基于區(qū)塊鏈的數(shù)據(jù)存證方案,允許數(shù)據(jù)用戶/所有者在身份驗(yàn)證后,從電子數(shù)據(jù)庫(kù)訪問(wèn)電子數(shù)據(jù)。數(shù)據(jù)存儲(chǔ)主要進(jìn)行分片冗余算法和分布式存儲(chǔ)保證數(shù)據(jù)安全性,并且系統(tǒng)引入用戶積分機(jī)制,保證系統(tǒng)負(fù)載均衡。驗(yàn)證和后續(xù)服務(wù)封閉在系統(tǒng)內(nèi)部,寫入?yún)^(qū)塊并成為區(qū)塊鏈的一部分。
系統(tǒng)的設(shè)計(jì)采用“高內(nèi)聚低耦合”的思想,整個(gè)系統(tǒng)主要功能有4層,從上至下依次是業(yè)務(wù)層、邏輯層、智能合約層和區(qū)塊鏈層,如圖1所示。
圖1 系統(tǒng)功能架構(gòu)圖
(1)應(yīng)用層:應(yīng)用層主要包含圖1中前端UI、展示層和業(yè)務(wù)層,前端UI為用戶訪問(wèn)系統(tǒng)提供可視化的Web界面。應(yīng)用層接收用戶提交的請(qǐng)求,進(jìn)行簡(jiǎn)單的預(yù)處理后,將請(qǐng)求發(fā)送給邏輯層進(jìn)行核心計(jì)算;待計(jì)算完成后將數(shù)據(jù)信息從展示層接收信息,通過(guò)Web界面直觀地反饋給用戶。用戶可以是需要保全數(shù)據(jù)的客戶,也可以是需要下載數(shù)據(jù)公證的第三方機(jī)構(gòu)。
(2)邏輯層:根據(jù)應(yīng)用層所提供的六大界面,邏輯層分別給出了對(duì)應(yīng)功能模塊的實(shí)現(xiàn)方法。其中,基于TCP的Socket多線程并發(fā)模塊是整個(gè)系統(tǒng)能夠順利運(yùn)行起來(lái)的框架基礎(chǔ),系統(tǒng)利用該模塊實(shí)現(xiàn)不同節(jié)點(diǎn)之間數(shù)據(jù)的可靠傳輸[6]?;谏鲜龅幕A(chǔ)框架,系統(tǒng)引入里所碼的編碼解碼、節(jié)點(diǎn)選擇模塊用于文件的上傳和下載功能模塊的實(shí)現(xiàn);引入用戶節(jié)點(diǎn)性能測(cè)試模塊來(lái)判定其性能優(yōu)劣水平;引入Hash比對(duì)模塊判定文件是否被惡意篡改;引入用戶注冊(cè)/登錄、積分模塊來(lái)完成對(duì)用戶信息的管理工作。
(3)智能合約層:部署在以太坊平臺(tái)的智能合約。智能合約層作為邏輯層和區(qū)塊鏈層之間的橋梁,將邏輯層的計(jì)算結(jié)果(如電子數(shù)據(jù)及其分片的指紋信息、用戶節(jié)點(diǎn)的積分信息等)錨定到區(qū)塊鏈層的存儲(chǔ)區(qū)內(nèi)[7]。在編寫智能合約的過(guò)程中,系統(tǒng)定義了若干的結(jié)構(gòu)體(如 File、Record、User等),實(shí)現(xiàn)以自定義的數(shù)據(jù)形式存儲(chǔ)電子數(shù)據(jù)的關(guān)鍵信息。該方案顯著地提高了電子數(shù)據(jù)的查詢效率,也增強(qiáng)了電子數(shù)據(jù)的可讀性。
(4)區(qū)塊鏈層:作為系統(tǒng)去中心化的數(shù)據(jù)庫(kù),存儲(chǔ)邏輯層產(chǎn)生的數(shù)據(jù)信息。其中,網(wǎng)絡(luò)層承擔(dān)驗(yàn)證交易信息,產(chǎn)生新區(qū)塊,維護(hù)區(qū)塊鏈網(wǎng)絡(luò)穩(wěn)定運(yùn)行的工作;數(shù)據(jù)層保存著整個(gè)系統(tǒng)所有上傳的關(guān)鍵信息。
存證系統(tǒng)架構(gòu)設(shè)計(jì)借助于區(qū)塊鏈的全新思想,把電子數(shù)據(jù)分布式存儲(chǔ)的記錄放在區(qū)塊鏈上。系統(tǒng)主要采用數(shù)據(jù)冗余分片技術(shù)結(jié)合Reed-solomon碼[8],將電子數(shù)據(jù)分成n個(gè)信息片和m個(gè)冗余片,再進(jìn)行數(shù)據(jù)片的分布式存儲(chǔ)保證數(shù)據(jù)信息的安全性,對(duì)系統(tǒng)服務(wù)端主機(jī)存儲(chǔ)容量、帶寬、時(shí)延、丟包率進(jìn)行采集,結(jié)合模糊層次分析法確定權(quán)重比和理想優(yōu)基點(diǎn),計(jì)算出系統(tǒng)存儲(chǔ)主機(jī)的網(wǎng)絡(luò)綜合性能評(píng)分,保證系統(tǒng)信息存儲(chǔ)的負(fù)載均衡[9]。利用智能合約去中心化的特點(diǎn),即采用P2P網(wǎng)絡(luò)技術(shù)實(shí)現(xiàn)系統(tǒng)的去中心化,使用哈希算法保證數(shù)據(jù)的完整性,使用共識(shí)算法保障計(jì)算節(jié)點(diǎn)間數(shù)據(jù)的一致性,并設(shè)計(jì)了一種去中心化且可驗(yàn)證的分布式存儲(chǔ)系統(tǒng)[10]?;谠撓到y(tǒng)提供相應(yīng)的智能合約,該智能合約能夠在用戶雙方或多方,自動(dòng)實(shí)現(xiàn)電子數(shù)據(jù)存證的事務(wù)處理和保存機(jī)制等。
存證系統(tǒng)制定數(shù)據(jù)共享機(jī)制,用于基于區(qū)塊鏈的數(shù)據(jù)共享,以確保數(shù)據(jù)的安全性和可溯源。存證系統(tǒng)的詳細(xì)流程圖如圖2中,分為6個(gè)主要步驟。
圖2 系統(tǒng)詳細(xì)流程圖
如圖2所示,區(qū)塊鏈存證系統(tǒng)主要由存證用戶節(jié)點(diǎn)、存儲(chǔ)用戶節(jié)點(diǎn)和智能合約組成。其中節(jié)點(diǎn)A既可以是存儲(chǔ)用戶節(jié)點(diǎn)也可以是存證用戶節(jié)點(diǎn)。系統(tǒng)進(jìn)行一次存證流程如下。
(1)用戶登錄系統(tǒng)后,系統(tǒng)中區(qū)塊鏈的合約member類獲取用戶信息,并通過(guò)用戶節(jié)點(diǎn)獲取到其他節(jié)點(diǎn)的性能信息,為后續(xù)數(shù)據(jù)分片存儲(chǔ)性能主機(jī)的計(jì)算獲取數(shù)值。
(2)用戶上傳需要存證的文件,將文件的關(guān)鍵信息存入到區(qū)塊鏈合約file類中去,形成數(shù)據(jù)與用戶的對(duì)應(yīng)映射關(guān)系。
(3)系統(tǒng)進(jìn)行冗余分片算法對(duì)上傳的電子數(shù)據(jù)進(jìn)行分片,并且根據(jù)節(jié)點(diǎn)的性能信息選取若干最優(yōu)性能節(jié)點(diǎn),用于存儲(chǔ)每一個(gè)分片數(shù)據(jù)。
(4)系統(tǒng)根據(jù)性能選中的節(jié)點(diǎn),將數(shù)據(jù)分片,對(duì)不同的節(jié)點(diǎn)進(jìn)行數(shù)據(jù)分發(fā),并將數(shù)據(jù)的關(guān)鍵信息返回給區(qū)塊鏈智能合約,包括數(shù)據(jù)存儲(chǔ)的IP地址、數(shù)據(jù)存儲(chǔ)的絕對(duì)路徑和數(shù)據(jù)分片的哈希值等,存儲(chǔ)到合約的record對(duì)象中。
(5)當(dāng)用戶需要對(duì)電子數(shù)據(jù)進(jìn)行下載或查詢操作時(shí),對(duì)系統(tǒng)提出授權(quán)請(qǐng)求,系統(tǒng)將用戶信息與需要訪問(wèn)的數(shù)據(jù)建立對(duì)應(yīng)的映射關(guān)系,用戶便可以在區(qū)塊中鏈接上相應(yīng)的用戶信息。
(6)用戶獲得權(quán)限后,從區(qū)塊鏈合約中讀取到電子數(shù)據(jù)的相關(guān)信息,系統(tǒng)根據(jù)存儲(chǔ)信息找到電子數(shù)據(jù)存儲(chǔ)的位置,下載電子數(shù)據(jù)分片并還原數(shù)據(jù)并比對(duì)文件哈希值,驗(yàn)證電子數(shù)據(jù)的完整性。
系統(tǒng)的主要流程為用戶上傳、保全、查看、下載、比對(duì)和授權(quán)電子數(shù)據(jù)文件,下面將分小節(jié)對(duì)以上流程進(jìn)行介紹。
在用戶登陸系統(tǒng)中,當(dāng)用戶提出電子數(shù)據(jù)上傳操作請(qǐng)求時(shí),系統(tǒng)會(huì)根據(jù)電子數(shù)據(jù)分片數(shù)目計(jì)算本次上傳所花費(fèi)的積分?jǐn)?shù)量c,然后調(diào)用合約積分功能,獲取用戶當(dāng)前的積分?jǐn)?shù)量t。系統(tǒng)進(jìn)行積分?jǐn)?shù)量判斷驗(yàn)證,通過(guò)判斷后,系統(tǒng)給用戶提供上傳功能,并且在區(qū)塊鏈上更新用戶對(duì)應(yīng)的積分信息。若判斷不通過(guò),則提示用戶積分不足。
首先,系統(tǒng)對(duì)電子數(shù)據(jù)利用里所碼進(jìn)行數(shù)據(jù)冗余分片,獲得n個(gè)數(shù)據(jù)片及m個(gè)冗余片。系統(tǒng)獲取存儲(chǔ)主機(jī)的性能參數(shù),主要包括吞吐量、時(shí)延、帶寬,并根據(jù)模糊層次分析法對(duì)3個(gè)參數(shù)進(jìn)行計(jì)算獲得網(wǎng)絡(luò)性能評(píng)分[11]。同時(shí),系統(tǒng)獲取存儲(chǔ)主機(jī)的硬盤容量和硬盤健康程度。系統(tǒng)根據(jù)網(wǎng)絡(luò)性能評(píng)分和磁盤存儲(chǔ)容量作為參數(shù),利用理想優(yōu)基點(diǎn)法,計(jì)算存儲(chǔ)主機(jī)性能綜合距離并排序,獲取性能最優(yōu)主機(jī)用戶[12]。系統(tǒng)向選中的用戶主機(jī)隨機(jī)分發(fā)電子數(shù)據(jù)的分片,經(jīng)過(guò)區(qū)塊鏈的共識(shí)算法固定到區(qū)塊鏈的存儲(chǔ)區(qū)中,并將分片信息寫入?yún)^(qū)塊鏈中[10]。
用戶可以隨時(shí)在本系統(tǒng)使用電子數(shù)據(jù)的查詢功能來(lái)獲取具有文件的存儲(chǔ)信息。結(jié)合電子數(shù)據(jù)存證的需求,默認(rèn)情況下電子數(shù)據(jù)僅上傳者可見(jiàn)。用戶需要查看其他用戶的電子數(shù)據(jù)時(shí),需要得到對(duì)應(yīng)用戶的授權(quán)。當(dāng)用戶提出查詢請(qǐng)求時(shí),系統(tǒng)與合約進(jìn)行交互,首先對(duì)用戶權(quán)限進(jìn)行判斷,判斷文件是否屬于用戶節(jié)點(diǎn)。成功后,則讀取數(shù)據(jù)文件對(duì)應(yīng)的索引號(hào)以及分片存儲(chǔ)位置的索引號(hào),判斷文件索引是否小于用戶文件數(shù),獲取文件的絕對(duì)索引位。得出數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈上的信息并通過(guò)信息(IP地址和存儲(chǔ)絕對(duì)路徑)找到電子數(shù)據(jù)。
當(dāng)用戶向系統(tǒng)提交下載請(qǐng)求時(shí),根據(jù)在區(qū)塊鏈存儲(chǔ)區(qū)定位到相應(yīng)的數(shù)據(jù)信息并找到數(shù)據(jù)存儲(chǔ)位置后,實(shí)現(xiàn)自動(dòng)化文件的下載和文件解碼重組工作。這與電子數(shù)據(jù)查詢類似,用戶能下載的數(shù)據(jù)文件必須是由自己上傳的或者是他人授權(quán)的,以保證用戶的隱私安全。
系統(tǒng)在得到數(shù)據(jù)返回的分片之后,對(duì)分片分別調(diào)用SHA-1、SHA-256和MD5哈希算法,求取到每個(gè)分片的哈希值之后,與之前存儲(chǔ)在智能合約中的哈希值進(jìn)行比對(duì)[13]。如果哈希值相等,說(shuō)明文件未遭到篡改。系統(tǒng)在運(yùn)行過(guò)程中,如果存在部分?jǐn)?shù)據(jù)分片丟失,則只需要這部分丟失的數(shù)據(jù)分片數(shù)量小于系統(tǒng)冗余分片總數(shù)目范圍內(nèi),則仍然能夠還原系統(tǒng)源文件。
考慮到系統(tǒng)的需求,需要對(duì)用戶的個(gè)人隱私進(jìn)行保護(hù),所以,系統(tǒng)默認(rèn)用戶的電子數(shù)據(jù)是用戶的個(gè)人信息文件。用戶需要通過(guò)授權(quán)給他人,其他用戶才有權(quán)查看被授權(quán)的電子數(shù)據(jù)。授權(quán)時(shí),主要將用戶的公鑰輸入即用戶賬戶和待授權(quán)文件序號(hào),系統(tǒng)將授權(quán)文件信息寫入?yún)^(qū)塊鏈,則授權(quán)結(jié)束。
本部分主要描述了基于區(qū)塊鏈智能合約電子存證系統(tǒng)的實(shí)現(xiàn),詳細(xì)描述了數(shù)據(jù)的上傳、保全、查看、下載、比對(duì)和授權(quán)及系統(tǒng)的交互。其中,智能合約部分是支撐系統(tǒng)的底層數(shù)據(jù)存儲(chǔ)方式,文件上傳、分片、存儲(chǔ)、下載和比對(duì)等則構(gòu)成了系統(tǒng)的主要功能點(diǎn)。
為驗(yàn)證系統(tǒng)的性能,采用黑盒測(cè)試的方法[14]對(duì)基于區(qū)塊鏈的電子數(shù)據(jù)存證系統(tǒng)進(jìn)行功能測(cè)試,分析該系統(tǒng)功能的可用性、界面的合理性、數(shù)據(jù)交互的正確性等。為了確定該系統(tǒng)可使用性和可擴(kuò)展性,下面將驗(yàn)證系統(tǒng)在局域網(wǎng)下的數(shù)據(jù)分布式存證。測(cè)試環(huán)境為4臺(tái)linux服務(wù)器,部署于同一個(gè)局域網(wǎng)內(nèi),同時(shí)運(yùn)行服務(wù)端程序并與客戶端進(jìn)行數(shù)據(jù)交互。
功能測(cè)試與評(píng)估時(shí),共選取了30組電子數(shù)據(jù)文件,每個(gè)文件大小從20kb到4000kb不等,將這些文件依次進(jìn)行上傳存證操作,依次對(duì)這些電子數(shù)據(jù)文件進(jìn)行查看、下載、比對(duì)等操作,并分別記錄電子數(shù)據(jù)文件在系統(tǒng)中是所耗費(fèi)的時(shí)長(zhǎng)。將這些時(shí)長(zhǎng)獲取下來(lái),進(jìn)行比對(duì),獲得更多的評(píng)估可以通過(guò)不同的文件類型,操作和文件共享狀態(tài)來(lái)進(jìn)行。對(duì)于起源獲取,專注于為每個(gè)起源數(shù)據(jù)請(qǐng)求區(qū)塊鏈存證的效率。在實(shí)驗(yàn)中,每次操作1條記錄,大小為1045.9KB,平均時(shí)間4s到7s左右。對(duì)于每次操作區(qū)塊鏈數(shù)據(jù),均記錄不同文件操作的花費(fèi)時(shí)間。最后計(jì)算獲得結(jié)果如表1。
表1 實(shí)驗(yàn)結(jié)果評(píng)估表
表1可以看出,本文所設(shè)計(jì)系統(tǒng)對(duì)數(shù)據(jù)檢索的速率較快,數(shù)據(jù)驗(yàn)證比對(duì)結(jié)果正確率達(dá)到百分百,系統(tǒng)采用數(shù)據(jù)信息與數(shù)據(jù)結(jié)構(gòu)體信息映射關(guān)系保存,加快了數(shù)據(jù)的查詢效率。數(shù)據(jù)進(jìn)行分片并分布式存儲(chǔ),保證了數(shù)據(jù)的安全性。系統(tǒng)測(cè)試結(jié)果可以完整對(duì)數(shù)據(jù)進(jìn)行存證,并且存證效率較快。
本文研究主要根據(jù)區(qū)塊鏈的不可篡改性,把電子數(shù)據(jù)存儲(chǔ)記錄在區(qū)塊鏈上,實(shí)現(xiàn)一個(gè)去中心化的存證系統(tǒng)。借助區(qū)塊鏈這一新興技術(shù),把電子數(shù)據(jù)的關(guān)鍵“數(shù)字指紋”錨定在區(qū)塊鏈的存儲(chǔ)區(qū)上,并結(jié)合智能合約、分布式存儲(chǔ)、容錯(cuò)編碼、多屬性決策等技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了基于區(qū)塊鏈的電子數(shù)據(jù)存證系統(tǒng)。測(cè)試結(jié)果表明,系統(tǒng)利用區(qū)塊鏈的去中心化和不可篡改性的核心特點(diǎn),確保電子數(shù)據(jù)的真實(shí)性、完整性和唯一性。同時(shí),系統(tǒng)充分考慮到分布式存儲(chǔ)系統(tǒng)的容錯(cuò)需求,使用里所碼對(duì)電子數(shù)據(jù)進(jìn)行了冗余保護(hù),降低因單臺(tái)服務(wù)器宕機(jī)或者傳輸通道出錯(cuò)產(chǎn)生的問(wèn)題。
目前,利用本文的方法開(kāi)發(fā)了一個(gè)簡(jiǎn)易的基于區(qū)塊鏈的電子數(shù)據(jù)存證系統(tǒng)。系統(tǒng)主機(jī)之間的交互主要是在局域網(wǎng)內(nèi)進(jìn)行,未來(lái)計(jì)劃進(jìn)一步對(duì)系統(tǒng)進(jìn)行優(yōu)化,實(shí)現(xiàn)廣域網(wǎng)內(nèi)的電子數(shù)據(jù)存證。另外,本文區(qū)塊鏈所使用的共識(shí)算法是POW工作量證明,此算法時(shí)間周期較長(zhǎng),對(duì)系統(tǒng)資源存在著浪費(fèi),當(dāng)前的共識(shí)機(jī)制算法有待于進(jìn)一步優(yōu)化。