田秀霞,楊明夷
(上海電力大學 計算機科學與技術學院,上海 201306)
隨著物聯(lián)網(wǎng)(Internet of Things,IoT)技術的日益成熟[1-2],越來越多的居民選擇在家中安裝入侵報警器、遠程監(jiān)控等家庭物聯(lián)網(wǎng)設備,這使得家庭物聯(lián)網(wǎng)數(shù)據(jù)呈爆炸式增長趨勢。根據(jù)Statista 的預測,到2025年,全球出貨的家庭智能設備數(shù)量將達到4.819億臺。通過物聯(lián)網(wǎng)中的智能家居設備[3-4],將采集到的用戶姓名、聯(lián)系地址、聯(lián)系方式等相關數(shù)據(jù)自動提交給電網(wǎng)公司,電網(wǎng)公司再傳到數(shù)據(jù)庫進行保存,并與政府機關(如疫情防控應急管理部門、公安機關等)共享家庭數(shù)據(jù)。由于目前需要存儲并處理海量的家庭數(shù)據(jù),居民用戶和電網(wǎng)公司對數(shù)據(jù)安全存儲和高效查詢的需求越來越大。電網(wǎng)公司需要通過隨時隨地按需使用數(shù)據(jù)庫中的資源信息,并將其安全高效地共享給政府機關或公共服務部門,以此在家庭物聯(lián)網(wǎng)中為居民建立一個安全可靠的生活環(huán)境。然而,家庭物聯(lián)網(wǎng)對未經(jīng)授權訪問的漏洞會使居民的財產(chǎn)和安全處于危險之中[5-6]。2020 年12 月,英國能源供應商People's Energy 發(fā)生重大數(shù)據(jù)泄露事件,整個數(shù)據(jù)庫被黑客竊取,使所有270 000 名客戶的信息被盜取,包括用戶姓名、聯(lián)系地址、出生日期、電話號碼、關稅和電表ID。因此,如何設計安全高效的訪問控制機制來確保家庭數(shù)據(jù)的安全共享是國內(nèi)外相關學者需要考慮的重要問題[7-8]。
目前,研究人員已經(jīng)提出了多種面向家庭物聯(lián)網(wǎng)數(shù)據(jù)安全性的訪問控制方案。文獻[9]提出一種基于區(qū)塊鏈的分布式訪問控制方案,其創(chuàng)建一個智能合約來定義管理系統(tǒng)的策略規(guī)則,以實時對設備提供訪問控制信息,同時幫助物聯(lián)網(wǎng)建立一個去中心化、可信且可公開驗證的數(shù)據(jù)庫,使得億萬互聯(lián)的事物實現(xiàn)分布式信任。但是,對于家庭物聯(lián)網(wǎng)中的海量數(shù)據(jù),該系統(tǒng)維護難度極大,電網(wǎng)公司難以承受其巨大的系統(tǒng)開銷。為了能夠處理家庭中的動態(tài)數(shù)據(jù),文獻[10]提出基于以太坊的數(shù)據(jù)共享和訪問控制系統(tǒng),其設計多個智能合約來對網(wǎng)絡用戶進行高效、安全、授權和基于信任的訪問管理。該系統(tǒng)雖然支持高效的數(shù)據(jù)共享,但是每執(zhí)行一個命令都要消耗Gas(交易費),這將造成較大的開銷,因此并不能滿足居民用戶和電網(wǎng)公司的需求。
本文提出一種基于Hyperledger Fabric 的家庭物聯(lián)網(wǎng)訪問控制機制ACHF(Access Control Mechanism Based on Hyperledger Fabric for Home IoT)。以基于屬性的訪問控制(Attribute-Based Access Control,ABAC)模型為基礎并進行改進,使用統(tǒng)一的可擴展訪問控制標記語言(eXtensible Access Control Markup Language,XACML)標準來描述家庭物聯(lián)網(wǎng)環(huán)境下的訪問控制策略,同時設計分組策略檢索算法以提高策略的檢索效率,最后基于智能家居實例,對ACHF 的可追溯性、自主性、細粒度檢索、高效動態(tài)訪問等方面進行分析與評估。
區(qū)塊鏈技術是比特幣等現(xiàn)代加密貨幣系統(tǒng)的核心[11],其本質(zhì)上是P2P 網(wǎng)絡管理的分布式數(shù)據(jù)庫,網(wǎng)絡中所有的對等節(jié)點需要維護相同的區(qū)塊鏈副本,并同步更新區(qū)塊鏈。盡管區(qū)塊鏈最初是作為分布式數(shù)據(jù)庫而開發(fā)的,但是由于出現(xiàn)了一種稱為智能合約的新功能,因此目前已發(fā)展為一個分布式計算平臺,這種新型區(qū)塊鏈最具代表性的實現(xiàn)是超級賬本[12-13]。與公有區(qū)塊鏈相比,Hyperledger Fabric 作為聯(lián)盟鏈,能執(zhí)行更高效且低成本的共識算法。
在Hyperledger Fabric 中,將數(shù)據(jù)以事務的形式打包成區(qū)塊并存放在區(qū)塊鏈中,該區(qū)塊格式如圖1 所示,其中,B 表示區(qū)塊鏈賬本,區(qū)塊B1 包括區(qū)塊頭部H1、區(qū)塊數(shù)據(jù)D1 和區(qū)塊元數(shù)據(jù)M1。H1 由區(qū)塊數(shù)量、當前區(qū)塊和前一區(qū)塊的哈希值組成。M1 包括創(chuàng)建區(qū)塊的時間以及客戶端的身份證書、公鑰和簽名。D1 包括創(chuàng)建區(qū)塊時的交易。例如,交易T3包括交易頭H3、簽名S3、交易提案P3,交易提案返回R3 和背書E3。H3 中包括鏈碼的名稱、版本等重要數(shù)據(jù)。S3 包括由客戶端創(chuàng)建并由用戶私鑰生成的加密簽名。P3 包括客戶端發(fā)起交易的請求參數(shù)。R3 包括背書節(jié)點返回的讀寫集,該數(shù)據(jù)集合作為模擬提案的結(jié)果,如果交易驗證通過,這些數(shù)據(jù)會被用于更新世界狀態(tài)。E3 是指交易的背書,通常返回一次會對應多個背書。
圖1 區(qū)塊結(jié)構(gòu)Fig.1 Block structure
區(qū)塊鏈中的智能合約是一個可執(zhí)行程序,與交易一樣存儲在區(qū)塊鏈上。智能合約使用變量作為其狀態(tài)和函數(shù),稱為應用程序二進制接口(Application Binary Interface,ABI),用于查看和更改狀態(tài)[14]。要執(zhí)行智能合約,需要發(fā)送事務并將其廣播到P2P 網(wǎng)絡。所有接收此交易的對等節(jié)點將執(zhí)行合約內(nèi)容,以確保執(zhí)行結(jié)果的有效性。因此,通過智能合約功能,區(qū)塊鏈技術可以進一步實現(xiàn)分布式和防篡改計算。
為了解決家庭物聯(lián)網(wǎng)中的訪問控制問題,文獻[15]采用類似比特幣的區(qū)塊鏈來設計基于訪問控制列表(Access Control Lists,ACL)的訪問控制方案。在每個家庭中應用區(qū)塊鏈來維護ACL,其中,每個條目對應一個內(nèi)部或外部主體、一個內(nèi)部資源以及被允許的訪問權限。每個家庭內(nèi)部的訪問控制由內(nèi)部礦工執(zhí)行,該礦工充當網(wǎng)關接收來自主體的訪問請求。然而,礦工的存在導致每個家庭內(nèi)部的集中訪問控制,這會帶來單點故障問題。為此,文獻[16]通過應用以太坊智能合約存儲ACL,并提出一個基于ACL 的訪問控制框架,在該框架中,每個主體-資源對使用一個智能合約來實現(xiàn)相關的訪問控制。當訪問資源時,主體發(fā)送一個包含所需訪問信息的事務,以執(zhí)行相應的智能合約,最后自動向主體和資源返回結(jié)果(允許或拒絕)。然而,由于一個合約只負責一個主體-資源對的訪問控制,因此該方案在部署合約時會存在巨大的金錢成本,特別是在大規(guī)模家庭物聯(lián)網(wǎng)中,系統(tǒng)開銷更大。為解決該問題,文獻[17]設計一個基于角色的訪問控制(Role-Based Access Control,RBAC)方案,其部署一個智能合約來維護RBAC 模型中分配給每個用戶的角色,以便任何服務提供商都可以在提供服務時驗證用戶對角色的所有權。但是,在用戶和資源數(shù)量巨大的家庭物聯(lián)網(wǎng)環(huán)境下,該系統(tǒng)的維護難度將大幅提高。
文獻[18]提出ABAC 方案,其中,ABAC 策略的統(tǒng)一資源定位器(Uniform Resource Locator,URL)鏈接存儲在區(qū)塊鏈上,并部署一個智能合約接收主體的訪問請求,然后執(zhí)行訪問控制。但是,該方案的主要局限性在于將策略和屬性存儲在外部數(shù)據(jù)庫中,這使得信息容易受到篡改攻擊,無法保證策略和屬性的可信度,此外,該文沒有提供實現(xiàn),因此方案的可行性未知。文獻[19]對文獻[18]方案進行改進,提出一個基于智能合約的框架,該框架由多個訪問控制合約、一個注冊合約和一個判決合約組成,以實現(xiàn)物聯(lián)網(wǎng)系統(tǒng)的分布式訪問控制,并通過以太坊平臺進行案例研究以演示該框架的應用。
雖然以太坊的部署較為簡單,但其擴展性較差,智能合約必須使用固定的、非標準的或特定領域的語言編寫,并需要借助貨幣獎勵礦工來防止攻擊,而超級賬本無須借助代幣,其低成本的優(yōu)勢更適合應用于企業(yè)間的業(yè)務。因此,文獻[20]提出一個基于Hyperledger Fabric 許可鏈的ABAC 框架,但是其只將屬性信息存儲在區(qū)塊鏈上,沒有使用智能合約來處理訪問請求。于是,文獻[21]對文獻[20]框架進行改進,在Hyperledger Fabric 平臺上使用3 個智能合約(分別為設備合約、策略合約和訪問合約)來進行實現(xiàn),但是,其沒有給出事務的數(shù)據(jù)格式與工作流程,且策略的檢索效率較低。
綜上,目前針對家庭物聯(lián)網(wǎng)中的訪問控制研究仍處于起步階段,需要在訪問控制的效率和動態(tài)細粒度檢索方面進行改進。本文通過在Hyperledger Fabric 聯(lián)盟鏈上設計3 個智能合約來實現(xiàn)ABAC 模型,并構(gòu)造一種分組策略檢索算法來縮短策略檢索的時間,同時給出事務的數(shù)據(jù)格式與工作流程。
本文設計的訪問控制機制體系架構(gòu)如圖2 所示,該系統(tǒng)架構(gòu)可分為3 層,從左往右分別為數(shù)據(jù)層、服務層、應用層。
圖2 系統(tǒng)架構(gòu)Fig.2 System architecture
各層信息具體如下:
1)數(shù)據(jù)層。將分布式存儲在不同地理位置上的數(shù)據(jù)資源以事務的形式存儲在區(qū)塊鏈上,該數(shù)據(jù)包括屬性信息、屬性間的關系、訪問控制策略、智能合約、資源URL 等信息。
2)服務層。服務層由單個組件組成,這些組件共同處理數(shù)據(jù)層中的數(shù)據(jù)訪問請求,同時對請求的數(shù)據(jù)和標記的數(shù)據(jù)執(zhí)行計算,并實時監(jiān)控對數(shù)據(jù)執(zhí)行的每個操作,然后將所有的操作結(jié)果都廣播到一個區(qū)塊鏈網(wǎng)絡中,使其不可被修改,以保證公平地審計。此外,該層負責驗證訪問資源過程中的每一個請求和操作。服務層包括以下模塊:
(1)驗證機制。許可鏈中的可信機構(gòu)MSP 負責維護系統(tǒng)中所有節(jié)點的身份,頒發(fā)用于身份驗證和授權的節(jié)點憑據(jù),默認實現(xiàn)基于數(shù)字簽名認證的標準PKI 方法,并在確認了平臺許可的參與者身份后將其加入?yún)^(qū)塊鏈網(wǎng)絡中。
(2)共識機制。通過共識算法,使區(qū)塊鏈系統(tǒng)中所有的參與者和節(jié)點間的各種數(shù)據(jù)達成一致,從而保證區(qū)塊鏈的可信度。
(3)智能合約。在區(qū)塊鏈中使用智能合約技術取代傳統(tǒng)ABAC 訪問控制模塊進行邏輯操作,包括3 種合約:策略信息合約用于查詢實體屬性信息和屬性間的關系;策略管理合約用于管理訪問控制策略,并對策略規(guī)則進行編碼和分組;策略判決合約用于判決訪問控制請求。
(4)區(qū)塊鏈網(wǎng)絡。許可區(qū)塊鏈Hyperledger Fabric是一個分布式操作系統(tǒng),用于執(zhí)行由通用編程語言(如Go、Java、Node.js)編寫的分布式應用程序,且僅在復制的賬本數(shù)據(jù)結(jié)構(gòu)中安全地追蹤溯源其歷史操作記錄,并不使用加密貨幣。
3)應用層。為不同類型的用戶提供相應的功能,如查詢操作,事務的創(chuàng)建、更新、撤銷操作等。
本文對傳統(tǒng)ABAC 模型進行改進[22],將訪問控制技術與區(qū)塊鏈技術相結(jié)合,提出一種ACHF 框架,如圖3 所示,該框架包括策略執(zhí)行點(Policy Enforcement Point,PEP)客戶端、策略管理點(Policy Administration Point,PAP)合約、策略判決點(Policy Decision Point,PDP)合約、策略信息點(Policy Information Point,PIP)合約。
圖3 ACHF 框架Fig.3 ACHF framework
圖3 中的虛線部分是進行訪問請求前的準備操作,具體如下:
1)PIP 合約負責存儲從云端服務器接收到的設備資源URL,并管理區(qū)塊鏈事務中的屬性信息,使得PAP合約與PDP 合約可以進行屬性和資源信息查詢。
2)PAP 合約需要管理訪問控制策略信息、對策略集中的每條規(guī)則使用二進制位進行編碼,并完成哈希加密。
圖3 中的實線部分是判斷訪問請求時的執(zhí)行操作,具體如下:
1)當PEP 客戶端收到用戶提交的訪問請求時,先通過PIP 合約解析屬性數(shù)據(jù)字段,生成基于屬性的訪問控制請求,再將其發(fā)送給PDP 合約。如果資源請求者不希望公開請求,則PEP 客戶端會使用資源擁有者的公鑰對該請求進行加密。
2)PDP 合約會根據(jù)收到的基于屬性的訪問控制請求,自動生成一個二進制編碼,并用sha256 進行加密得到一個哈希值,然后通過PAP 合約進行策略信息查詢,對查詢結(jié)果做一個判決,同時用資源請求者的公鑰對判決結(jié)果與資源URL 進行加密。
3)PDP 合約將加密后的判決結(jié)果(允許或拒絕訪問)和URL 地址返回給PEP 客戶端,PEP 客戶端會根據(jù)判決結(jié)果來決定是否同意用戶的訪問請求。
為了便于敘述,給出如下定義:
定義1屬性(Attr)是具有指定數(shù)據(jù)類型和值域的變量,本文使用xAttr,x∈{Sub,Res,Ac,En}分別表示主體屬性、資源屬性、操作屬性和環(huán)境屬性。用xAttrValue,x∈{Sub,Res,Ac,En}分別表示主體、資源、操作和環(huán)境的屬性值范圍。用xAttrSet,x∈{Sub,Res,Ac,En}分別表示主體、資源、操作和環(huán)境的屬性集。用xAttrTuple,x∈{Sub,Res,Ac,En}表示屬性名和屬性值之間的關系,分別表示主體、資源、操作和環(huán)境的屬性名值對。用xAttrTupleSet,x∈{Sub,Res,Ac,En}分別表示主體、資源、操作和環(huán)境的屬性名值對集合。
定義2訪問控制策略包括對資源進行特定操作所需要的屬性集合,用三元組Policy←
定義3基于屬性的訪問請求(AAR)由一組主體、資源、操作和環(huán)境的屬性名值對集合構(gòu)成,用四元組表示為AAR=
3.1.1 事務的數(shù)據(jù)格式
本文在區(qū)塊鏈中以事務的形式執(zhí)行訪問控制策略,該事務的數(shù)據(jù)格式如圖4 所示。其中:clientID 表示事務發(fā)布者的編號;chaincodeID 表示事務調(diào)用的智能合約編號;publicKey 表示事務發(fā)布者的公鑰;txType 表示事務類型,包括屬性事務attrTx、策略事務policyTx;txPayLoad 表示事務的具體數(shù)據(jù),包括屬性事務數(shù)據(jù)attrData、策略事務哈希txHash 及相應的URL;operType 表示操作類型,包括創(chuàng)建、撤銷和更新;timestamp 表示創(chuàng)建事務的時間戳;clientSig 表示發(fā)布者對事務數(shù)據(jù)的簽名。
圖4 事務的數(shù)據(jù)格式Fig.4 Data format of transaction
在區(qū)塊鏈中,無論對策略事務執(zhí)行哪類操作以及執(zhí)行多少次,該操作的歷史記錄都將永遠保留在鏈中,不可被修改,以便日后審計能掌握整個訪問控制動態(tài),并驗證PIP、PAP 和PDP 合約是否完全按照訪問控制策略對資源進行授權訪問,從而杜絕錯誤授權或過度授權的問題。
3.1.2 事務的工作流程
如圖5所示,對等節(jié)點接收事務的工作過程可分為4個階段:提交交易預案;背書節(jié)點處理并返回響應結(jié)果;發(fā)送結(jié)果給排序節(jié)點進行處理;交易提交并更新賬本。
圖5 事務的工作流程Fig.5 Workflow of transaction
事務工作流程中的4 個階段具體如下:
1)提交交易預案。客戶端按照圖4 的數(shù)據(jù)格式發(fā)起一個事務交易tx=
2)背書節(jié)點處理并返回響應結(jié)果。背書節(jié)點收到tx 后,先驗證clientSig 是否合法,再評估簽名者是否有權參與此次交易。若兩者均合法,背書節(jié)點會通過執(zhí)行chaincodeID 對應的鏈碼來進行模擬提案。然后,每個背書節(jié)點都會生成一個讀寫集Read/Write_Set,作為該提案的模擬執(zhí)行結(jié)果,并將簽名EndorSig 一并發(fā)回客戶端。
3)發(fā)送結(jié)果給排序節(jié)點進行處理??蛻舳耸盏奖硶憫猂esponse=
4)交易提交并更新賬本。排序節(jié)點會自動將背書廣播給通道中的所有成員,包括記賬節(jié)點CP1 以及背書節(jié)點EP1、EP2 和EP3,從而建立交易共識。所有節(jié)點收到交易數(shù)據(jù)塊后,先檢查tx 和EndorSig的合法性,然后判斷背書數(shù)量是否符合背書策略的條件,再校驗交易的Read/Write_Set 與當前賬本是否一致。如果結(jié)果一致,則表示交易的寫入集是有效的,將其更新到狀態(tài)數(shù)據(jù)庫中,同時觸發(fā)一個事件通知客戶端其發(fā)起的交易已被寫入?yún)^(qū)塊鏈中。
通過以上流程,將數(shù)據(jù)以事務的形式存儲在Hyperledger Fabric 許可鏈中,使其具有可追溯性、透明性和可靠性。
目前對基于XACML 訪問控制策略的評估需要遍歷所有策略才能做出判斷,因此,為了提高策略的檢索效率,本文設計二進制編碼和哈希算法,構(gòu)造一種分組策略檢索算法。將ABAC 模型中所有屬性的個數(shù)作為二進制編碼的總位數(shù)N,每位取值為0 或1,其中,0 表示不包含該屬性,1 表示含有該屬性。因此,策略集中的每條規(guī)則均可以表示為二進制編碼的形式,并將該編碼作為組號使用,具有相同組號的規(guī)則合并成一組。
策略集的分組如圖6 所示,根節(jié)點表示策略集的所有規(guī)則信息RuleSet,每條規(guī)則R中又有若干個屬性。除第一級的根節(jié)點外,每個節(jié)點都表示一個組,若策略集中的某條規(guī)則不包含第一個屬性,則暫時并入組號為011…111 的組中,再依次判斷后面的屬性是否存在,最終確定該規(guī)則的二進制編碼,即組號。具有相同二進制編碼的規(guī)則位于同一組中,規(guī)則組的數(shù)量由策略的復雜性決定,最多可分為2N-1 組。
圖6 策略集分組Fig.6 Policy set grouping
通過對ABAC 策略規(guī)則進行二進制編碼將其分為多個組,可以在搜索策略時過濾掉大量不相關的策略,從而縮短策略檢索的時間。但是,在規(guī)則組中檢索時,需要將所有規(guī)則的每個屬性值xAttrTuple(x∈{Sub,Res,Ac,En})依次與AAR 的屬性值進行匹配,檢索時最壞的情況是每次檢測到規(guī)則的最后一個屬性時發(fā)現(xiàn)不匹配,如果此類規(guī)則太多,則檢索策略的效率較低。因此,本文對訪問控制策略的4 個屬性ID 進行sha256 的哈希加密,在找到匹配的規(guī)則組后,只需比較訪問請求和訪問控制策略的哈希值,以此來減少策略檢索的時間。
對于本文分組策略檢索算法,作如下定義:
定義4(二進制編碼規(guī)則)將所有屬性按照特定的順序排列,屬性中包含的屬性值也需要按照特定的順序排列,形成一個大的屬性數(shù)組。如果規(guī)則中出現(xiàn)了特定的屬性,則相應的位置設為1。
定義5(群組選擇原則)對基于屬性的訪問控制請求AAR 執(zhí)行二進制編碼,并將其與規(guī)則組的組號進行邏輯或操作。若計算結(jié)果與AAR 的二進制編碼一致,則為合適規(guī)則組。
定義6(規(guī)則選擇原則)將AAR 的哈希值與策略規(guī)則的哈希值進行比較,如果結(jié)果相等,則該規(guī)則滿足要求。
本文所提機制使用智能合約技術,為系統(tǒng)提供相關屬性查詢及策略管理或判決服務。其中,PIP 合約提供資源URL 以及屬性信息查詢,PAP 合約提供策略信息管理,并對策略規(guī)則進行編碼和哈希運算,PDP 合約提供策略判決服務。
3.3.1 策略信息點PIP 合約
傳統(tǒng)ABAC 模型中的策略信息點PIP 只負責提供實體的屬性信息,本文為了確保屬性間關系的可信度,將屬性信息和屬性間的關系都以事務的形式存儲在區(qū)塊鏈中,同時PIP 還負責管理資源URL 地址,并分別為PAP 和PDP 提供屬性信息和資源地址的查詢服務。PIP 合約的偽代碼如算法1 所示。
算法1策略信息合約PIP
3.3.2 策略管理點PAP 合約
傳統(tǒng)ABAC 模型中的策略管理點PAP 只負責管理訪問控制策略規(guī)則,本文為了確保策略的共享性和可信度,不僅使用標準XACML 體系結(jié)構(gòu)細粒度地描述訪問控制策略,并按上述的數(shù)據(jù)格式封裝后存儲在區(qū)塊鏈中,同時還為PDP 提供策略集中每條規(guī)則的二進制編碼和哈希值。
PAP 合約的偽代碼如算法2 所示,其中,管理訪問控制策略這一功能包含4 個ABI,分別為添加策略AddPolicy()、查詢策略QueryPolicy()、更新策略UpdatePolicy()和刪除策略DeletePolicy(),其功能代碼與管理URL 地址相類似,此處不做贅述。
算法2策略管理合約 PAP
3.3.3 策略判決點PDP 合約
傳統(tǒng)ABAC 模型中的策略判定點PDP 只負責對訪問控制策略進行判決,本文結(jié)合所設計的分組策略檢索算法,策略判決點PDP 合約具體流程為:首先,PDP 會根據(jù)收到的AAR 自動生成一個二進制編碼,并用sha256 加密得到一個哈希值;然后,將AAR的二進制編碼與規(guī)則組的組號做“或運算”,找到與其結(jié)果相同的規(guī)則組,再依次比較規(guī)則組中策略的哈希值。當返回結(jié)果均不為空時,調(diào)用PAP 的QueryPolicy()ABI,判斷訪問請求的環(huán)境屬性是否滿足要求,即申請訪問時生成的時間戳的值不能大于策略規(guī)則中的截止時間,以此來解決一次授權多次訪問的問題。如果所有屬性均符合策略,則驗證通過,最后調(diào)用PIP 的GetURL()ABI 獲取資源URL并返回給用戶,否則,返回相應的報錯信息。PDP 合約的偽代碼如算法3 所示。
算法3策略判決合約 PDP
本文結(jié)合智能家居場景提供一個具體的案例分析。首先介紹實驗環(huán)境配置,然后詳細闡述訪問實現(xiàn)的具體流程,最后對本文機制進行評估,并將其與其他相關方案作比較,以此來分析該機制在家庭物聯(lián)網(wǎng)環(huán)境下的性能優(yōu)勢。
本文實驗在兩臺PC 機上進行,硬件(上半部分)和軟件(下半部分)環(huán)境配置如表1 所示。
表1 實驗環(huán)境Table 1 Experimental environment
在家庭物聯(lián)網(wǎng)中,每個參與者都處于不同的地理位置,并且具有互惠互利的關系,這使得每個參與者要時時共享數(shù)據(jù)來獲取所需的信息,但是,參與者在鏈中的角色不同,導致無法共享所有的數(shù)據(jù)。因此,每個參與者應根據(jù)自身的安全需求來制定相應的訪問控制策略。同時,智能家居數(shù)據(jù)具有一定的普遍性,并且包含大量具有相同屬性的主體和資源信息,本文所設計的機制適用于此類場景。如圖7所示,電網(wǎng)公司C、普通用戶U 和政府機關G 將屬性信息和訪問控制策略存放在共同維護的區(qū)塊鏈中。
圖7 區(qū)塊鏈中參與者的關系Fig.7 Relationship of participants in the blockchain
電網(wǎng)公司C、普通用戶U 和政府機關G 都能在Hyperledger Fabric 平臺上通過各自的終端設備請求服務,因此,可以構(gòu)造相關的屬性信息。在本例中,定義屬性順序為:主體屬性SubAttr 包括1~3 號屬性項;資源屬性ResAttr包括4~6 號屬性項;操作屬性AcAttr包括7~8 號屬性項;環(huán)境屬性EnAttr 包括9~12 號屬性項,如表2 所示。同時,主體編號、資源編號、操作編號和環(huán)境編號為主鍵且不能為空。如上所述,單個規(guī)則中屬性的個數(shù)為12,因此,使用12 個二進制位對策略進行編碼,并利用其屬性信息來構(gòu)造ABAC 策略。其中,定義的屬性值順序為主體屬性值SubAttrValue、資源屬性值ResAttrValue、操作屬性值AcAttrValue、環(huán)境屬性值 EnAttrValue,并用policyBinarycode 表示策略哈希值。當PAP 對策略集的每個規(guī)則執(zhí)行二進制編碼后,也會對相應規(guī)則的subId、resId、acId 和enId 進行sha256 的哈希加密。
表2 屬性信息Table 2 Attribute information
若某一政府機關G 想讀取某個智能門鎖資源,則進行以下操作:
1)將原始請求發(fā)送給G 的客戶端PEP,PEP 調(diào)用PIP 合約請求查詢屬性信息,然后根據(jù)PIP 合約返回的屬性結(jié)果集將原始申請構(gòu)造為AAR。
2)如果G 不希望公開請求,則使用電網(wǎng)公司C 的公鑰對該AAR 進行加密,并按照第3.1.1 節(jié)的事務格式將加密后的AAR 進行封裝并在區(qū)塊鏈網(wǎng)絡中廣播。
3)區(qū)塊鏈中的背書節(jié)點負責模擬執(zhí)行該事務tx,將執(zhí)行結(jié)果Read/Write_Set 返回給客戶端,客戶端收到背書響應Response 后將該事務提交給排序服務,排序節(jié)點會對其進行排序分類,并將該事務打包成數(shù)據(jù)塊后進行廣播。
4)C 收到該事務后調(diào)用PDP 合約,PDP 合約會先根據(jù)該AAR 生成一個二進制編碼和一個哈希值,然后調(diào)用PAP 合約查詢策略信息,通過二進制編碼找到相匹配的規(guī)則組,再依次比較哈希值,找到滿足要求的策略規(guī)則后,判斷AAR 中時間戳的值是否大于規(guī)則中截止時間的值。如果驗證均通過,則判決結(jié)果為允許訪問,如圖8 所示。
圖8 允許訪問Fig.8 Allow access
5)C 用G 的公鑰來加密所請求的資源URL,將其與G 的公鑰和訪問控制結(jié)果一起封裝為事務,在區(qū)塊鏈網(wǎng)絡中進行廣播,鏈中所有成員會驗證事務并更新賬本,同時觸發(fā)一個事件通知G,G 收到響應后解析訪問結(jié)果和URL 密文,通過瀏覽器訪問解密的URL 鏈接中的資源信息。
6)如圖9 所示,如果判決結(jié)果為拒絕訪問,則電網(wǎng)公司C 把所有數(shù)據(jù)封裝為事務并在區(qū)塊鏈網(wǎng)絡中進行廣播,其中資源URL 為空。鏈中的所有成員會驗證事務,并觸發(fā)一個事件通知政府機關G,內(nèi)容是背書策略拒絕了其訪問申請。
圖9 拒絕訪問Fig.9 Deny access
為了保護家庭物聯(lián)網(wǎng)中的數(shù)據(jù)安全,本文所提機制首先需要滿足美國國家標準與技術研究院(National Institute of Standards and Technology,NIST)定義的3 項安全要求,即機密性、完整性和可用性[23]:
1)機密性。本文機制規(guī)定所有用戶節(jié)點必須得到授權后才能加入?yún)^(qū)塊鏈網(wǎng)絡中、賬本只能在同一組織間共享,并嚴格設置了用戶對實體資源的訪問權限,從而確保只有授權實體才能訪問信息。
2)完整性。根據(jù)第3.1.1 節(jié)設計的事務數(shù)據(jù)格式以及第3.1.2 節(jié)闡述的事務工作流程,表明每次執(zhí)行事務操作時都需要區(qū)塊鏈通道中的所有成員對其進行驗證并簽名,從而確保消息在傳輸過程中不被篡改。
3)可用性。第4.2 節(jié)的案例實現(xiàn)證明當用戶需要服務或數(shù)據(jù)時,本文所提機制具有可用性。
除以上3 項基本安全要求外,本文機制還可以抵抗與家庭物聯(lián)網(wǎng)相關的安全攻擊[24-25],具體如下:
1)分布式拒絕服務(Distributed Denial of Service,DDoS)攻擊。本文機制繼承了比特幣和以太坊抵御DDoS 攻擊的解決方案,如限制事務交易中的區(qū)塊大小和簽名次數(shù)。
2)修改攻擊。假設攻擊者修改了廣播的事務或返回的數(shù)據(jù),那么通過驗證簽名的合法性、比較背書策略的條件,該操作將被發(fā)現(xiàn)并拒絕。
3)重放攻擊。本文機制設計了一個時間戳,在用戶提交訪問請求時會自動生成,其值只有不大于策略規(guī)則中的截止時間才可以被允許訪問資源,以此來解決一次授權多次訪問的問題。
4)其他攻擊。由于Hyperledger Fabric 中證書授權機構(gòu)(Certificate Authority,CA)的存在,只有在相應組織中獲取證書的用戶才可以順利訪問。此外,即使惡意用戶可以向區(qū)塊鏈發(fā)送訪問請求,通過設計訪問控制機制,其屬性也無法與策略相匹配,因此,將無法獲得請求的資源。
4.4.1 ACHF 性能測試與分析
本文基于XACML 提供的標準策略一致性測試包中的屬性集和策略集來進行測試,將策略樣本擴充為2 400、4 800、7 200、9 600 和12 000 條規(guī)則,以此映射家庭物聯(lián)網(wǎng)中不斷增加的用戶和設備,并構(gòu)造2 000、4 000、6 000、8 000 和10 000 個不同的并發(fā)請求進行測試。本次測試使用的數(shù)據(jù)庫為CouchDB,排序服務為kafka,并依賴于zookeeper。
固定并發(fā)請求數(shù)量為10 000,在不同的策略樣本下,分別調(diào)用AddPolicy()、DeletePolicy()、UpdatePolicy()和QueryPolicy()ABI 并測試其性能,結(jié)果如圖10 所示。由圖10(a)可知,隨著策略規(guī)則數(shù)量的大幅增加,調(diào)用ABI 花費的總時間也會相應增多,但總體變化不明顯。由圖10(b)可知,在相同的策略規(guī)則數(shù)量下,添加和刪除策略ABI 的吞吐量比更新和查詢策略ABI 的吞吐量更大,因此,前者的性能效率更高,而隨著策略規(guī)則數(shù)量的增加,這4 個ABI 的吞吐量性能指標會趨于平穩(wěn),表明其在管理訪問控制策略方面具有良好的性能。
圖10 策略函數(shù)性能對比Fig.10 Policy function performance comparison
在不同的策略規(guī)則數(shù)量下,分別構(gòu)造不同數(shù)量的并發(fā)請求,測試AccessControl()ABI 的性能,結(jié)果如圖11 所示。由圖11(a)可知,在相同的訪問數(shù)量、不同的策略數(shù)量下,訪問控制花費的時間增多但相差不大,然而,隨著并發(fā)訪問數(shù)量的增加,該ABI 花費的時間呈線性增加。由圖11(b)可知,在相同的策略數(shù)量、不同的訪問數(shù)量下,訪問控制的吞吐量幾乎一致,然而,隨著策略規(guī)則數(shù)量的增加,該ABI 的吞吐量緩慢下降,最后趨于平穩(wěn),表明其在訪問控制判決方面具有良好的性能。
圖11 策略判決性能測試結(jié)果Fig.11 Policy decision performance test results
4.4.2 性能對比與分析
本文對比實驗構(gòu)造30、60、150 和600 個不同的并發(fā)請求進行測試,并從策略檢索時間方面分析分組策略檢索算法的效率,結(jié)果如圖12 所示。從圖12可以看出,隨著訪問數(shù)量的增加,兩種策略的時間開銷都呈上升趨勢,但是本文策略的高效動態(tài)性特點更加顯著。
圖12 策略檢索時間對比Fig.12 Policies retrieval time comparison
將本文方案與相關方案進行比較,結(jié)果如表3所示。文獻[15]提出基于比特幣的家庭物聯(lián)網(wǎng)框架,其研究并概述了智能家居中的各種核心組件,但該方案不支持可追溯性、自主性、細粒度和高效動態(tài)訪問。文獻[16]提出一種基于以太坊的訪問控制框架,該框架通過預定義的訪問控制策略實現(xiàn)靜態(tài)訪問驗證,并通過檢查主體的行為來實現(xiàn)動態(tài)訪問驗證,雖然其支持可追溯性和動態(tài)訪問,但是沒有自主性、細粒度檢索且動態(tài)訪問的效率不高。文獻[26]提出一個基于屬性的訪問控制和通信控制框架,以確保家庭物聯(lián)網(wǎng)體系結(jié)構(gòu)中不同實體之間的訪問和通信安全,雖然其具有自主性,但是沒有可追溯性、細粒度和高效動態(tài)訪問。文獻[21]提出基于超級賬本和ABAC 模型的訪問控制系統(tǒng),并介紹了網(wǎng)絡初始化、鏈碼安裝和智能合約調(diào)用,該系統(tǒng)雖然支持可追溯性、自主性和細粒度檢索,但動態(tài)訪問效率偏低。本文引入超級賬本來保證整個訪問過程的可追溯性,由于鏈中的每個參與者都可以根據(jù)自身的安全需求自主制定相應的訪問控制策略,保證了其自主性,此外,本文方案基于ABAC 模型實現(xiàn)細粒度的權限控制,同時設計分組策略檢索算法來實現(xiàn)高效動態(tài)訪問,縮短了數(shù)據(jù)檢索的時間。
表3 不同方案的性能對比結(jié)果Table 3 Performance comparison results of different schemes
將本文ACHF 機制與文獻[21]中提出的基于區(qū)塊鏈的物聯(lián)網(wǎng)訪問控制系統(tǒng)(Fabric-IoT)、文獻[27]中提出的基于層級區(qū)塊鏈的物聯(lián)網(wǎng)分布式體系架構(gòu)(DAHB)以及文獻[28]中提出的基于區(qū)塊鏈的IoT訪問控制系統(tǒng)(BBIAC)進行性能對比實驗,結(jié)果如圖13 所示,以表1 的硬件和軟件環(huán)境為標準,選擇訪問控制函數(shù)作為比較對象。從圖13 可以看出,本文所提機制的吞吐量優(yōu)于其他3 種訪問控制方案,更適合大規(guī)模家庭物聯(lián)網(wǎng)環(huán)境下的訪問請求場景。
圖13 4 種方案的吞吐量對比Fig.13 Throughput comparison of four schemes
本文提出一種家庭物聯(lián)網(wǎng)訪問控制機制ACHF,該機制將智能合約技術與ABAC 模型相結(jié)合,解決了集中式訪問控制存在的單點故障和策略判決中心化的問題,同時使用URL 地址讀取數(shù)據(jù)資源以減輕鏈上存儲大量數(shù)據(jù)區(qū)塊的負擔并簡化數(shù)據(jù)共享的方式。通過區(qū)塊鏈事務管理訪問控制策略,數(shù)據(jù)具有不可偽造性、防篡改性、可追溯性的特點,并提出對策略的標準化定義,遵循標準XACML 體系結(jié)構(gòu),提高了互操作性,同時設計分組策略檢索算法,有效縮短了處理訪問請求的響應時間。借助Hyperledger Fabric 聯(lián)盟鏈平臺實現(xiàn)ACHF 機制,并將其與相關方案進行對比,實驗結(jié)果表明,在包含大量具有相同屬性的主體和資源的家庭物聯(lián)網(wǎng)環(huán)境下,ACHF 機制能有效保障數(shù)據(jù)安全和用戶自主權,同時實現(xiàn)高效動態(tài)、細粒度的訪問控制,可以提高系統(tǒng)的靈活性、可擴展性和處理能力。由于本文ACHF 機制中的屬性信息都是以明文形式進行存儲的,因此下一步將對屬性信息的加密方式進行研究,在保證用戶數(shù)據(jù)隱私的情況下實現(xiàn)更安全高效且動態(tài)細粒度的訪問。