張江徽,崔 波,李 茹,史錦山
(1.內(nèi)蒙古大學計算機學院,呼和浩特 010021;2.內(nèi)蒙古自治區(qū)無線網(wǎng)絡與移動計算重點實驗室,呼和浩特 010021)
物聯(lián)網(wǎng)是以通信網(wǎng)與互聯(lián)網(wǎng)為基礎,為物理設備提供信息交互和無縫連接的互聯(lián)網(wǎng)絡,在該網(wǎng)絡中物理設備可以實現(xiàn)設備之間的精確協(xié)作與人機之間的實時聯(lián)動。目前物聯(lián)網(wǎng)已經(jīng)進入相對成熟的發(fā)展階段,物聯(lián)網(wǎng)設備可隨時接入到互聯(lián)網(wǎng)中被用戶所使用。但是物聯(lián)網(wǎng)設備在使用過程中會產(chǎn)生大量的數(shù)據(jù),這些海量數(shù)據(jù)中包含著具有明顯指向性的個人隱私數(shù)據(jù),若這些隱私數(shù)據(jù)發(fā)生泄漏,則代表著用戶隱私的消失。訪問控制作為數(shù)據(jù)保護的基石性技術之一,可保障數(shù)據(jù)僅能被擁有相應權限的用戶訪問[1]。但是當前的訪問控制方法采用集中式的授權決策實體進行訪問控制決策,即使用中央可信實體授予訪問控制權限,在這種情況下容易出現(xiàn)單點故障問題,可靠性較低。
區(qū)塊鏈是一種去中心化的分布式技術,區(qū)塊鏈中存儲的數(shù)據(jù)具有可追溯與不可篡改的特性,它可在無信任中心的網(wǎng)絡環(huán)境中建立信任關系。區(qū)塊鏈從技術上解決了使用集中式授權決策實體帶來的安全問題,其與訪問控制結(jié)合,可以降低訪問控制對單一可信實體的依賴程度,提高訪問控制的可靠性和數(shù)據(jù)的安全性。
2016 年出現(xiàn)了將物聯(lián)網(wǎng)下的訪問控制與區(qū)塊鏈相結(jié)合的方法。文獻[2-3]使用比特幣中的授權令牌代表訪問權限,文獻[4]將機器學習與基于比特幣的訪問控制相結(jié)合,文獻[5]則在區(qū)塊鏈中存儲訪問控制信息,而文獻[6]提出了一種基于屬性的物聯(lián)網(wǎng)訪問控制方法。但上述研究中的訪問控制決策過程依然是由一個集中式的中央實體來完成[7]。
在以太坊與訪問控制結(jié)合的研究中,文獻[8]通過智能合約驗證用戶訪問控制權限的合法性,文獻[9]則使用智能合約實現(xiàn)了傳統(tǒng)的訪問控制方法,文獻[10]利用智能合約完成訪問控制信息的記錄,文獻[11]設計了3 個智能合約共同實現(xiàn)訪問控制的全部功能。上述研究中存在的問題是側(cè)重對物聯(lián)網(wǎng)設備的保護,并且在以太坊中執(zhí)行智能合約需要花費數(shù)字貨幣,使得系統(tǒng)使用限制較多。
超級賬本中不存在數(shù)字貨幣,并且它對應用環(huán)境中的算力規(guī)模并沒有嚴格的要求,因此超級賬本更適用于物聯(lián)網(wǎng)環(huán)境下的訪問控制,文獻[12]將超級賬本與訪問控制相結(jié)合,通過智能合約管理訪問控制策略。但該研究對于訪問控制權限的劃分粒度較粗,對于物聯(lián)網(wǎng)設備的擁有者容易出現(xiàn)越權訪問、過度授權等情況。
本文分析當前物聯(lián)網(wǎng)環(huán)境下區(qū)塊鏈結(jié)合訪問控制研究存在的不足,設計并實現(xiàn)一種基于智能合約的物聯(lián)網(wǎng)訪問控制系統(tǒng),在使用智能合約進行訪問控制決策的基礎上提供細粒度的訪問控制,并嚴格審查訪問控制權限。本文選擇超級賬本作為執(zhí)行智能合約的區(qū)塊鏈平臺。
2008 年,中本聰提出了一個完全去中心化的數(shù)字貨幣系統(tǒng),這種數(shù)字貨幣稱為比特幣[13]。比特幣適用于電子金融領域,可以在弱信任環(huán)境甚至無信任環(huán)境中為參與交易的各方建立起信任關系,每一筆交易需要同一網(wǎng)絡中所有節(jié)點確認之后才能生效。比特幣使用橢圓曲線算法加密數(shù)據(jù),運用P2P網(wǎng)絡來實現(xiàn)數(shù)據(jù)的分布式存儲,以區(qū)塊為單位采用鏈式存儲結(jié)構存儲數(shù)據(jù),憑借共識算法保證各個參與方數(shù)據(jù)的一致性。比特幣具有的去中心化、數(shù)據(jù)不可篡改等特點,為區(qū)塊鏈的發(fā)展奠定了理論與技術基礎。比特幣被稱為區(qū)塊鏈1.0。
文獻[14-15]提出以太坊作為下一代的區(qū)塊鏈網(wǎng)絡架構。以太坊在擁有區(qū)塊鏈技術特性的基礎上增加了具有圖靈完備功能的智能合約。
智能合約是以太坊網(wǎng)絡上的可執(zhí)行程序,以太坊用戶將設計好的業(yè)務邏輯編寫成智能合約部署在以太坊中,由以太坊虛擬機(Ethereum Virtual Machine,EVM)自動調(diào)用與執(zhí)行[16-17]。在以太坊中部署與調(diào)用智能合約需要支付以數(shù)字貨幣結(jié)算的費用。智能合約可實現(xiàn)復雜的業(yè)務邏輯,擴大了區(qū)塊鏈的應用范圍,使得各種傳統(tǒng)業(yè)務開始與訪問控制、供應鏈溯源、公證業(yè)務等區(qū)塊鏈融合。以太坊是區(qū)塊鏈2.0 的代表。
比特幣與以太坊允許任意未知身份的節(jié)點加入到網(wǎng)絡中,但對應用環(huán)境中的算力規(guī)模有著極高的要求,以保證共識算法的正常運行,維護區(qū)塊鏈網(wǎng)絡的完全性和穩(wěn)定性。然而,傳統(tǒng)領域一般不具備強大的算力,卻又需要借助區(qū)塊鏈的數(shù)據(jù)不可逆、不可篡改以及分布式對等網(wǎng)絡等特點。因此,研究人員提出了新一代的區(qū)塊鏈技術——超級賬本。超級賬本稱為區(qū)塊鏈3.0。
超級賬本是Linux 基金會在2015 年發(fā)起的一個開源項目,它是一個分布式賬本平臺,具有無幣、功能模塊化等特點。超級賬本[18-19]由以下6 個部分組成:
1)客戶端:使用者通過客戶端實現(xiàn)應用與區(qū)塊鏈網(wǎng)絡之間的交互,客戶端可以向區(qū)塊鏈網(wǎng)絡發(fā)出一系列操作命令,如提交交易、建立通道、創(chuàng)建節(jié)點等。
2)證書頒發(fā)機構(Certificate Authority,CA):負責管理超級賬本網(wǎng)絡中的所有成員身份,CA 也稱為Fabric CA,是成員服務提供者(Member Service Provider,MSP)的具體實現(xiàn),MSP 在超級賬本中是管理成員的系統(tǒng)抽象組件。
3)通道(Channel):將一個完整的區(qū)塊鏈網(wǎng)絡分割成不同的私有子網(wǎng),每一個通道存在不同的節(jié)點,實現(xiàn)了數(shù)據(jù)的隱私性。
4)peer 節(jié)點:根據(jù)節(jié)點的作用劃分為背書節(jié)點、提交節(jié)點、錨節(jié)點和領導者節(jié)點。背書節(jié)點負責模擬執(zhí)行客戶端所提交的交易并對執(zhí)行通過的交易簽名,提交節(jié)點將新的區(qū)塊加入到區(qū)塊鏈中,錨節(jié)點用來發(fā)現(xiàn)通道中的所有peer 節(jié)點,領導者節(jié)點則是將新的區(qū)塊信息廣播給組織內(nèi)的所有peer 節(jié)點。
5)排序服務:驗證背書節(jié)點的簽名后,對交易進行排序,并打包成新的區(qū)塊發(fā)送給提交節(jié)點,排序服務可由一個排序節(jié)點組成,也可由多個排序節(jié)點共同組成。
6)鏈碼:在超級賬本中運行的智能合約。
超級賬本實現(xiàn)一次完整交易的過程如下:
1)客戶端構建交易,并將交易打包發(fā)送給背書節(jié)點。
2)背書節(jié)點對接收到的交易進行驗證并模擬執(zhí)行,驗證通過后對該交易簽名,將結(jié)果返回給客戶端。
3)客戶端將模擬結(jié)果發(fā)送給排序節(jié)點,驗證背書節(jié)點的簽名后,新的交易被排序節(jié)點打包至新的區(qū)塊中,發(fā)送給提交節(jié)點。
4)提交節(jié)點將新的區(qū)塊寫入?yún)^(qū)塊鏈中。
5)領導者節(jié)點在接收到新區(qū)塊寫入的消息后,將消息廣播給組織內(nèi)的其他peer 節(jié)點。
超級賬本適用于存在多個參與方同時又不具備強大算力的環(huán)境中,在這種環(huán)境下其仍然具有區(qū)塊鏈的所有特性。
1.2.1 基于比特幣的訪問控制
最初將訪問控制與區(qū)塊鏈技術相結(jié)合的研究是于2016 年開始的,研究者將訪問控制與比特幣相結(jié)合。文獻[2-3]將訪問控制模型和區(qū)塊鏈機制相結(jié)合,提出一種物聯(lián)網(wǎng)場景下的分布式隱私保護訪問控制框架FairAccess,使用比特幣的授權令牌代表訪問權限,通過授權令牌的方式來實現(xiàn)權限的傳遞,在FairAccess 中,區(qū)塊鏈被認為是存儲所有訪問控制策略的數(shù)據(jù)庫。有學者在FairAccess 的基礎上,將機器學習領域中的強化學習結(jié)合物聯(lián)網(wǎng)環(huán)境下的訪問控制提出一種動態(tài)的、分布式的安全策略[4]。文獻[5]將比特幣與基于屬性的訪問控制相結(jié)合,將訪問控制策略與資源部署在區(qū)塊鏈上并公開可見,任何用戶都可以隨時查詢與資源配對的策略以及有權訪問資源的客體屬性。文獻[6]提出一種基于屬性的物聯(lián)網(wǎng)訪問控制方法,該方法運用區(qū)塊鏈存儲屬性數(shù)據(jù),避免了數(shù)據(jù)被非法篡改,同時簡化了訪問控制協(xié)議,以滿足物聯(lián)網(wǎng)設備的計算能力和功耗要求。
訪問控制與比特幣的結(jié)合只是將區(qū)塊鏈作為存儲控制策略和決策結(jié)果的數(shù)據(jù)庫,以達到策略執(zhí)行結(jié)果可追溯和不可篡改,保障了訪問控制策略和決策結(jié)果的安全性[7]。但訪問控制的決策過程是由集中式的授權實體完成,仍然存在單點故障問題。
1.2.2 基于以太坊的訪問控制
智能合約提出后,有學者開始研究基于智能合約的訪問控制方法。文獻[8]將智能合約作為用戶使用物聯(lián)網(wǎng)設備的權限驗證服務器,當用戶發(fā)出使用請求時,智能合約將用戶的權限令牌與物聯(lián)網(wǎng)設備對應的令牌進行比對,驗證用戶的合法性,通過驗證后將設備的全部使用權限返回給用戶。研究者將基于權能的訪問控制(Capability-Based Access Control,CapBAC)與基于身份的訪問控制(Identity-Based Access Control,IBAC)融合并通過智能合約實現(xiàn),使用令牌(Token)代表用戶的訪問控制權限[9]。文獻[10]使用以太坊私有鏈對物聯(lián)網(wǎng)設備的配置文件進行分布式管理,同時將設備的配置文件存儲在區(qū)塊鏈中,并使用智能合約記錄物聯(lián)網(wǎng)設備的訪問控制操作。文獻[11]提出一種基于以太坊智能合約的訪問控制方案,包括訪問控制合約(Access Control Contract,ACC)、判斷合約(Judge Contract,JC)和注冊合約(Register Contract,RC)3 種智能合約。訪問控制合約通過檢查請求者的行為實現(xiàn)基于策略的授權,判斷合約檢查請求者的錯誤行為并對請求者進行相應的懲罰,注冊合約用于注冊上述兩個智能合約并提供更新、刪除和其他操作。
以太坊中的智能合約技術不僅可以將訪問控制策略、決策結(jié)果等關鍵數(shù)據(jù)寫入到區(qū)塊鏈中,還可以將訪問控制策略轉(zhuǎn)換成智能合約[20],由以太坊中的所有節(jié)點共同完成訪問控制權限的授予,避免了使用集中式授權實體所帶來的單點故障問題。但是上述研究側(cè)重的是提高物聯(lián)網(wǎng)設備的安全性,對于訪問控制權限部分沒有過多的考慮。
由于以太坊中發(fā)布與執(zhí)行智能合約需要花費一定的費用,而這些費用是以以太坊中產(chǎn)出的數(shù)字貨幣結(jié)算,以太坊用戶花費完后則無法申請使用資源或者對資源進行管理操作。此外,以太坊對算力要求較高,對于硬件性能有限的物聯(lián)網(wǎng)環(huán)境并不適用。
1.2.3 基于超級賬本的訪問控制
文獻[12]設計的基于超級賬本的訪問控制系統(tǒng),被命名為Fabric-IoT,該系統(tǒng)包含設備合約、策略合約和訪問合約3 種智能合約。設備合約負責存儲物聯(lián)網(wǎng)設備的統(tǒng)一資源定位符(Uniform Resource Locator,URL)以及查詢設備功能,策略合約為管理員用戶提供管理訪問控制策略的功能,訪問合約負責普通用戶的全部訪問控制過程。
超級賬本中不存在數(shù)字貨幣,無需考慮執(zhí)行智能合約的費用問題,并且它對算力并沒有嚴格的要求,因此適用于硬件性能有限的物聯(lián)網(wǎng)環(huán)境。上述研究雖然將工作重心放在訪問控制與超級賬本的結(jié)合上,但其設計的訪問控制策略在物聯(lián)網(wǎng)設備的訪問控制權限劃分上存在著粒度過粗的問題,使用者請求訪問控制權限時會出現(xiàn)過度授權、越權訪問等不安全情況。
針對上述問題,本文在選擇超級賬本作為執(zhí)行智能合約的區(qū)塊鏈平臺的基礎上,設計并實現(xiàn)基于智能合約的物聯(lián)網(wǎng)訪問控制系統(tǒng),使用智能合約進行訪問控制決策,同時為物聯(lián)網(wǎng)設備設計了一個訪問控制策略模型FACP,該模型同樣是在超級賬本中建立的。本文所設計的系統(tǒng)通過該模型可以實現(xiàn)細粒度的訪問控制,防止出現(xiàn)越權訪問、過度授權等情況。
本節(jié)主要介紹系統(tǒng)的設計思路,具體內(nèi)容分為系統(tǒng)架構、系統(tǒng)業(yè)務工作流程、訪問控制策略模型的組成以及實現(xiàn)系統(tǒng)功能的智能合約設計。
基于智能合約的物聯(lián)網(wǎng)訪問控制系統(tǒng)可實現(xiàn)物聯(lián)網(wǎng)設備權限的訪問控制管理。系統(tǒng)架構分為用戶端、區(qū)塊鏈和設備端三部分,如圖1 所示。
圖1 系統(tǒng)架構Fig.1 Architecture of system
本文系統(tǒng)架構主要包括以下3 個部分:
1)用戶端。包含4 個模塊,分別是資源管理模塊、資源請求模塊、資源授予模塊和資源使用模塊。系統(tǒng)中的用戶分為資源請求者和資源擁有者兩類。每個模塊涉及的功能如下:
(1)資源管理模塊
上傳權限功能:物聯(lián)網(wǎng)設備的所有者被稱為資源擁有者,資源擁有者可以將準備提供給他人使用的物聯(lián)網(wǎng)設備信息上傳到區(qū)塊鏈中。
設置訪問控制策略功能:資源擁有者輸入FACP需要的屬性信息,為該設備設置多條訪問控制策略以滿足不同的資源請求者的使用請求,每條策略都會明確規(guī)定滿足何種屬性的資源請求者在何種情況下方可獲取該設備的訪問控制權限。
撤回權限功能:資源擁有者若不再繼續(xù)共享某個物聯(lián)網(wǎng)設備的訪問控制權限,則可通過系統(tǒng)刪除區(qū)塊鏈中存儲的訪問控制權限信息,刪除之后系統(tǒng)將無法搜索到有關該設備的訪問控制權限信息,資源請求者也無法再使用該設備。
(2)資源請求模塊
請求資源功能:需要獲取某一個物聯(lián)網(wǎng)設備訪問權限的用戶被稱為資源請求者,系統(tǒng)會在區(qū)塊鏈中為資源請求者查找符合其條件的物聯(lián)網(wǎng)設備的訪問控制權限,資源請求者可對這項權限發(fā)起訪問請求。
(3)資源授予模塊
權限授予功能:資源請求者對物聯(lián)網(wǎng)設備的訪問控制權限發(fā)起請求時,系統(tǒng)會查詢資源擁有者為物聯(lián)網(wǎng)設備設置的訪問控制策略,將資源請求者的屬性信息與訪問控制策略中的屬性信息進行比對,全部符合后,將該設備的訪問控制權限授予資源請求者。
(4)資源使用模塊
權限使用功能:資源請求者滿足訪問控制策略,當被授予訪問控制權限時,會在區(qū)塊鏈中生成記錄,當資源請求者需要使用物聯(lián)網(wǎng)設備時,系統(tǒng)會在區(qū)塊鏈中查詢用戶是否獲取該設備的訪問控制權限,只有查詢到結(jié)果,資源請求者才被系統(tǒng)允許使用該設備。
2)區(qū)塊鏈。區(qū)塊鏈部分是系統(tǒng)中邏輯處理的核心,使用超級賬本作為區(qū)塊鏈網(wǎng)絡架構,并通過智能合約進行訪問控制的邏輯判斷。它主要具有以下3 個作用:
(1)負責用戶端的資源管理模塊、資源請求模塊、資源授予模塊和資源使用模塊的邏輯處理。
(2)存儲訪問控制策略、決策結(jié)果以及系統(tǒng)使用過程中產(chǎn)生的數(shù)據(jù),如用戶信息、用戶權限信息等。
(3)提高系統(tǒng)可靠性,通過智能合約實現(xiàn)了分布式的訪問控制決策,避免了單點故障問題。
3)設備端。區(qū)塊鏈網(wǎng)絡存在無數(shù)的參與節(jié)點,每個參與節(jié)點需要具有一定的計算能力與存儲能力,以存儲當前區(qū)塊鏈內(nèi)的所有交易數(shù)據(jù),并且共同完成區(qū)塊鏈網(wǎng)絡內(nèi)的每一次共識任務,以此保證所有節(jié)點數(shù)據(jù)的一致性[21],而物聯(lián)網(wǎng)設備計算和存儲能力較弱,并且這些計算和存儲能力主要是為物聯(lián)網(wǎng)設備自身的功能服務,無法將其作為區(qū)塊鏈網(wǎng)絡中的節(jié)點,因此本文中的物聯(lián)網(wǎng)設備不會以節(jié)點的身份參與到區(qū)塊鏈網(wǎng)絡中,每一個設備擁有唯一的設備ID,以便與其他設備區(qū)分,它們會接收系統(tǒng)所傳遞的訪問控制信息,并執(zhí)行相應的動作。
本文系統(tǒng)具體業(yè)務工作流程如圖2 所示。
圖2 本文系統(tǒng)業(yè)務工作流程Fig.2 Business workflow of the proposed system
業(yè)務工作流程由資源管理、資源請求、資源授予和資源使用4 個部分共同處理,每一部分負責處理用戶端的相應功能模塊的工作請求,具體步驟如下:
步驟1資源所有者通過策略信息點(Policy Information Point,PIP)組件和策略管理點(Policy Administration Point,PAP)組件上傳資源的訪問控制權限信息和為該資源設置的訪問控制策略,并存儲在區(qū)塊鏈中。
步驟2系統(tǒng)搜索符合條件的資源信息,資源請求者通過策略執(zhí)行點(Policy Enforcement Point,PEP)組件發(fā)起對資源的訪問請求。
步驟3策略決策點(Policy Decision Point,PDP)組件通過PAP 組件獲得該資源的訪問控制策略,通過PIP 獲得資源請求者的屬性信息。
步驟4PDP 組件比對資源請求者的屬性信息和該資源的訪問控制策略中設定的屬性信息,若決策結(jié)果是允許,它會將結(jié)果返回給PEP 組件。
步驟5PEP 組件接收PDP 組件的決策結(jié)果,并將訪問控制策略中規(guī)定的權限返回給資源請求者,資源請求者獲得訪問控制權限。
步驟6資源請求者向PEP 組件發(fā)出使用權限申請。
步驟7PEP 組件向PDP 組件發(fā)送資源請求者的資源使用申請。
步驟8PDP 組件查找資源請求者的已獲取資源列表,確認通過后,向PEP 組件返回確認信息。
步驟9PEP 組件向資源請求者返回允許調(diào)用信息,同時資源請求者使用該資源。
業(yè)務工作流程中所涉及的名詞及含義如表1所示。
表1 工作流程涉及的名詞及具體含義Table 1 Nouns and specific meanings involved in the workflow
策略是由一組規(guī)則組成的,它們定義了實現(xiàn)特定結(jié)果所需要的實體屬性,在將物聯(lián)網(wǎng)設備的訪問控制權限授予資源請求者的過程中,若訪問控制策略對于權限的劃分過于簡單,將會造成授權范圍過大、資源請求者獲得的訪問控制權限超出其權限范圍、發(fā)生過度授權、出現(xiàn)隱私數(shù)據(jù)泄露等風險,所以需要將訪問控制權限進行細粒度劃分。
為實現(xiàn)物聯(lián)網(wǎng)設備訪問權限的細粒度劃分,本文設計了基于超級賬本的訪問控制策略模型FACP,如圖3 所示。
圖3 FACP 訪問控制策略模型Fig.3 FACP access control policy model
FACP 訪問控制策略模型的組成如下:
1)策略:資源請求者為物聯(lián)網(wǎng)設備設置一組訪問控制規(guī)則,每個規(guī)則對應一種訪問情況,使資源擁有者可以對物聯(lián)網(wǎng)設備做一個更精細的權限控制。
2)規(guī)則由靶標、先決條件、有效期限、決策結(jié)果和規(guī)則聯(lián)合算法組成:
(1)靶標
資源:被請求設備的訪問控制權限。
主體:請求資源的訪問控制權限的個人或組織,資源擁有者需要確定申請設備的訪問控制權限的請求者,保證設備被指定的資源請求者使用。
操作:資源的權限,如開關權限、讀寫數(shù)據(jù)權限,對權限整體進行細粒度劃分,不需要的權限則不會授予。
關系:需要通過資源擁有者的關系屬性區(qū)分相同主體名稱的不同主體的訪問請求,防止規(guī)則被錯誤使用。
(2)先決條件:對規(guī)則的應用時間、應用空間、設備的使用原因等一些客觀條件做出限定。
(3)有效期限:規(guī)定該規(guī)則的使用次數(shù)或使用時間,避免出現(xiàn)無限使用該設備情況的發(fā)生。
(4)決策結(jié)果:當資源請求者的屬性滿足靶標中的屬性,并且客觀條件滿足先決條件中的設定時,系統(tǒng)會將決策結(jié)果與有效期限返回給資源請求者。
(5)規(guī)則聯(lián)合算法:為防止規(guī)則應用沖突情況的發(fā)生,采用許可優(yōu)先算法,只要有一個規(guī)則的決策結(jié)果是允許,資源請求者就可以獲得對應的訪問控制權限。
資源擁有者不需要了解FACP,在系統(tǒng)中的輸入框填入所有的屬性信息,系統(tǒng)會根據(jù)FACP 自動生成該設備專屬的訪問控制策略,實現(xiàn)細粒度的訪問控制,防止資源請求者的訪問控制權限超出資源擁有者對于該設備所設置的權限共享范圍。
為完成分布式訪問控制決策,本文將物聯(lián)網(wǎng)設備訪問控制權限的決策授權以及訪問控制策略的設置和用戶信息的管理等操作交由4 個部署在超級賬本中的智能合約完成,分別是PIP 合約、PAP 合約、PDP 合約和PEP 合約,本節(jié)將介紹實現(xiàn)訪問控制功能的合約與函數(shù)。
1)PIP 合約。資源擁有者通過該合約管理物聯(lián)網(wǎng)設備的訪問控制權限以及注冊用戶身份,PIP 合約包含以下函數(shù):
(1)AddResource()函數(shù):資源擁有者上傳物聯(lián)網(wǎng)設備的訪問控制權限時觸發(fā)AddResource()函數(shù),該函數(shù)將設備的訪問控制權限信息寫入?yún)^(qū)塊鏈中,一個合法的訪問控制權限信息需要4 個參數(shù),如算法1 所示。
算法1AddResource()函數(shù)
(2)DeleteResource()函數(shù):在某種情況下,資源擁有者不再繼續(xù)共享設備的訪問控制權限,通過該函數(shù)輸入要撤銷的資源ID,系統(tǒng)在區(qū)塊鏈中刪除對應的資源信息,完成對資源的撤銷,資源申請者將無法在區(qū)塊鏈搜索到關于該資源的信息。
(3)UserRegister()函數(shù):使用者在用戶注冊頁面中輸入用戶姓名和用戶ID,系統(tǒng)通過該函數(shù)注冊用戶身份信息,并在區(qū)塊鏈中保存,以便后續(xù)系統(tǒng)操作的進行。
2)PAP 合約。PAP 合約負責為已共享的物聯(lián)網(wǎng)設備設置訪問控制策略,該合約由AddPolicy()函數(shù)構成。AddPolicy()函數(shù)負責提供FACP 所需要的7 個屬性信息,偽代碼如算法2 所示。
算法2AddPolicy()函數(shù)
3)PDP 合約。PDP 合約負責判斷資源請求者是否匹配所申請設備的訪問控制策略,判斷當前的資源請求者是否為該設備的已授權用戶。該合約所包含的函數(shù)如下:
(1)MatchPolicy()函數(shù):主要負責將資源請求者的屬性信息與其請求的物聯(lián)網(wǎng)設備的訪問控制策略中的屬性信息做比較,判斷其能否獲得該設備的訪問控制權限,該函數(shù)在資源請求者申請資源的訪問控制權限時由PEP 合約中的GetPermission()函數(shù)調(diào)用,MatchPolicy()函數(shù)偽代碼如算法3 所示。
算法3MatchPolicy()函數(shù)
(2)JudgeUser()函數(shù):負責判斷當前的資源請求者是否為該設備的已授權用戶之一,并將判斷結(jié)果傳遞給PEP 合約,判斷過程與MatchPolicy()函數(shù)類似,因此不再贅述。
4)PEP 合約。PEP 合約負責接收PDP 合約返回的結(jié)果,并根據(jù)結(jié)果執(zhí)行相應的動作,PEP 合約包含以下4 個函數(shù):
(1)ShowResource()函數(shù):根據(jù)輸入的用戶姓名顯示已獲得的訪問控制權限。
(2)UseResource()函數(shù):根據(jù)PDP合約中JudgeUser()函數(shù)返回的結(jié)果,確定用戶的可使用資源列表中是否包含該設備。
(3)FindResourceByRes_ID()函數(shù):在資源請求者搜索可申請設備時由系統(tǒng)調(diào)用,根據(jù)輸入的資源ID 顯示對應的搜索結(jié)果。
(4)GetPermission()函數(shù)如算法4 所示,它根據(jù)PDP 合約中MatchPolicy()函數(shù)返回的結(jié)果,將設備的訪問控制權限授予資源請求者,同時將資源請求者所獲得的權限信息上傳至區(qū)塊鏈中。
算法4GetPermission()函數(shù)
本文在主機上安裝虛擬機,在虛擬機中搭建超級賬本所需要的運行環(huán)境,將超級賬本部署在虛擬機中,虛擬機的軟件環(huán)境配置如表2 所示,硬件環(huán)境配置如表3 所示。
表2 軟件環(huán)境Table 2 Software environment
表3 硬件環(huán)境Table 3 Hardware environment
在為超級賬本搭建的運行環(huán)境中,本文設置了4 種不同類型的節(jié)點,如表4 所示。
表4 超級賬本節(jié)點類型Table 4 Node type of hyperledger fabric
超級賬本的運行環(huán)境搭建過程如下:
1)使用超級賬本中的加密工具cryptogen 為peer節(jié)點和orderer 節(jié)點生成證書和密鑰。本文中設置了2 個peer 組織,每個組織包含2 個節(jié)點,并設置1 個orderer 節(jié)點。
2)使用加密工具configtxgen 讀取configtx.yaml文件中的配置信息:
(1)生成orderer 節(jié)點需要的創(chuàng)世區(qū)塊,當系統(tǒng)啟動時,該區(qū)塊將被寫入到區(qū)塊鏈中,確保peer 節(jié)點與orderer 節(jié)點的身份信息不會被篡改。
(2)生成通道的配置信息,每一個通道都保存自己的賬本信息,通道之間數(shù)據(jù)獨立,保證數(shù)據(jù)的隱私性。
(3)為每一個peer 節(jié)點組織生成錨節(jié)點的配置信息,超級賬本中的組織通過錨節(jié)點與外部組織進行信息交流。
其中第(1)步與第(2)步中的操作已集中在一個generate 的shell 腳本中,執(zhí)行該腳本即可自動完成上述操作。
3)讀取通道的配置信息創(chuàng)建通道,讀取每一個錨節(jié)點配置信息,為每一個組織設置錨節(jié)點,與外部組織通信。根據(jù)docker compose 中的配置信息啟動鏡像創(chuàng)建容器,將每一個節(jié)點加入到創(chuàng)建的通道中,至此完成對超級賬本運行環(huán)境的搭建。
超級賬本的網(wǎng)絡運行環(huán)境搭建結(jié)束后,需要安裝和實例化鏈碼,鏈碼才可正常使用,鏈碼安裝過程如下:
1)將編寫完成的鏈碼復制到安裝超級賬本的文件夾下。
2)執(zhí)行命令將鏈碼打包并簽署,安裝到超級賬本的每一個peer 節(jié)點上。
3)通過任意一個peer節(jié)點執(zhí)行實例化鏈碼操作,在實例化操作的同時執(zhí)行背書策略。在完成實例化鏈碼后,所有身份對等節(jié)點均可對鏈碼進行調(diào)用。
對鏈碼進行修改后,可執(zhí)行升級鏈碼操作使新鏈碼生效,升級過程與安裝過程類似。
普通用戶使用系統(tǒng)時不需要直接操作超級賬本,用戶通過最上層的用戶端使用系統(tǒng)功能,由系統(tǒng)完成對相應智能合約的調(diào)用,這個過程涉及到與超級賬本的交互,本文選擇超級賬本官方提供的SDK完成對超級賬本的相關操作。
本文中的系統(tǒng)使用Fabric-Node-SDK 實現(xiàn)對智能合約的調(diào)用及其他數(shù)據(jù)交互。
1)創(chuàng)建一個新的CA 客戶端與CA 節(jié)點管理超級賬本中的成員身份,通過CA 節(jié)點注冊管理員,并創(chuàng)建一個新的基于文件系統(tǒng)的錢包存儲管理員身份信息。
2)使用已存在的管理員身份注冊普通用戶,將普通用戶的身份信息導入到錢包中,并運行客戶端。
3)通過已注冊的普通用戶身份連接到peer 節(jié)點上,運用3.2.1 節(jié)中創(chuàng)建的通道獲取到已部署好的鏈碼,調(diào)用指定的函數(shù)。
注冊用戶身份信息需要調(diào)用PIP 合約中的UserRegister()函數(shù),如圖4 所示。
圖4 用戶身份注冊Fig.4 User identity registration
以用戶ID為標識,調(diào)用PIP合約的AddResource()函數(shù),上傳共享的物聯(lián)網(wǎng)設備,如圖5 所示。
圖5 物聯(lián)網(wǎng)設備的上傳Fig.5 Upload of IoT devices
調(diào)用 PAP 合約的 AddPolicy()函數(shù),以AddResource()函數(shù)上傳的物聯(lián)網(wǎng)設備信息為主體,為其設置訪問控制策略,如圖6 所示。
圖6 訪問控制策略的設置Fig.6 Setting of access control policy
調(diào)用PIP 合約的DeleteResource()函數(shù),可刪除不再繼續(xù)共享的物聯(lián)網(wǎng)設備,如圖7 所示。
圖7 物聯(lián)網(wǎng)設備的刪除Fig.7 Deletion of IoT devices
PEP 合約的FindResourceByRes_ID()函數(shù)為資源請求者查找需要的物聯(lián)網(wǎng)設備,如圖8 所示。
圖8 可申請設備的查找Fig.8 Finding of available equipment
PEP 合約的GetPermission()函數(shù)根據(jù)資源請求者的屬性信息,判斷其可否獲取該設備的訪問控制權限,如圖9 所示。
圖9 資源擁有者的屬性檢查Fig.9 Property check of resource owner
資源請求者通過PEP 合約的ShowCanUse()函數(shù)查看可使用的資源,如圖10 所示。
圖10 已擁有資源的查看Fig.10 View of already owned resources
資源請求者訪問某物聯(lián)網(wǎng)設備時,通過PEP 合約的UseResource()函數(shù),判斷該設備是否在其已獲取資源列表中,如圖11 所示。
圖11 已獲得物聯(lián)網(wǎng)設備的使用Fig.11 Using of acquired IoT devices
本節(jié)分別對訪問控制策略模型的應用性能及系統(tǒng)性能做了詳細的測試與分析,并且對本文所設計的基于智能合約的物聯(lián)網(wǎng)訪問控制系統(tǒng)與Fabric-IoT在系統(tǒng)性能上進行了對比實驗與分析。
3.4.1 訪問控制策略模型應用測試
本文所設計的系統(tǒng)根據(jù)訪問控制策略模型與用戶在系統(tǒng)中輸入的信息生成對應的訪問控制策略。為測試訪問控制策略的生成速度,本文進行了訪問次數(shù)分別為20 次、50 次、100 次、500 次、1 000 次的并發(fā)訪問實驗,實驗結(jié)果如圖12 所示。
圖12 訪問控制策略生成時間Fig.12 Generation time of access control policy
從圖12 可以看出,在并發(fā)訪問次數(shù)為50 次時,生成訪問控制策略所需時間最長,之后所需時間逐漸下降,在并發(fā)訪問次數(shù)為1 000 次時所需時間最少,說明系統(tǒng)根據(jù)本文所設計的訪問控制策略模型能夠以較低的時延為用戶生成對應的訪問控制策略。
本文中的訪問控制策略模型是一個抽象的存在,系統(tǒng)根據(jù)該模型生成訪問控制策略時,需要將生成的數(shù)據(jù)寫入?yún)^(qū)塊鏈中,每一次寫入都是在重復一次交易提交的過程,因此策略生成的速度會受到該過程的影響,但時延較短,不會影響下一個策略的生成。
3.4.2 系統(tǒng)性能測試與分析
為測試基于智能合約的物聯(lián)網(wǎng)訪問控制系統(tǒng)的使用性能,本文使用hyperledger caliper 作為測試工具,并準備兩組模擬多線程客戶端對系統(tǒng)進行并發(fā)訪問的實驗,請求訪問次數(shù)分別為20次、50次、100次、500 次,第1 組測試寫入數(shù)據(jù)函數(shù)的平均延遲與吞吐量分別如圖13、圖14 所示,第2 組測試查詢數(shù)據(jù)函數(shù)的平均延遲與吞吐量分別如圖15、圖16 所示。
圖13 寫入數(shù)據(jù)函數(shù)的平均延遲Fig.13 Average delay of data writing function
圖14 寫入數(shù)據(jù)函數(shù)的吞吐量Fig.14 Throughput of data writing function
圖15 查詢數(shù)據(jù)函數(shù)的平均延遲Fig.15 Average delay of data querying function
圖16 查詢數(shù)據(jù)函數(shù)的吞吐量Fig.16 Throughput of data querying function
圖13 為寫入數(shù)據(jù)函數(shù)的平均延遲,從圖13 可以看出,寫入數(shù)據(jù)函數(shù)平均延遲穩(wěn)定在0.35 s 以下,并且在請求次數(shù)為500 次時,系統(tǒng)平均延遲最小,說明本文所設計的系統(tǒng)向區(qū)塊鏈中寫入數(shù)據(jù)時具有較低的平均延遲。
寫入數(shù)據(jù)函數(shù)吞吐量的變化如圖14 所示,從圖14可以看出,寫入數(shù)據(jù)函數(shù)的吞吐量在請求次數(shù)為20 次時達到峰值,隨著訪問次數(shù)的增加,吞吐量有稍許的下降,但隨著請求次數(shù)增加,吞吐量逐漸趨于穩(wěn)定。
外部數(shù)據(jù)向超級賬本中寫入時,首先客戶端將數(shù)據(jù)打包成一個新的交易,并向背書節(jié)點發(fā)送寫入數(shù)據(jù)交易,在所有背書節(jié)點模擬執(zhí)行通過并簽名后,返回給客戶端,客戶端向排序節(jié)點提交已經(jīng)模擬執(zhí)行過的交易,排序節(jié)點驗證背書節(jié)點的簽名后,將交易打包至新的區(qū)塊內(nèi),發(fā)送給提交節(jié)點,提交節(jié)點在確認排序結(jié)果后,將新的區(qū)塊加入到區(qū)塊鏈中。每一次的寫入數(shù)據(jù)都會重復此過程,因此寫入數(shù)據(jù)函數(shù)的吞吐量和平均延遲會受到該過程的影響,但仍在可接受的范圍內(nèi)。
圖15 為查詢數(shù)據(jù)函數(shù)的平均延遲,從圖15 可以看出,查詢數(shù)據(jù)的函數(shù)的平均延遲在0.10 s 以下,隨著請求次數(shù)的增加會出現(xiàn)小幅波動,在請求次數(shù)為500 次時,平均延遲達到最低。
圖16為查詢數(shù)據(jù)函數(shù)的吞吐量,從圖16可以看出,查詢數(shù)據(jù)函數(shù)的吞吐量隨著請求次數(shù)的增加呈現(xiàn)上升的趨勢,說明本文所設計的基于智能合約的物聯(lián)網(wǎng)訪問控制系統(tǒng)可以承受較大規(guī)模的訪問請求。
在超級賬本查詢數(shù)據(jù)的過程中,不需要提交新的交易,不會與排序節(jié)點、提交節(jié)點等進行交互。查詢過程是以用戶的身份查詢需要的數(shù)據(jù),不涉及到區(qū)塊的寫入,因此查詢函數(shù)的吞吐量和平均延遲均優(yōu)于寫入數(shù)據(jù)函數(shù)。
上述兩組實驗結(jié)果說明,本文所設計的基于智能合約的物聯(lián)網(wǎng)訪問控制系統(tǒng),在請求次數(shù)不斷上升的過程中能夠以較大的吞吐量和較低的延遲,保證系統(tǒng)的正常使用。
3.4.3 性能對比實驗與分析
本文設計的系統(tǒng)與Fabric-IoT 的性能對比實驗,以本文計算的硬件環(huán)境與軟件環(huán)境為標準,選擇負責訪問控制方法的讀寫函數(shù)作為對比對象,查詢數(shù)據(jù)函數(shù)的吞吐量與延遲時間的對比實驗結(jié)果如圖17和圖18 所示??梢钥闯?,讀寫函數(shù)的性能極其接近,但在寫入數(shù)據(jù)函數(shù)的對比實驗中,本文所設計的系統(tǒng)的吞吐量與平均延遲要優(yōu)于Fabric-IoT。
圖17 吞吐量對比結(jié)果Fig.17 Throughput comparison results
圖18 平均延遲對比結(jié)果Fig.18 Average delay comparison results
圖17 中的AddPolicy()函數(shù)與AddResource()函數(shù)表示本文設計系統(tǒng)的寫入函數(shù)吞吐量,AddURL()函數(shù)與AddStragedy()函數(shù)表示Fabric-IoT 中寫入數(shù)據(jù)函數(shù)的吞吐量,實驗數(shù)據(jù)顯示,本文所設計的系統(tǒng)的寫入數(shù)據(jù)吞吐量要優(yōu)于Fabric-IoT,可以承受較大的流量訪問。
圖18 中的AddURL()函數(shù)與AddStragedy()函數(shù)表示Fabric-IoT 的平均延遲數(shù)據(jù),AddPolicy()函數(shù)與AddResource()函數(shù)表示本文設計的系統(tǒng)寫入數(shù)據(jù)的平均延遲,圖中的實驗數(shù)據(jù)說明本文設計系統(tǒng)的寫入數(shù)據(jù)平均延遲時間要低于Fabric-IoT,并且隨著訪問次數(shù)的增加,平均延遲時間也呈現(xiàn)出穩(wěn)定的趨勢。
本文所設計的基于智能合約的物聯(lián)網(wǎng)訪問控制系統(tǒng)獲取用戶本身的屬性信息作為訪問控制策略中的相關信息,而在Fabric-IoT 中需要物聯(lián)網(wǎng)設備的IP地址與MAC 地址作為訪問控制策略的屬性信息,這兩項參數(shù)在獲取時需要花費一定的時間,該獲取過程會影響Fabric-IoT 寫入數(shù)據(jù)時的吞吐量與平均延遲。對比實驗結(jié)果表明,本文設計的系統(tǒng)在寫入數(shù)據(jù)方面的性能要優(yōu)于Fabric-IoT,在實現(xiàn)細粒度的訪問控制的情況下,可以更好地應用于有大規(guī)模寫入數(shù)據(jù)請求的物聯(lián)網(wǎng)場景。
本文設計并實現(xiàn)一種基于智能合約的物聯(lián)網(wǎng)訪問控制系統(tǒng)。該系統(tǒng)將區(qū)塊鏈技術與訪問控制相結(jié)合,解決了傳統(tǒng)訪問控制中所面臨的中央信任實體問題,提高了訪問控制的可靠性與安全性,并且用戶根據(jù)本文所設計的FACP 訪問控制策略模型,可為每一個物聯(lián)網(wǎng)設備設置訪問控制策略,達到細粒度的訪問控制,防止過度授權、越權訪問等情況的發(fā)生。同時本文采用超級賬本作為執(zhí)行智能合約的區(qū)塊鏈平臺,在保留區(qū)塊鏈特性的情況下,使系統(tǒng)更加靈活。性能測試結(jié)果表明,該系統(tǒng)具有較高的吞吐量、較低的延遲時間及訪問控制策略生成時間,可以滿足較大規(guī)模請求場景的使用需求。下一步將設計一個改進數(shù)據(jù)保護方案保護訪問控制策略,實現(xiàn)物聯(lián)網(wǎng)設備訪問控制策略與其他數(shù)據(jù)的隔離,提高訪問控制策略的隱私性,以防止被他人非法利用。