







基金項目:2022年南通市基礎科學研究計劃項目;項目編號:JCZ2022087。2023年南通市社會民生科技計劃項目;項目編號:MS2023062。
作者簡介:朱亞麗(1987— ),女,講師,碩士;研究方向:嵌入式系統與物聯網。
摘要:隨著物聯網設備的普及和人工智能應用的落地,物聯網數據的規模呈爆炸式增長。要想實現物與物、物與人之間更便捷溝通的美好愿景,必須考慮物聯網海量數據的存儲問題。文章設計了一種基于區塊鏈和星際文件系統(IPFS)的存儲機制,通過與傳統的區塊鏈對比,基于區塊鏈和IPFS的存儲機制為存儲和管理數據提供了一種安全、分散且可擴展的解決方案。
關鍵詞:區塊鏈;IPFS;存儲機制
中圖分類號:TP311" 文獻標志碼:A
0" 引言
區塊鏈是一種去中心化、安全、透明的交易賬本,區塊鏈通過密碼學對數據的加密來確保存儲在塊中的數據完整性[1]。區塊鏈中的每個塊包含一個交易列表和前一個塊的哈希值,這將創建一個一旦寫入就難以更改的鏈式區塊結構,同時區塊鏈系統需求多節點參與,網絡中誠實節點的數量越多,區塊鏈中數據就越難以更改。區塊鏈這種面向分布式系統的技術非常適用于物聯網場景,但是區塊鏈對物聯網設備的計算和存儲能力提出了更高的要求,目前有非常多的研究表明區塊鏈系統可以使用更加輕量級的共識算法以降低對硬件的算力需求,但是在系統長時間運作的情況下,海量且重復的區塊數據對硬件的存儲能力也是一個非常大的挑戰,所以需要設計一種面向物聯網場景的區塊鏈存儲機制。
IPFS是一種點對點文件共享系統,IPFS使用分布式哈希表來存儲和檢索文件[1]。同時IPFS通過冗余存儲的方式讓數據難以丟失,數據的Hash地址存儲在區塊鏈中,這允許區塊鏈中的節點快速有效地檢索數據,所以IPFS非常契合于物聯網場景下的區塊鏈大數據存儲。
本文在原有的區塊鏈系統中引入IPFS,設計出一種安全、分散的存儲和檢索數據方式,這種設計可用于各種應用,包括數字資產管理、數據存儲和內容分發。本設計中區塊鏈用于記錄數據在IPFS中的Hash地址、來源、所有權等信息,區塊鏈中的區塊包含數據的IPFS Hash地址以及與該數據相關的任何事務記錄,這將創建數據及其歷史的永久記錄,從而使第三方篡改數據變得難以實現。
1" 區塊鏈存儲相關工作
現有的區塊鏈最大的挑戰之一是存儲需求,隨著鏈中交易數量的增長,區塊鏈的系統大小也在增長,這意味著區塊鏈存儲在數據量激增的情況下成為一個重大問題,特別是對于容量不足的物聯網系統。
目前,解決分布式物聯網系統區塊鏈存儲問題已經有了一些方案。Papadodimas等[2]提出基于區塊鏈將天氣數據存儲在一個集中的服務器上,使用關系型數據庫MariaDB。Novo[3]提出存儲使用CoAP服務器,查詢可以通過代理節點完成,也可以單獨存儲在網絡可訪問存儲器上。Bajoudah等[4]提出物聯網數據的去中心化,無需存儲空間數據交換。Shrobe等[5]提出基于區塊鏈的訪問控制,鏈下存儲。Shafagh等[6]提出物聯網數據分布式存儲或云存儲。
本文使用IPFS系統作為存儲方式,將較大的數據文件(圖片、視頻等)上傳至IPFS系統,僅將IPFS系統的哈希地址和解密密鑰上傳至區塊鏈。隱私策略是將數據在上傳至IPFS系統前將數據進行加密,以此來防止網絡外的節點監聽到節點上傳的數據。
2" 系統模型
假設網絡中存在若干物聯網設備,例如:傳感器、攝像頭、路由器等,這些設備可能具有一定計算能力和存儲能力。這些設備中擁有計算能力的節點可以成為區塊鏈系統中的節點,從而參與區塊鏈共識;擁有較大存儲空間的節點可以成為IPFS的節點,負責存儲網絡中占用空間較大的數據;同時兼備較強計算能力和存儲能力的節點可以同時擔任區塊鏈節點和IPFS節點的角色。整個系統網絡如圖1所示,節點之間通過直接或多跳的方式相互通信。
3" 方案流程
本文設計的基于區塊鏈和IPFS存儲機制增強了區塊鏈系統和IPFS系統的可擴展性,同時充分保護了用戶數據的隱私。系統中所有數據入庫出庫均通過區塊鏈系統進行保存,具有不可更改性和可追溯性。系統包含5個實體,各個實體的具體功能如下。
(1)授權中心。授權中心是系統中為各個節點頒發證書和簽名的機構。授權中心的主要功能:協助系統進行初始化,為所有節點生成RSA密鑰;系統運行過程中,動態的為節點授權或取消節點授權。
(2)數據持有者/設備。一般為物聯網系統中存儲能力不強的節點,如傳感器、攝像頭等,它們需要尋求一個大容量空間保存自身產生的數據。這些節點可以向授權中心發起數據上傳請求,獲得授權后即可對數據加密,將加密后的數據上傳至IPFS集群系統。數據上傳完成后再將數據摘要、IPFS地址等信息作為一筆交易提交至區塊鏈系統,該交易經區塊鏈系統認證后會被打包為區塊存儲。
(3)數據使用者。數據使用者訪問數據時,需要向授權中心申請區塊鏈的訪問授權,授權中心會對申請發起者的身份進行審核,數據使用者通過審核后才能對區塊鏈中的信息進行訪問及解密。
(4)區塊鏈系統。通過在區塊鏈中部署智能合約實現鏈上鏈下的數據交互,區塊鏈中包含數據上傳者使用的對稱加密密鑰k、信息上傳至IPFS集群得到的哈希地址。數據的使用者通過向區塊鏈發起查詢交易,在區塊鏈中留下查詢記錄,區塊鏈對查詢交易進行共識認證后,將用戶查詢的目標數據的哈希地址ADDhash和對稱加密密鑰k返回給申請者。
(5)IPFS集群。專門用于存儲用戶發起存儲的加密數據,通過鏈下存儲的方式大大緩解了區塊鏈的存儲壓力,使得區塊鏈只保存數據在IPFS系統中的地址信息和解密信息,能夠降低設備加入區塊鏈的門檻,更多的物聯網設備能夠作為區塊鏈節點加入系統。
整體方案的流程如圖2所示,圖中涉及的5個實體并不是物理意義上的分割,在實際網絡部署中有可能一個節點同時充當其中的多個身份,例如:授權中心可以是區塊鏈網絡中擁有冗余計算能力的節點;數據的持有者可以是物聯網中的傳感器,同時也是區塊鏈的節點;數據的使用者可以是物聯網分布式網絡中的計算節點,它們可能已經是系統中的區塊鏈節點或者IPFS集群存儲節點,同時它們也需要獲取物聯網設備的數據,所以在申請訪問數據的過程中充當的是數據使用者角色。
3.1" 系統初始化
系統初始化的過程中首先是區塊鏈系統的初始化和授權中心的選取,每個區塊鏈節點在加入區塊鏈網絡之初會將自身的剩余計算能力Comprest、剩余存儲空間Storerest(可供區塊鏈/IPFS集群使用的存儲空間)等信息作為一條交易在區塊鏈中進行共識。當包含所有節點剩余計算和存儲資源的交易被打包成區塊并通過區塊鏈系統共識后,包含節點信息的區塊則作為該區塊鏈系統的創世塊,所有區塊鏈網絡中的節點會根據以下公式進行計算,選擇出區塊鏈的授權中心:
W=a·ComprestCompmax+b·StorerestStoremax(1)
其中,a、b分別為選取授權中心時,剩余計算資源、剩余存儲資源所占的權重,權重值可以自行設定,但需要保證a+b=1。Compmax、Storemax分別為所有節" 點中剩余計算資源和剩余存儲資源的最大值,通過上述公式計算得出節點在區塊鏈中的權重并據此選出授權中心。
區塊鏈初始化和授權中心選舉完成后,將會啟動IPFS集群,IPFS集群節點的選擇可以由用戶直接指定,也可以根據區塊鏈中存儲的設備剩余存儲空間選擇剩余存儲空間大的前若干個節點作為IPFS集群節點。
至此,整個系統已經初始化完成,區塊鏈系統及IPFS集群都已經成功啟動。
3.2" 存儲結構
整體系統采用雙層存儲結構,區塊的交易數據是通過鍵值對保存的信息,每條交易包含交易發起時間、請求發起者、操作類型、地址哈希、解密密鑰等信息,結構如圖3所示。
本系統中區塊鏈最核心的功能是存儲Hash地址以及相應的解密密鑰,可以實現數據上傳、數據查詢等功能。
3.3" 數據存儲及數據獲取
本小節詳細介紹該系統的數據加密和存儲等流程及相關信息格式定義,涉及相關符號的含義為:ID(標識符)、H(哈希)、SHA256(哈希算法)、Sign(用戶簽名)、Data(數據)、SK(私鑰)、PK(公鑰)、Encrypt(加密)、Decrypt(解密)、M(密文)、‖(連接符)、Ts(時間戳)。
3.3.1" 文件加密
在該方案中,IPFS中存儲的文件均為用戶/設備加密后的信息,加密方式為RSA加密,其中公鑰PK在網絡中廣播告知所有節點,私鑰SK由該節點自主保存。加密流程是文件上傳節點使用私鑰加密文件的過程,如式(2)所示。
Mdata=Encrypt(Data,SKprod)(2)
加密后得到密文信息Mdata,其他節點可以通過該節點在網絡中公開的公鑰PK對文件進行解密。這樣的加密方式既保證了系統外部節點無法解讀該信息,保護了節點的隱私,又可以通過相應公鑰解密的方式來驗證文件是否由該節點上傳,以此杜絕了惡意節點冒名上傳文件的問題。
3.3.2" 文件上傳IPFS系統
數據加密完成后,節點可以通過IPFS add命令初始化IPFS,并向系統中添加加密后的文件。IPFS系統通過SHA256算法獲得文件的哈希地址Hdata。
Hdata=SHA256(Mdata)(3)
該算法生成256位的哈希地址Hdata,過程中IPFS系統將文件存儲在系統中,并將哈希地址添加到其網絡中,同時該哈希值將被返回給文件上傳節點。
3.3.3" 發起數據上傳交易
數據上傳至IPFS系統后,節點需要將該文件的相關信息上傳至區塊鏈系統,方便其他節點的查詢和使用。每筆向區塊鏈發起的上傳交易TXupload均包含文件標識符IDdata、數據量大小Sizedata、文件地址哈希Hdata、產生者的標識符IDprod、簽名Signprod、公鑰PKprod和時間戳Ts。
TXupload=
[IDdata‖Sizedata‖Hdata‖IDprod‖Signprod‖PKprod‖Ts](4)
3.3.4" 文件下載交易
數據申請使用者需要向區塊鏈發起文件查詢交易,該交易信息包含請求的文件標識符(一般為文件標識符IDdata或產生者的標識符IDprod)文件請求節點的簽名Signrequest和發起請求的時間戳Ts。
TXdownload=[IDdata‖Signrequest‖Ts]
TXdownload=[IDprod‖Signrequest‖Ts](5)
發起的文件請求交易經過區塊鏈的共識后,文件申請節點即可獲得查詢的文件地址Hdata或根據產生者IDprod查詢得到的文件地址列表。獲得地址后即可從IPFS系統獲得密文信息Mdata和用于解密的公鑰PKprod(若原先節點并不知道上傳者的公鑰PKprod)。
3.3.5" 文件解密
文件解密的過程即是加密過程的逆過程,如下:
Data=Decrypt(Mdata,PKprod)(6)
成功解密后即可獲得原本的文件Data。
3.4" 智能合約設計
Fisc-Bcos區塊鏈系統的智能合約使用Solidity語言編寫,區塊鏈的智能合約主要是對外提供了數據上鏈及鏈上數據查詢的功能,本系統中區塊鏈的智能合約主要分為2類,一類是系統維護合約,另一類是系統功能合約。
系統維護合約包含節點信息上報合約、節點最新狀態更新、網絡節點信息查詢合約等,主要用于系統初始化、新節點加入網絡時記錄節點的信息,系統需要根據這些節點信息選舉出授權中心、存儲節點。接口如下:
(1)function nodeInfoRegister (string memory node_id,string memory computation_power,string memory storage_power) public returns (int256)" //注冊節點。
(2)function nodeInfoUpdate (string memory node_id,string memory computation_power,string memory storage_power) public returns (int256)" //更新已經在區塊鏈中注冊過的節點的信息。
(3)function nodeInfoSelect() public constant returns (int256,string,string,string)" //返回當前區塊鏈中已經注冊的所有節點信息。
有了上述的節點信息上報、更新、查詢接口,區塊鏈即可通過智能合約更新網絡的實時情況,并根據實時情況選舉授權中心、更新存儲策略等。
系統功能合約主要包含數據哈希地址及密鑰保存、數據哈希地址及密鑰查詢等數據上鏈功能。整個系統中最主要記錄上鏈的信息分為2類表格“data_address”(哈希地址信息)和“decrypt_key”(解密密鑰信息)。接口如下:
(1)function dataInfoUpload(string memory data_id,string memory product_id,string memory data_info,string memory data_address,string memory decrypt_key) public returns (int256)" //數據記錄。
(2)function dataInfoSelect (string data_id) public constant returns (int256,string,string)" //根據數據表示符查找相應數據的地址信息和解密密鑰。
(3)function prodInfoSelect (string product_id) public constant returns (int256,string,string)" //根據數據產生者標識符查找數據地址信息和解密密鑰。
4" 實驗結果與分析
實驗在5臺計算機上共創建10個虛擬節點,并在虛擬節點上部署區塊鏈節點或IPFS存儲節點,對實際物聯網環境進行模擬。實驗中采用對照的方式進行比較,對照組使用相同的物理配置,在10個節點上搭建傳統的區塊鏈對所有數據進行保存,通過周期地向區塊鏈網絡發起交易進行測試。測試的主要方法是在10節點的區塊鏈網絡外,用1臺計算機向IPFS系統發起存儲請求并上傳數據,數據上傳后向區塊鏈系統發起數據存儲交易,交易經過共識后則會被區塊鏈記錄進區塊中。
若被IPFS系統拆分后得到的數據片段內容完全相同,則經過Hash計算會得出相同的地址信息,則該片段僅會在該系統中保存一份,為了避免過多的重復數據對實驗結果造成很大的影響,本次實驗采用4 k的電影文件。測試中,先使用程序將4 k電影文件拆分成若干小文件,接著分別將這些小文件上傳至本系統和傳統區塊鏈網絡。
系統性能測試:數據開始上傳到交易記錄上鏈的" 全過程在本次實驗中記為一次完整的流程。實驗首先通過改變每次上傳的數據量,將本文設計的系統和傳統區塊鏈進行對比,測試結果如圖4所示。
從圖4中可以清晰地看出在每次交易上傳的數據量少于0.5 kB時,傳統區塊鏈系統的存儲性能優于本文設計的系統,但隨著每次交易包含的數據量的上升傳統區塊鏈的性能急劇下降。單次上傳數據量較少時系統性能不如傳統區塊鏈,原因是單次上傳的數據量少于每條交易中包含的哈希地址、密鑰等信息的數據量總和,導致每條交易的數據量大于直接包含數據本身的交易,從而區塊鏈系統的共識延遲上升。而較大數據量的存儲更能體現本設計的方案的優越性。
系統穩定性測試:以較高的速率(1 000 tx·s-1)向系統上傳數據,數據的平均大小為1 kB,記錄系統能夠正常運行的時間和運行期間的最大延遲,測試結果如表1所示。本文設計的方案在1 000條/s 1 kB的數據存入時,能夠更長時間地穩定運行,并且延遲相較于傳統區塊鏈存儲方式縮短了很多。
系統存儲容量測試:在系統穩定的前提下不斷向系統發送數據,在系統容量到達極限后統計向系統中發送的總文件大小作為系統的存儲容量上限,測試的結果如表2所示??梢钥闯霰疚脑O計的存儲方案,能夠在硬件完全相同的情況下大幅度提升系統的存儲性能,修改單次上傳文件的大小對系統的整體存儲容量影響很小,增加單次上傳文件的大小可以降低數據的冗余程度,整體的存儲容量上限有所下降。
5" 結語
區塊鏈和IPFS技術的結合有可能徹底改變存儲和管理數據的方式。它為存儲和檢索數據提供了一種安全、分散且可伸縮的解決方案,還具有改進數據隱私和安全性、降低成本和復雜性以及降低數據丟失風險的額外好處。隨著技術的不斷進步,未來各種行業和應用中,將會有越來越多的基于區塊鏈和IPFS設計的應用。
參考文獻
[1]芮坤坤,潘洪志,舒升.基于區塊鏈和IPFS協議的數據存儲系統設計[J].長春工程學院學報(自然科學版),2023(2):121-124.
[2]PAPADODIMAS G, PALAIOKRASAS G, LITKE A, et al. Implementation of smart contracts for blockchain based IoT applications:2018 9th international conference on the network of the future (NOF) [C].New York:Institute of Electrical and Electronics Engineer, 2018.
[3]NOVO O. Blockchain meets IoT: an architecture for scalable access management in IoT[J]. IEEE Internet of Things Journal, 2018(2): 1184-1195.
[4]BAJOUDAH S, DONG C, MISSIER P. Toward a decentralized, trust-less marketplace for brokered IoT data trading using blockchain:2019 IEEE international conference on blockchain (blockchain) [C]. New York:Institute of Electrical and Electronics Engineer, 2019.
[5]SHROBE H, SHRIER D, PENTLAND A. Enigma: decentralized computation platform with guaranteed privacy[M].Cambridge: MIT Press, 2018.
[6]SHAFAGH H, BURKHALTER L, HITHNAWI A, et al. Towards blockchain-based auditable storage and sharing of IoT data:Proceedings of the 2017 on cloud computing security workshop [C]. New York:Institute of Electrical and Electronics Engineer, 2017.
(編輯" 沈" 強)
Design of storage mechanism based on blockchain and IPFS
Zhu" Yali1, Xu" Mingrui2, Feng" Maozhi3, Zhu" Xiaorong2
(1.Jiangsu Vocational College of Business, Nantong 226000, China; 2.Nanjing University of Posts and
Telecommunications, Nanjing 210003, China; 3.Lanshan Economic Development Zone
Management Committee, Linyi 276015, China)
Abstract:" With the popularity of Internet of Things devices and the growing demand for artificial intelligence applications, these applications generate a large amount of Internet of Things data. How to store them has become a question that must be considered. This paper introduces a new storage Mechanism based on blockchain and IPFS (Interplanetary File System). By comparing with the traditional blockchain, the new method provides a secure, decentralized, and scalable solution for storing and managing data.
Key words: blockchain; IPFS; storage mechanism