楊久華,沈蘇彬
(1.南京郵電大學(xué) 計(jì)算機(jī)學(xué)院,江蘇 南京 210046;2.南京郵電大學(xué) 通信與網(wǎng)絡(luò)技術(shù)國家工程研究中心,江蘇 南京 210046)
隨著互聯(lián)網(wǎng)和傳感技術(shù)的快速發(fā)展,物聯(lián)網(wǎng)在實(shí)現(xiàn)物與物相連、人與物相連的基礎(chǔ)上被廣泛應(yīng)用于智能家居[1]、醫(yī)療健康監(jiān)測[2]等領(lǐng)域。據(jù)預(yù)測2025年物聯(lián)網(wǎng)將連接300億臺(tái)設(shè)備,而物聯(lián)網(wǎng)數(shù)據(jù)將呈現(xiàn)指數(shù)級(jí)增長[3]。這些隱私數(shù)據(jù)一旦泄漏,會(huì)給用戶帶來不必要的騷擾,或造成巨大經(jīng)濟(jì)損失。訪問控制是保障數(shù)據(jù)安全的關(guān)鍵性技術(shù)之一,其主要作用是阻止未授權(quán)的用戶操作以及限制授權(quán)用戶在非授權(quán)范圍內(nèi)的操作,只有具備操作權(quán)限的用戶才能訪問控制機(jī)制并訪問數(shù)據(jù),以保障數(shù)據(jù)安全[4]。因此,訪問控制成為物聯(lián)網(wǎng)環(huán)境保護(hù)數(shù)據(jù)安全的研究熱點(diǎn)之一。
物聯(lián)網(wǎng)環(huán)境下的訪問控制需要考慮三個(gè)問題[5]:
(1)輕量級(jí)的終端設(shè)備;
(2)設(shè)備異構(gòu)且數(shù)量逐漸增多;
(3)動(dòng)態(tài)性,如設(shè)備的移動(dòng)性。
訪問控制模型是由主體、客體、操作和策略之間進(jìn)行交互,從而制定和實(shí)施訪問控制決策[6]。物聯(lián)網(wǎng)主流的訪問控制模型主要包括基于角色的訪問控制(Role-Based Access Control,RBAC)模型和基于屬性的訪問控制(Attribute-Based Access Control,ABAC)模型。ABAC作為RBAC的補(bǔ)充和擴(kuò)展,無需提前設(shè)置角色權(quán)限表,將角色或身份抽象成一組屬性,用戶通過屬性與權(quán)限對(duì)接。定義相對(duì)少的中間變量和權(quán)限賦予就能達(dá)到控制大量節(jié)點(diǎn)的目的,即n個(gè)屬性能擁有2n個(gè)中間變量[7]。因此,ABAC提供了細(xì)粒度和靈活的訪問控制能力,能滿足物聯(lián)網(wǎng)訪問控制的需求。
但是,物聯(lián)網(wǎng)設(shè)備通常將收集和產(chǎn)生的數(shù)據(jù)上傳至第三方可信機(jī)構(gòu),進(jìn)行集中式存儲(chǔ)和管理,容易帶來單點(diǎn)故障和內(nèi)部操作不透明等問題。應(yīng)運(yùn)而生的是基于權(quán)能的分布式訪問控制(Capability-Based Access Control,CapBAC)模型[8],由物聯(lián)網(wǎng)設(shè)備自身執(zhí)行權(quán)限的決策和驗(yàn)證,但是大部分輕量級(jí)的物聯(lián)網(wǎng)設(shè)備不具備決策的能力。由此可見,物聯(lián)網(wǎng)環(huán)境下資源的訪問控制面臨的問題是為了適應(yīng)物聯(lián)網(wǎng)的三大特性而依賴于中心化存儲(chǔ)和控制模式導(dǎo)致的信任問題。
區(qū)塊鏈?zhǔn)且环N去中心化的信任管理機(jī)制,由“中本聰”在構(gòu)建全球去中心化數(shù)字貨幣比特幣的過程中設(shè)計(jì)和實(shí)現(xiàn)[9]。在區(qū)塊鏈中,利用交易實(shí)現(xiàn)價(jià)值的轉(zhuǎn)移或消息的傳遞,區(qū)塊記錄交易信息,區(qū)塊之間通過密碼學(xué)哈希以引用的方式鏈接。利用密碼學(xué)技術(shù)實(shí)現(xiàn)身份的驗(yàn)證,通過時(shí)間戳和哈希函數(shù)保證數(shù)據(jù)的可追溯和不可篡改特性,依據(jù)共識(shí)算法實(shí)現(xiàn)節(jié)點(diǎn)間賬本一致性[10]。Vitalik Buterin提出了以太坊區(qū)塊鏈平臺(tái),其中,智能合約是通過事件驅(qū)動(dòng)的計(jì)算機(jī)程序,具有數(shù)據(jù)透明和不可篡改的特性,確保智能合約的可信性[11]。
為了解決上述提到的信任問題,區(qū)塊鏈技術(shù)的去中心化、不可篡改、可審計(jì)性和可編程的優(yōu)勢(shì)開始顯現(xiàn)。將區(qū)塊鏈技術(shù)應(yīng)用于物聯(lián)網(wǎng)資源的安全保護(hù),設(shè)計(jì)了一種去中心化模式下的訪問控制方案。將資源管理界定為資源存儲(chǔ)、訪問控制這兩個(gè)方面,將其涉及到信任管理的關(guān)鍵信息存儲(chǔ)到區(qū)塊鏈,以實(shí)現(xiàn)資源的可信管理。
首先,為了減緩區(qū)塊鏈存儲(chǔ)壓力和保護(hù)數(shù)據(jù)的隱私,提出使用區(qū)塊鏈結(jié)合星際文件系統(tǒng)實(shí)現(xiàn)資源存儲(chǔ)。其次,以數(shù)據(jù)所有者為中心,為了使訪問控制過程正確且可信,提出區(qū)塊鏈結(jié)合ABAC實(shí)現(xiàn)資源的訪問控制,以保證資源的安全性、保密性和可用性。最后,基于以太坊區(qū)塊鏈平臺(tái)的仿真實(shí)驗(yàn),驗(yàn)證了方案的正確性和可行性。
目前,引入?yún)^(qū)塊鏈技術(shù)的訪問控制研究工作分為兩類,第一類是區(qū)塊鏈作為傳統(tǒng)訪問控制模型的可信實(shí)體,如圖1(a)。第二類是一種完全基于區(qū)塊鏈的物聯(lián)網(wǎng)訪問控制模型。區(qū)塊鏈記錄訪問控制信息和資源信息,還作為訪問決策點(diǎn),如圖1(b)。
(a)存在第三方可信機(jī)構(gòu) (b)去中心化
Kshetri[12]全面地分析了利用區(qū)塊鏈技術(shù)使物聯(lián)網(wǎng)具備設(shè)備接入可縮放能力、防范設(shè)備被惡意攻擊及數(shù)據(jù)篡改的能力,同時(shí)提供可信本地?cái)?shù)據(jù)存儲(chǔ)和管理能力。Hu[13]結(jié)合自主訪問控制模型將數(shù)據(jù)存儲(chǔ)在第三方可信機(jī)構(gòu),利用區(qū)塊鏈的難篡改和透明化的特性來記錄訪問決策的過程,提高了決策過程的可信度。Ding[14]利用ABAC與區(qū)塊鏈相結(jié)合,提出新的訪問控制模型,使用區(qū)塊鏈作為存儲(chǔ)平臺(tái),存儲(chǔ)設(shè)備的屬性和訪問信息,由第三方可信機(jī)構(gòu)決策訪問請(qǐng)求,將決策結(jié)果記錄在區(qū)塊鏈。Maesa[15]擴(kuò)展了ABAC的標(biāo)準(zhǔn)工作流,由區(qū)塊鏈代替?zhèn)鹘y(tǒng)的數(shù)據(jù)庫來存儲(chǔ)屬性及策略并以交易的形式管理。
對(duì)于第二類研究工作,Ouaddah[16]提出令牌優(yōu)化訪問流程,節(jié)省了再次訪問花費(fèi)的時(shí)間和計(jì)算開銷。將訪問權(quán)限以腳本的形式保存在區(qū)塊鏈,訪問者通過解鎖腳本來獲得訪問權(quán)限,但是腳本的計(jì)算能力有限,無法處理復(fù)雜的訪問控制邏輯。而且,令牌是對(duì)特定資源的訪問權(quán)限憑證,意味著權(quán)限的修改涉及到令牌的更換,復(fù)雜性高。Xu[17]提出BlendCAC方案,將CapBAC模型與區(qū)塊鏈技術(shù)結(jié)合,由數(shù)據(jù)所有者在智能合約中定義訪問控制矩陣,訪問者通過提供的合約地址和遠(yuǎn)程調(diào)用接口與智能合約交互,使物聯(lián)網(wǎng)設(shè)備利用智能合約實(shí)現(xiàn)自動(dòng)化的決策和結(jié)果響應(yīng)。Liu[18]提出了Fabric-IoT,使用三種智能合約來實(shí)現(xiàn)物聯(lián)網(wǎng)環(huán)境下自動(dòng)化的ABAC和數(shù)據(jù)管理:(1)存儲(chǔ)設(shè)備產(chǎn)生的數(shù)據(jù)的URL;(2)存儲(chǔ)訪問控制策略;(3)實(shí)施訪問控制。Xu[19]提出一種基于以太坊和IPFS的去中心化社交網(wǎng)絡(luò)系統(tǒng),使用IPFS來保存大量的文件數(shù)據(jù),區(qū)塊鏈中存儲(chǔ)文件數(shù)據(jù)的鏈接地址,大大減輕區(qū)塊鏈的存儲(chǔ)壓力。
由上述分析可知,保留第三方可信機(jī)構(gòu)的數(shù)據(jù)存儲(chǔ)和訪問控制決策功能,降低訪問決策的復(fù)雜性。由區(qū)塊鏈記錄訪問控制過程,保證過程的透明可見性和可審計(jì)性。但是存在單點(diǎn)故障、低可擴(kuò)展性和可否認(rèn)性的問題。將訪問控制策略以智能合約編碼的形式存儲(chǔ)在區(qū)塊鏈,交易觸發(fā)智能合約執(zhí)行得到權(quán)限,并由各節(jié)點(diǎn)驗(yàn)證訪問權(quán)限,達(dá)成共識(shí)后將其記錄在區(qū)塊鏈。訪問決策效率偏低,但是能夠保障訪問控制的安全性和可靠性。
總結(jié)現(xiàn)有研究工作存在的問題:(1)維護(hù)區(qū)塊鏈需要高存儲(chǔ)能力和計(jì)算能力,難以適應(yīng)輕量級(jí)的設(shè)備;(2)所有參與者共同維護(hù)單一區(qū)塊鏈,交易信息冗雜導(dǎo)致信息檢索困難。并且,將資源直接存儲(chǔ)在區(qū)塊鏈不利于資源的保密性,也會(huì)增加區(qū)塊鏈的存儲(chǔ)負(fù)擔(dān);(3)過于依賴基于交易的權(quán)限驗(yàn)證和更改方式,效率低且細(xì)粒度不夠。因此,權(quán)衡訪問控制的安全性和效率,提出一種基于區(qū)塊鏈的物聯(lián)網(wǎng)去中心化的訪問控制方案并梳理出需要解決的技術(shù)問題。
第一,資源的存儲(chǔ)的安全標(biāo)識(shí)。去中心化模式下,節(jié)點(diǎn)之間的信任難以保證。為保證資源的安全存儲(chǔ),首先確保參與方身份的真實(shí)性。假設(shè)所有參與方都需要通過物聯(lián)網(wǎng)設(shè)備作為物理媒介參與到資源的存儲(chǔ)和訪問控制過程,因此對(duì)參與方的身份標(biāo)識(shí)及驗(yàn)證,本質(zhì)上都是對(duì)設(shè)備進(jìn)行身份標(biāo)識(shí)及驗(yàn)證。因此,根據(jù)能力對(duì)物聯(lián)網(wǎng)設(shè)備進(jìn)行分層管理,由網(wǎng)關(guān)管理與其連接的輕量級(jí)物聯(lián)網(wǎng)設(shè)備;其次,采用區(qū)塊鏈中的非對(duì)稱加密體系,為參與方分配公、私鑰對(duì),以驗(yàn)證身份真實(shí)性。并將資源信息與參與方身份進(jìn)行綁定,以實(shí)現(xiàn)對(duì)資源存儲(chǔ)的安全標(biāo)識(shí)。
第二,資源存儲(chǔ)和訪問控制相關(guān)信任操作的定義。區(qū)塊鏈作為公共賬本技術(shù)及信任管理機(jī)制,將方案中涉及的設(shè)備注冊(cè)、資源存儲(chǔ)和資源訪問控制作為信任操作。首先,定義信任操作的交易數(shù)據(jù)結(jié)構(gòu),構(gòu)建區(qū)塊和區(qū)塊鏈;其次,根據(jù)功能存儲(chǔ)到不同的區(qū)塊鏈以提高方案的效率。
第三,訪問請(qǐng)求的評(píng)估和訪問權(quán)限的獲取的流程及可靠性驗(yàn)證。首先,根據(jù)區(qū)塊鏈的技術(shù)特征的優(yōu)勢(shì),設(shè)計(jì)相關(guān)操作的流程及驗(yàn)證過程,例如,策略評(píng)估的流程和正確性驗(yàn)證。其次,為了進(jìn)一步提高訪問控制效率,考慮物聯(lián)網(wǎng)設(shè)備的動(dòng)態(tài)性,根據(jù)靜態(tài)和動(dòng)態(tài)劃分屬性,將靜態(tài)屬性整合為靜態(tài)屬性令牌的數(shù)據(jù)結(jié)構(gòu),提高策略的驗(yàn)證速度。
本節(jié)主要工作在于描述方案的模型,參與實(shí)體,資源存儲(chǔ)和訪問控制中的信任操作、區(qū)塊和區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),訪問控制流程及驗(yàn)證。
基于上述研究,提出基于區(qū)塊鏈結(jié)合ABAC的去中心化訪問控制實(shí)現(xiàn)層面的模型,如圖2所示。
圖2 基于區(qū)塊鏈的物聯(lián)網(wǎng)去中心化訪問控制模型
該模型由四類主要實(shí)體和兩條區(qū)塊鏈組成:
(1)資源所有者:也稱設(shè)備所有者,通常是網(wǎng)關(guān)設(shè)備,負(fù)責(zé)管理設(shè)備及其數(shù)據(jù)、處理設(shè)備的訪問請(qǐng)求、向網(wǎng)絡(luò)中廣播資源消息或訪問控制消息。
(2)訪問者:發(fā)起資源訪問請(qǐng)求,在網(wǎng)絡(luò)中廣播訪問請(qǐng)求信息,通常也是網(wǎng)關(guān)設(shè)備。
(3)物聯(lián)網(wǎng)設(shè)備:如智能手環(huán)、網(wǎng)關(guān)等,負(fù)責(zé)數(shù)據(jù)收集、初步處理和傳輸、請(qǐng)求訪問其他設(shè)備資源和處理請(qǐng)求操作。該文將設(shè)備的屬性列舉為設(shè)備標(biāo)識(shí)、設(shè)備類型(讀、寫)、設(shè)備角色(設(shè)備管理者、輕量級(jí)設(shè)備)、時(shí)間、地理位置、操作類型。將前三種作為靜態(tài)屬性,后三種作為動(dòng)態(tài)屬性。動(dòng)態(tài)屬性用來描述主體因環(huán)境或操作而改變的屬性,例如,訪問者地理位置改變且不再符合訪問控制策略規(guī)則時(shí),無法獲得原有的權(quán)限。假設(shè)靜態(tài)屬性具備穩(wěn)定性,動(dòng)態(tài)屬性由物聯(lián)網(wǎng)終端設(shè)備自動(dòng)且實(shí)時(shí)獲取。
(4)IPFS存儲(chǔ)模塊,這類分布式存儲(chǔ)系統(tǒng)通過基于內(nèi)容的尋址方式來存儲(chǔ)和定位資源,返回一個(gè)獨(dú)特的加密哈希字符串IPFS hash[20]。
(5)資源信息鏈,記錄資源所有者發(fā)布的資源消息,任何訪問者、資源所有者都可以作為該鏈的參與方并查找所需資源的信息。訪問控制鏈,由資源所有者作為該鏈的參與方,參與方之間通過對(duì)等網(wǎng)絡(luò)相互連接,避免中心化訪問控制,將訪問控制的評(píng)估和驗(yàn)證能力下放,擺脫傳統(tǒng)信任模式和單點(diǎn)故障帶來的影響。利用區(qū)塊鏈記錄設(shè)備的屬性信息、訪問請(qǐng)求和結(jié)果信息,保證訪問控制可信及可審計(jì)。
雙鏈的設(shè)計(jì),將資源存儲(chǔ)信息和控制信息分開,有利于資源的查找、策略的查找和訪問控制過程的審計(jì)。訪問控制鏈的優(yōu)勢(shì)有:(1)資源所有者暫時(shí)離開區(qū)塊鏈,其他參與方根據(jù)已有的策略評(píng)估訪問請(qǐng)求,并將決策結(jié)果記錄在區(qū)塊鏈,便于資源所有者后期的審查工作,增強(qiáng)模型的可用性;(2)資源所有者作為參與節(jié)點(diǎn)共同維護(hù)訪問控制鏈,相互監(jiān)督,提高訪問控制的可信和可驗(yàn)證。
將資源信息(公開信息和策略信息)與資源所有者的身份進(jìn)行綁定,可以實(shí)現(xiàn)資源存儲(chǔ)的安全標(biāo)識(shí)。首先,與以往研究工作將設(shè)備資源加密后直接存儲(chǔ)在區(qū)塊鏈不同的是,該文將資源加密后的密文存儲(chǔ)在IPFS,僅在資源信息鏈上記錄資源的發(fā)布消息,有效地減緩了區(qū)塊鏈存儲(chǔ)壓力。資源所有者使用哈希函數(shù)對(duì)IPFS hash和資源對(duì)應(yīng)的訪問控制策略policy得到數(shù)字摘要Dres。隨后,使用私鑰SKown對(duì)Dres數(shù)字簽名,生成資源存儲(chǔ)的安全標(biāo)識(shí)signres,如式1。其他參與方使用資源所有者的公鑰PKown驗(yàn)證其身份。
signres= Sign(Hash(IPFShash,policy),SKown)
(1)
同理,將屬性信息和訪問者的身份進(jìn)行綁定,對(duì)訪問者屬性進(jìn)行可信標(biāo)識(shí),同時(shí)保證屬性的不可篡改性和真實(shí)性。
2.2.1 交易的定義及驗(yàn)證
該文將網(wǎng)絡(luò)中傳播的設(shè)備注冊(cè)信息、資源存儲(chǔ)信息和資源訪問控制信息分別定義為三種交易。
設(shè)備注冊(cè)交易由設(shè)備所有者對(duì)管理域內(nèi)設(shè)備的屬性信息簽名完成。包含設(shè)備所有者身份標(biāo)識(shí)devOwner,設(shè)備標(biāo)識(shí)devId,設(shè)備類型type,設(shè)備角色role,物理位置loc,設(shè)備執(zhí)行的操作oper,當(dāng)前時(shí)間戳timestamp,設(shè)備所有者數(shù)字簽名sign。
資源策略發(fā)布交易由資源所有者對(duì)設(shè)備產(chǎn)生的資源、資源的訪問控制策略簽名完成。包含資源鏈接IPFShash,資源所有者身份標(biāo)識(shí)devOwner,是否要求訪問者注冊(cè)shouldReg,時(shí)間的要求time,地理位置的要求loc,操作要求oper,時(shí)間戳timestamp,資源策略發(fā)布者數(shù)字簽名sign。
訪問請(qǐng)求交易由訪問者對(duì)所請(qǐng)求資源的標(biāo)識(shí)、自身屬性集合簽名完成。包含資源鏈接IPFShash,訪問者的身份標(biāo)識(shí)devId,訪問者的設(shè)備類型type,訪問者的設(shè)備角色role,訪問者的靜態(tài)屬性令牌staticToken,訪問者的地理位置loc,訪問者請(qǐng)求的操作oper,時(shí)間戳timestamp,訪問者數(shù)字簽名sign。
前兩種交易重點(diǎn)在于驗(yàn)證交易中的數(shù)字簽名信息,判斷策略發(fā)布者和設(shè)備的身份真實(shí)性。在第2.3節(jié)中重點(diǎn)關(guān)注訪問請(qǐng)求交易及其驗(yàn)證。
2.2.2 區(qū)塊和區(qū)塊鏈結(jié)構(gòu)
參考比特幣系統(tǒng),區(qū)塊包含兩個(gè)部分,區(qū)塊頭中有前一區(qū)塊的哈希值、Merkle樹根哈希值、時(shí)間戳。Merkle樹根哈希值是當(dāng)前區(qū)塊體中所有交易進(jìn)行分組哈希最終得到的根哈希值。對(duì)交易的任意更改,都會(huì)導(dǎo)致Merkle樹根哈希值變化,保證數(shù)據(jù)的不可篡改。時(shí)間戳記錄區(qū)塊生成的時(shí)間。根據(jù)交易數(shù)據(jù)的不同,交易的類型不同,參與節(jié)點(diǎn)將驗(yàn)證通過的交易放到本地交易池中,當(dāng)交易池中的交易達(dá)到一定數(shù)量時(shí),選擇多筆交易組裝成區(qū)塊,如圖3所示。
圖3 區(qū)塊及區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)
由共識(shí)機(jī)制保證各參與節(jié)點(diǎn)的區(qū)塊鏈公共賬本上的數(shù)據(jù)一致性。常見的是工作量證明、權(quán)益證明以及實(shí)用拜占庭容錯(cuò)(Practical Byzantine Fault Tolerance,PBFT)等共識(shí)機(jī)制[21],該文不展開關(guān)于共識(shí)機(jī)制的具體研究。根據(jù)物聯(lián)網(wǎng)環(huán)境的特性及訪問控制所需的一定實(shí)時(shí)性,選定具有高性能且耗能低的PBFT共識(shí)機(jī)制。假設(shè)區(qū)塊鏈參與節(jié)點(diǎn)總數(shù)是3f+1,那么網(wǎng)絡(luò)中容忍最多f個(gè)節(jié)點(diǎn)出現(xiàn)錯(cuò)誤而不影響正確的共識(shí)。區(qū)塊鏈中的所有交易都被認(rèn)為是可信的、不可篡改的。
圖4表示參與方與區(qū)塊鏈交互的過程,資源所有者將網(wǎng)絡(luò)中的設(shè)備注冊(cè)交易和訪問請(qǐng)求交易進(jìn)行驗(yàn)證和打包記錄到訪問控制鏈。資源所有者和訪問用戶維護(hù)資源信息鏈,訪問用戶可以查詢所需資源信息,并發(fā)布訪問請(qǐng)求交易。
圖4 參與方與區(qū)塊鏈交互的過程
訪問控制的功能是正確處理訪問請(qǐng)求并得到對(duì)應(yīng)的訪問權(quán)限。為了保證訪問控制的可信和正確性,需要驗(yàn)證訪問者身份真實(shí)性、訪問請(qǐng)求中參數(shù)真實(shí)性、訪問請(qǐng)求評(píng)估正確性。驗(yàn)證過程中的交易字段參考2.2.1中的數(shù)據(jù)結(jié)構(gòu),訪問者公私鑰對(duì)(PKacc,SKacc),資源所有者公私鑰對(duì)(PKown,SKown)。步驟如下:
步驟1:訪問者提交與設(shè)備注冊(cè)交易相關(guān)的字段,對(duì)設(shè)備進(jìn)行注冊(cè)。訪問者使用哈希算法對(duì)設(shè)備注冊(cè)相關(guān)字段進(jìn)行計(jì)算并進(jìn)行數(shù)字簽名,如式2。對(duì)設(shè)備的靜態(tài)屬性信息進(jìn)行哈希計(jì)算得到靜態(tài)屬性令牌staticToken,如式3。
signacc_reg=Sign(Hash(devId,type,role,loc,oper),SKacc)
(2)
staticToken=Hash(devId,type,role)
(3)
步驟2:資源所有者根據(jù)訪問者的注冊(cè)消息,驗(yàn)證訪問者的身份。訪問者的PKacc驗(yàn)證signacc_reg,Verify()返回true則表明注冊(cè)信息是真實(shí)可信的,如式4。資源所有者構(gòu)建設(shè)備注冊(cè)交易,并記錄到訪問控制鏈。
{true,false}=Verify(Hash(devId,type,role,loc,oper),signacc_reg,PKacc)
(4)
步驟3:訪問者提出訪問請(qǐng)求,使用哈希函數(shù)計(jì)算訪問請(qǐng)求字段的數(shù)字摘要并數(shù)字簽名,如式5。
signacc_req=Sign(Hash(IPFShash,devId,type,role,loc,oper),SKacc)
(5)
步驟4:資源所有者收到訪問請(qǐng)求消息,根據(jù)訪問者的身份標(biāo)識(shí)(區(qū)塊鏈賬戶地址)在訪問控制鏈中找到對(duì)應(yīng)的設(shè)備注冊(cè)交易,使用式3對(duì)訪問請(qǐng)求中的靜態(tài)屬性進(jìn)行哈希計(jì)算得到Dstatic,若Dstatic和staicToken相同則表明訪問請(qǐng)求中靜態(tài)屬性的真實(shí)性,如式6,避免逐一驗(yàn)證頻繁的訪問請(qǐng)求。
{true,false} = Equal(Dstatic,staticToken)
(6)
步驟5:資源所有者根據(jù)訪問請(qǐng)求中資源鏈接找到訪問控制策略,以算法1提出的訪問控制策略為例對(duì)訪問請(qǐng)求的評(píng)估過程進(jìn)行說明。
首先說明算法中策略的數(shù)據(jù)結(jié)構(gòu),比較了訪問控制表、邏輯表達(dá)式和訪問樹的表達(dá)方式后,選擇在訪問樹中引入多項(xiàng)式函數(shù)的策略表達(dá)方法。多項(xiàng)式函數(shù)最高指數(shù)為非葉子節(jié)點(diǎn)閾值減1,其他自變量前的系數(shù)為隨機(jī)數(shù),常數(shù)項(xiàng)為節(jié)點(diǎn)值。根據(jù)父節(jié)點(diǎn)的多項(xiàng)式,得到孩子節(jié)點(diǎn)的值。將策略中的靜態(tài)屬性要求構(gòu)建為左子樹,動(dòng)態(tài)屬性要求構(gòu)建成右子樹。接下來,將以圖5中的訪問樹為例進(jìn)行說明。
圖5 訪問樹示例
如果訪問請(qǐng)求中的靜態(tài)屬性滿足策略中靜態(tài)屬性需求,則返回左子樹閾值個(gè)數(shù)的節(jié)點(diǎn)鍵值對(duì)(葉子節(jié)點(diǎn)索引,葉子節(jié)點(diǎn)值),隨后通過式7計(jì)算,得到左子樹根節(jié)點(diǎn)值。同理,獲得右子樹根節(jié)點(diǎn)值,最終得到根節(jié)點(diǎn)值,則表明訪問請(qǐng)求中的操作被授權(quán)。資源所有者將資源的解密密鑰和對(duì)應(yīng)操作權(quán)限打開,并發(fā)送給訪問者。
(7)
算法1:訪問請(qǐng)求評(píng)估算法
輸入:IPFShash,devId,type,role,loc,oper,devOwner,staticToken
輸出:訪問權(quán)限allowed/deney/errorMsg
1:for(i=0;i 2: if(devOwner.devices[i].devId === devId) 3: devInfo = devOwner.devices[i] //找到設(shè)備注冊(cè)信息 4:for(i=0;i 5: if(resources[i].IPFShash === IPFShash) 6: py = resources[i].policy //資源策略信息 7:if(py.shouldReg)//策略要求設(shè)備需注冊(cè) 8: if(staticToken) //靜態(tài)令牌存在 9: flag=Equal(staticToken,Hash(devId,type,role)) 10: if(flag) 11: Get(staticRootIndex,staticRootSecret) 12: else 13: return erroMsg //靜態(tài)屬性令牌不正確 14: else //靜態(tài)令牌不存在,逐一比較 15:staticNum=getTrueNumber(devInfo.devId===devId,devInfo.type===type,devInfo.role === role) 16: if(staticNum >= staticThreshold) //檢查靜態(tài)屬性 17: Get(staticRootIndex,staticRootSecret) 18: else 19: return errorMsg 20:dynamicNum=getTrueNumber(py.loc===loc,py.oper===oper, py.time 21: if(dynamicNum >= dynamicThreshold)//檢查動(dòng)態(tài)屬性 22: Get(dynamicIndex, dynamicRootSecret) 23: else 24: return errorMsg 25:if(staticRootSecret &&dynamicRootSecret) 26: Get(rootSecret) 27: return allowed 28: else 29: return deny 訪問控制鏈的其他參與節(jié)點(diǎn)可以以同樣的方式對(duì)訪問請(qǐng)求中的屬性進(jìn)行驗(yàn)證。也可以信任其他節(jié)點(diǎn)驗(yàn)證得到的(葉子節(jié)點(diǎn)索引,葉子節(jié)點(diǎn)值)利用式7計(jì)算根節(jié)點(diǎn)的值,從而與其他節(jié)點(diǎn)達(dá)成一致。 分析方案抵抗密文和共謀攻擊的能力,基于以太坊平臺(tái)進(jìn)行了相應(yīng)的實(shí)驗(yàn)來證明方案的可行性,并對(duì)屬性劃分提高訪問控制效率進(jìn)行性能分析。 密文攻擊,是未授權(quán)用戶獲得了密文之后,在區(qū)塊鏈中查找不到其對(duì)資源的訪問請(qǐng)求交易,無法獲得相應(yīng)的訪問權(quán)限,便無法得到所需的解密密鑰。 共謀攻擊,指不同用戶之間試圖通過屬性組合實(shí)現(xiàn)最終授權(quán)。首先,設(shè)備的靜態(tài)屬性都是默認(rèn)在很長一段時(shí)間內(nèi)不會(huì)改變,一般不會(huì)有設(shè)備為了滿足某一個(gè)訪問控制策略而捏造其靜態(tài)屬性,且區(qū)塊鏈中的設(shè)備注冊(cè)信息難以篡改。其次,動(dòng)態(tài)屬性的獲取是通過設(shè)備傳感器實(shí)時(shí)上傳的,上傳過程不會(huì)被更改。因此設(shè)備的屬性一定是真實(shí)的,且同屬于一個(gè)設(shè)備。設(shè)備注冊(cè)交易中的簽名若無法使用設(shè)備所有者的公鑰驗(yàn)證,則表明注冊(cè)信息是虛假的、無法驗(yàn)證的。 建立以太坊私有鏈網(wǎng)絡(luò),模擬真實(shí)應(yīng)用環(huán)境。實(shí)驗(yàn)?zāi)康氖窃O(shè)計(jì)資源訪問控制智能合約實(shí)現(xiàn)物聯(lián)網(wǎng)設(shè)備的注冊(cè)、資源訪問控制策略的發(fā)布、資源的訪問請(qǐng)求。其中,react技術(shù)開發(fā)用戶前端界面,truffle框架部署和測試智能合約。合約部署成功如圖6。 圖6 訪問控制智能合約部署情況 設(shè)備注冊(cè)的目的是保證物聯(lián)網(wǎng)設(shè)備屬性信息的真實(shí)性,如圖7。設(shè)備注冊(cè)消息的簽名和時(shí)間戳由系統(tǒng)自動(dòng)生成。訪問控制策略發(fā)布,目的是為資源制定訪問控制策略,前端界面與圖7類似。 圖7 注冊(cè)物聯(lián)網(wǎng)設(shè)備 訪問請(qǐng)求,目的是對(duì)物聯(lián)網(wǎng)設(shè)備的屬性真實(shí)性進(jìn)行驗(yàn)證,評(píng)估屬性與策略的匹配程度,并得到權(quán)限。以請(qǐng)求成功為例,如圖8。 圖8 訪問請(qǐng)求成功的情況 策略中屬性的個(gè)數(shù)會(huì)影響訪問控制的效率,根據(jù)屬性的劃分帶來的靜態(tài)屬性令牌和訪問樹的方法。從兩個(gè)角度切入進(jìn)行了性能分析:第一,固定動(dòng)態(tài)屬性的個(gè)數(shù)和訪問數(shù)的驗(yàn)證方法,探討隨靜態(tài)屬性個(gè)數(shù)的增長,靜態(tài)屬性令牌對(duì)效率的影響。從圖9(a)可以發(fā)現(xiàn)靜態(tài)屬性令牌減少逐一驗(yàn)證,減少策略評(píng)估和權(quán)限驗(yàn)證的時(shí)間開銷。第二,固定靜態(tài)屬性令牌驗(yàn)證方法,探討隨動(dòng)態(tài)屬性個(gè)數(shù)的增長,訪問樹的驗(yàn)證方法和拉格朗日函數(shù)直接驗(yàn)證方法對(duì)效率的影響。從圖9(b)可以發(fā)現(xiàn)其他節(jié)點(diǎn)使用第二種驗(yàn)證方法的時(shí)間開銷較少。 圖9 影響訪問請(qǐng)求驗(yàn)證時(shí)間開銷的因素 實(shí)驗(yàn)中所有的數(shù)值都是程序的執(zhí)行時(shí)長,該時(shí)長通常與執(zhí)行環(huán)境有關(guān),同樣的程序在不同時(shí)間段執(zhí)行會(huì)存在10 ms左右的誤差,進(jìn)行了近20次的實(shí)驗(yàn),最終采用20次實(shí)驗(yàn)執(zhí)行時(shí)長的平均值。 上述實(shí)驗(yàn)驗(yàn)證了方案的可行性和正確性,確保了訪問控制過程的透明可信,有效地防止資源的未授權(quán)訪問和濫用,提高了訪問請(qǐng)求評(píng)估速度和權(quán)限驗(yàn)證速度。實(shí)驗(yàn)是在本地測試網(wǎng)絡(luò)中進(jìn)行,正式應(yīng)用需要根據(jù)真實(shí)網(wǎng)絡(luò)環(huán)境做相應(yīng)的調(diào)整。 該文提出一種基于區(qū)塊鏈的物聯(lián)網(wǎng)資源訪問控制方案,充分利用區(qū)塊鏈技術(shù)、IPFS和ABAC的技術(shù)特征以保證資源的安全存儲(chǔ)和可信管理。通過交易管理用戶、屬性、策略和訪問行為,管理和追蹤策略的發(fā)布、評(píng)估和權(quán)限驗(yàn)證,有利于以資源所有者為中心管理資源的存儲(chǔ)和使用。通過屬性劃分的方法,研究訪問請(qǐng)求全過程的評(píng)估和驗(yàn)證方法,以提高訪問控制評(píng)估和權(quán)限驗(yàn)證的速度。仿真實(shí)驗(yàn)證明了方案的可信性和正確性,今后會(huì)從共識(shí)機(jī)制的角度,研究訪問控制效率提升的方法。3 安全性分析和仿真實(shí)驗(yàn)
3.1 安全攻擊
3.2 仿真實(shí)驗(yàn)和模擬
3.3 性能分析
4 結(jié)束語