謝絨娜,李暉,史國振,郭云川,張銘,董秀則
(1.北京電子科技學院密碼科學與技術系,北京 100070;2.西安電子科技大學網(wǎng)絡與信息安全學院,陜西 西安 710071;3.中國科學院信息工程研究所,北京 100093)
隨著云計算、物聯(lián)網(wǎng)、大數(shù)據(jù)等信息技術的發(fā)展,分布在不同域的各種不同系統(tǒng)、設備之間頻繁地互聯(lián)互通,相互之間數(shù)據(jù)的訪問和流轉成為一種趨勢。在數(shù)據(jù)訪問和流轉中,數(shù)據(jù)的安全性和隱私性成為制約信息技術發(fā)展的瓶頸。訪問控制技術為合法的主體在特定的訪問環(huán)境下授予一定的訪問權限,成為保障數(shù)據(jù)安全和隱私的主要手段。
現(xiàn)有的基于角色的訪問控制機制(RBAC,role based access control)基于主體的角色進行訪問授權,基于屬性的訪問控制機制(ABAC,attribute based access control)基于主體屬性、客體屬性和環(huán)境屬性進行訪問授權。傳統(tǒng)的訪問控制機制大多通過集中授權點進行訪問授權,存在單點失效導致整個控制系統(tǒng)失效以及性能瓶頸等問題,還存在訪問過程不可追蹤和溯源等缺點。如何實現(xiàn)訪問控制過程的無中心、透明性、可溯源成為訪問控制機制急需解決的問題。
區(qū)塊鏈技術允許建立一個分布式、透明的、不可篡改的賬本,因此受到越來越多的關注。自2008年被引入加密貨幣[1]以來,區(qū)塊鏈技術被廣泛應用于物聯(lián)網(wǎng)、云計算、大數(shù)據(jù)等場景[2-5]。Maesa 等[6]將區(qū)塊鏈技術引入訪問控制中,通過區(qū)塊鏈實現(xiàn)訪問控制策略的存儲和檢索,而訪問控制策略的評估通過傳統(tǒng)的訪問控制系統(tǒng)實現(xiàn)。文獻[7]將基于屬性的訪問控制策略轉化成智能合約(SC,smart contract)并部署在區(qū)塊鏈上,通過智能合約實現(xiàn)訪問控制策略的評估和屬性管理。上述文獻對于如何實現(xiàn)數(shù)據(jù)訪問的可追蹤和溯源沒有給出很好的解決方案,同時存在一次授權多次訪問的問題。
針對上述問題,本文利用區(qū)塊鏈無中心、透明性和不可篡改等優(yōu)點,以基于屬性的訪問控制機制為基礎,提出了基于區(qū)塊鏈的可溯源訪問控制機制。該機制采用鏈上和鏈下相結合的方式,將客體資源存儲在鏈下的數(shù)據(jù)服務器中,基于客體存儲地址和摘要值生成客體索引存儲在區(qū)塊鏈上;將訪問控制策略以智能合約的方式部署在客體區(qū)塊鏈上,通過執(zhí)行區(qū)塊鏈上的智能合約實現(xiàn)訪問控制過程的透明性,并將訪問授權日志和訪問日志記錄在日志區(qū)塊鏈上,在保障客體隱私性的前提下,實現(xiàn)訪問過程無中心、透明性和可溯源。
本文主要貢獻如下。
1) 提出了基于區(qū)塊鏈的可溯源訪問控制機制,把訪問控制策略以智能合約的形式部署在區(qū)塊鏈上,訪問控制執(zhí)行和評估通過執(zhí)行區(qū)塊鏈上分布式的智能合約實現(xiàn),實現(xiàn)了訪問授權的無中心和透明性,有效防止了策略執(zhí)行點和策略決策點非法授權或者拒絕訪問請求等問題,同時避免了集中授權造成的性能瓶頸。
2) 為保護客體資源的隱私性,采用鏈上和鏈下相結合的方式,客體資源采用鏈下的方式存儲在數(shù)據(jù)服務器,基于客體存儲地址及摘要值生成的客體索引存儲在客體區(qū)塊鏈上,提高了客體資源的安全性和隱私性。
3) 向授權訪問主體分發(fā)訪問憑據(jù),并把訪問憑據(jù)不可修改地記錄在區(qū)塊鏈上。主體在對客體訪問時,通過區(qū)塊鏈對主體訪問憑據(jù)的有效性進行驗證,實現(xiàn)細粒度的訪問控制,有效避免了一次授權多次訪問的問題。
4) 將區(qū)塊鏈分為客體區(qū)塊鏈和日志區(qū)塊鏈,其中日志區(qū)塊鏈詳細記錄了訪問授權日志和客體訪問日志,實現(xiàn)訪問授權過程的可追蹤和可溯源。
區(qū)塊鏈由于無中心、透明性、不可篡改等優(yōu)點,被廣泛應用在物聯(lián)網(wǎng)、云計算、大數(shù)據(jù)等不同場景[2-5],用來實現(xiàn)數(shù)據(jù)的安全性和隱私性。訪問控制是保證數(shù)據(jù)安全的一種有效手段,傳統(tǒng)的訪問控制采用中心授權,存在單點失效以及性能瓶頸等問題,同時傳統(tǒng)訪問控制存在訪問過程不透明、不可追蹤和溯源等缺點,已有不少文獻將區(qū)塊鏈技術應用到訪問控制中。Maesa 等[6]利用區(qū)塊鏈技術實現(xiàn)訪問控制,通過比特幣協(xié)議實現(xiàn)訪問控制策略的存儲和檢索,而訪問控制策略的評估通過傳統(tǒng)的訪問控制系統(tǒng)實現(xiàn)。智能合約是部署在區(qū)塊鏈上的計算機程序,當滿足必要條件時,以無中心的方式自動執(zhí)行某些功能。最近不少方案采用區(qū)塊鏈和智能合約實現(xiàn)訪問控制。文獻[8]對文獻[6]的方案進行改進,通過智能合約實現(xiàn)訪問控制的主要功能。為提高訪問控制策略評估的可審計性,文獻[7]將基于屬性的訪問控制策略轉化成智能合約并部署在區(qū)塊鏈上,通過智能合約實現(xiàn)訪問控制策略的評估和屬性管理。針對大數(shù)據(jù)資源的特點以及集中式訪問控制機制存在的問題,劉敖迪等[9]以ABAC 模型為基礎,提出一種基于區(qū)塊鏈的大數(shù)據(jù)訪問控制機制,該機制采用基于智能合約的訪問控制方法實現(xiàn)對大數(shù)據(jù)資源透明、動態(tài)、自動化的訪問控制。針對物聯(lián)網(wǎng)中的特點,杜瑞忠等[10]提出一種基于層級區(qū)塊鏈的物聯(lián)網(wǎng)分布式體系架構,該架構以ABAC 模型為基礎,采用智能合約的方式實現(xiàn)對物聯(lián)網(wǎng)設備基于屬性的域內和跨域的動態(tài)、自動化訪問控制。
數(shù)據(jù)安全保護是安全領域的一個研究熱點。2018年5月,通用數(shù)據(jù)保護條例(GDPR,general data protection regulation)在所有的歐洲國家強制執(zhí)行,通過委托授權服務提供者實現(xiàn)對個人數(shù)據(jù)的控制,并通過第三方監(jiān)管機構驗證服務提供者是否嚴格遵守GDPR。如何驗證服務提供者是否嚴格遵守GDPR 是數(shù)據(jù)保護機制面臨的挑戰(zhàn)。針對上述問題,Truong 等[11]基于區(qū)塊鏈和智能合約的優(yōu)點,提出個人數(shù)據(jù)管理平臺,利用區(qū)塊鏈和智能合約實現(xiàn)數(shù)據(jù)授權的透明性,驗證服務提供者是否遵守GDPR,任何違反規(guī)則的行為都將被記錄,通過給每個參與者頒發(fā)公私鑰對進行身份管理,并采用非對稱加密算法保護參與者身份和敏感信息。在策略部署和訪問授權方面通過數(shù)字簽名算法對相關信息進行驗證,隨著管理數(shù)據(jù)量的增加,該算法在密鑰管理和訪問控制效率等方面都面臨巨大挑戰(zhàn)。Wu 等[12]提出了采用公共區(qū)塊鏈提供策略遵守的證據(jù),并通過粘性策略的方式實現(xiàn)對跨域訪問中策略遵守的監(jiān)管。針對區(qū)塊鏈數(shù)據(jù)的隱私性問題,Zyskind 等[13]結合區(qū)塊鏈和鏈下的數(shù)據(jù)存儲實現(xiàn)個人數(shù)據(jù)管理,但該方案僅考慮對用戶數(shù)據(jù)的讀操作,沒有考慮其他訪問操作。Kosba 等[14]提出一種去中心化的智能合約系統(tǒng)Hawk,該系統(tǒng)以密文形式在區(qū)塊鏈上存儲交易,實現(xiàn)交易的隱私性。Hawk 能以直觀的方式編寫智能合約,編譯器使用零知識證明等加密原語,自動生成有效的加密協(xié)議,使合同方與區(qū)塊鏈進行交互。為提高智慧城市中數(shù)據(jù)的可用性、完整性和隱私性,Makhdoom 等[15]提出了基于區(qū)塊鏈的隱私保護和數(shù)據(jù)共享方案PrivySharing,該方案將區(qū)塊鏈網(wǎng)絡分成不同的通道,不同通道的數(shù)據(jù)相互隔離,每個通道包含有限個授權組織處理特定類型的數(shù)據(jù)。PrivySharing 通過在智能合約中嵌入訪問控制規(guī)則實現(xiàn)對數(shù)據(jù)的訪問控制。針對數(shù)據(jù)跨域共享存在的安全問題,Rahman[16]等提出了跨域的數(shù)據(jù)共享平臺,并將數(shù)據(jù)共享平臺部署在一個全局的云服務器中。當有跨域訪問請求時,云服務器通過域內安全網(wǎng)關收集存儲在本地的數(shù)據(jù),并通過區(qū)塊鏈記錄數(shù)據(jù)轉移。全局的云服務器通過區(qū)塊鏈來檢驗完全網(wǎng)關的錯誤行為,但該方案通過一個全局云服務中心實現(xiàn)數(shù)據(jù)共享,存在單點失效造成的安全問題和性能問題。王秀利等[17]提出了一種應用區(qū)塊鏈的數(shù)據(jù)訪問控制與共享模型,利用屬性基加密對數(shù)據(jù)進行訪問控制與共享,達到細粒度訪問控制和安全共享的目的。針對云存儲電子病歷(EMR,electronic medical record)共享的問題,牛淑芬等[18]提出了一種區(qū)塊鏈上基于可搜索加密的EMR 數(shù)據(jù)共享方案。該方案采用私有鏈和聯(lián)盟鏈實現(xiàn)EMR的安全存儲與共享,利用可搜索加密技術實現(xiàn)對聯(lián)盟鏈上關鍵字的安全搜索,利用代理重加密技術實現(xiàn)EMR 的共享。Neisse 等[19]利用部署在區(qū)塊鏈上的公開審計合同提高數(shù)據(jù)訪問、使用的透明度,實現(xiàn)記賬能力和溯源追蹤。
但是,上述文獻對如何利用區(qū)塊鏈和智能合約實現(xiàn)訪問控制無中心、透明性、可追蹤和溯源都沒有給出完整的、詳細的解決方案。
本節(jié)以基于屬性的訪問控制為例,介紹復雜網(wǎng)絡環(huán)境下集中授權的訪問控制機制及其面臨的挑戰(zhàn)。
基于屬性的訪問控制主要包括3 個階段,主要步驟如圖1 所示。
第一階段為客體上傳階段,所有者將生成的客體上傳到數(shù)據(jù)服務器,主要步驟如下。
Step1數(shù)據(jù)所有者(DO,data owner),以下簡稱所有者,將生成的客體(O,object)上傳到數(shù)據(jù)服務器(DS,data service)。
Step2所有者針對客體生成對應的訪問控制策略(P,policy)上傳到策略管理點(PAP,policy administration point)。
第二階段為訪問授權階段,訪問控制系統(tǒng)對主體提出的訪問請求進行授權判斷,主要步驟如下。
Step3主體(S,subject)生成訪問請求(AR,access request)發(fā)送給策略執(zhí)行點(PEP,policy enforcement point)。
Step4策略執(zhí)行點針對主體的訪問請求生成訪問決策請求(ADR,access decision request)發(fā)送給策略決策點(PDP,policy decision point)。
Step5策略決策點針對訪問決策請求生成策略查詢請求(PQR,policy query request)發(fā)送給策略管理點,策略管理點查詢訪問控制策略庫(PR,policy repository)得到對應的訪問控制策略并發(fā)送給策略決策點。
Step6策略決策點根據(jù)訪問控制策略和訪問決策請求生成屬性查詢請求(AQR,attribute query request)發(fā)送給策略信息點(PIP,policy information point),策略信息點查詢相關主體屬性、客體屬性和環(huán)境屬性,并將查詢得到的屬性發(fā)送給策略決策點。
Step7策略決策點根據(jù)訪問控制策略和屬性進行訪問授權判斷,生成訪問控制結果(ACR,access control result)發(fā)送給策略執(zhí)行點。
第三階段為客體訪問階段,對于同意授權的訪問請求,主體對客體進行訪問操作,主要步驟如下。
Step8對于同意授權的訪問請求,策略執(zhí)行點提出客體請求(OR,object request)發(fā)送給數(shù)據(jù)服務器。
Step9數(shù)據(jù)服務器將客體發(fā)送給策略執(zhí)行點。
Step10策略執(zhí)行點將客體發(fā)送給主體。
從上述訪問授權過程可以看出,訪問控制執(zhí)行和決策過程依賴于策略執(zhí)行點和策略決策點,這樣的單一集中授權模式存在以下安全問題和性能問題。
1) 如果策略決策點或者策略執(zhí)行點被收買或者攻擊,對于同意授權訪問控制結果,會返回一個否定的授權結果,反之亦然,甚至策略執(zhí)行點直接拒絕主體的訪問請求。
2) 訪問控制過程不透明、不可追蹤。從所有者角度來看,其不能發(fā)現(xiàn)自己創(chuàng)建的客體錯誤的肯定授權或過度授權,從而導致隱私泄露;同樣,主體也無法發(fā)現(xiàn)錯誤的否定授權。
3) 所有訪問控制的決策和執(zhí)行都集中在策略決策點和策略執(zhí)行點,造成性能瓶頸問題,甚至存在單點失效導致整個系統(tǒng)無法運行等問題。
4) 整個訪問過程無法實現(xiàn)追蹤和溯源,對于錯誤的訪問控制授權和訪問執(zhí)行,無法找到相關的參與主體。
針對基于屬性的訪問控制在實際應用中存在的問題,本節(jié)提出了基于區(qū)塊鏈的可溯源訪問控制機制。該機制把訪問控制策略以智能合約的形式部署在區(qū)塊鏈上,通過執(zhí)行區(qū)塊鏈上分布式智能合約對主體的訪問請求進行評估,實現(xiàn)了無中心的訪問授權管理。同時,利用區(qū)塊鏈透明性和不可修改等優(yōu)點,把訪問授權過程記錄在區(qū)塊鏈上,實現(xiàn)訪問控制過程透明性和可追蹤。
為保證基于區(qū)塊鏈的可溯源訪問控制機制的安全性,本文提出以下安全性假設條件。
條件1數(shù)據(jù)服務器半可信,它會準確執(zhí)行每次訪問,但存在非法篡改客體,或者把客體泄露給非法主體,或者拒絕合法主體對客體訪問的可能。
條件2策略決策點或者執(zhí)行點會被攻擊或者被收買成為失效節(jié)點,從而生成錯誤訪問決策或授權,或者拒絕主體對客體的訪問。
針對基于屬性的訪問控制存在的問題,基于區(qū)塊鏈的可溯源訪問控制機制遵循以下原則。
1) 訪問控制策略生成。訪問控制策略采用細粒度、語義表達豐富的策略描述語言。所有者描述的訪問控制策略自動轉化為智能合約并部署在區(qū)塊鏈上。
圖1 基于屬性的訪問控制機制
2) 訪問控制策略決策和執(zhí)行。訪問控制策略的決策和執(zhí)行通過執(zhí)行區(qū)塊鏈上分布式的智能合約來實現(xiàn),保證整個訪問授權過程的透明性和可溯源。
3) 對于肯定的授權結果通過給主體頒發(fā)一個語義描述豐富的訪問憑據(jù)(token)來表示,并記錄在區(qū)塊鏈上。主體訪問客體時,通過區(qū)塊鏈對訪問憑據(jù)進行驗證,防止一次授權無限制重復訪問客體等安全問題。
4) 區(qū)塊鏈分布式賬本的設計。訪問授權結果和訪問結果都記錄在區(qū)塊鏈賬本上。區(qū)塊鏈賬本上詳細記錄誰在什么時候對什么進行了什么操作,操作的原因是什么,操作的環(huán)境是什么。保證訪問過程的透明性,實現(xiàn)訪問過程可追蹤和溯源。
5) 客體資源離線存儲。數(shù)據(jù)采用傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng),如Oracle、Sybase,或者分布式存儲系統(tǒng),如GFS(Google file system)等方式存儲在鏈下的數(shù)據(jù)服務器上,保證客體資源的安全性和隱私性。如果客體直接存儲在鏈上,客體的安全性和隱私性會受到威脅;如果采用密態(tài)方式存在鏈上,客體訪問的靈活性和效率會大大降低,同時會大大增加賬本維護成本。
6) 主體的安全性和隱私性。在數(shù)據(jù)訪問過程中,主體屬性屬于個人隱私信息,所有主體相關屬性信息存在鏈下的策略信息庫中。
基于區(qū)塊鏈的可溯源訪問控制機制架構如圖2所示,包括客體上傳、訪問授權和客體訪問3 個階段。在基于區(qū)塊鏈的可溯源訪問控制機制中,引入環(huán)境句柄(CH,context handler)執(zhí)行訪問授權和客體訪問。根據(jù)不同的分工,把環(huán)境句柄細分為智能策略部署句柄(CHSPD,smart policy develop context handler)(簡稱策略部署句柄)、客體部署句柄(CHOD,object develop context handler)、智能策略執(zhí)行句柄(CHPE,smart policy enforcement context handler)(簡稱策略執(zhí)行句柄)、智能策略決策句柄(CHPD,smart policy decision context handler)(簡稱策略決策句柄)、訪問憑據(jù)驗證句柄(CHTV,token validation context handler)(簡稱憑據(jù)驗證句柄)、日志記錄句柄(CHL,log handler)。上述句柄為區(qū)塊鏈的各個節(jié)點,實現(xiàn)智能合約的執(zhí)行、客體上鏈前的驗證和區(qū)塊鏈賬本的維護等。
第一階段為客體上傳階段,主要步驟如下。
Step1所有者將生成的客體上傳到數(shù)據(jù)服務器,數(shù)據(jù)服務器將客體在數(shù)據(jù)服務器的地址和摘要值發(fā)送給所有者。
Step2所有者針對客體生成對應的訪問控制策略上傳到策略管理點。
Step3策略管理點將所有者上傳的訪問控制策略轉化成智能合約的形式,生成智能訪問控制策略(SP,smart policy)發(fā)送給CHSPD,CHSPD 將SP 部署在區(qū)塊鏈上,部署成功后,CHSPD 將SP在區(qū)塊鏈中的地址SPA(smart policy address)發(fā)送給策略管理點進行存儲。所有者根據(jù)客體地址和摘要值等生成客體索引發(fā)送給CHOD,CHOD 將客體索引部署在區(qū)塊鏈上。
第二階段為訪問授權階段,主要步驟如下。
Step4主體生成訪問請求并發(fā)送給策略執(zhí)行點。
圖2 基于區(qū)塊鏈的可溯源訪問控制機制架構
Step5策略執(zhí)行點根據(jù)主體的訪問請求從策略管理點查詢智能訪問控制策略地址,根據(jù)訪問請求和策略地址生成訪問決策請求,并發(fā)送給CHPE。
Step6CHPE 將訪問決策請求發(fā)送給CHPD。CHPD 根據(jù)訪問決策請求中的策略地址調用對應的智能合約,智能合約生成屬性查詢請求發(fā)送給PIP,PIP 將屬性發(fā)送給智能合約,智能合約根據(jù)屬性進行訪問授權判斷,生成訪問控制結果。CHPD 將訪問控制結果發(fā)送給CHPE。
Step7CHPE 根據(jù)訪問控制結果生成訪問授權日志和訪問憑據(jù),CHPE 和CHL 分別將訪問憑據(jù)和訪問授權日志記錄在區(qū)塊鏈上,同時將訪問憑據(jù)發(fā)送給主體。
第三階段為客體訪問階段,主要步驟如下。
Step8主體生成客體請求,并將客體請求發(fā)送給策略執(zhí)行點,策略執(zhí)行點將客體請求發(fā)送給數(shù)據(jù)服務器。
Step9數(shù)據(jù)服務器將客體請求中主體的訪問憑據(jù)發(fā)送給CHTV,CHTV 對訪問憑據(jù)有效性進行驗證,并把驗證結果發(fā)送給數(shù)據(jù)服務器,CHL 將訪問日志記錄在區(qū)塊鏈上。
Step10對于通過驗證的訪問憑據(jù),數(shù)據(jù)服務器將客體發(fā)送給主體。
基于區(qū)塊鏈的可溯源訪問控制機制具有以下優(yōu)勢。
1) 利用區(qū)塊鏈公開透明、無中心、不可篡改等優(yōu)點,基于區(qū)塊鏈的可溯源訪問控制機制把訪問控制策略、訪問控制執(zhí)行和策略決策過程記錄在區(qū)塊鏈中,有效防止了策略執(zhí)行點和策略決策點被收買或者攻擊造成的非法授權或者拒絕訪問請求等安全問題,同時避免了集中授權造成的性能瓶頸問題。
2) 區(qū)塊鏈中詳細記錄了訪問授權日志、訪問日志,訪問請求主體可以通過區(qū)塊鏈查看訪問授權日志記錄,確保自己沒有被非法拒絕。
3) 所有者也可以通過區(qū)塊鏈查看客體訪問過程,保證自己的客體資源沒有被非法授權或者過度授權。
4) 超級用戶可以通過查看區(qū)塊鏈訪問授權和訪問過程,實現(xiàn)整個過程的可追蹤和溯源。
5) 策略決策點和策略執(zhí)行點可以通過區(qū)塊鏈證明自己誠實地執(zhí)行訪問控制策略。
本節(jié)詳細介紹基于區(qū)塊鏈的可溯源訪問控制機制如何進行客體上傳、訪問授權和客體訪問。為提高訪問控制和數(shù)據(jù)追蹤溯源的效率,本文將區(qū)塊鏈分成客體鏈objectBlockChain 和日志區(qū)塊鏈logBlockChain。objectBlockChain 用于記錄智能訪問控制策略、客體索引、訪問憑據(jù),logBlockChain 用于記錄訪問授權日志和訪問日志??腕w上鏈時,多個節(jié)點通過實用拜占庭容錯(PBFT,practical Byzantine fault tolerance)算法進行共識,各個節(jié)點調用函數(shù)putData(data)將data上傳到區(qū)塊鏈上,同時調用函數(shù)getData(data)得到區(qū)塊鏈上的數(shù)據(jù),data 可以為任意類型和結構的數(shù)據(jù)。
5.1.1客體上傳
所有者調用算法1 進行客體上傳。
算法1objectUpload(object,policy)
輸入待上傳的客體object 和對應的訪問控制策略policy
輸出客體部署結果flag,flag=true 表示客體部署成功,flag=false 表示客體部署失敗
客體上傳協(xié)議如圖3 所示。在客體上傳時,所有者調用函數(shù)objectReposit()將客體上傳給數(shù)據(jù)服務器進行存儲,得到客體地址object_address,計算客體的摘要值 object_hash 。所有者根據(jù)object_address、object_hash、object_attribute 等信息生成客體索引object_index。采用鏈下方式存儲的客體具有以下優(yōu)點:1) 區(qū)塊鏈上僅存儲客體索引而不是客體本身,提高了客體的安全性和隱私性;2) 在對客體訪問時,通過對比摘要值對客體完整性進行驗證,有效避免客體在存儲和傳輸過程中被篡改的風險;3)通過客體地址可以快速找到待訪問的客體,提高客體訪問效率,如果客體為敏感的信息,所有者可以將客體以密態(tài)的形式存儲在數(shù)據(jù)服務器中。
圖3 客體上傳協(xié)議
5.1.2訪問控制策略部署
為了提高訪問控制策略轉化效率,降低所有者的負擔,本文將策略管理點分成策略轉化點和策略庫,其中策略轉化點負責訪問控制策略轉化。策略轉化點調用函數(shù)policyTranslate()為policy 生成策略標識符policyID,并將policy 轉化成智能合約的形式,得到智能策略smartpolicy。策略轉化成功后,CHSPD 調用函數(shù)policyDevelop()將smartpolicy 部署在客體區(qū)塊鏈上,并返回smartpolicy 在客體區(qū)塊鏈的地址smartpolicy_Address。策略部署成功后,策略管理點調用函數(shù)policyReposit()將policyID、smartpolicy_Address、policy 存儲在策略庫中,便于后續(xù)訪問控制策略查詢。
除了所有者針對客體制定的訪問控制策略外,訪問控制系統(tǒng)還會針對單個或多個客體制定系統(tǒng)訪問控制策略。對于系統(tǒng)訪問控制策略,同樣按照上述方法進行策略部署和存儲。
智能訪問控制策略部署成功后,所有者將object_index 發(fā)送給CHOD,CHOD 將object_index部署在客體鏈上,完成客體及訪問控制策略的部署。
CHSPD 和CHOD 為客體區(qū)塊鏈網(wǎng)絡的節(jié)點,維護區(qū)塊鏈賬本和智能合約的運行。在客體上鏈和策略部署過程中,不同節(jié)點之間通過PBFT 算法達成共識。
對于客體上鏈和訪問控制策略的制定與部署,所有者可以委托可信第三方進行。
在基于區(qū)塊鏈的可溯源訪問控制機制中,對于同意授權的訪問請求生成token,token 詳細記錄了訪問客體時需要滿足的時間、地點等屬性信息。通過算法2 對主體的AR 進行授權評估,訪問授權協(xié)議如圖4 所示。策略管理點調用函數(shù)policyQuery()根據(jù) AR 在策略庫中查找對應的 policy 及smartpolicy_Address。策略執(zhí)行點根據(jù)訪問請求和策略地址生成訪問控制請求發(fā)送給CHPD。CHPD根據(jù)smartpolicy_Address 調用對應的智能合約對訪問請求進行評估。在策略評估過程,根據(jù)需要從策略信息點查找策略評估需要的主體屬性、客體屬性和環(huán)境屬性,生成訪問控制結果accessResult 和訪問授權結果flag。CHPD 將訪問授權結果記錄在客體區(qū)塊鏈上。對于肯定授權,CHPE 調用函數(shù)tokenGenerate()生成token,并將其記錄在客體區(qū)塊鏈上。CHPE 根據(jù)訪問控制結果調用函數(shù)authorizeLogGenerate() 生成訪問授權日記authorizeLog,并將其發(fā)送給CHL,CHL 將訪問授權日志記錄在日志區(qū)塊鏈上。日志區(qū)塊鏈上詳細記錄了肯定授權日志和否定授權日志。
算法2accessAuthorize(AR)
輸入主體對客體訪問請求AR
輸出授權結果 flag 和訪問憑據(jù) token,flag=true 表示同意授權,flag=false 表示不同意授權
圖4 訪問授權協(xié)議
所有的訪問控制結果不管是肯定授權還是否定授權都記錄在日志區(qū)塊鏈上,主體通過日志區(qū)塊鏈可以查看訪問請求是否被拒絕,同時可以對授權結果進行驗證,防止策略執(zhí)行點和策略決策點聯(lián)合起來進行欺騙行為。通過訪問授權日志對客體的訪問請求進行追蹤和溯源,防止惡意主體進行非法訪問或者重放攻擊等。在訪問授權結束后,將token記錄在客體區(qū)塊鏈中,便于后續(xù)主體對客體訪問時,對主體訪問憑據(jù)的有效性進行驗證,有效避免了一次授權,主體對客體無限次訪問,同時可以杜絕主體將訪問憑據(jù)泄露給其他非法主體等安全問題。
在訪問授權階段,對于同意授權的AR,CHPE會給主體返回一個token。主體在提出客體請求時,將token 一起發(fā)送給策略執(zhí)行點??腕w訪問協(xié)議如圖5 所示,通過算法3 實現(xiàn)主體對客體的訪問。策略執(zhí)行點將主體的訪問憑據(jù)發(fā)送給數(shù)據(jù)服務器DS,CHTV調用函數(shù)tokenValidate()對token的有效性進行驗證,調用函數(shù)accessLogGenerate()生成訪問日志accessLog,并將訪問日志accessLog發(fā)送給CHL,CHL 將訪問日志記錄在日志區(qū)塊鏈上。
算法3objectAccess(OR,flag,object)
輸入主體對客體請求OR
輸出訪問結果flag,flag=true 表示訪問憑據(jù)驗證通過,并將客體object 發(fā)送給主體subject;flag=false 表示表示訪問憑據(jù)驗證沒有通過
在客體訪問過程中,所有token 及其驗證結果都記錄在區(qū)塊鏈上,主體通過區(qū)塊鏈可以查看訪問憑據(jù)的驗證結果,有效防止了數(shù)據(jù)服務器非法拒絕服務。同時日志記錄句柄將訪問日志accesslog 記錄在日志區(qū)塊鏈上,后續(xù)可以通過日志區(qū)塊鏈實現(xiàn)客體訪問追蹤和溯源。
圖5 客體訪問協(xié)議
token 是主體訪問客體的唯一憑據(jù),詳細記錄了主體訪問客體時需要滿足的各種條件。關鍵字?值(key-value)的方式是區(qū)塊鏈中廣泛采用的數(shù)據(jù)結構,本文采用關鍵字?值的方式設計訪問憑據(jù)的數(shù)據(jù)結構。訪問憑據(jù)關鍵字包括主體、所有者、客體地址。訪問憑據(jù)記錄了訪問憑據(jù)ID 值、訪問憑據(jù)摘要值、隨機數(shù)、策略地址、策略ID 號、客體摘要值、客體允許操作的時間{time}、允許對客體進行的操作{op}、主體操作客體需要滿足的環(huán)境屬性{e}、客體屬性、主體屬性。{time}為允許操作的時間集合、{op}為主體可對客體進行的操作集合、{e}為主體對客體進行操作時需要滿足的環(huán)境屬性集合,包括對客體操作的位置屬性、操作平臺屬性等。
訪問憑據(jù)詳細記錄了主體對客體進行操作所必須滿足的各種條件。通過訪問憑據(jù)可以實現(xiàn)對客體細粒度的訪問控制。
共識算法是區(qū)塊鏈中的關鍵技術,實用拜占庭容錯算法已經(jīng)被廣泛應用于各種場景。本文智能訪問控制策略部署、客體部署、訪問授權、訪問授權日志記錄、訪問日志記錄都通過PBFT 共識算法將相關數(shù)據(jù)記錄到客體區(qū)塊鏈和日志區(qū)塊鏈中。下面講解如何利用PBFT 算法將智能訪問控制策略部署到客體區(qū)塊鏈中。
本文通過策略部署句柄CHSPD 將智能訪問控制策略部署到客體區(qū)塊鏈中。CHSPD 至少有3f+1個,其中f為可能失效副本的最大個數(shù),f≥1。本文根據(jù)CHSPD 的信任度將CHSPD 分為主節(jié)點CHSPD_primary 和副節(jié)點CHSPD_replica,主節(jié)點負責產(chǎn)生新的區(qū)塊,共識過程如圖6 所示,包括以下幾個主要步驟。
廣播(broadcast)。PAP 生成智能訪問控制策略部署請求,將smartpolicy 發(fā)送給CHSPD,CHSPD驗證請求的有效性,將策略部署消息發(fā)送給全網(wǎng)策略部署句柄。
預準備(pre-prepare)。主節(jié)點CHSPD_primary收到策略部署消息后,生成預準備消息pre-prepare message,并在全網(wǎng)公布預準備消息。
圖6 共識過程
準備(prepare)。副節(jié)點CHSPD_replica 收到預準備消息后,驗證預準備消息的有效性,生成準備消息prepare message,并將準備消息廣播給全網(wǎng)其他節(jié)點。
確認(commit)。副節(jié)點CHSPD_replica 收到其他節(jié)點發(fā)送的準備消息,驗證其他節(jié)點發(fā)送的準備消息與主節(jié)點發(fā)送的預準備消息是否一致。當該副節(jié)點收到2f個準備消息并驗證通過時,生成確認消息,并在全網(wǎng)公布確認消息。
響應(reply)。一旦副節(jié)點CHSPD_replica 收到2f+1 個確認消息(包括其自己),則認為策略部署達成了共識,并把執(zhí)行結果發(fā)送給主節(jié)點和策略管理點。主節(jié)點不斷收集策略部署,進行排序生成新的區(qū)塊,并將新的區(qū)塊添加到客體區(qū)塊鏈上。達成共識后,記錄在區(qū)塊鏈上的智能訪問控制策略就是永久的。
在智能策略部署過程中,主節(jié)點 CHSPD_primary 負責智能策略的收集并打包成塊,達成共識后將新的區(qū)塊增加到區(qū)塊鏈上。主節(jié)點的選取根據(jù)各個節(jié)點的信任度進行選擇,節(jié)點的信任度根據(jù)節(jié)點在共識過程的參與度進行動態(tài)評價,如果主節(jié)點存在區(qū)塊記錄失誤,將取消該節(jié)點的主節(jié)點權限并降低該節(jié)點的信任度。
對于客體部署、訪問授權、訪問授權日志記錄、訪問憑據(jù)驗證和訪問日志記錄等共識過程,采用類似的方法。策略部署節(jié)點、客體部署節(jié)點、策略執(zhí)行節(jié)點、策略決策點等可以為同一個節(jié)點,也可以為不同的節(jié)點,可以根據(jù)訪問控制系統(tǒng)的規(guī)模、節(jié)點的能力以及隱私程度進行選擇。
接下來,從安全性和性能2 個方面對本文提出的訪問控制機制進行分析。
本文提出的基于區(qū)塊鏈的可溯源訪問控制機制將訪問控制策略、訪問授權、客體訪問過程都記錄在區(qū)塊鏈上,繼承了區(qū)塊鏈無中心、透明性、分布式和不可篡改等優(yōu)點。
1) 無中心、透明性
本文提出的訪問控制機制通過執(zhí)行部署在客體區(qū)塊鏈上分布式的智能合約進行訪問評估,實現(xiàn)訪問授權過程的無中心化和透明性。
2) 不可偽造性
利用區(qū)塊鏈不可篡改的特點,將所有訪問授權日志(包括肯定授權和否定授權)和訪問日志(肯定訪問和否定訪問)都記錄在日志區(qū)塊鏈上,任何人或組織都不可以偽造錯誤的訪問控制授權結果,有效杜絕了策略執(zhí)行點和策略決策點被攻擊或收買造成的安全問題;訪問憑據(jù)和訪問日志記錄在區(qū)塊鏈上,有效杜絕了數(shù)據(jù)服務器的非法拒絕訪問等安全問題。
3) 可追蹤溯源
所有的訪問授權日志和客體訪問日志都詳細記錄在日志區(qū)塊鏈上,所有者(或者超級用戶)可以通過區(qū)塊鏈查看整個客體授權和訪問過程,驗證策略執(zhí)行點、策略決策點、數(shù)據(jù)服務器是否按照訪問控制策略對客體進行受控訪問;所有者(或者超級用戶)通過日志可以對客體訪問和流轉過程進行追蹤和溯源,防止對客體進行錯誤的肯定授權或過度授權;主體可以通過區(qū)塊鏈查看整個授權結果、授權日志和訪問日志,防止策略執(zhí)行點和策略決策點拒絕訪問或者錯誤授權,防止數(shù)據(jù)服務器非法拒絕訪問;數(shù)據(jù)服務器可以通過區(qū)塊鏈證明自己按照訪問控制策略對客體進行受控訪問。
4) 隱私性和可信性
在客體訪問過程中,將客體存儲在第三方服務器,客體地址、摘要值等生成的客體索引存儲在客體區(qū)塊鏈上,保護了客體隱私性。同時客體索引中包含了客體摘要值,防止半可信數(shù)據(jù)服務器對客體篡改,保護客體的可信性和完整性。
為測試本文提出的訪問控制機制性能,本節(jié)搭建了聯(lián)盟鏈實驗環(huán)境。本次實驗的硬件環(huán)境如下:處理器為AMD 3600×1,內存為3 GB,操作系統(tǒng)為centos。在進行性能評估時,只測試鏈上的操作速度,比如客體索引上鏈、訪問控制策略部署、智能訪問控制策略評估、日志查看等,對于鏈下運行速度,比如客體索引生成、訪問控制策略轉化不予考慮。
在基于區(qū)塊鏈的可溯源訪問控制機制中,客體索引上鏈、訪問控制策略部署等都屬于寫區(qū)塊鏈,訪問控制策略評估為執(zhí)行區(qū)塊鏈上的智能合約并將日志寫入?yún)^(qū)塊鏈,日志查看為讀區(qū)塊鏈的數(shù)據(jù)。下面通過測試讀區(qū)塊鏈、寫區(qū)塊鏈速度來對基于區(qū)塊鏈的可溯源訪問控制機制進行性能評估。
區(qū)塊鏈的讀寫速度不僅與硬件環(huán)境有關,同時與區(qū)塊鏈網(wǎng)絡中的節(jié)點個數(shù)也有很大關系。本文配置一個排序節(jié)點,peer 節(jié)點個數(shù)分別為5 和10,測試不同條件下讀寫區(qū)塊鏈的速度。測試時,通過模擬以不同速度不斷給區(qū)塊鏈發(fā)送交易,這些交易包括讀區(qū)塊鏈和寫區(qū)塊鏈,測試不同環(huán)境下讀寫區(qū)塊的速度和完成交易所花費的時間。
1) 讀寫區(qū)塊鏈速度
配置peer 節(jié)點個數(shù)為5,讀寫區(qū)塊鏈速度和時間分別如表1 和表2 所示。
表1 5 個peer 節(jié)點讀寫區(qū)塊鏈速度
表2 5 個peer 節(jié)點讀寫區(qū)塊鏈時間
從表1 和表2 中可以看出,讀區(qū)塊速度大于寫區(qū)塊速度,讀區(qū)塊的時間小于寫區(qū)塊的時間。這是因為寫操作涉及創(chuàng)建新的區(qū)塊、公布賬本等,包含的流程比讀操作多。
2) 讀寫區(qū)塊鏈速度與peer 節(jié)點關系
將區(qū)塊鏈peer 節(jié)點個數(shù)配置為10,分別測試讀寫區(qū)塊鏈速度和時間,如表3 所示。通過對比表1 和表3、表2 和表4 的數(shù)據(jù)發(fā)現(xiàn),隨著peer節(jié)點個數(shù)的增加,讀和寫的速度在降低。因為隨著節(jié)點的增加,共識機制占用的時間增加,導致讀寫區(qū)塊鏈速度下降。
表3 10 個peer 節(jié)點讀寫區(qū)塊鏈的速度
從上述實驗分析可以看出,基于區(qū)塊鏈的可溯源訪問控制機制效率與聯(lián)盟鏈中節(jié)點個數(shù)有很大關系。節(jié)點個數(shù)影響訪問控制系統(tǒng)的規(guī)模,應在保證訪問控制規(guī)模和效率的前提下,選擇合適的節(jié)點個數(shù)。此外,交易的長度和結構也影響讀寫區(qū)塊鏈的效率,為提高訪問控制系統(tǒng)效率,應盡可能優(yōu)化各個交易的數(shù)據(jù)結構,降低交易時延。
表4 10 個peer 節(jié)點讀寫區(qū)塊鏈時間
針對傳統(tǒng)訪問控制機制存在集中授權、訪問過程不透明、不可追蹤和溯源等缺點,充分利用區(qū)塊鏈無中心、透明性、不可篡改等優(yōu)點,提出了基于區(qū)塊鏈的可溯源訪問控制機制。所提機制將訪問控制策略以智能合約的形式部署在區(qū)塊鏈上,訪問控制決策判斷通過執(zhí)行部署在區(qū)塊鏈上的智能合約實現(xiàn),保證整個訪問授權過程的透明性;為保護客體資源的隱私性,提出采用鏈下和鏈上相結合的方式,客體資源存儲在鏈下半可信的數(shù)據(jù)服務器,通過客體存儲地址和摘要值等信息生成客體索引存儲在客體區(qū)塊鏈上,授權主體通過客體地址訪問客體資源;對于授權主體頒發(fā)訪問憑據(jù),將訪問憑據(jù)部署在區(qū)塊鏈上,訪問憑據(jù)詳細記錄訪問權限以及需要滿足的條件,主體訪問客體時,通過區(qū)塊鏈驗證訪問憑據(jù)的真實性和可信性,有效杜絕了一次授權多次訪問的問題,同時實現(xiàn)了細粒度的訪問控制;將訪問授權日志和訪問日志記錄在日志區(qū)塊鏈上,通過日志區(qū)塊鏈實現(xiàn)訪問授權和訪問過程的可追蹤和可溯源。通過對基于區(qū)塊鏈的可溯源訪問控制機制進行安全性分析發(fā)現(xiàn),所提機制在保證客體資源隱私性的前提下,實現(xiàn)了訪問過程透明性、無中心、可追蹤和可溯源。
下一步將結合具體應用場景分析論證方案的可行性和適用性,并對方案性能進行分析,研究數(shù)據(jù)訪問溯源機制。