徐單恒, 龔建新
(1.浙江工商大學(xué) 人文與傳播學(xué)院, 浙江 杭州 310000;2.南京農(nóng)業(yè)大學(xué) 信息科技學(xué)院, 江蘇 南京 210000)
第三方電子數(shù)據(jù)存證應(yīng)具備易儲(chǔ)存、傳輸效率高、低成本和易建立等特性,屬于具備較高的可信任性及證明性的電子數(shù)據(jù)證據(jù)[1-2]。然而當(dāng)前的第三方電子數(shù)據(jù)存證依然存在較多的問題,一方面是當(dāng)下所具備的存證方法大多需具備第三方平臺(tái),而在處理關(guān)于法律事務(wù)時(shí)第三方平臺(tái)會(huì)具有較多的重復(fù)數(shù)據(jù),令查詢數(shù)據(jù)時(shí)的效率過低;另一方面是第三方平臺(tái)所存儲(chǔ)數(shù)據(jù)容易遭受篡改和遺失,可信任性和安全性均較低[3]。區(qū)塊鏈?zhǔn)且粋€(gè)共享數(shù)據(jù)庫,存儲(chǔ)于其中的數(shù)據(jù)或信息,具有“不可偽造”“全程留痕”“可以追溯”“公開透明”“集體維護(hù)”等特征?;谶@些特征,區(qū)塊鏈技術(shù)奠定了堅(jiān)實(shí)的“信任”基礎(chǔ),創(chuàng)造了可靠的“合作”機(jī)制,能夠提升第三方電子數(shù)據(jù)存證時(shí)數(shù)據(jù)的可信任性與完整性。
區(qū)塊鏈屬于一個(gè)去中心化的數(shù)據(jù)庫,能夠自中心化機(jī)構(gòu)向全部加入運(yùn)算的個(gè)體上轉(zhuǎn)移可信關(guān)系,通過區(qū)塊鏈內(nèi)的網(wǎng)絡(luò)節(jié)點(diǎn)采用共識機(jī)制檢驗(yàn)遠(yuǎn)端的各交易,且其交易記錄具有不可篡改的特點(diǎn)[4]。在當(dāng)前持續(xù)變化的區(qū)塊鏈應(yīng)用環(huán)境中,以太坊的應(yīng)用逐漸增多,可設(shè)計(jì)集合各種功能模塊[5-6]。基于此,本文提出基于區(qū)塊鏈技術(shù)的第三方電子數(shù)據(jù)存證方法,提高第三方電子數(shù)據(jù)的存證效率與存儲(chǔ)安全性。
以太坊(Ethereum)是建立在賬戶基礎(chǔ)上的模型,可針對狀態(tài)數(shù)據(jù)對繁瑣的業(yè)務(wù)邏輯予以處理。以太坊的智能合約使得網(wǎng)絡(luò)的作用與計(jì)算平臺(tái)相近,存證時(shí)通過以太坊構(gòu)建對等網(wǎng)絡(luò),當(dāng)共識節(jié)點(diǎn)履行合約后,以太坊內(nèi)的節(jié)點(diǎn)均能夠遵守對應(yīng)的標(biāo)準(zhǔn),達(dá)到分布式存證第三方電子數(shù)據(jù)的目的,并實(shí)現(xiàn)可信任存證[7-9]。第三方電子數(shù)據(jù)分布式存證的過程為:建立以太坊賬戶、智能合約部署及調(diào)用智能合約。
1.1.1 建立以太坊賬戶
本文采用Geth(Go Ethereum)作為以太坊集成開發(fā)環(huán)境(Integrated Development Environment,IDE),其由以太坊基金會(huì)所提供的作為實(shí)現(xiàn)以太坊節(jié)點(diǎn)運(yùn)行的Go語言客戶端程序開發(fā),并通過能夠同智能合約以交互的方式實(shí)現(xiàn)去中心化應(yīng)用程序(Decentralized App,DApp)協(xié)同開發(fā),對區(qū)塊鏈作用進(jìn)行拓展。以太坊由內(nèi)部賬戶與外部賬戶組成,通過部署智能合約建立內(nèi)部賬戶,并面向以太坊客戶端創(chuàng)建外部賬戶[10-11]。通過設(shè)定以太坊參數(shù)Nonce(任意數(shù))、GasLimit(Gas限制額)及Difficulty(難度目標(biāo))等實(shí)現(xiàn)在Geth中建立創(chuàng)世區(qū)塊。第三方電子數(shù)據(jù)的存儲(chǔ)地址建立在線下節(jié)點(diǎn)中,并采用密鑰存儲(chǔ)庫(KeyStore)和ChainData分別存儲(chǔ)線下節(jié)點(diǎn)中全部賬戶文件與區(qū)塊信息。對以太坊節(jié)點(diǎn)的開啟可通過設(shè)定網(wǎng)絡(luò)監(jiān)控端口和用來劃分各個(gè)網(wǎng)絡(luò)的獨(dú)有標(biāo)識ID實(shí)現(xiàn),以太坊外部賬戶可采用individual.new accounts命令建立。
1.1.2 智能合約部署
智能合約部署即以太坊交易,需通過外部賬戶實(shí)現(xiàn)部署,完成部署后將回到合約賬戶和合約地址建立合約賬戶[12-13]。在此將智能合約部署劃分成4個(gè)過程,具體如下。
(1) 可信任存證合約代碼編寫??尚湃未孀C合約代碼通過Firmness實(shí)現(xiàn)編寫。采用某個(gè)大小不特定字符串類別的狀態(tài)變量在智能合約內(nèi)對已完成集中式統(tǒng)一處理的存證數(shù)據(jù)予以聲明,以字符串變量作為存證函數(shù)的輸入,通過聲明存證函數(shù)實(shí)現(xiàn)變量值的存儲(chǔ),完成交易執(zhí)行之后回到交易哈希。將存證函數(shù)的輸入作為取證函數(shù)的輸出,通過對取證函數(shù)予以聲明得到變量值,回到區(qū)塊內(nèi)最新存儲(chǔ)的數(shù)據(jù)[14-16]。任何人在合約中存儲(chǔ)大小不特定的字符串時(shí)此合約均予以準(zhǔn)許,且任何人均能夠訪問該數(shù)據(jù),對于用戶的發(fā)布無有效的預(yù)防辦法。同時(shí)任何人都能夠?qū)Υ孀C函數(shù)進(jìn)行重新調(diào)用,存儲(chǔ)不同數(shù)據(jù)實(shí)現(xiàn)對原先字符串的遮蓋,由于原始數(shù)據(jù)依然在區(qū)塊鏈的以往區(qū)塊內(nèi)儲(chǔ)存,不能去掉和修改,所以若想增添訪問權(quán)限,可通過設(shè)定合約函數(shù)保證僅準(zhǔn)許固定用戶能夠訪問存證函數(shù)。
(2) 智能合約編譯。通過在線編譯器Remix編譯智能合約為以太坊虛擬機(jī)(Ethereum Virtual Machine,EVM)字節(jié)碼得到應(yīng)用程序二進(jìn)制接口(Application Binary Interface,ABI)與合約二進(jìn)制碼。合約函數(shù)的返回值與調(diào)用簽名通過ABI描述,并且智能合約的基本交互方式也為ABI,其中的交互是指以太坊所具備合約間的交互及區(qū)塊鏈外部同合約間的交互。
(3) 以太坊節(jié)點(diǎn)開啟。
(4) 智能合約部署。合約賬戶的建立通過建立合約對象,并對EVM字節(jié)碼和交易分別予以聲明與部署實(shí)現(xiàn)。此交易由智能合約內(nèi)容、外部賬戶地址和合約賬戶地址組成,采用Kecca-256加密算法以發(fā)送的交易數(shù)與部署者外部賬戶為任意數(shù)輸入生成合約賬戶[17-18]。通過設(shè)定礦工賬戶、賬戶解鎖、交易發(fā)送、開啟挖礦和查驗(yàn)賬戶五步實(shí)現(xiàn)外部賬戶交易,其中在完成交易發(fā)送之后,即將被打包的交易次數(shù)將呈現(xiàn)在交易池內(nèi),礦工通過耗費(fèi)一些Gas完成挖礦并產(chǎn)生新的區(qū)塊,在新區(qū)塊內(nèi)存儲(chǔ)交易信息,采用Geth遠(yuǎn)程過程調(diào)用(Remote Procedure Call Protocol,RPC)向以太坊網(wǎng)絡(luò)發(fā)送字節(jié)碼,通過全網(wǎng)驗(yàn)證之后可向由Geth管控的區(qū)塊鏈內(nèi)輸入。
1.1.3 智能合約調(diào)用
智能合約可通過SettingData()、SettingData. shout和SettingData. sendingTransaction 3種方式實(shí)現(xiàn)調(diào)用。三者之間存在的差異為:SettingData()方式中,當(dāng)合約函數(shù)的代碼不存在Constant標(biāo)識時(shí),執(zhí)行的操作為SendingTransaction,當(dāng)合約函數(shù)的代碼具有Constant標(biāo)識時(shí),執(zhí)行的操作為Shout本地調(diào)用;SettingData. shout方式屬于本地調(diào)用,其返回值由合約內(nèi)函數(shù)的詳細(xì)代碼決定,不存在耗費(fèi)Gas的問題,所有信息不會(huì)傳播到區(qū)塊鏈網(wǎng)絡(luò);SettingData.sendingTransaction方式可建立新的交易,打包交易之后回到某個(gè)交易哈希值向網(wǎng)絡(luò)內(nèi)傳播,將導(dǎo)致耗費(fèi)Gas。在此智能合約調(diào)用采用SettingData()方式,并且合約函數(shù)代碼不存在Constant標(biāo)識,其整體調(diào)用和部署過程如圖1所示。在合約狀況值產(chǎn)生變化的情況下進(jìn)行智能合約調(diào)用時(shí),此調(diào)用為交易,挖礦打包交易時(shí)需礦工耗費(fèi)Gas。合約實(shí)例可通過對智能合約ABI于以太坊平臺(tái)上予以聲明得到,這時(shí)為回到代碼內(nèi)所設(shè)定的合約標(biāo)準(zhǔn)可通過輸入合約名稱實(shí)現(xiàn),采用SettingData()方式,參數(shù)增添經(jīng)過統(tǒng)一處理的存證數(shù)據(jù),實(shí)現(xiàn)交易之后回到交易哈希值,方便以后對區(qū)塊進(jìn)行定位與查找訪問存證數(shù)據(jù)。
圖1 智能合約存證過程圖
門限環(huán)簽名可確保一個(gè)成員集合內(nèi)最少具備數(shù)個(gè)成員加入到簽名當(dāng)中,并且對簽名成員的身份予以保密,其滿足避免仿造與無約束匿名等安全性需要[19]。其中不可仿造即為外來攻擊者,若想仿造合法的門限環(huán)簽名,應(yīng)具備n個(gè)簽名成員的私鑰方可實(shí)現(xiàn)仿造[20];無約束匿名即為即使攻擊者得到全部有可能加入簽名成員的私鑰,并擁有超強(qiáng)的運(yùn)算能力,對于哪個(gè)成員加入門限環(huán)簽名其所能確準(zhǔn)的概率仍然不會(huì)高出n/m,其中n和m分別表示門限值與有可能加入簽名成員的數(shù)量。在基于區(qū)塊鏈的第三方電子數(shù)據(jù)存證中運(yùn)用門限環(huán)簽名過程,提升第三方電子存證數(shù)據(jù)的安全性。
在此列出所需要的符號與各符號對應(yīng)的意義,便于之后的闡述,分別為T、Qpub、g表示主密鑰、公鑰及局部簽名私鑰;R1生成元、門限環(huán)成員、應(yīng)用限期依次用Q、JBj、S表示;A和M表示具有m個(gè)成員的集合與具有n個(gè)成員的集合;φ和t表示門限環(huán)簽名和等待被簽名的報(bào)文。
1.3.1 密鑰生成
門限環(huán)簽名算法過程分為密鑰生成、簽名過程和檢驗(yàn)過程3個(gè)步驟,具體如下。
(2) 各門限環(huán)成員JBj運(yùn)算式為Gji=ej(i)tlbp,i=1,2,…,m;
(3) 各門限環(huán)成員JBj向JBi發(fā)送Gji,同時(shí)將GjQ,cj,1Q,…,cj,n-1Q公開;
1.3.2 簽名過程
設(shè)置A={JB1,JB2,…,JBm}表示m個(gè)門限環(huán)成員所組成的集合,用M={JB1,JB2,…,JBn}表示現(xiàn)實(shí)中簽名人的集合。具體簽名過程如下。
1.3.3 檢驗(yàn)過程
為檢驗(yàn)本文方法的可行性及擴(kuò)展性,通過仿真實(shí)驗(yàn)?zāi)M本文方法于局域網(wǎng)內(nèi)的第三方電子數(shù)據(jù)存證和門限環(huán)簽名過程,實(shí)驗(yàn)所處檢測環(huán)境是:通過 Web3j 實(shí)現(xiàn) Java 外部調(diào)用部署在 Ethereum 上的智能合約設(shè)置3臺(tái)服務(wù)器在局域網(wǎng)中,將各服務(wù)端程序共同運(yùn)作,同用戶端交互數(shù)據(jù),如圖2所示。
圖2 智能合約的調(diào)用
實(shí)驗(yàn)選擇12條大小不等的第三方電子數(shù)據(jù)文件檢驗(yàn)本文方法的性能,文件大小為300 kB—3 600 kB,分別檢驗(yàn)本文方法的存證過程與門限環(huán)簽名過程,再綜合分析兩方面的檢驗(yàn)結(jié)果,驗(yàn)證本文方法總體性能。
當(dāng)用戶成功進(jìn)入到系統(tǒng)界面后,用戶可以將個(gè)人信息和賬號地址信息輸入后進(jìn)行系統(tǒng)電子數(shù)據(jù)上傳、下載、查詢、比對和授權(quán)功能的測試樣例及結(jié)果測試。用戶可以成功地獲取到查詢的文件信息與文件對比結(jié)果信息,可以得出原文件未被修改,成功存證。主要原因在于本文方法引入了區(qū)塊鏈技術(shù),防止第三方電子數(shù)據(jù)存儲(chǔ)遭受篡改和遺失,為提升數(shù)據(jù)存證速率與安全性提供保障。
檢驗(yàn)本文方法進(jìn)行實(shí)驗(yàn)第三方電子數(shù)據(jù)存證過程中的數(shù)據(jù)驗(yàn)證率,分析本文方法的實(shí)際應(yīng)用性能,各條數(shù)據(jù)文件的數(shù)據(jù)驗(yàn)證率如表1所示。
通過表1能夠看出,本文方法存證的第三方電子數(shù)據(jù)的數(shù)據(jù)驗(yàn)證準(zhǔn)確率均為100%,說明本文方法存證性能好。
表1 數(shù)據(jù)驗(yàn)證率
記錄本文方法每次進(jìn)行分布式存證各條大小不同數(shù)據(jù)文件所消耗的時(shí)間,依據(jù)檢測記錄結(jié)果繪制本文方法存證過程的消耗時(shí)間柱形圖,如圖3所示。
圖3 不同文件大小存證消耗時(shí)間
通過圖3能夠看出,本文方法在對大小不同的第三方電子數(shù)據(jù)文件進(jìn)行存證時(shí),隨數(shù)據(jù)文件增大消耗時(shí)間大致呈現(xiàn)上升趨勢,且12條大小不同數(shù)據(jù)文件的平均大小是1 950 kB,平均消耗時(shí)間為62.9 ms,可以得出本文方法的存證消耗時(shí)間較短,存證效率較高。
對采用本文方法對實(shí)驗(yàn)中各條存證數(shù)據(jù)文件進(jìn)行門限環(huán)簽名密鑰保護(hù),記錄每次所用時(shí)間,并以此為依據(jù)運(yùn)算出本文方法中門限環(huán)簽名的平均消耗時(shí)間,對其效率予以分析。各次消耗時(shí)間的具體記錄如表2所示。
表2 各次消耗時(shí)間記錄
通過分析表2能夠得出,本文方法進(jìn)行門限環(huán)簽名時(shí),12次密鑰生成所消耗的平均時(shí)間為4.9 ms,簽名過程所消耗的平均時(shí)間為5.0 ms,檢驗(yàn)過程所消耗的平均時(shí)間為5.3 ms,總體過程的平均消耗時(shí)間為15.3 ms,說明本文方法中針對第三方電子數(shù)據(jù)存證保護(hù)的門限環(huán)簽名過程耗時(shí)短效率高,且不受數(shù)據(jù)文件大小影響。
為綜合分析存證效率與門限環(huán)簽名效率,對本文方法的整體效率予以分析,現(xiàn)結(jié)合2.2小節(jié)和2.3小節(jié)中的實(shí)驗(yàn)結(jié)果,繪制本文方法的整體消耗時(shí)長曲線圖,如圖4所示。
圖4 本文方法整體消耗時(shí)間
通過圖4可看出,本文方法的整體消耗時(shí)間在56.2 ms—102.0 ms之間,整體平均消耗時(shí)間為78.4 ms,整體平均耗時(shí)不足0.1 s,由此說明本文方法的整體效率較高,實(shí)際應(yīng)用中更省時(shí)。
綜上所述,本文方法的整體效率較高,數(shù)據(jù)驗(yàn)證準(zhǔn)確性極為優(yōu)越,實(shí)際應(yīng)用中不僅能夠快速存證,并且能夠快速對存證數(shù)據(jù)予以門限環(huán)簽名安全保護(hù),提升存證數(shù)據(jù)的安全性。
本文針對基于區(qū)塊鏈技術(shù)的第三方電子數(shù)據(jù)存證方法展開研究,通過構(gòu)建以太坊賬戶并以此部署及調(diào)用智能合約,完成分布式存證第三方電子數(shù)據(jù)的目的,并且通過門限環(huán)簽名算法保障存證數(shù)據(jù)的安全性。實(shí)驗(yàn)驗(yàn)證本文方法具有較高的效率與精準(zhǔn)的數(shù)據(jù)驗(yàn)證率。下一步工作可以考慮對不同類型的用戶原數(shù)據(jù),采用分片哈希、細(xì)粒度完整性校驗(yàn)或更安全高效的技術(shù)方法,在保障數(shù)據(jù)真實(shí)完整的同時(shí),實(shí)現(xiàn)對原數(shù)據(jù)的安全存證。