張學典,林至锽
(上海理工大學光電信息與計算機工程學院,上海 200082)
當前,傳統的物聯網(Internet of Things,IoT)架構所使用的服務器/客戶端模式(Client-Server model,C/S)已逐漸難以適應當今日益繁雜的物聯網生態環境系統,其中心化的網絡拓撲結構在安全性方面也面臨很大挑戰。區塊鏈是一種以安全性著稱的分布式網絡技術,將區塊鏈應用于物聯網領域,能夠推動物聯網發展、降低物聯網應用成本,并改善物聯網當前的安全狀況[1]。然而,典型的區塊鏈技術也存在工作效率低、耗費計算資源多的缺點,使得區塊鏈技術不能良好地契合物聯網的需求[2]。因此,基于在效率和計算資源利用率上作出優化的區塊鏈技術,提出一種更適用于物聯網應用環境的系統架構,將有利于推動該領域的發展。
近年來已有許多學者針對區塊鏈技術在物聯網領域的應用開展了相關研究。如葉小榕等[3]將區塊鏈和區塊鏈中的智能合約技術與二維碼、RFID 及近場無線通信等技術相結合,實現了供應鏈場景下的信息自動化錄入;Huh等[4]將以太坊作為平臺,搭建一套不僅可使網內設備輕松地與其他設備同步,而且使整個網絡獲得抵御DDoS 攻擊能力的物聯網系統;肖程琳等[5]基于區塊鏈技術搭建的食品信息溯源系統利用區塊鏈的分布式存儲與共識機制,保證了信息的不可篡改性并實現了信息共享;Thakur 等[6]介紹一種基于區塊鏈技術的數據庫,該數據庫在印度已被應用于土地檔案管理。
上述幾類系統直接將數據存儲于區塊鏈中,雖然該方式既保證了系統的安全性與隱私性,又實現了數據的冗余存儲,但是并未實現對數據取用的控制,數據在區塊鏈系統內是公開的。因此,有學者進一步引入了“交易”的概念,將物聯網數據資產化,并通過“數據交易”實現對數據流轉的控制。如盛念祖等[7]借助區塊鏈技術中的智能合約,實現了物聯網數據的資產化及數據取用的交易化;葛琳等[8]搭建一套由數據區塊鏈與交易區塊鏈組合而成的雙區塊鏈方案,保障了數據安全與信息交互安全。這兩類系統所描述的系統模型中都設置了承擔交易審核工作的節點,資產化后的數據交易需圍繞該交易審核節點進行工作,從而在一定程度上降低了系統的去中心化程度。
為實現更徹底的去中心化,Dorri 等[9-10]設計一種具有傳感設備、覆蓋網絡與云存儲3 層結構的區塊鏈物聯網系統,并引入分布式信任方法降低物聯網事務的處理時延。其還設計了另一種系統,將網絡中的節點分為若干由個別高資源節點統領的區域,并將區塊鏈中的礦工角色賦予給這些高資源節點。Misra 等[11]將網絡分為由高資源節點統領的若干較小區域,使物聯網系統可接受異構的邊緣節點與邊緣網絡,并使得邊緣節點在網絡中具有可移動性。
本文基于區塊鏈技術提出一套物聯網系統架構,該架構在已有研究的基礎上作出了幾點改進。首先,不再對物聯網數據進行資產化處理。在智能家居、智慧城市等領域,物聯網數據并沒有進行資產化交易的需求,使用資產化與交易化的數據流轉控制方案,不僅會阻礙物聯網設備之間進行無償的數據交換,而且會額外增加區塊鏈系統的復雜度。其次,系統使用隨機PoC 機制作為共識機制,這種共識機制是基于PoC 機制與隨機投票方法提出的。由于不再需要維護貨幣系統,系統得以使用PoC 機制進行計算資源損耗較少的記賬權選舉,并使用隨機投票方法增加記賬權分配的隨機性。最后,應用該架構的物聯網系統在網絡結構上具有較高靈活性。系統將被分割為若干覆蓋范圍較小的區域網絡,區域網絡中具備較多網絡資源的節點將參與整體區塊鏈網絡的維護,而區域網絡的具體結構并不影響整體區塊鏈網絡的性能。
區塊鏈技術是一種基于分布式網絡架構、非對稱加密、散列函數等元素的具有高度安全性的去中心化網絡技術。區塊鏈也可被看作一種具有不可篡改性的去中心化數據庫[12-13]。共識機制是區塊鏈技術中的一個重要組成部分。
1.1.1 不可篡改性
區塊鏈通過哈希算法和鏈式結構實現了其所記錄內容的不可篡改性。
哈希函數可將數據壓縮成一個由隨機字母和數字組成的定長的字符串,一個好的哈希函數幾乎不會出現散列沖突。由哈希函數計算出來的散列值具有不可逆的特性,因此哈希函數常被應用于密文存儲與驗證中,也可用于數據真偽性驗證[14]。
在以比特幣為代表的區塊鏈應用中,交易記錄以Merkle 樹的形式組合在一起形成區塊。Merkle 樹又稱哈希樹,是一種具有防偽能力、基于哈希函數構建的數據結構。更進一步地,區塊鏈中的后繼區塊會記錄前序區塊的哈希值,形成前后區塊的鏈接[13]。Merkle 樹與區塊的鏈式結構如圖1所示。
基于對哈希函數的應用,如果區塊鏈中記錄的任何信息發生了篡改,區塊鏈會從與該條數據所在區塊處斷開。當有節點基于被篡改的區塊鏈嘗試制作新區塊時,新區塊顯然不會在其他節點處通過核驗,因此區塊鏈文件及其所記錄的內容難以被篡改。
1.1.2 去中心化
去中心化是區塊鏈技術的基本特征。在基于區塊鏈搭建的系統中,既不存在通信上的中心節點,也不存在存儲上的中心節點,各節點之間是平等的。在區塊鏈系統中,消息以廣播形式實現傳遞,記錄在消息中的數據會在各節點處進行完整地記錄與保存。在區塊鏈系統中,數據的驗證、存儲與傳輸通過共識機制完成。共識機制是一種可在系統各個節點之間通過數學方法建立信任的機制,這種機制不需要中心節點的存在[14]。
Fig.1 Merkle tree and chain structure of blockchain圖1 Merkle樹和區塊鏈鏈式結構
這種通訊與存儲上的冗余也使區塊鏈應用具有較高安全性。基于去中心化的網絡結構,區塊鏈應用消除了通信網絡對中心節點的依賴,系統不會因中心節點損壞而崩潰。同時,去中心化的存儲方式也使得其存儲的數據獲得了以節點數量為倍數的冗余。
1.1.3 共識機制
記賬權即區塊鏈技術中記錄新區塊的權力,由得到記賬權的節點制作的新區塊將被所有其他節點認可,記賬權的分配規則直接決定了區塊鏈的應用性能[15-16]。共識機制是指區塊鏈技術中用于在所有參與者之間分配記賬權的機制,其在網絡中所有節點之間形成一個統一的計算結果,所有節點都認可這一結果。共識機制的工作邏輯決定了基于區塊鏈技術搭建的應用的工作效率。PoW 機制與PoS 機制是兩種典型的區塊鏈共識機制,而PoC 機制是一種基于貢獻值分配記賬權的共識機制[17]。
(1)基于工作量證明的共識機制(Proof of Work,PoW)。PoW 機制基于工作量證明進行記賬權分配,該機制為所有參與記錄權競爭的節點設置了一個難以解答而又易于驗證的難題,首先得到題解的節點在公布答案并得到其他節點驗證通過后,獲得所有節點公認的新區塊記錄權。比特幣使用PoW 機制作為分配新區塊記錄權的方式,所有參與比特幣記賬權競爭的節點都需要尋找一個值,該值哈希結果的前n 位必須為零。n 值記錄在最后一個區塊頭的Nonce 參數中,Nonce 值會根據網絡中的節點數量進行動態調整,從而使區塊鏈更新時間在一個可接受的范圍內浮動。
哈希函數的結果具有高度隨機性,因此參與新區塊記錄權競爭的節點們只能通過枚舉法求得難題的解。PoW機制使所有競爭的參與者都需要耗費大量計算資源進行函數計算,因此基于PoW 機制搭建的區塊鏈應用十分耗費計算資源。作為回報,區塊鏈應用會給予新區塊記錄權的獲得者一定的虛擬貨幣作為獎勵,以鼓勵所有節點積極參與競爭。
(2)基于權益證明的共識機制(Proof of Stake,PoS)。PoS 將記賬權分配給在該系統中具備最高權益的節點。PoS 機制認為,被分配到記賬權的節點在該系統內都具有較高權益,其更傾向于維護系統的穩定而非破壞它。PoS機制中的權益值是指在一定時間周期內,節點獲得的虛擬貨幣數量與貨幣持有時間乘積的累加和,即:
所有參與競爭的節點會在新區塊生成周期內計算所有節點的權益值,當其得知自己是已知的最高權益值節點時,就會自行生成新區塊,并將自己的信息記錄在區塊頭中供他人核驗。生成新區塊后,記錄權獲得者的權益值會被清空,并獲得一定的虛擬貨幣作為回饋。
PoS 機制規避了PoW 機制對計算資源的較高需求,縮短了區塊鏈更新周期,大大提升了區塊鏈應用的工作效率。
(3)基于貢獻度證明的共識機制(Proof of Contribution,PoC)。在使用PoC 機制的區塊鏈應用中,新區塊的記錄權將分配給系統中具有最高貢獻度的節點,這與使用PoS 機制搭建的區塊鏈應用類似。PoC 機制要求系統中每一個節點都維護一個記錄了所有節點貢獻度的數據庫,每當推選新的區塊記錄者時,節點們都會查閱數據庫中的記錄,具有最高貢獻度的節點會自行生成新區塊,其他節點則等待指定節點制作的新區塊。節點貢獻度以節點在維護系統中所發揮的作用為基礎進行計算,不同的區塊鏈應用可設計適合其使用環境的不同計算方式。使用PoC 機制搭建的區塊鏈應用可適用于知識產權記錄、供應鏈維護等環境,在這類應用環境中,區塊鏈文件記錄的數據難以使用虛擬貨幣等標的物進行定價與交易。
但是PoC 機制也具有明顯缺點,在使用PoC 機制搭建的區塊鏈應用中,新區塊記錄權分配與各節點貢獻值緊密耦合,意味著下一個區塊記錄權的分配情況是確定的,且對所有區塊鏈應用的參與者都可知。攻擊者可輕易獲知新區塊記錄權分配情況,從而破壞系統穩定。
隨機投票方法可利用哈希函數散列結果的隨機性,在分布式網絡不同節點之間求得一個統一的隨機結果。區塊鏈技術中利用哈希函數散列結果的隨機性,使用隨機投票方法搭建一種共識機制。這種共識機制要求所有參與區塊鏈維護的節點在分配記賬權階段自行制作區塊并廣播,所有節點收到區塊后,使用隨機投票方法選擇其中一個區塊作為新區塊,所有節點可得到一致的隨機投票結果。隨機投票具體步驟如下:①節點自行制作區塊,并在系統中廣播;②節點對所有收到的區塊進行哈希計算,并對散列結果進行記錄;③計算所有散列值的字符串距離,求得與散列值字符串距離最近的區塊;④統計兩個距離最近的散列值與其他散列值各自距離的總和,總和較小者即為所求結果。
如圖2 所示,該系統具有3 層結構,分別是數據層、上鏈層和使用層。系統內有3 種節點,分別是數據節點、上鏈節點與數據使用者。其中,位于數據層的數據節點們被劃分為若干個覆蓋范圍較小的區域網絡,每個區域網絡都包含一個上鏈節點。相較于數據節點,上鏈節點應具備較強的計算能力與較多存儲資源,區域網絡內的物聯網數據可在區塊鏈參與者節點處得到匯總。來自不同區域網絡的上鏈節點組成上鏈層,上鏈層會在共識機制作用下,把從區塊鏈參與者節點處收集來的信息以區塊鏈文件形式匯聚起來。使用層由數據使用者們構成,數據使用者會閱讀區塊鏈文件,從中得知系統中當前存在的數據類型,并據此向上鏈層發出數據申請。在通過申請并獲得數據后,這些節點還應向上鏈層反饋對所獲得數據的評分。
Fig.2 System architecture model of Internet of Things based on blockchain圖2 基于區塊鏈的物聯網系統框架模型
數據層由數據節點組成,數據節點對計算與存儲資源要求不高,其工作是負責收集或生成物聯網數據,并參與上鏈節點的數據匯總工作。上鏈節點需要具備一定的計算與存儲資源。數據層圍繞若干上鏈節點,被劃分為若干個覆蓋區域較小的區域網絡。區域網絡中的物聯網數據在上鏈節點處匯總,匯總的數據被用于維護區塊鏈文件。區域網絡不一定是物理空間概念上的,一些節點可同時扮演上鏈節點與數據節點的角色。
在數據層中,區域網絡的網絡組織方式及工作模式不影響系統整體性能,只需保證數據可在上鏈節點處匯總即可。上鏈節點會根據收集到的匯總數據制作摘要,摘要將被上鏈節點廣播到上鏈層中,并最終記錄在區塊鏈文件里。
上鏈層由上鏈節點組成,該層通過共識機制將上鏈節點發布的數據摘要組合成區塊文件,并以此更新與維護區塊鏈文件。區塊鏈文件會被數據使用者視作系統存在的數據目錄,并據此向上鏈層申請數據。在獲得指定的數據后,上鏈層還會收到來自數據使用者的數據評分,這些評分也將參與上鏈節點們根據共識機制更新與維護區塊鏈的過程。
為記錄使用層反饋的數據評價,區塊使用含有雙Merkle 樹的數據結構,具體形式如圖3 所示。在具有雙Merkle 樹結構的區塊中,第一棵Merkle 樹用于記錄區塊鏈參與者在網絡中發布的數據摘要,第二棵Merkle 樹用于記錄數據使用者在網絡中反饋的數據評分。
本架構使用將PoC 機制與隨機投票方法相結合的隨機PoC 機制。相較于PoW 機制、PoS 機制與PoC 機制,隨機PoC 機制既降低了區塊鏈文件的工作周期與資源負擔,又無需使用資產化及交易化的手段處理與交付數據,還降低了PoC 機制中記賬權分配的確定性。
Fig.3 Block data structure圖3 區塊數據結構
在本架構使用的區塊結構中,第二棵Merkle 樹記錄了針對所有上鏈節點的評分數據,這些評分數據將被視作各個上鏈節點的貢獻值。將所有節點依照貢獻值遞減排序,貢獻值排名前1/3 的節點將被視作候選者。所有節點將基于隨機PoC 機制對候選者進行隨機投票,分配記賬權。隨機PoC 機制具體步驟如下:
步驟1:節點自行制作區塊,并在系統中廣播。
步驟2:節點對所有收到的區塊都進行哈希計算,并對散列結果進行記錄。
步驟3:將所有節點依照貢獻值進行遞減排序,排名前1/3 的節點被記錄為候選者。
步驟4:統計所有候選者制作區塊的散列值與其他非候選者制作區塊散列值的字符串距離之和,統計結果最小的候選者得到記賬權,當選候選者的貢獻值被清空。
隨機PoC 機制會根據系統的貢獻值情況選擇不同工作方式。由于系統中節點獲得數據評分的進度不一,系統可被識別為3 種狀態:①系統內幾乎不存在已被評分的節點(數量少于節點總數的1/3);②系統內僅部分節點獲得了評分(數量介于節點總數的1/3~2/3);③系統內幾乎全部節點都已獲得了評分(數量大于2/3)。
當系統處于狀態1 時,系統將使用隨機投票的方式分配記賬權;當系統處于狀態2 時,系統在已獲得評分的上鏈節點之間使用隨機投票方式分配記賬權;當系統處于狀態3 時,系統在所有節點之間使用隨機PoC 機制分配記賬權。
此外,上鏈層還需要負責接收由使用層的數據使用者發來的數據申請和數據評分,并作出反應。
當上鏈節點收到由數據使用者直接發送或其他上鏈節點轉發的數據申請時,節點首先在本地數據庫中對該操作進行記錄,并檢索申請數據節點的歷史操作。假如申請數據的節點在歷史上未曾拖欠數據評分,則向其他上鏈節點轉發該申請,否則丟棄該申請。當指定數據的所有者收到數據申請,會在申請者歷史操作記錄核驗通過后,對相應數據進行加密、簽名并整理打包,在網絡中進行廣播。數據申請者可在廣播信報中捕獲信報,再通過私鑰解密讀取。
當上鏈節點收到來自數據使用者直接發送或其他上鏈節點轉發的數據評分時,節點首先在本地數據庫中對該操作進行記錄,然后檢索并返回數據評分節點的歷史操作。假如返回數據評分的節點有拖欠的數據評分,則為其補充數據評分記錄并保存,數據評分將最終保存在區塊文件中。
使用層處于整個系統架構的最外圍,該層由數據使用者組成。數據使用者在上鏈節點組成的網絡中常駐,但不直接參與區塊鏈文件維護與更新。數據使用者自行閱讀區塊鏈文件中記錄的數據摘要,并根據自己的需求向上鏈層廣播數據請求。在收到從上鏈層返回的需求數據后,數據使用者應盡快向上鏈層反饋針對該筆數據的評分。數據評分機制由數據使用者依照主要規則自行制定。
數據請求:由于區塊鏈文件并不記錄數據生成者的網絡地址,因此數據使用者必須在上鏈層網絡中廣播數據請求,使數據請求流程對所有上鏈節點與數據使用者都是公開的。發送數據請求后,數據使用者等待需求數據的返回。
評分反饋:在物聯網或其他使用環境中,不僅是網絡攻擊,數據采集方本地的物理條件異常也可能致使交付的數據產生錯誤,這類情況是難以通過網絡技術手段發現的。該架構調動數據使用者主動對其使用的數據進行評分,以幫助維護系統架構的運作。
對于基本可確定無誤的數據,數據使用者對其數據評分為1 分;對于基本可判斷為有誤的數據,數據使用者對其數據評分為-1 分;對于沒有能力進行正誤判斷的數據,數據使用者對其數據評分為0分。
與數據申請同理,數據評分也會在上鏈層中進行廣播,使數據評分結果對所有上鏈節點和數據使用者都是公開的。發送數據評分后,數據的使用流程結束。
使用層向上鏈層發起數據交互流程如圖4所示。
在該系統架構中,數據交付方法由數據的資產化交易方法被取代為“先申請、后交付、再評價”的方法,因此系統不再需要維護一套用于支撐虛擬貨幣支付體系的子系統。由于擺脫了交易體系的限制,系統降低了復雜度,可根據具體使用環境自由地設定區塊鏈文件更新周期。
Fig.4 Process of data interaction from the user-layer to the chainlayer圖4 使用層向上鏈層發起數據交互流程
在一個區塊鏈文件維護與更新周期中,上鏈節點們的交互如圖5所示。
Fig.5 Information interaction of the nodes of chain-layer in a cycle圖5 上鏈節點們在一個周期內的信息交互
在本文論述的系統框架下,上鏈節點對數據摘要的上傳、數據使用者對數據的申請與評價以及區塊鏈參與者對被申請數據的傳輸都是在對信息進行非對稱加密后進行的,因此攻擊者無法在不掌握具體私鑰的情況下獲取信息詳情。同時,所有物聯網數據都保存在上鏈節點本地,即便節點受到攻擊,攻擊者也僅能掌握有限的數據,對系統產生的影響有限。另外,本文論述的系統框架提出了一種可供數據使用者向上鏈層反饋評分的機制,假如攻擊者因劫持網絡節點而對系統的數據安全性產生實質性影響,系統也可通過數據使用者的數據評分發現異常情況。
對物聯網數據的流動進行有效控制有助于實現對數據使用的安全管理。在本文論述的系統框架下,數據流動需要由數據使用者發起,經由所有上鏈節點審核后再公開地返回數據使用者。在該機制下,系統不僅實現了對數據使用的控制,而且使系統內發生的任何數據讀取操作都具有不可否認性。通過對數據訪問的控制,系統進一步提高了安全性。
本文在已有研究基礎上,引入PoC 機制與隨機投票方法,使基于該共識機制搭建的區塊鏈應用實現了去貨幣化,在該區塊鏈應用上進行的數據交互也具備了去交易化特征。隨著區塊鏈與物聯網技術的進一步發展,區塊鏈技術在物聯網領域的應用會更加普遍,在諸如智能家居、智慧城市等領域的物聯網應用場景中,基于區塊鏈技術搭建的去貨幣化、去交易化的物聯網系統框架必將得到更廣泛的應用。此外,本文搭建的物聯網系統框架還賦予了區域覆蓋網絡極高的自由度,這意味著該框架具備可無限細分的可能性:區域網絡可依照本文提出的框架搭建一套子系統,子系統的區域網絡又可搭建一套相似的子子系統……基于可能具備的無限細分特性,本文提出的系統框架可適用于如智能家居集群、智慧城市集群等覆蓋范圍更大、具備分形特征的網絡系統。
另外,本文提出的系統框架使用了周期確定的區塊更新方式和“申請—交付—評價”的數據交付方式,該框架的使用性能無法通過成塊速率測試、單位時間吞吐量測試等方式進行定量分析。因此,嘗試尋找合適的評價指標及評價方式在后續研究中是十分必要的。