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