?

基于區塊鏈上策略密文檢索的屬性訪問控制方案*

2024-01-11 11:00陳立全賈繼廣王澤雨于坤良
密碼學報 2023年6期
關鍵詞:請求者訪問控制密文

陳立全, 賈繼廣, 王澤雨, 于坤良

東南大學 網絡空間安全學院, 南京210096

1 引言

物聯網、大數據等新興技術的飛速發展使得人們的生活方式發生了巨大的變化.在信息時代中, 數據是技術發展的關鍵.然而, 個人掌控的數據往往是有限的, 因此數據的共享聚合已經成為了不可避免的趨勢.近些年來, 共享數據的前景對人們的吸引力也越來越大[1], 數據的共享、收集、分析、存儲也催生出了越來越多的實體[2,3].而在數據共享的過程中, 能夠防止非法用戶惡意訪問和合法用戶越權訪問的訪問控制技術是保護數據安全共享的重要手段之一.

如今的訪問控制系統雖然可以實現對客體資源的權限控制, 但大多引入了中心實體概念.系統在該實體中存儲訪問控制策略并進行授權決策.在這個基礎上, 為了保證系統的安全性, 中心實體的可信性需要由法律來約束.然而, 中心化的系統往往容易遭受到黑客的攻擊, 并且隨著業務量的增加, 中心化實體的存儲能力、決策效率也會逐漸接近瓶頸.除此之外, 過度依賴中心實體也使得系統的擴展性受到限制, 從而影響系統的性能.由于區塊鏈技術具有去中心化、不可篡改、難以偽造的特性, 因此將區塊鏈技術引入訪問控制系統, 為中心化問題提供了最佳的解決方案.另一方面, 訪問控制策略作為訪問控制技術的重要組成部分之一, 定義了對訪問請求的行為進行驗證、授權和記錄的方式.而傳統訪問控制技術中的訪問控制策略存在中心化明文存儲問題, 即便是去中心化存儲后, 以明文存儲的隱私策略也易收到攻擊[4].為了增強策略的隱私性, 系統應該利用加密技術對訪問控制策略進行主動保護, 以避免攻擊者獲取存儲在系統中的訪問控制策略.

針對訪問控制模型中心化問題,在物聯網領域,史錦山等人[5]提出了基于區塊鏈的物聯網(IoT)訪問控制框架(blockchain based access control frame for Internet of things, BBIAC).該框架使用ABAC 模型中的屬性作為決策要素, 同時利用區塊鏈進行數據的存儲和運算.杜瑞忠等人[6]提出了一種基于區塊鏈的分布式訪問控制方法(distributed architecture based on hierarchical blockchain, DAHB), 引入層級概念, 以ABAC 模型為基礎, 利用區塊鏈技術實現IoT 設備的靈活、動態訪問.Figueroa 等人[7]著重解決設備射頻識別(radio frequency identification, RFID) 技術的安全訪問問題.該方法利用ABAC 模型并結合區塊鏈技術在RFID 系統中實現了訪問控制模型, 并將系統部署在本地以及測試網絡環境中, 驗證了系統的可行性.Dorri 等人[8]引入了token 來緩解區塊鏈存儲時間開銷大的問題.Ma 等人[9]的基于區塊鏈的分布式密鑰管理架構(blockchain-based distributed key management architecture, BDKMA)方案可以實現跨域訪問.Novo 等人[10]提出一種基于區塊鏈技術的物聯網全分布式訪問控制的新型架構,該模型在可伸縮性方面做了優化.Lin 等人[11]提出了一個由四個有形層組成的分層框架, 該方案可以對資源實現細粒度的訪問.上述方案中雖然引入區塊鏈技術來避免訪問控制模型過度依賴中心化, 但是框架中訪問控制策略以明文存儲于鏈中, 沒有考慮到策略的隱私保護性問題.同時, 在這些方案中, 訪問控制策略和客體資源的存放會給區塊鏈帶來巨大的存儲開銷.

現有的一些基于區塊鏈的訪問控制方案將一些敏感信息,如用戶角色、用戶屬性直接明文存儲到鏈上,使用智能合約來執行訪問策略, 雖然使用區塊鏈解決了傳統訪問控制方案中的單一節點故障問題和信任需求問題, 但是對于訪問控制過程中, 用戶的隱私泄露問題沒有進行解決, 該類方案中, 任意接入區塊鏈的節點都能獲取鏈上存儲的所有敏感信息, 為了進行隱私保護, 需要引入一些技術如可搜索加密、環簽名、同態加密、屬性基加密、屬性基簽名等.其中可搜索加密技術在復雜的多用戶多屬性場景下可以通過公私鑰對實現明文的加密和密文檢索功能, 適用于更加豐富的場景.為了解決隱私保護問題, Do 等人[12]設計了一個利用區塊鏈技術來提供一個安全的分布式數據存儲與關鍵字搜索服務的系統, 該方案使用區塊鏈作為鏈下數據存儲訪問、權限授予和搜索令牌生成的主干, 可以使數據所有者對需要在遠程加密數據集上搜索部分有用信息的數據請求者進行權限授予.Feng 等人[13]將分層屬性加密與線性秘密共享相結合, 提出一種基于可搜索屬性加密的區塊鏈數據隱私保護控制方案.這兩個方案都結合了區塊鏈和可搜索加密技術,解決了數據隱私問題, 但沒有引入基于屬性的概念, 不能實現對資源進行細粒度的訪問.Zhang 等人[14]提出了一種用于物聯網設備授權訪問的訪問控制模型.該方案基于屬性并結合區塊鏈技術, 但引入中間認證節點作為代理接受并處理設備的認證請求, 這使得該模型擴展性強且可滿足高并發要求.同時該方案對授權過程以及結果進行了加密, 起到了一定的隱私保護作用.然而, 該方案中區塊鏈只起到了存儲訪問記錄的作用, 并沒有完全擺脫對中心化實體的依賴.

綜上所述, 目前區塊鏈與ABAC 模型融合的難點和方向如下: 第一, 以往兩種技術融合時, 有的側重于應用區塊鏈的去中心化能力, 擺脫第三方的依賴, 但忽略了訪問控制模型中的隱私保護問題.有的側重于利用密碼技術保護模型中的數據隱私, 而區塊鏈僅作為記錄工具, 對第三方還存在依賴, 需要一種可以既保護模型數據隱私又可以充分利用區塊鏈特性的方案; 第二, 區塊鏈的存儲能力有限, 不能應對大數據量的存儲.客體資源和訪問控制策略都存放于鏈上可能會使得區塊鏈的負擔較重, 新的方案應該盡可能地降低區塊鏈的存儲壓力; 第三, 考慮到模型的應用場景, 在方案設計時應兼顧考慮ABAC 模型的細粒度、訪問效率等問題.為了解決這些問題, 本方案使用公鑰可搜索加密技術對訪問控制策略進行加密, 生成的策略密文占據很小空間, 在保護了策略隱私的同時緩解了區塊鏈的存儲壓力.同時, 使用區塊鏈系統的智能合約會對策略密文進行判別, 以此兼顧ABAC 模型的細粒度.

本文第2 節給出了BPCS-ABAC 的系統模型和設計目標, 并詳細闡述了BPCS-ABAC 的方案構造,包括方案的智能合約設計以及方案的運行流程.第3 節從時間和空間兩個角度, 仿真分析了BPCS-ABAC中的關鍵步驟, 包括訪問控制策略密文生成時間、陷門匹配時間、索引搜索時間、策略密文空間消耗、陷門請求空間消耗等, 并與ABAC 和其他方案進行對比.第4 節總結全文.

2 預備知識與定義

2.1 區塊鏈技術

區塊鏈技術的本質是一種去中心化的分布式技術, 通俗來說, 是多個數據區塊基于一種可信共識機制,通過時間順序連接起來的鏈式結構, 結合現代密碼學技術, 擁有不可篡改、匿名性、可追溯、不可偽造等特性.

區塊鏈技術發展至今, 大體可分為區塊鏈1.0 時代和區塊鏈2.0 時代, 其技術架構圖如圖1 所示,圖1(a)為區塊鏈1.0 時代架構圖, 圖1(b)為區塊鏈2.0 時代架構圖.借助傳統網絡分層方式, 可將區塊鏈技術分為應用層、激勵層、共識層、網絡層、數據層.在區塊鏈1.0 時代, 作為一種分布式去中心化架構下保證數字貨幣交易可信的技術方案, 區塊鏈利用共識機制和P2P 網絡技術實現區塊鏈數據傳輸、驗證和冗余備份, 利用帶時間戳且加密的鏈式區塊結構存儲數據, 來保證不可篡改及可追溯性[15].隨著技術的不斷發展, 區塊鏈進入2.0 時代, 區塊鏈被當成是一種分布式、去中心化的計算與存儲架構, 提供了鏈上腳本技術, 以以太坊智能合約為代表, 實現了各種頂層復雜應用場景的業務邏輯, 為區塊鏈的可編程性提供了基礎, 進一步加速了區塊鏈在不同領域的應用[16–21].

圖1 區塊鏈技術架構圖Figure 1 Blockchain technology architecture diagram

2.2 智能合約技術

智能合約是“執行合約條款的計算機化交易協議”[22], 合約的字節碼和交易都存儲在區塊鏈上, 對所有用戶可見.以太坊主要有兩種賬戶類型, 一類是外部擁有賬戶(external owned account, EOA), 一類是智能合約賬戶, 這兩類賬戶類型都使用20 字節的地址作為其在以太坊網絡內的唯一身份標識.EOA 由一對公私鑰對進行控制, 用于管理以太坊, 并通過發送交易與智能合約進行互動.合約賬戶則是由沒有密鑰的代碼控制, 主要用于實現不同的功能要求和記錄合約狀態的變化.與EOA 賬戶不同的是, 智能合約賬戶不能發送交易, 但可以通過發送消息調用來調用其他的智能合約.智能合約的創建是通過一個外部賬戶發起一個轉賬交易到0x0 的地址.其中轉賬金額為0, 但是要支付Gas 費.當一個全節點打包交易時,有一些交易是對智能合約的調用, 那么全節點應先執行完智能合約后再進行挖礦.智能合約在執行過程中,任何狀態的修改都只是對全節點本地的狀態樹的修改, 只有當該全節點獲得記賬權發布一個區塊時才能獲得Gas 費, 其他節點不獲得Gas 費, 并且全網的礦工節點必須更新自己本地的全節點的狀態信息, 最終形成全網共識.由于以太坊是一個只添加的分布式賬本, 一旦智能合約被部署到區塊鏈上, 即使檢測到錯誤,也不可以對已部署的智能合約進行修改.以太坊區塊鏈主要使用以太坊虛擬機(EVM) 來運行智能合約.EVM 是一種基于堆棧的架構, 它提供了一個分離的執行環境, 以保護合同執行不受外部攻擊, 避免惡意合同影響整個系統.智能合約的執行取決于其代碼, 例如, 如果一個合同不包含可以轉移Ethers 的功能, 即使合約的創建者也不能提取Ethers.智能合約一旦被部署到區塊鏈網絡中, 只要整個網絡存在, 除非執行自毀功能, 合約就會一直存在.自毀是合約的一種特殊功能, 如果執行自毀功能, 合約將消失, 其余額將轉移到一個特定的地址中.

2.3 基于屬性的訪問控制模型

基于屬性的訪問控制(attribute-based access control, ABAC) 模型的提出解決了開放式環境下的訪問控制需求, 該模型授權較為靈活, 同時能實現細顆粒度的訪問控制.

ABAC 模型中的主要實體為資源請求者、被訪問資源、操作以及環境.在模型中這些實體的表現形式都為屬性, 分別通過主體屬性、客體屬性、權限屬性以及環境屬性來描述, 根據不同的訪問需求從而靈活設置屬性間的關系.ABAC 模型的示意圖如圖2 所示.

圖2 ABAC 模型示意圖Figure 2 ABAC system model

ABAC 模型細化為如下幾個部分: 用戶集、策略實施點(policy enforcer point,PEP)、資源集、策略裁決點(policy decision point, PDP)、策略管理點(policy arrangement point, PAP)、屬性權威(attribute authority, AA).

用戶集發送原始請求, 首先經過策略執行點(PEP) 后, 由屬性權威(AA) 負責提供主體、客體和環境屬性.隨后PEP 構造出基于屬性的訪問請求, 并再次經過PEP 發送給策略裁決點(PDP).緊接著PDP從策略管理點(PAP)處得到策略信息,并對此屬性訪問請求進行判定并發送結果至PEP 處,最終由PEP執行判定結果.

2.4 公鑰可搜索加密技術

公鑰可搜索加密技術首先由Boneh 等人[23]提出, 與對稱可搜索加密技術不同之處在于該方案使用雙線性對構造生成密鑰, 運算效率較低, 但數據發布者和請求者不需要事先進行密鑰協商, 更加適用于數據共享的場景.該算法一般包括以下5 個步驟:

(1) 初始化Params=Setup(k): 輸入安全參數k, 輸出全局參數Params.

(2) 密鑰生成(pk,sk)=KeyGen(Params): 輸入參數Params, 生成數據請求者公鑰pk 和私鑰sk.

(3) 密文和索引生成(Cw,Iw) = PEKS(w0,pk): 輸入數據請求者的公鑰pk 和關鍵詞w0, 輸出關鍵詞密文Cw和密文索引Iw.

(4) 陷門生成Tw=Trapdoor(sk,w1): 數據請求者的私鑰sk 和輸入關鍵字w1, 輸出陷門Tw.

(5) 匹配搜索算法b=Test(pk,Cw,Tw,Iw): 輸入數據請求者的公鑰pk、密文Cw、陷門Tw和密文索引Iw, 將陷門Tw與密文索引Iw進行匹配, 匹配成功后比較密文中的關鍵字w0=w1, 如果相等, 輸出1, 否則輸出0.

公鑰可搜索加密技術方案如圖3 所示, 包括云服務器、數據發布者和數據請求者三個實體.

圖3 公鑰可搜索加密方案示意圖Figure 3 Schematic diagram of public key searchable encryption scheme

3 BPCS-ABAC 方案

3.1 設計目標

在以往的傳統訪問控制模型中, 所有的訪問控制策略都存于一個權威實體, 并由其來實現決策授權,中心化問題嚴重, 所以本文所提出的方案希望引入區塊鏈來解決此問題; 同時, 由于訪問控制策略是系統安全的關鍵, 并且區塊鏈上的數據公開透明, 如何保護訪問控制策略的隱私性也是重點關注的問題; 與此同時, 還需要考慮優化數量巨大的訪問控制策略所消耗的空間, 并使其能夠被合理存儲.因此, 本方案應具有如下設計目標:

(1) 利用區塊鏈的去中心化、不可篡改等特性, 解決傳統訪問控制模型中依賴中心化實體的問題; 同時交易數據被存儲在區塊鏈上, 方便了溯源工作的進行.

(2) 針對訪問控制策略的隱私保護性的問題, 利用公鑰可搜索加密技術特性, 將訪問控制策略進行加密后上鏈存儲, 相比于明文存儲訪問控制策略的訪問控制模型, 進一步提升訪問控制方案的安全性, 避免被攻擊者找到漏洞, 并對方案的安全性進行證明.

(3) 保證方案的存儲高效性, 區別于將數量巨大的客體資源和訪問控制策略都存放于鏈上, 僅將訪問控制策略高效地存儲在區塊鏈上, 降低區塊鏈的存儲壓力, 為訪問控制策略提供一個安全有效的存儲空間.

3.2 系統模型

本文提出新的BPCS-ABAC 系統模型如圖4 所示.本方案將傳統的ABAC 模型與區塊鏈相融合,使用區塊鏈的智能合約實現ABAC 中屬性權威、策略管理點和策略決策點的功能, 主要包括資源請求者(resource requester)、資源發布者(resource publisher) 和區塊鏈(blockchain) 系統.

圖4 提出的BPCS-ABAC 系統模型Figure 4 Proposed BPSC-ABAC system model

資源請求者: 實質上是BPCS-ABAC 方案的主體, 可以是用戶、物聯網設備等.資源請求者發送資源訪問請求, 擁有密鑰生成節點生成的公私鑰以及作為身份Id 的區塊鏈節點賬戶信息, 同時負責構造陷門,將生成的陷門發送至區塊鏈進行陷門匹配.

資源發布者: 實質上是BPCS-ABAC 方案的客體, 作為客體發布訪問控制策略和客體資源, 擁有作為身份Id 的區塊鏈的節點賬戶信息, 同時負責使用資源請求者公鑰加密訪問控制策略并將策略密文上傳至區塊鏈.

區塊鏈: 本方案采用區塊鏈應用模式中的聯盟鏈架構進行構造, 聯盟鏈具有部分去中心化的特點, 由多個組織或機構共同管理, 在保留公有鏈的大部分特征, 如建立節點間的信任、保證鏈上的數據不易被篡改等特征的條件下, 還加入了認證機制, 只有經過認證的節點才準許加入聯盟鏈內.本方案普通礦工節點通過POW 機制進行共識, 除了普通的礦工節點外, 還有密鑰生成節點, 由主要負責系統的初始化, 保存系統主密鑰, 將生成的用戶公私鑰通過安全信道響應給用戶.同時區塊鏈系統還代替ABAC 中屬性權威(AA)、策略管理點(PAP) 和策略裁決點(PDP) 的功能.其中, 此處的AA 只用來存放主客體屬性、動作屬性和環境屬性之間的關系; PAP 執行訪問控制策略密文的管理; PDP 負責訪問控制權限的授予.區塊鏈系統中主要存儲了屬性信息、資源發布者所上傳的策略密文、資源請求者發送的陷門請求, 同時主要負責策略搜索、陷門匹配、訪問權限授予等工作.

3.3 方案構造

3.3.1 智能合約構造

此處對BPCS-ABAC 方案中涉及到的智能合約的偽代碼進行了說明和分析.

(1) 屬性權威合約設計

屬性權威(attribute authority, AA) 本質上是存放了主體屬性、客體屬性、動作屬性和環境屬性相互之間關系的主體.BPCS-ABAC 方案中的AA 是基于智能合約實現的, 代替傳統訪問控制技術中的AA提供屬性查詢.該智能合約具體實現的偽代碼如算法1 所示.

AA 智能合約算法流程描述如下:

①接收并解析原始訪問請求, 得到進行屬性請求構造的元素.

②遍歷區塊鏈存儲節點中存儲屬性類事務的數據塊.

③依次將存儲節點中的屬性與原始請求中的各項元素匹配, 得到對應關系的屬性.④將各項相關屬性組成屬性請求AAR, 作為響應返回.

算法1 AA 智能合約Input: 原始請求(NAR), 區塊鏈存儲節點數據BlocksData Output: 相關的基于屬性的請求(AAR)1 NarDict = narRequestParser(NAR); this = currentBlocksData;2 for i = 1 to blocksData.length do 4 for k = 1 to NarDict.length do 3 for j = 1 to this.length do 5 if match(NarDict[k]) then 6 AAR.add(this.transaction.attribute); continue; //組成屬性請求7 end end 9 end 10 end 11 return AAR.8

(2) 策略管理合約設計

BPCS-ABAC 方案中的策略管理點(policy arrangement point, PAP) 主要采用智能合約實現, 代替PAP 實現策略管理, 具體實現的偽代碼如算法2 所示.

PAP 策略管理算法流程描述如下:

①接收并解析策略搜索索引請求, 得到進行搜索所需要的元素.

②遍歷區塊鏈存儲節點中存儲訪問控制策略密文事務的數據塊.

③根據請求者身份RRID 以及客體資源OID 找到對應的策略密文,加入到Correlate_CPolicy_Set集合中.

④將Correlate_CPolicy_Set 集合返回給PDP 進行策略判決.

算法2 PAP 智能合約Input: 策略搜索索引IndexPolicy, 區塊鏈存儲節點數據BlocksData Output: 相關策略集Correlate_CPolicy_Set 1 (RRID, OID) = elementExtraction(IndexPolicy); this = currentBlocksData;2 for i = 1 to BlocksData.length do 4 if RRID == this.data.RRID and OID == this.data.OID then 3 for j = 1 to this.length do 5 Correlate_CPolicy_Set.add(this.data.CPolicy) //密文加入策略集合end 7 end 8 end 9 return Correlate_CPolicy_Set.//返回策略集合.6

(3) 策略判決合約設計

BPCS-ABAC 方案中的策略裁決點(policy decision point, PDP) 主要采用智能合約實現, 代替傳統訪問控制技術中的PDP 實現訪問結果判定的功能.具體實現的偽代碼如算法3 所示.

PDP 決策算法流程描述如下:

①輸入由屬性請求構成的陷門Tr元素和經過索引篩選得到的訪問控制策略密文的集合.

②遍歷策略密文集合, 利用trapDoorTest 函數依次判斷與屬性請求是否匹配, 如果匹配, 則將策略PID 加入到Permit 集合, 不匹配且符合屬性約束要求的將策略PID 加入到Deny 集合, 否則加入到Unknown 集合.

③遍歷Permit 集合, 如果存在元素說明匹配成功, 返回Permit, 允許訪問; 否則, 遍歷Unknown 集合, 如果不存在元素說明匹配失敗, 返回Deny, 拒絕訪問; 如果前兩種情況都不符合則都歸于Unknown情況, 返回Unknown.

算法3 PDP 智能合約Input: 由屬性訪問請求AAR 構成的陷門Tr, 訪問控制策略密文集CPolicy_Set Output: 判決結果Result 1 Permit_Result_Set = null; Deny_Result_Set = null; Unknown_Result_Set = null;2 for i = 1 to CPolicy_Set.length do Permit_Result_Set.add(CPolicy_Set[i].PID); //添加permit 集合元素6 end 7 else if result = deny then 3 result = trapDoorTest(T, CPolicy_Set[i]);4 if result = permit then 5 Deny_Result_Set.add(CPolicy_Set[i].PID); //添加deny 集合元素9 else if result = unknown then 8 10 Unknown_Result_Set.add(CPolicy_Set[i].PID); //添加unknown 集合元素11 end 12 if Permit_Result_Set! = null then 13 return Permit; //允許訪問14 end 15 else if Unknown_Result_Set == null then 16 return Deny; //拒絕訪問17 else return Unknown; //未知的訪問請求;

3.3.2 方案工作流程

本節所設計的方案實質上是對傳統ABAC 基于區塊鏈技術和公鑰可搜索加密技術的擴展.該方案的工作流程主要分為準備階段和執行階段.準備階段包括系統初始化、系統參數生成、訪問控制策略加密、訪問控制策略密文上鏈; 執行階段包括原始請求訪問、屬性請求構造、訪問陷門構造、策略密文匹配、訪問記錄存儲.

BPCS-ABAC 方案整體的流程圖如圖5 所示.圖中RR 代表資源請求者、RP 代表資源發布者、BC 代表區塊鏈系統、KGN 代表密鑰生成節點、SCAA 代表屬性權威合約、SCPAP 代表策略管理合約、SCPDP代表策略判決合約、NAR 代表原始訪問請求、AAR 代表屬性訪問請求.

圖5 BPCS-ABAC 方案流程圖Figure 5 Flow chart of BPCS-ABAC scheme

(1) 系統初始化

密鑰生成節點處生成系統公私鑰的過程如式(1)所示.系統選擇并輸入安全參數k后, 輸出系統的主密鑰msk =sN(s ∈Z?q).系統的公共安全參數設定為Par = (G1,G2,f,q,N,h), 其中G1、G2為階數為q的大素數群,N為G1群中的隨機生成元且為大素數,f為雙線性映射, 且f:G1×G1→G2,h=(N,N), 哈希函數為H0:G1→{0,1}?,H1:{0,1}?→Z?q,H0:G1→M,M為H2的哈希運算結果,H3:M×G1→Z?q,H4:G1×Z?q×G1→Z?q.

訪問控制模型定義如下.定義一, 關于屬性的定義: 使用屬性名att 來作為屬性的標識, ATT 表示屬性名的集合.關系Domain(att) 表示該屬性的類型, 一般而言, 屬性的類型可分為四種: 主體(Subject) 類型, 用s表示; 客體(Object) 類型, 用o表示; 操作(Operation) 類型, 用op 表示; 環境(Environment)類型, 用e表示.單個屬性的取值可以使用att-name = value 表示, 其中att-name∈ATT, value∈Domain(att-name).

(2) 系統參數生成

①私鑰生成.密鑰生成節點監聽到請求后, 鏈下執行生成私鑰的操作, 再經安全信道將公私鑰響應給資源請求者.在式(2)中, 輸入系統的公共安全參數Par 由KeyGen 生成密鑰, 資源請求者隨機選擇(ska1,ska2,ska3)∈Z?q作為私鑰skRR, 并計算pka1= ska1N, pka2= ska2N, pka3= ska3N, 輸出其公鑰為pkRR=(pka1,pka2,pka3).

②訪問控制策略生成.資源發布者對客體資源O生成訪問控制策略, policyo=<s.v,o.v,op.v,e.v,d.v >, 其中s.v,o.v,op.v,e.v分別代表四種不同屬性的值,s.v是主體屬性集合s.v1,s.v2,···,s.vn中的一個操作,o.v,op.v,e.v也是如此,d.v代表策略判定評估的值, 是判定評估集合PE 中的任意操作.

③訪問控制策略密文生成.資源發布者對客體資源O的訪問控制策略進行加密, 如式(3).加密函數的輸入為系統的公共安全參數Par, 策略明文MPo, 資源請求者的公鑰pkRR, 隨機選取r1∈Z?q,計算C1=H1(MPo),C2=r1pka2,C3=H3(O,C2)(pka1+C1N)+r1C1N,C4=H3(O,C2)pka3,C5=H4(hH3(O,C2),C3,C2).輸出的策略密文CPo=(C1,C2,C3,C4,C5).

④訪問控制策略密文索引生成.資源發布者生成搜索索引, 如式(4).索引生成函數的輸入為資源請求者的身份IdRR、資源IdRe和策略密文的交易CPOHash, 輸出為生成的搜索索引IPo.

(3) 數據上鏈

策略密文和其安全索引生成后, 由資源發布者向區塊鏈發出請求, 將策略密文和其安全索引發送至區塊鏈上, 區塊鏈節點將交易向全鏈進行廣播.具有存儲功能的記賬節點收到策略信息后以交易的形式將其計入區塊鏈中, 其中策略密文的交易形式為savePolicyCipherTextForth : CPo, 安全索引的交易形式為saveSearchIndex:Index.

(4) 請求訪問

①資源請求者發起原始訪問請求后, 區塊鏈首先對資源請求者身份進行驗證, 無效則拒絕訪問, 成功則將請求轉送至屬性權威處, 由屬性權威進一步構造基于屬性的訪問請求.

②屬性權威在收到請求后, 根據屬性權威合約算法中的步驟依次執行, 找到對應的相關屬性信息, 構造屬性訪問請求返回至資源請求者.

(5) 訪問陷門構造

資源請求者在收到屬性訪問請求后, 于請求信息的末端以與策略明文相同的形式附加d.v= permit,隨后進行陷門生成工作, 該過程如式(5)所示.輸入資源請求者的ReAAR以及對應身份IdRR和私鑰skRR, 計算T1=N/(ska1+H1(ReAAR)+ska3IdRR),T2=T1/ska2, 輸出Tr=(T1,T2).

計算得到的陷門將被發送至區塊鏈中的計算節點, 用于搜索匹配運算.

(6) 策略密文匹配

區塊鏈中的計算節點在收到陷門Tr, 資源請求者身份的IdRR和客體資源的OId后, 遍歷存儲搜索索引的區塊鏈節點.在找到對應的搜索索引IPo= (IdRR,OId,CPO) 后, 對陷門進行如式(6)的匹配運算.式(6)的輸入為陷門Tr, 資源請求者身份IdRR和對應搜索索引IPo中的CPO.計算U1=e(C3+IdRRC4,T1),U2=e(C2,T2)C1, 并驗證H4(U1/U2,C2,C3) =C5, 如果相等, 輸出b= 1, 表示匹配成功, 否則輸出b=0, 該資源請求者無權訪問資源.

搜索匹配算法中等式的正確性證明如式(7).

(7) 訪問記錄存儲

區塊鏈中計算節點在搜索匹配計算執行完成后, 隨即將訪問記錄以Request : IdRR的形式寫入交易中, 向區塊鏈廣播.獲得記賬權力的節點則將交易打包記錄到鏈中.

3.4 安全性分析

根據下文定義的威脅模型, 本節主要從外部惡意用戶和區塊鏈中的礦工兩個角度進行安全性分析.

3.4.1 威脅模型

本文考慮的威脅對象包括區塊鏈中的礦工和外部惡意用戶, 本文中的關鍵字實質上指的就是訪問控制策略.假設區塊鏈中礦工遵守所有協議的規定, 不會存在欺騙行為, 但會進行關鍵字猜測攻擊.同樣, 外部惡意用戶也會進行關鍵字猜測攻擊, 主要是根據區塊鏈中所公開的策略密文數據進行關鍵字猜測攻擊.

3.4.2 安全模型

定義1 假設存在一個惡意敵手A和一個挑戰者C, 本文中的安全模型考慮在任意概率多項式時間(probabilistic polynomial time, PPT) 是否存在一個不可忽略的優勢可以使得A勝出, 如果不存在, 那么BPCS-ABAC 方案能夠無視關鍵字猜測攻擊.模型的流程如下:

(1) 系統初始化

挑戰者C初始化系統, 輸出系統的公共安全參數, 并發送至惡意敵手A.

(2) 查詢階段1①私鑰查詢

惡意敵手A發送Id 至挑戰者C,C執行KeyGen(Par)→(sk,pk) 生成公私鑰.

②哈希查詢

惡意敵手A發送關鍵字W至挑戰者C, 挑戰者C計算H1(W)、H3(m,r1Ka2)、H4(V,B,A) 并回應查詢.

③陷門查詢

惡意敵手A發送關鍵字W、身份Id 至挑戰者C, 挑戰者C根據身份Id 找尋惡意敵手A的私鑰,并根據私鑰、身份Id 以及關鍵字W生成執行Trapdoor(sk,Id,W)→Tr生成陷門.

(3) 挑戰階段1

惡意敵手A向挑戰者C提交(Id?,W0,W1), 此操作中提交的Id?需要在之前查詢階段沒有被A查詢.然后挑戰者C隨機選取d ∈{0,1}, 運行Encrypt(Par,pk,W?)→CId?, 生成CId?作為關鍵字挑戰密文.

(4) 查詢階段2 除不能對Id?的私鑰查詢和對關鍵字挑戰密文查詢外, 其他同查詢階段1.

(5) 猜測階段惡意敵手A猜測d′∈{0,1}, 若d′=d, 則惡意敵手A勝出.

3.4.3 安全性證明

定理1 若惡意敵手A在定義1 的模型下能以概率?攻破關鍵字, 則挑戰者C同樣可以以概率?/8解決CDH 困難問題.

證明: 假設存在一個CDH 困難問題實例(aP,bP), 惡意敵手A和挑戰者C做如下模擬, 最終證明挑戰者C可以計算出abP.

(1) 系統初始化

惡意敵手A發送身份Id 至挑戰者C, 挑戰者C選擇隨機元u ∈Z?P, 生成系統安全公共參數Par = (G,e,q,N,h), 并且生成列表LH1、LH3、LH4, 將數組(W,r(1),R(1)) 放入列表LH1中, 數組中的各項初始值為null; 將數組(Id,u,W,R(3),β) 放入列表LH3, 數組中的W,R(3),β值為null; 將數組(V,A,B,r(4),R(4)) 放入列表LH4, 數組中各項初始值為null.

(2) 查詢階段1

①惡意敵手A發起私鑰查詢.

挑戰者C選擇三個隨機元生成惡意敵手A的私鑰skId= (ska1,ska2,ska3), 其中ska1,ska2,ska3∈Z?q.惡意敵手A公鑰為pkId= (pka1,pka2,pka3), 其中pka1= ska1N, pka2= ska2N, pka3= ska3N.此時挑戰者C從之前生成的列表LH3中找到數組(Id,u,W,R(3),β), 查看數組中的β值, 如果β=1, 將私鑰skId發送給惡意敵手A; 如果β=0, 輸出失敗.

②惡意敵手A發起哈希查詢.

挑戰者C收到關鍵字W, 從列表LH1中搜索數組(W,r(1),R(1)), 若數組中的W.value?= null、R(1).value?= null, 挑戰者C將R(1).value 返回至惡意敵手A.否則, 挑戰者C隨機設置β ∈{0,1}, 若β=1, 則將R(1).value 設置為a; 若β=0, 選擇隨機數r(1)∈Z?q, 將R(1).value 設置為r(1).

挑戰者C收到身份Id、明文m、r(1)pka2, 從列表LH3中搜索數組(Id,u,W,R(3),β), 若數組中R(3).value?= null, 挑戰者C將R(3).value 返回至惡意敵手A.否則, 根據數組中的β.value 進行數組賦值工作, 若β= 1, 則將R(3).value 設置為b ?u; 若β= 0, 選擇隨機數r(3)∈Z?q, 將R(3).value 設置為r(3).

挑戰者C收到T1/T2,C2,C3,從列表LH4中搜索數組(V,C1,C2,r(4),R(4)),若數組中R(4).value?=null, 挑戰者C將R(4).value 返回至惡意敵手A.否則, 選擇隨機數r(4)∈Z?q, 將R(4).value 設置為r(4).

③惡意敵手A發起陷門查詢.

挑戰者C收到關鍵字W, 從列表LH3中搜索數組(Id,u,W,R(3),β), 若β= 1, 挑戰者C不輸出任意值; 若β= 0, 挑戰者C輸出陷門Tr= (T1,T2) 至惡意敵手A, 其中T1T2的表示形式為:T1=N/(ska1+b ?R(3)+ska3Id),T2=T1/ska2.

(3) 挑戰階段

惡意敵手A首先選取關鍵字(W0,W1), 以及惡意敵手A的身份Id′, 然后將上述信息發送給挑戰者C.挑戰者C對兩個關鍵字分別進行哈希查詢, 此時查看列表LH3中的數組(Id′,u,W0,R(3),β0) 和(Id′,u,W1,R(3),β1), 如果β0.value = 0 且β1.value = 0, 則挑戰者C不輸出任何內容; 否則, 挑戰者C任意選取其中一個數組, 給予惡意敵手A關鍵字密文CW=(C′1,C′2,C′3,C′4,C′5), 其中各項的表示形式如下所示:

(4) 查詢階段2

惡意敵手A除不能做對ID′的私鑰查詢和對關鍵字挑戰密文查詢外, 其他同查詢階段1.

(5) 猜測階段

惡意敵手A對返回的密文進行猜測, 如果猜測正確, 則挑戰者C返回的關鍵字密文CW中的C′3?(b ?u′)p=abP可以解決CDH 困難問題, 但是解決此問題的前提是惡意敵手A在之前的階段中不會被挑戰者C在陷門查詢和挑戰階段終止流程, 兩個階段終止流程的概率取決于β的值.陷門查詢階段,β.value = 1 時終止流程的概率為1/2, 惡意敵手A進行查詢的次數為2 次, 則該事件發生的概率為Pr0= (1?1/2)2.挑戰階段,β.value = 0 時終止流程的概率為1/2, 則該事件發生的概率為Pr1= 1/2.基于惡意敵手的優勢, 則解決CDH 問題的優勢為AdvCDHB= Pr0Pr1β=β/8, 而CDH 問題是困難, 所以假設不成立, 證畢.

3.4.4 區塊鏈安全性分析

目前區塊鏈所面臨的危險主要來自于對共識機制的攻擊, 攻擊者通過對共識機制的攻擊達到篡改區塊鏈上數據的目的.本文中所采用的Ganache 客戶端測試鏈使用PoW 共識機制, 所以下面著重對PoW 共識機制的安全性進行分析.假設區塊鏈網絡中存在誠實節點和惡意節點, 兩種節點之間存在的競爭關系可由二叉樹隨機漫步的過程來描述, 當誠實節點的節點數量大于惡意節點數量時, 誠實節點挖礦成功產生一個區塊, 否則, 惡意節點挖礦成功產生一個區塊.假設惡意節點需要彌補z個區塊從而使得惡意節點偽造的惡意鏈長度超過誠實鏈的長度, 達到攻擊的目的, 該過程可近似被看作賭徒破產問題, 所謂賭徒破產問題就是A 和B 兩個賭徒使用拋硬幣模式進行對賭, 如果拋硬幣的結果是硬幣正面在上, A 贏, B 給A 一個籌碼, 如果硬幣反面在上, B 贏, A 給B 一個籌碼, 兩人這樣不停賭博, 直到一方籌碼輸光為止游戲結束, 本文攻擊過程的概率如式(8):

其中, 用p來表示區塊鏈中誠實節點挖礦成功的概率, 用q來表示區塊鏈中惡意節點挖礦成功的概率,qz表示惡意節點最終彌補z個區塊差距的概率.假設誠實節點按照預期耗費時間產生區塊, 則惡意節點的進展符合泊松分布計算, 期望值如式(9):

為了計算惡意節點所生成的區塊鏈長度能趕上誠實節點所生成的區塊鏈長度的概率, 將惡意節點所生成的區塊鏈長度的泊松分布取值概率與此時能追趕上誠實節點鏈的長度相乘, 即可得到成功篡改鏈上數據的概率Pz, 如式(10):

實驗的仿真結果如圖6 所示, 由仿真結果可以得出, 當惡意節點成功產生下一區塊的概率大于等于0.5時, 惡意節點就可以百分之百地篡改區塊鏈數據, 反之, 惡意節點成功產生下一區塊的概率小于0.5 時, 隨著區塊數的慢慢增加, 惡意節點成功篡改的概率也變得越來越小.也就是說, 只有惡意節點占據區塊鏈上50% 以上的算力時, 才能隨意篡改區塊鏈中存儲的數據, 而由于區塊鏈去中心化、分布式的特性, 想要占據整個鏈中50% 以上的算力要付出巨大的成本, 所以使用區塊鏈可以很好抵抗惡意篡改數據的攻擊.

圖6 攻擊成功概率Figure 6 Attack success probability

4 實驗仿真

本節將通過仿真實驗證明提出的BPCS-ABAC 方案在時間和空間兩方面相比于類似方案具有優勢.本節選取了傳統ABAC 模型、文獻[5] 中史錦山等人的BBIAC 模型、文獻[12] 中Do 等人的安全分布式數據存儲與關鍵字搜索服務方案、文獻[13] 中Feng 等人的基于可搜索屬性加密的區塊鏈數據隱私保護控制方案和本文提出的BPCS-ABAC 方案進行對比分析.本節所展示的時間性能主要包括對同樣引入屬性概念的方案進行了訪問耗時分析, 對引入可搜索加密的方案進行了關鍵階段算法時間性能分析; 空間性能主要包括策略密文存儲空間消耗和陷門請求存儲空間消耗.鑒于以屬性作為決策要素的細粒度訪問控制方案中, 訪問耗時是體現時間性能的關鍵因素, 選取BBIAC 模型和傳統ABAC 模型進行了訪問耗時分析.在可搜索加密方案中, 關鍵步驟耗時直接體現了方案的時間性能, 因此選取了Do 等人和Feng 等人同樣在區塊鏈系統中使用可搜索加密技術的方案對比分析了關鍵步驟的耗時, 包括密文生成時間、陷門生成時間、策略索引搜索時間和陷門匹配時間.

4.1 實驗環境

為了進一步評估本方案的性能和效率, 本文通過仿真實驗對BPCS-ABAC 方案進行測試.所有仿真均基于本地虛擬機VMware, 每個節點獨立運行在相同的實驗環境里.其中虛擬機的硬件條件為: 雙核Intel? Core(TM) i5-7300HQ CPU @ 2.5 GHz, 2G 內存; 操作系統為Ubuntu 16.04; 區塊鏈部分采用以太坊Ganache 客戶端測試鏈; 加密部分基于Python 語言的Pypbc 模塊以及Pycharm 工具, 同時使用XACML 語言生成的訪問控制策略進行測試.

4.2 BPCS-ABAC 時間分析

(1) 訪問耗時分析

考慮到BPCS-ABAC 方案的應用場景, 訪問耗時是衡量該方案優劣的重要指標.本節仿真分析了所提出方案的訪問耗時.采用文獻[24] 對訪問耗時的分析方法, 將方案中用戶及設備的不斷增加映射為訪問控制策略的不斷增加.當訪問控制策略數為10 000 時, 主體對客體發送10 次訪問請求, 記錄每次訪問所需的時間.本方案選取了傳統ABAC 模型和文獻[5] 中的BBIAC 模型與BPCS-ABAC 進行對比實驗,仿真結果如圖7 所示.由仿真結果可以看出, 初次訪問時, BBIAC 和本文的BPCS-ABAC 模型由于初次訪問需要進行區塊鏈系統的初始化, 等待首次共識需要一定的時間, 所以初次訪問時所需要的訪問控制響應時間略高于傳統的ABAC 模型, 隨著共識的建立, 后續的幾次訪問時間較短且比較平滑時因為后續的訪問均不需要進行初始化, 直接執行判決合約, 也就是說可以先進行判決后進行共識, 這一過程比較簡單.此外, ABAC 模型每次實驗進行初始化時, 訪問控制策略和訪問請求客體都不同, 時間上容易產生較大波動.同時, 由于BBIAC 中區塊鏈在授予訪問權限時, 除了根據策略判斷權限外, 還需要額外生成token,所以該方案訪問所需的時間大于BPCS-ABAC.此外, 本方案還使用不同設備代表不同主體對客體發送了10 次訪問請求, 所需時間與圖7 中的結果相近.綜上所述, BPCS-ABAC 在訪問耗時方面優于其他方案.

圖7 訪問控制響應時間對比Figure 7 Comparison of access control response time

(2) 方案關鍵步驟時間性能分析

本節對BPCS-ABAC 方案運行流程中關鍵步驟的耗時, 包括密文生成時間、陷門生成時間、策略索引搜索時間和陷門匹配時間進行了仿真分析, 多角度分析了所提方案的時間性能.

①策略密文生成時間

仿真中使用的訪問控制策略數據集使用XACML 語言生成, 模擬了訪問控制策略密文生成的時間, 即資源發布者在客戶端對某個資源的訪問控制策略進行加密時所需要的等待時間, 并對比了文獻[12]、文獻[13] 中的方案, 得到的結果如圖8 所示.由仿真結果可以看出, 一千條策略的加密時間僅需0.808 s.然而, 由于加密過程中需要用到計算較為復雜的雙線性運算, 隨著加密的訪問控制策略數量增加, 加密時間也隨之增加.但對于資源發布者而言, 增加的等待時間也在可接受的范圍內, 且時間增長趨勢平穩.同時本方案加密時所消耗的時間少于其他兩種模型.

②陷門生成時間

本方案與文獻[12]、文獻[13] 兩種方案的陷門生成時間進行了對比, 根據關鍵字數量不同生成不同陷門所需的時間如圖9 所示.由仿真結果可以看出, BPCS-ABAC 方案在陷門生成時間上優于其他兩種方案, 且隨著關鍵字數量的不斷增加, 優勢越發明顯.同時, BPCS-ABAC 方案中的陷門生成時間不會隨著關鍵字大小變化而產生很大的波動, 主要原因在于本節中陷門生成時所涉及到的運算僅為哈希運算, 計算開銷小, 且計算時間穩定, 所以在陷門生成時間的效率和穩定性方面都具有一定優勢.

③策略索引搜索時間

定義區塊鏈上索引搜索時間IndexSearchBCTime 為遍歷不同區塊, 根據身份Id 和客體資源Id 定位到策略密文位置的時間.以太坊區塊鏈中根據Merkle Patricia Tree 來定位每一筆交易的位置, Merkle Patricia Tree 數據結構的特性使得進行搜索時理論上的時間復雜度為O(log(N)),N代表所查詢數據的長度.本方案在仿真中構造出了不同數據量大小的Merkle Patricia Tree 來模擬在區塊鏈中進行查找的場景.在本文的實驗環境中, 鏈上索引檢索時間IndexSearchBCTime 可以近似認為是Merkle Patricia Tree從根節點定位到具體某一筆交易的時間.定義區塊鏈下的索引搜索時間IndexSearchNBCTime 為通過遍歷整組交易數據找到特定交易的時間, 理論上搜索時間復雜度為O(N),N為數據組長度.仿真中根據不同策略密文數量所需的搜索時間如圖10 所示.由仿真結果可以看出, 對于不同的策略密文數量, 在搜索一條特定的策略密文時, 在以太坊區塊鏈上所花費的時間基本趨于一致, 且在毫秒級別.其根本原因在于在Merkle Patricia Tree 中的鍵是由keccak256 函數計算所得, 所有的策略密文被打包成交易發布到鏈中時,都由一串特定長度的Hash 值代替.而在查詢時, 所消耗的查詢時間本質上與數據長度有關, 且與數據量關系不大, 而在鏈下的搜索時間隨著數據量的增多而逐漸增加.綜上所述, 本方案在區塊鏈上進行索引查詢效率較高且穩定.

④陷門匹配時間消耗對比

此外, 本文還對比了本方案中的陷門匹配時間與文獻[12]、文獻[13] 中的方案所消耗的時間.陷門匹配時間指的是在區塊鏈上將收到的陷門(即資源訪問請求) 與策略密文相對比的時間消耗, 該時間消耗根據關鍵字的數量不同所需要的時間如圖11 所示.

圖11 陷門匹配時間Figure 11 Trapdoor matching time

由仿真結果可以看出, BPCS-ABAC 所消耗的時間完全少于另外兩種方案, 并隨著關鍵字數量增多,優勢愈發明顯.這主要因為本方案中在進行陷門匹配運算時進行了兩次雙線性運算, 計算開銷小于另外兩種方案.

4.3 BPCS-ABAC 空間分析

本小節對BPCS-ABAC 方案中需要存儲的內容的空間大小進行仿真, 以此驗證本方案可以在區塊鏈上進行高效存儲.區塊鏈上存儲空間的消耗主要包括訪問控制策略密文存儲空間消耗以及陷門請求存儲空間消耗.

(1) 策略密文存儲空間消耗

本方案首先仿真分析了訪問控制策略密文存儲所需要的空間.與訪問控制策略明文進行對比, 存儲不同數量的訪問控制策略所消耗的空間如表1 所示.由仿真結果可以看出, 相對于訪問控制策略的明文, 密文所需要的存儲空間小了大約10 倍左右, 且當存儲數據量越多時節約的空間也越多.考慮到在實際應用場景中, 不同訪問控制策略的大小不同, 本方案還生成了5000 條不同大小的訪問控制策略進行了仿真實驗, 策略明文所需要的存儲空間為16.73 MB, 生成的策略密文大小為1.56 MB, 存儲空間也縮小了約十倍.除此之外密文所消耗的空間增量趨勢穩定, 并不會產生劇烈的波動.

表1 策略密文存儲空間Table 1 Storage space of policy ciphertext

(2) 陷門請求存儲空間消耗

因為所提出的方案發送至區塊鏈的資源訪問請求, 即構造完成的陷門, 也會被打包記錄至區塊鏈中,所以還對陷門請求所消耗的存儲空間進行了仿真, 并與文獻[12]、文獻[13] 中的兩個方案進行對比.存儲不同關鍵字數量的陷門請求所消耗的空間如表2 所示.由仿真結果可以看出, 相對于文獻[12] 和文獻[13]中的方案來說, BPCS-ABAC 方案中, 陷門請求所需要的存儲空間更小, 這對于減輕區塊鏈上的存儲壓力來說是至關重要的.

表2 陷門請求存儲空間Table 2 Trapdoor request storage space

5 總結

本文提出了一種基于區塊鏈的密文檢索屬性訪問控制(BPCS-ABAC) 方案, 該方案利用區塊鏈技術和公鑰可搜索加密技術特性改進了ABAC 模型, 主要利用了區塊鏈的去中心化、不可篡改的特性解決了第三方依賴問題, 利用公鑰可搜索加密技術特性實現對訪問控制策略進行了加密, 既保護了策略的隱私性,又解決了區塊鏈上存儲壓力過大的問題.論文詳細闡述了BPCS-ABAC 方案的系統模型、工作流程以及智能合約設計, 其中工作流程包括系統初始化、系統參數生成、訪問策略加密、訪問控制策略密文上鏈、原始請求訪問、屬性請求構造、訪問陷門構造、策略密文匹配、訪問記錄存儲等, 最后對BPCS-ABAC進行了仿真實驗, 由仿真結果得出BPCS-ABAC 在時間和空間上優于其他方案模型, 適用于物聯網、大數據等應用場景.但是在BPCS-ABAC 方案中, 用戶/設備直接向區塊鏈發送訪問請求, 而區塊鏈會將用戶/設備信息記錄到鏈中, 用戶/設備的身份可能存在暴露的危險, 如何將用戶真正匿名化, 例如使用環簽名、盲簽名等, 還有待更進一步的深入研究.

猜你喜歡
請求者訪問控制密文
一種針對格基后量子密碼的能量側信道分析框架
一種支持動態更新的可排名密文搜索方案
基于模糊數學的通信網絡密文信息差錯恢復
基于D2D 多播通信的合作內容下載機制
群智感知中基于云輔助的隱私信息保護機制
漢語自然會話中請求行為的序列結構
ONVIF的全新主張:一致性及最訪問控制的Profile A
基于差值誘導的Web服務評價可信度的評估
動態自適應訪問控制模型
淺析云計算環境下等級保護訪問控制測評技術
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合