苗齊
摘要:區(qū)塊鏈發(fā)展日益蓬勃,其不可篡改、去中心化等特性逐漸被認(rèn)可。其安全性的本質(zhì)是副本冗余與歷史數(shù)據(jù)參與加密,這導(dǎo)致了區(qū)塊鏈容量的過大且無限增長,對(duì)資源的消耗是不可避免的。該文提出一種基于星際文件系統(tǒng)(IPFS)的區(qū)塊鏈存儲(chǔ)優(yōu)化方案,通過減小上鏈數(shù)據(jù)大小的方式限制區(qū)塊鏈容量。
關(guān)鍵詞:區(qū)塊鏈;IPFS;物流信息;數(shù)據(jù)存儲(chǔ)
中圖分類號(hào):TP3? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)11-0257-03
1 引言
目前,物流行業(yè)內(nèi)部信息交互并不通暢,而一些涉及客戶的敏感信息安全問題也被外界廣泛關(guān)注?,F(xiàn)有的物流系統(tǒng)都是由企業(yè)中心化統(tǒng)一管理,如果企業(yè)內(nèi)部人員企圖謀取私利,容易發(fā)生信息泄露等問題。本文提出的一種基于IPFS優(yōu)化的聯(lián)盟區(qū)塊鏈方案,以區(qū)塊鏈的安全、可溯源、不可篡改的特性,提高了物流信息數(shù)據(jù)的可信度和安全性,防止了中心化系統(tǒng)下信息泄露等問題的出現(xiàn)。并且系統(tǒng)使用星際文件系統(tǒng),構(gòu)建一種物流企業(yè)間的數(shù)據(jù)交流平臺(tái),以實(shí)現(xiàn)物流資源的充分合理利用。
2 技術(shù)背景
區(qū)塊鏈[1]是在去中心節(jié)點(diǎn)的網(wǎng)絡(luò)中,由一個(gè)個(gè)區(qū)塊組成的鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu),每個(gè)區(qū)塊中由一條條的數(shù)據(jù)信息(一般稱之為交易)構(gòu)成。其中,聯(lián)盟鏈網(wǎng)絡(luò)節(jié)點(diǎn)劃分為各個(gè)組織,組織內(nèi)又有許多普通節(jié)點(diǎn)構(gòu)成,網(wǎng)絡(luò)內(nèi)部的共識(shí)以組織為單位實(shí)現(xiàn)。聯(lián)盟鏈的網(wǎng)絡(luò)模型更加符合現(xiàn)代企業(yè)、機(jī)構(gòu)的運(yùn)營模式,因此,可以實(shí)現(xiàn)更有現(xiàn)實(shí)意義的落地應(yīng)用。
IPFS(星際文件系統(tǒng))是由Juan Benet設(shè)計(jì)的,并于2014年開始由Protocol Labs在開源社區(qū)的幫助下發(fā)展的一個(gè)網(wǎng)絡(luò)傳輸協(xié)議,其旨在創(chuàng)建持久且分布式存儲(chǔ)和共享文件。它所具有的內(nèi)容可尋址、可追溯文件修改歷史的特點(diǎn)為區(qū)塊鏈信息數(shù)據(jù)的下鏈提供了條件。IPFS綜合了已有技術(shù)的特色,包括DHT、BitTorrent,Git和SFS等,實(shí)現(xiàn)了將數(shù)據(jù)存儲(chǔ)于本地,并將節(jié)點(diǎn)彼此連接從而實(shí)現(xiàn)數(shù)據(jù)傳遞的主要功能[2]。
在物流行業(yè)中,現(xiàn)有區(qū)塊鏈如果想實(shí)現(xiàn)數(shù)據(jù)安全,就必須將所有數(shù)據(jù)上鏈,而僅2019雙十一當(dāng)天,菜鳥網(wǎng)絡(luò)統(tǒng)計(jì)訂單量達(dá)到12.92億單。如果想要保障這些數(shù)據(jù)全部上鏈,所形成鏈的大小將難以想象。
3 相關(guān)工作
對(duì)于區(qū)塊鏈體積過大這一問題,國內(nèi)外很多學(xué)者都提出了各自的解決方案。Robert[3]等人,基于以太坊環(huán)境提出了數(shù)據(jù)下鏈,IPFS與區(qū)塊數(shù)據(jù)綁定這一理念,提高兩個(gè)模塊之間的關(guān)聯(lián)性。對(duì)于輕節(jié)點(diǎn),可以與數(shù)據(jù)進(jìn)行綁定,提高使用效率。文章還提出了Block重用的概念,簡化了數(shù)據(jù)在IPFS中存儲(chǔ)的方式,既可以提高數(shù)據(jù)查詢效率。又能夠優(yōu)化數(shù)據(jù)在IPFS中的存儲(chǔ)結(jié)構(gòu);此外,文章還將初始化Hash與運(yùn)行時(shí)Hash相區(qū)別,簡單區(qū)分了一個(gè)區(qū)塊中數(shù)據(jù)的使用頻率。Chen[4]等人提出將IPFS與區(qū)塊鏈相結(jié)合,并應(yīng)用于Bitcoin中,實(shí)現(xiàn)了區(qū)塊數(shù)據(jù)大小大幅縮減。Zheng[5]等人使用BlockStack和ZigzagCode結(jié)合的方法,將數(shù)據(jù)在IPFS和區(qū)塊鏈間轉(zhuǎn)化的過程細(xì)化,將數(shù)據(jù)分為冷數(shù)據(jù)與熱數(shù)據(jù),區(qū)別對(duì)待,從而進(jìn)一步區(qū)分了數(shù)據(jù)的使用頻率,優(yōu)化了系統(tǒng)模型。
在實(shí)際應(yīng)用方面也已有很多學(xué)者提出針對(duì)不同領(lǐng)域的應(yīng)用方案。李瑾[6]等人設(shè)計(jì)的基于區(qū)塊鏈的分布式電能量數(shù)據(jù)可信存儲(chǔ)機(jī)制,則是在電能量計(jì)量工作上的應(yīng)用。方案提出了IPFS存儲(chǔ)數(shù)據(jù),區(qū)塊鏈存儲(chǔ)地址的概念模型,該模型對(duì)于減小區(qū)塊鏈容量有著十分顯著的效果,但是其代價(jià)是降低了數(shù)據(jù)的查詢效率,在數(shù)據(jù)查詢時(shí),步驟煩瑣,除必要共識(shí)外,仍需經(jīng)過數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的驗(yàn)證,在大數(shù)據(jù)量情況下效率低下。
4 本文方案
本文所提出方案主要有兩個(gè)方面內(nèi)容,一是數(shù)據(jù)存儲(chǔ)模塊,一是數(shù)據(jù)查詢檢索模塊。其中數(shù)據(jù)存儲(chǔ)模塊的設(shè)計(jì)目的是通過改變區(qū)塊內(nèi)存儲(chǔ)內(nèi)容減小區(qū)塊大小,從而減少整個(gè)區(qū)塊鏈容量。而數(shù)據(jù)查詢檢索則是利用IPFS生成的Hash值進(jìn)行數(shù)據(jù)查詢獲取的特點(diǎn)進(jìn)行行業(yè)內(nèi)數(shù)據(jù)的交易或交換。
4.1 系統(tǒng)結(jié)構(gòu)
本文提出的系統(tǒng)模型如圖1所示,聯(lián)盟內(nèi)網(wǎng)絡(luò)節(jié)點(diǎn)負(fù)責(zé)數(shù)據(jù)收集與處理。在收集到網(wǎng)點(diǎn)數(shù)據(jù)后,節(jié)點(diǎn)將數(shù)據(jù)打包上傳至IPFS。IPFS對(duì)接收到的數(shù)據(jù)進(jìn)行存儲(chǔ),完成后向節(jié)點(diǎn)進(jìn)行反饋,并返回?cái)?shù)據(jù)對(duì)應(yīng)的地址Hash。組織節(jié)點(diǎn)將返回的Hash值作為普通數(shù)據(jù)進(jìn)行上鏈操作。數(shù)據(jù)在聯(lián)盟網(wǎng)絡(luò)中,進(jìn)行打包、背書驗(yàn)證,完成區(qū)塊生成,最后存入?yún)^(qū)塊鏈。
本文方案以Fabric為基礎(chǔ),設(shè)計(jì)出一個(gè)聯(lián)盟模型,由若干組織構(gòu)成,每個(gè)組織有且僅有一個(gè)Anchor節(jié)點(diǎn),該節(jié)點(diǎn)也即為Leader節(jié)點(diǎn)。而Orderer節(jié)點(diǎn)除了完成交易排序、共識(shí)外,在聯(lián)盟網(wǎng)絡(luò)中還要考慮其容錯(cuò),因此設(shè)置數(shù)量為:
[Numorderer=Numorgs3+1]? ? ? ? ? ? ? ? ? ? (1)
將Orderer節(jié)點(diǎn)設(shè)置大于聯(lián)盟內(nèi)組織數(shù)的三分之一,可以從數(shù)量上為Orderer節(jié)點(diǎn)提供足夠的容錯(cuò)空間。
方案中,一個(gè)物流企業(yè)對(duì)應(yīng)一個(gè)組織,組織中的節(jié)點(diǎn)包含企業(yè)節(jié)點(diǎn)、物流網(wǎng)點(diǎn)節(jié)點(diǎn)等。這些節(jié)點(diǎn)在系統(tǒng)中都為普通peer節(jié)點(diǎn),但企業(yè)主節(jié)點(diǎn)為Leader節(jié)點(diǎn),該節(jié)點(diǎn)負(fù)責(zé)與其他組織通信。
4.2 數(shù)據(jù)上傳
系統(tǒng)數(shù)據(jù)傳輸按照傳輸內(nèi)容劃分分為物流數(shù)據(jù)傳輸以及地址Hash傳輸兩個(gè)部分。
物流數(shù)據(jù)由網(wǎng)點(diǎn)生成并發(fā)送至企業(yè)節(jié)點(diǎn),第i個(gè)物流網(wǎng)點(diǎn)Ni向企業(yè)節(jié)點(diǎn)L中傳輸?shù)臄?shù)據(jù)格式為:
[TxNi=EPKLP(Data||CertNi||SigsignNi|timestampLP? ? ? ? ? ?](2)
其中,[PKNi]為節(jié)點(diǎn)Ni的公鑰,[EPKLP]為利用[PKLP]加密信息,Data為從主節(jié)點(diǎn)LP從節(jié)點(diǎn)Ni獲得的數(shù)據(jù),[CertNi]為Ni身份信息,[timestampLP]為時(shí)間戳,[SigsignNi]為利用實(shí)體Ni的私鑰對(duì)[Data]哈希運(yùn)算后進(jìn)行的簽名數(shù)據(jù)。Data數(shù)據(jù)在傳輸時(shí)將由Peer節(jié)點(diǎn)第一次加密。
[Data=EPKNiDataNi||timestampNi]? ? ? ? ? ? ?(3)
[DataNi]代表物流網(wǎng)點(diǎn)Ni獲取的原始數(shù)據(jù),該數(shù)據(jù)在Ni中進(jìn)行初始加密,并生成簽名。
企業(yè)節(jié)點(diǎn)向區(qū)塊鏈網(wǎng)絡(luò)發(fā)送上傳請(qǐng)求,調(diào)用智能合約并將地址Hash等參數(shù)傳入?yún)^(qū)塊鏈網(wǎng)絡(luò)。區(qū)塊鏈節(jié)點(diǎn)收到請(qǐng)求首先驗(yàn)證用戶身份,通過后執(zhí)行智能合約將哈希值、ClientID、企業(yè)節(jié)點(diǎn)ID、數(shù)據(jù)收集時(shí)間等綁定并進(jìn)行打包、發(fā)送給Orderer進(jìn)行排序,再由Endorsing節(jié)點(diǎn)進(jìn)行背書。之后將智能合約執(zhí)行結(jié)果寫入?yún)^(qū)塊鏈賬本,反饋給收集節(jié)點(diǎn)客戶端信息保存情況。
4.3 數(shù)據(jù)存儲(chǔ)
IPFS所存儲(chǔ)的數(shù)據(jù)將被Hash后存入一個(gè)默克爾無回路有向圖(MerkleDAG)以保證數(shù)據(jù)的安全性,此Hash值被稱為地址Hash。然后,將地址Hash存入?yún)^(qū)塊,從而取代原有的數(shù)據(jù)。IPFS中,使用兩次SHA256算法,再進(jìn)行Base58編碼,生成的Hash長度為33Byte,使用地址Hash替代原有數(shù)據(jù),因此將原有的快遞信息替換為Hash地址,將大幅度減小一個(gè)區(qū)塊的大小,從而實(shí)現(xiàn)整個(gè)區(qū)塊鏈的“瘦身”。
方案中,在數(shù)據(jù)存儲(chǔ)至IPFS時(shí),將對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證。Leader節(jié)點(diǎn)利用自身私鑰,對(duì)其進(jìn)行身份驗(yàn)證確定數(shù)據(jù)來源,并計(jì)算相應(yīng)的公鑰,解碼簽名,再對(duì)Data進(jìn)行哈希加密得到Hash值,與發(fā)送節(jié)點(diǎn)發(fā)送來的數(shù)字簽名解密得到的Hash值進(jìn)行校驗(yàn),若兩個(gè)數(shù)據(jù)相同則通過校驗(yàn),驗(yàn)證數(shù)據(jù)正確。如果數(shù)據(jù)來源安全且完整有效,數(shù)據(jù)收集節(jié)點(diǎn)客戶端向IPFS請(qǐng)求將信息存儲(chǔ)到IPFS中。
4.4 區(qū)塊生成
方案中,收集到的交易實(shí)際上為IPFS返回的地址Hash,節(jié)點(diǎn)接收到數(shù)據(jù)后運(yùn)行區(qū)塊創(chuàng)建程序,構(gòu)建交易提案并提交給相應(yīng)的背書節(jié)點(diǎn),背書節(jié)點(diǎn)對(duì)接收到的交易提案請(qǐng)求進(jìn)行驗(yàn)證。驗(yàn)證通過后調(diào)用鏈碼進(jìn)行模擬執(zhí)行,產(chǎn)生包括響應(yīng)值、讀寫集的事務(wù)結(jié)果,對(duì)結(jié)果進(jìn)行背書并響應(yīng)給應(yīng)用程序。應(yīng)用程序收集到足夠的消息和背書簽名之后,構(gòu)建合法的交易請(qǐng)求并將交易請(qǐng)求廣播給Orderer服務(wù)節(jié)點(diǎn)。Orderer節(jié)點(diǎn)接收到事務(wù)請(qǐng)求之后,按時(shí)間順序?qū)λ鼈冞M(jìn)行排序,并創(chuàng)建交易區(qū)塊。之后廣播給同一通道內(nèi)所有組織的Leader節(jié)點(diǎn),Leader節(jié)點(diǎn)再同步廣播給組織內(nèi)的其他節(jié)點(diǎn)。每個(gè)Peer節(jié)點(diǎn)將區(qū)塊附加到區(qū)塊鏈中,讀寫集被提交到當(dāng)前的狀態(tài)數(shù)據(jù)庫中。區(qū)塊上鏈工作就此完成。
本方案為了實(shí)現(xiàn)簡化查詢,要求各節(jié)點(diǎn)獲取的地址Hash除上傳區(qū)塊鏈外,需要保留一份無加密副本。副本僅保存地址Hash與節(jié)點(diǎn)相關(guān)信息,可用于不保證可靠性基礎(chǔ)上的數(shù)據(jù)快速查詢。
4.5 數(shù)據(jù)查詢
由于數(shù)據(jù)被存儲(chǔ)到了IPFS之中,因此單純從Fabric中無法查詢原始數(shù)據(jù),節(jié)點(diǎn)需從區(qū)塊鏈中獲取地址Hash,而后再根據(jù)地址Hash在IPFS獲得相應(yīng)數(shù)據(jù)。其查詢流程如圖2所示,某一節(jié)點(diǎn)發(fā)起查詢請(qǐng)求,執(zhí)行智能合約。從區(qū)塊鏈賬本中檢索出查詢信息對(duì)應(yīng)的哈希記錄并返回。由于在傳輸存儲(chǔ)過程中,原有物流數(shù)據(jù)已經(jīng)進(jìn)行加密,仍須獲得相關(guān)節(jié)點(diǎn)的密鑰。查詢節(jié)點(diǎn)獲取IPFS中加密的數(shù)據(jù)以及用于解密的私鑰即可對(duì)數(shù)據(jù)進(jìn)行解密,獲得原始數(shù)據(jù)。
如果數(shù)據(jù)被惡意修改或替換,其地址Hash將與節(jié)點(diǎn)從區(qū)塊鏈中獲取的Hash不一致,節(jié)點(diǎn)就無法獲取數(shù)據(jù),此時(shí)應(yīng)當(dāng)返回?cái)?shù)據(jù)異常錯(cuò)誤。如果數(shù)據(jù)正常則可得到響應(yīng)數(shù)據(jù)。
上述查詢方式涉及兩次數(shù)據(jù)讀取,并且存在驗(yàn)證步驟,從一定程度上會(huì)降低效率。而IPFS本身的查詢接口就可以實(shí)現(xiàn)對(duì)于物流數(shù)據(jù)查詢,因此,在不要求數(shù)據(jù)高安全性的情況下,可以跳過區(qū)塊鏈系統(tǒng),直接使用IPFS進(jìn)行查詢,如圖3所示。
聯(lián)盟內(nèi)部節(jié)點(diǎn)要想直接獲取數(shù)據(jù),其步驟與上述查詢模式基本一致,不過省去了調(diào)用智能合約訪問區(qū)塊鏈的步驟,直接調(diào)用節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)副本中的地址Hash。整個(gè)過程,聯(lián)盟網(wǎng)絡(luò)內(nèi)部只有一條請(qǐng)求數(shù)據(jù)、一條響應(yīng)數(shù)據(jù)。直接使用IPFS查詢這意味著,數(shù)據(jù)可以面向非聯(lián)盟節(jié)點(diǎn),當(dāng)節(jié)點(diǎn)Ea想要獲取數(shù)據(jù)時(shí),必須通過客戶節(jié)點(diǎn)CLi發(fā)送請(qǐng)求,聯(lián)盟對(duì)CLi進(jìn)行身份驗(yàn)證,并根據(jù)請(qǐng)求通知相應(yīng)節(jié)點(diǎn)Ni,Ni自行進(jìn)行數(shù)據(jù)獲取后,將加密后數(shù)據(jù)發(fā)送給Ea,外部數(shù)據(jù)查詢完成。
5 系統(tǒng)實(shí)現(xiàn)
本文提出的基于IPFS優(yōu)化的區(qū)塊鏈物流信息管理方案,區(qū)塊鏈層采用Linux基金會(huì)主持的Hyperledger Fabric項(xiàng)目構(gòu)建的。方案部署了一個(gè)orderer節(jié)點(diǎn)、兩個(gè)org組織、四個(gè)peer節(jié)點(diǎn),并在組織中部署了相關(guān)鏈碼。
本文設(shè)計(jì)的系統(tǒng)模型與原始區(qū)塊鏈模型存儲(chǔ)相同數(shù)據(jù)容量對(duì)比如圖6所示,本系統(tǒng)生成的區(qū)塊比原有普通區(qū)塊的縮小了超過75%,在很大程度上縮減了區(qū)塊鏈的容量。
6 總結(jié)
本文實(shí)現(xiàn)了一種基于IPFS的區(qū)塊系統(tǒng)模型,并將其在物流聯(lián)盟領(lǐng)域進(jìn)行應(yīng)用,本文方案主要利用IPFS進(jìn)行數(shù)據(jù)存儲(chǔ),預(yù)期實(shí)現(xiàn)減少區(qū)塊鏈上數(shù)據(jù)大小目標(biāo)。上一章對(duì)數(shù)據(jù)進(jìn)行對(duì)比可得出結(jié)論,本文方案可以實(shí)現(xiàn)減少數(shù)據(jù)量這一目標(biāo)。不過,方案的實(shí)現(xiàn)是以查詢效率為代價(jià)的,在之后的工作中,將繼續(xù)探究方案對(duì)效率的影響,盡可能少的影響查詢時(shí)間,在空間與時(shí)間上做到最完美的平衡。
參考文獻(xiàn):
[1] Liebeherr J, Dong G. An overlay approach to data security in ad-hoc networks[J]. Ad Hoc Networks, 2007, 5(7): 1055-1072.
[2] J.Benet.IPFS-Content Addressed, versioned, P2P File System, https://ipfs.io/,Online; accessed Jul. 28th, 2017.
[3] R.Norvil. IPFS for reduction of chain size in Ethereum[C]. IEEE 2018 International Congress on Cybermatics,2018:1121-1128.
[4] Y. Chen.An improved P2P File System Scheme based on IPFS and Blockchain[C]. IEEE International Conference on Big Data,2017:2652-2657.
[5] Q.Zheng,Y.Li and P.Chen,An Innovative IPFS-Based Storage Model for Blockchain[C]. International Congress on Web Intelligence,2018:704-708.
[6] 李瑾,仵松頎,張森林,等.基于區(qū)塊鏈的分布式電能量數(shù)據(jù)可信存儲(chǔ)機(jī)制[J].網(wǎng)絡(luò)與信息安全學(xué)報(bào),2020,6(2):87-95.
【通聯(lián)編輯:代影】