薛 慧,沈 勇,時 岳,高翩翩
(江蘇科技大學(xué)計算機(jī)學(xué)院,江蘇鎮(zhèn)江 212003)
物聯(lián)網(wǎng)技術(shù)的誕生促成了信息技術(shù)的第三次革命[1]。物聯(lián)網(wǎng)是指根據(jù)特定的通信協(xié)議標(biāo)準(zhǔn),使用數(shù)據(jù)傳感設(shè)備將任何物品對象連接到互聯(lián)網(wǎng),物體可通過相應(yīng)的傳輸介質(zhì)進(jìn)行數(shù)據(jù)傳輸與交換,以實現(xiàn)智能化的認(rèn)證、定位、管理等功能[2]。目前世界各國都開展了物聯(lián)網(wǎng)基礎(chǔ)理論與實踐應(yīng)用研究工作,但在實際開發(fā)過程中發(fā)現(xiàn)其仍存在很多不足,主要原因是物聯(lián)網(wǎng)技術(shù)融合了多領(lǐng)域的技術(shù),并涉及多樣化的應(yīng)用環(huán)境,因此需要重點考慮其中存在的數(shù)據(jù)安全隱私問題[3]。造成數(shù)據(jù)安全隱私問題的根源是物聯(lián)網(wǎng)技術(shù)缺少多個設(shè)備之間的相互信任機(jī)制,在系統(tǒng)中為保證數(shù)據(jù)與設(shè)備安全,必須先驗證物聯(lián)網(wǎng)中所有設(shè)備的身份,一旦中心數(shù)據(jù)庫崩潰,整個物聯(lián)網(wǎng)就會瞬間癱瘓。而區(qū)塊鏈的分布式架構(gòu)可很好地避免此類問題,分布式設(shè)備通過區(qū)塊鏈的共識機(jī)制來保持一致,不需要通過中心服務(wù)器進(jìn)行設(shè)備身份核驗,從而很好地避免了區(qū)塊鏈網(wǎng)絡(luò)中因一個或多個設(shè)備節(jié)點故障而導(dǎo)致區(qū)塊鏈網(wǎng)絡(luò)不能正常運行的情況發(fā)生。
因此,近幾年大量學(xué)者結(jié)合區(qū)塊鏈技術(shù)對物聯(lián)網(wǎng)的安全性能進(jìn)行研究。2018 年,趙艷杰[4]為了解決物聯(lián)網(wǎng)設(shè)備的信息存儲問題,采用非對稱加密算法及區(qū)塊鏈等技術(shù)構(gòu)建基于密鑰的安全架構(gòu),以保證存儲數(shù)據(jù)的完整性,且難以更改。2019 年,于金剛等[5]針對傳統(tǒng)數(shù)據(jù)共享模型往往依賴于可信的第三方中心化機(jī)構(gòu),但易發(fā)生單點故障,對參與方不透明,數(shù)據(jù)可能遭到篡改的情況,利用區(qū)塊鏈可通過去中心化解決信任問題這一特點,提出一種基于區(qū)塊鏈的物聯(lián)網(wǎng)數(shù)據(jù)共享系統(tǒng),進(jìn)一步提高了物聯(lián)網(wǎng)設(shè)備的隱私性與安全性。2021 年,張建國等[6]針對目前物聯(lián)網(wǎng)系統(tǒng)設(shè)備節(jié)點動態(tài)性較強(qiáng),但計算能力欠缺,導(dǎo)致物聯(lián)網(wǎng)中的傳統(tǒng)訪問控制機(jī)制存在策略判決管理效率低、安全性不足等問題,提出基于區(qū)塊鏈的物聯(lián)網(wǎng)設(shè)備訪問控制方案,結(jié)合基于角色的訪問控制模型對智能合約進(jìn)行設(shè)計。
雖然以上研究方案能夠有效提高數(shù)據(jù)的安全性,但是依然存在安全性不穩(wěn)定的情況。因此,本文設(shè)計一種基于區(qū)塊鏈的物聯(lián)網(wǎng)智能合約模型(BC-SC 模型),利用區(qū)塊鏈對等網(wǎng)絡(luò)與分布式架構(gòu)建立可信環(huán)境,實現(xiàn)機(jī)器對機(jī)器(M2M)、人與機(jī)器相互信任模型,以更好地提升系統(tǒng)安全性。
物聯(lián)網(wǎng)是一種誕生于上世紀(jì)末的新興技術(shù),受到當(dāng)時技術(shù)和時代的限制,研究人員無法深入地對其進(jìn)行研究[7]。然而,如今物聯(lián)網(wǎng)技術(shù)已成為促進(jìn)世界快速發(fā)展的重要生產(chǎn)力之一,在其高速發(fā)展的同時,物聯(lián)網(wǎng)信息安全問題也愈來愈得到人們重視[8-9]。
物聯(lián)網(wǎng)主要分為感知層、網(wǎng)絡(luò)層和應(yīng)用層3 層,每一層分別利用不同的技術(shù)手段實現(xiàn)信息互聯(lián)功能[10]:①感知層。感知層的主要功能是完成數(shù)據(jù)采集,所采集的數(shù)據(jù)經(jīng)過傳輸層傳送至應(yīng)用層,并進(jìn)行后續(xù)處理;②網(wǎng)絡(luò)層。網(wǎng)絡(luò)層作為一條信息傳輸通道,分別連接感知層和應(yīng)用層;③應(yīng)用層。應(yīng)用層是物聯(lián)網(wǎng)與用戶的接口,用于處理來自感知層的數(shù)據(jù)。物聯(lián)網(wǎng)根據(jù)應(yīng)用層特征可大致分為監(jiān)控型、查詢型、控制型和掃描型。物聯(lián)網(wǎng)架構(gòu)如圖1所示。
區(qū)塊鏈最本質(zhì)的特征是一種去中心化的分布式數(shù)據(jù)庫,其層次結(jié)構(gòu)包括數(shù)據(jù)層、網(wǎng)絡(luò)層、共識層、激勵層、合約層與應(yīng)用層,如圖2所示[11-12]。
Fig.1 Hierarchy of Internet of Things圖1 物聯(lián)網(wǎng)架構(gòu)
Fig.2 Blockchain hierarchy圖2 區(qū)塊鏈層次結(jié)構(gòu)
區(qū)塊鏈技術(shù)具有去中心化、開放性、防篡改性、自治性等特點[13]。區(qū)塊鏈中的所有節(jié)點相互合作,共同維護(hù)節(jié)點數(shù)據(jù),且節(jié)點數(shù)據(jù)都被數(shù)據(jù)庫所存儲,同時支持相關(guān)人員對區(qū)塊鏈上的信息進(jìn)行查詢。
區(qū)塊頭和區(qū)塊主體構(gòu)成了區(qū)塊鏈中的區(qū)塊,其中區(qū)塊頭通過時間戳技術(shù)將區(qū)塊按時間順序進(jìn)行連接,區(qū)塊主體主要用于記錄數(shù)據(jù),區(qū)塊則由區(qū)塊版本號、時間戳、Merkel根、交易數(shù)據(jù)與上一個區(qū)塊鏈接的哈希值組成[14]。
為解決物聯(lián)網(wǎng)設(shè)備認(rèn)證過程繁瑣及其內(nèi)部存儲數(shù)據(jù)的隱私安全問題,本文設(shè)計一種基于區(qū)塊鏈的物聯(lián)網(wǎng)智能合約模型(Blockchain-based Smart Contract Model for Inter?net of Things,BC-SC)。BC-SC 模型與傳統(tǒng)物聯(lián)網(wǎng)設(shè)備架構(gòu)不同,其將區(qū)塊鏈技術(shù)作為理論基礎(chǔ),采用分布式架構(gòu)管理物聯(lián)網(wǎng)設(shè)備運行,并利用P2P 網(wǎng)絡(luò)的結(jié)構(gòu)實現(xiàn)M2M、人與機(jī)器的點對點通信[15]。
與傳統(tǒng)采集模塊不同的是,在區(qū)塊鏈物聯(lián)網(wǎng)平臺中,嵌入式計算機(jī)設(shè)備作為區(qū)塊鏈網(wǎng)絡(luò)中的可信節(jié)點,這些節(jié)點具備智能合約,可按照合約規(guī)則進(jìn)行訪問,最終完成物聯(lián)網(wǎng)數(shù)據(jù)采集。通過在物聯(lián)網(wǎng)平臺上搭建區(qū)塊鏈平臺,其中區(qū)塊鏈模塊由平臺中的操作系統(tǒng)進(jìn)行獲取和安裝,并通過傳感器等控制模塊獲取相應(yīng)數(shù)據(jù)。本文設(shè)計的BC-SC模型則是將區(qū)塊鏈技術(shù)作為可信環(huán)境,使物聯(lián)網(wǎng)數(shù)據(jù)具備更高的真實性。
BC-SC 模型主要由3部分組成:數(shù)據(jù)感知控制層、區(qū)塊鏈層與應(yīng)用邏輯層。BC-SC 模型結(jié)構(gòu)如圖3所示。
Fig.3 BC-SC model structure圖3 BC-SC 模型結(jié)構(gòu)
在BC-SC 模型中,主節(jié)點與次節(jié)點構(gòu)成數(shù)據(jù)感知控制層。在數(shù)據(jù)感知控制層中,以地理位置作為劃分區(qū)域的標(biāo)準(zhǔn),劃分出的區(qū)域都具備多個或單個物聯(lián)網(wǎng)節(jié)點。物聯(lián)網(wǎng)節(jié)點可根據(jù)自身資源承載力劃分出主節(jié)點MD 與輕節(jié)點SD,其中主節(jié)點MD 安全性高,且在通信過程中具有較強(qiáng)穩(wěn)定性,主要起到向待接入物聯(lián)網(wǎng)設(shè)備進(jìn)行私鑰分發(fā)的作用,以完成設(shè)備節(jié)點之間的相互認(rèn)證。輕節(jié)點SD 能夠?qū)⑴c自身有關(guān)的交易信息記錄下來,還可以與智能合約進(jìn)行交互。本文中的物聯(lián)網(wǎng)設(shè)備通過等級進(jìn)行節(jié)點劃分,對應(yīng)的便是主節(jié)點MD 與輕節(jié)點SD,其中主節(jié)點MD 是唯一的,每一個輕節(jié)點SD 都是對等節(jié)點,需要通過判斷接入網(wǎng)絡(luò)的時間長短與存儲能力強(qiáng)弱來選擇主節(jié)點。假設(shè)某個區(qū)域中的主節(jié)點發(fā)生故障,此時會在輕節(jié)點中先選出一個接入網(wǎng)絡(luò)時間長且信譽(yù)良好的輕節(jié)點暫時替代發(fā)生故障的主節(jié)點繼續(xù)工作。數(shù)據(jù)感知控制層內(nèi)部主次節(jié)點分布如圖4所示。
Fig.4 Distribution of primary and secondary nodes圖4 主次節(jié)點分布
其中,節(jié)點之間通過P2P 網(wǎng)絡(luò)相互通信,主節(jié)點群由多個MD 組成,主要用于對同區(qū)域的輕節(jié)點分發(fā)標(biāo)識私鑰,主節(jié)點之間還需要完成相關(guān)數(shù)據(jù)驗證并構(gòu)成區(qū)塊鏈。其中,每個區(qū)域都會先產(chǎn)生一對公私鑰存儲在主節(jié)點MD 中,這對公私鑰中的公鑰即為該區(qū)域中的主密鑰,位于相同區(qū)域的物聯(lián)網(wǎng)設(shè)備通過提供可信證明完成身份認(rèn)證,避免惡意節(jié)點入侵。
群私鑰存儲在主節(jié)點MD 中,群公鑰則利用P2P 網(wǎng)絡(luò)廣播給同區(qū)域的其他節(jié)點進(jìn)行保存。輕節(jié)點的私鑰根據(jù)其設(shè)備ID 產(chǎn)生,并由主節(jié)點MD 提交給輕節(jié)點SD。輕節(jié)點SD 由物聯(lián)網(wǎng)設(shè)備構(gòu)成感知網(wǎng),利用不同傳感器采集并提交相關(guān)數(shù)據(jù)。數(shù)據(jù)感知控制層中區(qū)域A1 的節(jié)點密鑰分配如圖5所示。
數(shù)據(jù)感知控制層中的物聯(lián)網(wǎng)設(shè)備成區(qū)域性分布,每個區(qū)域利用主節(jié)點MD 將信息提交到區(qū)塊鏈上完成驗證,通過區(qū)域分布的方法能有效降低整個模型的驗證時長,并提高區(qū)塊鏈的出塊速度。輕節(jié)點SD 主要記錄與自己有關(guān)的交易信息,并將生成的交易信息發(fā)布到同區(qū)域中。同區(qū)域的其他節(jié)點需要對此筆交易進(jìn)行簽名,最后由同區(qū)域的主節(jié)點生成最終的交易信息塊。
Fig.5 Area key distribution圖5 區(qū)域密鑰分配
在BC-SC 模型中,區(qū)塊鏈層的主要功能是將區(qū)塊鏈分布式存儲技術(shù)作為BC-SC 模型的底層數(shù)據(jù)存儲,在區(qū)塊鏈層中通過部署智能合約與數(shù)據(jù)感知控制層進(jìn)行交互。區(qū)塊鏈層結(jié)構(gòu)如圖6所示。
Fig.6 Blockchain layer structure in the BC-SC model圖6 BC-SC模型中的區(qū)塊鏈層結(jié)構(gòu)
其中,數(shù)據(jù)感知控制層將采集到的數(shù)據(jù)上傳至區(qū)塊鏈層的智能合約中進(jìn)行驗證,智能合約會根據(jù)預(yù)設(shè)的觸發(fā)閾值對數(shù)據(jù)感知控制層中的物聯(lián)網(wǎng)數(shù)據(jù)下達(dá)指令,或完成相應(yīng)交易費用的扣除與增加,數(shù)據(jù)感知控制層中的物聯(lián)網(wǎng)設(shè)備會根據(jù)區(qū)塊鏈層下達(dá)的觸發(fā)指令完成相應(yīng)動作。
在BC-SC 模型中,應(yīng)用邏輯層主要實現(xiàn)了場景封裝和應(yīng)用程序開發(fā),并通過應(yīng)用程序接口對區(qū)塊鏈層進(jìn)行訪問。
現(xiàn)階段,在物聯(lián)網(wǎng)與區(qū)塊鏈相結(jié)合的研究中,物聯(lián)網(wǎng)設(shè)備通常作為節(jié)點且其數(shù)量持續(xù)增長。因此,為了鞏固物聯(lián)網(wǎng)中機(jī)器對機(jī)器相互信任的關(guān)系,本文選用國產(chǎn)密碼SM9 非對稱加密算法[16]對物聯(lián)網(wǎng)設(shè)備的身份ID 進(jìn)行加密,并產(chǎn)生帶有身份標(biāo)識的密鑰。按照身份ID 管理接入的物聯(lián)網(wǎng)設(shè)備,從而防止惡意節(jié)點攻擊,并通過主次設(shè)備簽名認(rèn)證交易的真實性。
BC-SC 模型中的數(shù)據(jù)感知控制層利用物聯(lián)網(wǎng)設(shè)備進(jìn)行分布式部署,按照不同設(shè)備等級,將具有存儲能力且安全性較高的設(shè)備作為主節(jié)點MD,存儲能力較差的設(shè)備作為輕節(jié)點SD。
主節(jié)點可以監(jiān)管并進(jìn)行密鑰分配,新加入設(shè)備的注冊信息會儲存在鏈中。各區(qū)域都會設(shè)置一個主節(jié)點MD,MD中的密鑰管理模塊,即KGC 模塊用于密鑰管理,BC-SC 模型中采用多個KGC 管理實體私鑰,每一個KGC 都會共享一個主公鑰。首先由KGC 通過選擇一個安全的雙線性映射和哈希函數(shù)生成系統(tǒng)的主密鑰,然后生成系統(tǒng)參數(shù),在生成系統(tǒng)參數(shù)的過程中添加時間戳T,最后將生成的注冊目錄通過智能合約存入?yún)^(qū)塊鏈中。對于每一個KGC 而言,新用戶若想訪問區(qū)塊鏈上的數(shù)據(jù),必須進(jìn)行用戶身份驗證,從而確保申請訪問的用戶信息在注冊列表中,避免惡意節(jié)點入侵。
本文將SM9 算法與物聯(lián)網(wǎng)設(shè)備ID 相互關(guān)聯(lián),基于多個KGC 的設(shè)計思想,各區(qū)域KGC 通過設(shè)備身份進(jìn)行標(biāo)識,并通過設(shè)備ID 生成密鑰。各區(qū)域的KGC 模塊均有自己專屬的主密鑰對,用戶通過所在區(qū)域的KGC,根據(jù)設(shè)備ID 生成帶有身份標(biāo)識碼的私鑰。某區(qū)域中新加入設(shè)備SD 的私鑰生成步驟如下:
系統(tǒng)中所有KGC 先協(xié)商確定隨機(jī)數(shù)ks∈[1,N],作為系統(tǒng)主私鑰。主私鑰由KGC 通過隨機(jī)數(shù)發(fā)生器產(chǎn)生,主公鑰由主私鑰ks結(jié)合系統(tǒng)參數(shù)產(chǎn)生,主公鑰為:
其中,PublicKeyS為主公鑰,ks為主私鑰,P2為橢圓曲線加法循環(huán)群G1的生成元;生成的主私鑰由系統(tǒng)直接保存,主公鑰則對外公開,各KGC 分別擁有自己生成的隨機(jī)數(shù)kri∈[1,N]。KGC 會將隨機(jī)數(shù)kri與主節(jié)點MD 特定長度的身份ID 拼接成IDMD||kri,其公鑰為:
其中,IDMD||kri表示第i 個區(qū)域中KGCi 生成的主私鑰,與式(3)中的含義相同。
其中,PublicKeyall為單個KGC 的公鑰累加和,n表示系統(tǒng)中的n 個KGC。系統(tǒng)有兩組主密鑰對(ks,PublicKeys)與(kr,PublicKeyall),對于主私鑰系統(tǒng)中的KGC 會自行保存,而主公鑰對(PublicKeys,PublicKeyall)則會公開。
若有待注冊設(shè)備SD 想接入系統(tǒng),首先須提供具有自己身份標(biāo)識的數(shù)據(jù),系統(tǒng)再根據(jù)SD 的身份標(biāo)識ID 生成簽名私鑰PriKeySD。首先,在有限域上KGC 計算出t1:
其中,H1是由密碼雜湊函數(shù)派生的密碼函數(shù),ID為SD的唯一身份標(biāo)識碼,N為循環(huán)群G1、G2、GT 的階,hid為私鑰生成標(biāo)識符,由KGC 選擇并公開,ks為主私鑰。如果上述t1=0,則需要系統(tǒng)重新生成系統(tǒng)主密鑰對,并更新用戶簽名私鑰;如果t1≠0,則需要重新產(chǎn)生加密主密鑰。因此,計算:
其中,mod 為取模運算,N為群階。最后獲得唯一的簽名私鑰如下:
其中,P1為循環(huán)群G1 生成元,則式(3)-式(6)為實體用戶獲得帶有身份標(biāo)識的私鑰。
物聯(lián)網(wǎng)設(shè)備都具備一種身份ID,這種ID 是可信的,且具有不可篡改、不可偽造及全球唯一等安全屬性。在設(shè)備注冊過程中,通過TCP/IP 協(xié)議對系統(tǒng)采集的設(shè)備身份信息進(jìn)行加密,安全地傳輸?shù)较鄳?yīng)地址中,其中將采集到的物聯(lián)網(wǎng)設(shè)備ID 存儲在本地文件中。以通過AT 指令獲取SIM卡號作為設(shè)備ID 為例,SIM 卡號獲取流程如圖7所示。
Fig.7 Process of obtaining SIM card number圖7 SIM卡號獲取流程
其中,SIM 卡號獲取必須校對采集長度,當(dāng)采集長度與預(yù)設(shè)長度不同時,則需循環(huán)采集3 次,將成功獲取的SIM 卡號存儲在本地文件中。表1 為本文采用Python 程序,通過AT 指令獲得的SIM 卡號。表1 中獲得的SIM 卡號長度統(tǒng)一,每個節(jié)點將SIM 卡號在本地進(jìn)行加密存儲,并上傳到系統(tǒng)進(jìn)行處理,生成設(shè)備的私鑰。
Table 1 SIM card number acquisition results表1 SIM卡號獲取結(jié)果
3.3.1 身份注冊階段
在設(shè)備注冊階段,物聯(lián)網(wǎng)系統(tǒng)中所有的設(shè)備節(jié)點首先要在區(qū)塊鏈中進(jìn)行設(shè)備有效身份的注冊。物聯(lián)網(wǎng)系統(tǒng)中的任意設(shè)備都可通過自己的KGC 生成一對公私鑰,并將生成的私鑰存儲到本地文件中,同時對文件進(jìn)行加密,將生成的公鑰存儲到區(qū)塊鏈分布式賬本中。當(dāng)系統(tǒng)中的主節(jié)點接收到待注冊設(shè)備提交的注冊信息后,主節(jié)點就會視其為注冊事件,與其他主節(jié)點協(xié)商后,將其同步到本區(qū)域的輕節(jié)點中。在注冊過程中,還需要將本地配置的文件和固件等相關(guān)數(shù)據(jù)作為注冊信息,并將相關(guān)數(shù)據(jù)的哈希值存儲在區(qū)塊鏈中,為后續(xù)的數(shù)據(jù)完整性驗證作準(zhǔn)備。
在設(shè)備注冊階段,其中的關(guān)鍵流程為密鑰分配,本文采用國密SM9 非對稱加密算法,通過設(shè)備的身份ID 生成密鑰。設(shè)備身份ID 可選擇MAC 地址或SIM 卡號等,采用國密SM9 算法可節(jié)約計算資源和傳輸資源。在眾多物聯(lián)網(wǎng)設(shè)備中,傳感器的地位是無可替代的,其在整個系統(tǒng)中對于M2M 的認(rèn)證非常重要。
SD 為待注冊輕節(jié)點,MD 為主節(jié)點,SD 與MD 都位于同一區(qū)域中。設(shè)備SD 私鑰生成步驟如下:①系統(tǒng)生成系統(tǒng)參數(shù):P1,P2,G1,G2,e,H,N;②根據(jù)式(1)、式(2)計算系統(tǒng)的主公鑰對;③SD 先利用區(qū)域中的主公鑰對向系統(tǒng)提交帶有自己身份信息的注冊信息,與隨機(jī)數(shù)串拼接成[H]完成加密;④MD 接收到信息后,采用解密SD 發(fā)送的注冊信息對發(fā)送的數(shù)據(jù)取哈希,并對比原哈希值,確認(rèn)對比值相同即可提取中的身份ID;⑤根據(jù)式(4)、式(5)計算出t1與ti;⑥根據(jù)式(6)生成設(shè)備SD 的簽名私鑰PriKeySD。
將采集的身份ID 上傳后,由系統(tǒng)根據(jù)身份ID 生成不同功能的私鑰,當(dāng)hid 為0x01 時生成用戶簽名私鑰,當(dāng)hid為0x03 時生成解密與解封中的加密私鑰。生成的對應(yīng)用戶私鑰如表2、表3 所示。在表2 中,系統(tǒng)通過隨機(jī)數(shù)發(fā)生器隨機(jī)生成簽名主私鑰,簽名主公鑰則通過簽名主私鑰計算得出,表中的ID_IoT 可為任意實體的可識別名稱,如設(shè)備ID、郵箱、用戶電話等可代表身份的身份標(biāo)識。ID_IoT主要通過系統(tǒng)簽名主私鑰,然后利用用戶身份產(chǎn)生256 位用戶加密私鑰。生成用戶簽名私鑰時的hid 為0x01,系統(tǒng)根據(jù)用戶ID 生成帶有身份標(biāo)識的用戶簽名私鑰。
本模型采用socket 進(jìn)行節(jié)點之間的通信,加密后的數(shù)據(jù)在應(yīng)用層中進(jìn)行安全傳輸,采用SM9 非對稱加密算法確保傳輸數(shù)據(jù)的真實性,實現(xiàn)設(shè)備與設(shè)備之間的信任。采用SHA-256 算法對傳輸?shù)臄?shù)據(jù)進(jìn)行驗證,設(shè)備之間通過雙向加解密完成信息傳輸,其中輕節(jié)點SD 采用哈希算法。首先對注冊信息中的身份標(biāo)識與隨機(jī)數(shù)進(jìn)行加密,并將加密后的注冊信息采用區(qū)域群中的主公鑰再次進(jìn)行加密;然后發(fā)送給主節(jié)點MD 進(jìn)行驗證,MD 采用主私鑰對接收到的消息進(jìn)行解密,解密成功后提取SD 身份信息并采用SM9算法生成SD 的密鑰;最后,MD 將生成的密鑰發(fā)送給SD,SD 采用自己的私鑰進(jìn)行解密,解密成功后即得到唯一的身份標(biāo)識密鑰,注冊成功。
Table 2 User signature private key表2 用戶簽名私鑰
Table 3 Encrypted private key for decryption表3 用于解密的加密私鑰
本文基于BC-SC 模型的物聯(lián)網(wǎng)設(shè)備注冊信息流程具體如下:①待注冊的物聯(lián)網(wǎng)設(shè)備SD 根據(jù)平臺要求先將帶有自己身份標(biāo)識的注冊信息加密,再向平臺發(fā)送此信息;②密鑰生成中心接收到待注冊物聯(lián)網(wǎng)設(shè)備發(fā)送的報文信息后,提取信息中待注冊物聯(lián)網(wǎng)設(shè)備的身份ID,提取的標(biāo)識將重新生成待注冊物聯(lián)網(wǎng)設(shè)備具有唯一身份標(biāo)識的私鑰PriKeySD;③待注冊的物聯(lián)網(wǎng)設(shè)備注冊成功后會得到代表自己唯一身份標(biāo)識的私鑰,用于后期身份驗證;④注冊的信息會被放入智能合約中,保存在區(qū)塊鏈里,用于后期設(shè)備訪問時的身份認(rèn)證;⑤區(qū)塊鏈中的其他物聯(lián)網(wǎng)設(shè)備都會備份一份此物聯(lián)網(wǎng)設(shè)備的注冊信息。
3.3.2 身份認(rèn)證階段
物聯(lián)網(wǎng)設(shè)備最主要的特點是自動化,即嵌入到網(wǎng)絡(luò)中的設(shè)備無需外部人為干預(yù)即可自主工作。M2M 通信只能觀察到其最后存儲的信息,并不能了解機(jī)器執(zhí)行這些動作的因果關(guān)系。如果存在惡意或故障設(shè)備,則無法在傳統(tǒng)物聯(lián)網(wǎng)系統(tǒng)中檢測到。為解決這一問題,需要先進(jìn)行分區(qū)域認(rèn)證。在BC-SC 模型認(rèn)證模塊中,身份認(rèn)證功能設(shè)計如圖8所示。
Fig.8 M2M mutual authentication flow圖8 M2M 雙向認(rèn)證流程
物聯(lián)網(wǎng)設(shè)備在身份認(rèn)證階段,輕節(jié)點SD 將交易數(shù)據(jù)的加密簽名上傳后,節(jié)點群根據(jù)SD 的公鑰進(jìn)行解密并核對哈希值的一致性。如果哈希值一致則身份認(rèn)證成功,節(jié)點群會進(jìn)行簽名生成一個信任簽名憑證。信任簽名憑證包括:區(qū)域身份碼、設(shè)備身份標(biāo)識和交易數(shù)據(jù)。主節(jié)點MD最后對此信任簽名憑證進(jìn)行簽名核實,將其存入?yún)^(qū)塊鏈中用于后期追溯與物聯(lián)網(wǎng)設(shè)備維修。
本文設(shè)備之間通過密鑰交換完成身份簽名認(rèn)證,實現(xiàn)M2M 之間的安全認(rèn)證。在SM9 加密算法中通過密鑰封裝將設(shè)備編號、區(qū)域和設(shè)備安全級別組合生成物聯(lián)網(wǎng)終端設(shè)備的公私鑰對。通過密鑰封裝可簡化密鑰管理,從而提高驗證速度。SM9算法解密結(jié)果驗證如表4所示。
Table 5 Verification of decryption result of SM9 algorithm表4 SM9算法解密結(jié)果驗證
在本文模型系統(tǒng)中,智能合約主要完成對事務(wù)的操作,提供用戶注冊與訪問權(quán)。用戶身份注冊需要對用戶賬戶與所需的物聯(lián)網(wǎng)設(shè)備進(jìn)行關(guān)聯(lián),關(guān)聯(lián)后即可獲得對該物聯(lián)網(wǎng)設(shè)備的使用權(quán)。根據(jù)智能合約預(yù)設(shè)的規(guī)則調(diào)用智能合約接口,完成對設(shè)備的控制。本文設(shè)計的智能合約數(shù)據(jù)類型根據(jù)系統(tǒng)需求進(jìn)行設(shè)置,合約的信息定義主要分為兩大類:物聯(lián)網(wǎng)設(shè)備類IoT_Device 和用戶類User。根據(jù)用戶等級開放相應(yīng)訪問權(quán)限,避免非法人員與設(shè)備擾亂系統(tǒng)安全,竊取系統(tǒng)中的信息。用戶可根據(jù)自己的身份信息提交訪問查詢請求,合約會核實提交者身份并開放相應(yīng)權(quán)限。如果用戶權(quán)限等級不夠,系統(tǒng)將禁止用戶訪問。
智能合約包括用戶屬性定義、設(shè)備屬性定義以及用戶與設(shè)備管理等,通過mapping 索引方式實現(xiàn)地址映射關(guān)系。部分智能合約設(shè)計如表5所示。
Table 6 Correspondence of contract part function表5 合約部分函數(shù)對應(yīng)關(guān)系
表5 中將用戶地址與設(shè)備地址映射關(guān)系設(shè)計在智能合約結(jié)構(gòu)中,通過設(shè)置相關(guān)合約條件對設(shè)備是否關(guān)聯(lián)用戶進(jìn)行判斷。關(guān)聯(lián)合約中會擬定兩種角色,即服務(wù)請求者和服務(wù)提供者,其將與智能合約進(jìn)行交互,實現(xiàn)M2M自主交易。
系統(tǒng)中除需要有單獨的用戶合約和設(shè)備合約外,還需要根據(jù)系統(tǒng)需求設(shè)計用戶與設(shè)備關(guān)聯(lián)合約函數(shù)封裝,并對用戶與物聯(lián)網(wǎng)設(shè)備信息進(jìn)行綁定,完成相關(guān)交易。智能合約交易內(nèi)容如表6 所示。在表6 中,發(fā)送方地址與接收方地址為實際創(chuàng)建的事務(wù)節(jié)點,交易所用資金為Gas,由智能合約部署系統(tǒng)支付。
用戶——設(shè)備——智能合約三者交互流程如下:①如果用戶想要使用本系統(tǒng)中的物聯(lián)網(wǎng)設(shè)備,則需要先進(jìn)行身份注冊,根據(jù)平臺要求提交身份注冊信息;②平臺接收到注冊請求信息后生成用戶注冊身份信息(如密碼、身份標(biāo)識等),并將其返回給用戶;③用戶獲得自己的身份信息后正式進(jìn)行注冊;④平臺根據(jù)注冊信息生成用戶私鑰并返回;⑤用戶在平臺選擇需要使用的物聯(lián)網(wǎng)設(shè)備進(jìn)行綁定;⑥被選中的物聯(lián)網(wǎng)設(shè)備會根據(jù)平臺的M2M 機(jī)制完成設(shè)備身份認(rèn)證,向同一區(qū)域的節(jié)點群提交設(shè)備注冊信息;⑦區(qū)域節(jié)點群驗證此物聯(lián)網(wǎng)設(shè)備的注冊信息,確認(rèn)后將驗證成功的消息與此設(shè)備的注冊信息請求通過智能合約進(jìn)行存儲;⑧智能合約根據(jù)驗證信息核實設(shè)備注冊表,確認(rèn)是系統(tǒng)中的物聯(lián)網(wǎng)設(shè)備則記錄此次行為,向物聯(lián)網(wǎng)設(shè)備下達(dá)指令并將相應(yīng)權(quán)限賦予用戶。
Table 6 Smart contract transaction information表6 智能合約交易信息
本節(jié)采用兩個Raspberry Pi3 作為輕量型IOT 設(shè)備并通過GPIO 口與傳感器相連,主設(shè)備采用帶有64 位操作系統(tǒng)的Ubuntu16.04,以及處理器為2.4GHz 的個人電腦,以上節(jié)點都安裝在以太坊上。與Raspberry Pi3 相連的傳感器數(shù)據(jù)值可通過Python 代碼獲取,將獲取的數(shù)據(jù)值與智能合約交互,通過智能合約中的閾值完成傳感器事件觸發(fā)與設(shè)備身份認(rèn)證。智能合約的交易執(zhí)行過程通過顯示設(shè)備進(jìn)行記錄,如通過開關(guān)打開或閉合記錄合約狀態(tài),通過運行在物聯(lián)網(wǎng)設(shè)備上的控制器每5s監(jiān)視一次智能合約交易數(shù)據(jù),并根據(jù)外部顯示設(shè)備的變化記錄交易情況。實驗結(jié)果表明,訪問時間與存儲時間對比以及訪問事件與存儲事件吞吐量對比分別如圖9、圖10所示。
Fig.9 Comparison of access time and storage time圖9 訪問時間與存儲時間對比
Fig.10 Throughput comparison of access events and storage events圖10 訪問事件與存儲事件吞吐量對比
從圖9、圖10 的結(jié)果可以得出,系統(tǒng)執(zhí)行時間與存儲時間會隨著交易量的增加而延長。在相同交易量的前提下,訪問事件的吞吐量比存儲事件的吞吐量高出大約12倍。同一類型的執(zhí)行事件在不同交易量下,平均吞吐量相差不大。
本文主要以物聯(lián)網(wǎng)中的設(shè)備為研究對象,以區(qū)塊鏈技術(shù)為研究理論基礎(chǔ)對M2M 認(rèn)證機(jī)制進(jìn)行研究與探索,提出一種基于區(qū)塊鏈的物聯(lián)網(wǎng)智能合約模型(BC-SC 模型)。模型中設(shè)計了設(shè)備注冊認(rèn)證管理策略,利用區(qū)塊鏈結(jié)合物聯(lián)網(wǎng)設(shè)備ID,使用無需申請證書的國密SM9 算法,可將物聯(lián)網(wǎng)設(shè)備ID 生成設(shè)備唯一帶有身份標(biāo)識的私鑰。每個區(qū)域主節(jié)點都擁有一份共同的主密鑰對以及自己生成的主密鑰對,設(shè)備之間的加密通信可通過自身ID 生成的私鑰與區(qū)域主公鑰加解密完成,從而保證接入?yún)^(qū)域設(shè)備節(jié)點身份的可靠性。然而,模型尚有一些不足之處,需要在未來進(jìn)行改進(jìn)。例如本文模型采用分區(qū)域節(jié)點管理方法,未來可進(jìn)一步考慮跨域節(jié)點互相認(rèn)證方法,從而使系統(tǒng)功能更加全面。后續(xù)將繼續(xù)開發(fā)用戶權(quán)限模塊和關(guān)聯(lián)設(shè)備管理模塊,以提高系統(tǒng)的完整性,拓寬其應(yīng)用場景。