王有恒,王瑞民,張建輝
(1.鄭州大學 計算機與人工智能學院,河南 鄭州 450001;2.鄭州大學 網絡空間安全學院,河南 鄭州 450002)
區塊鏈系統本質上是一個多方維護的分布式賬本,具有一致性和不可篡改性,但是仍存在隱私泄露的風險。文獻[1-4]分析了區塊鏈系統中的存在隱私保護問題,并整理出一些隱私保護技術,其中包含地址混淆、信息隱藏、通道隔離、環簽名、零知識證明技術和訪問控制技術[5-7]。
屬性基加密方案常用于云數據存儲與共享,該技術可以實現粒度細化到屬性級別的加密訪問控制。汪金苗等提出了面向區塊鏈的隱私保護與訪問控制方案[8]。沈韜等提出基于區塊鏈的支持外包的多授權屬性加密技術方案[9]。有效解決了屬性基加密中解密開銷大的問題。邱云翔等提出了一種基于CP-ABE算法的超級賬本區塊鏈數據訪問控制方案[10]。該方案實現了細粒度安全訪問控制,但仍存在加解密效率低,訪問控制策略不靈活的問題。
超級賬本(hyperledger Fabric)是聯盟鏈的代表,與公鏈以太坊相比,Fabric區塊鏈設置了準入機制,僅允許授權的節點加入區塊鏈網絡,且節點的權限不同,加強了對數據的隱私保護。但其仍存在以下問題:通道內的數據缺乏保護;數據隱私保護粒度過粗;成員對數據的訪問控制缺乏動態性。CP-ABE算法對數據進行加密時,使用的是雙線性對加密方式,與傳統公鑰加密方案相比,運算更復雜,開銷更大。因此需要優化CP-ABE算法的加解密效率。
本文針對Fabric的隱私保護需求,提出了一種基于CP-ABE算法的Fabric隱私保護模型CP-PPM,該模型融合了CP-ABE算法和IPFS技術,利用Fabric-CA完成CP-ABE算法中密鑰的分發,將上鏈數據轉變為IPFS文件存儲地址,使用CP-ABE算法對上鏈地址進行加解密。
超級賬本(hyperledger fabric)是一個許可制的區塊鏈平臺,與私有鏈不同的是,超級賬本區塊鏈網絡的成員需要從可信賴的成員服務提供者(MSP)注冊。超級賬本還提供了創建通道(channel)的功能,允許一組參與者創建各自的交易賬本。通道機制基于發布-訂閱的關系,將Peer和Order連接在一起,形成具有保密性的通訊通道(虛擬),節點可以訂閱多個通道,并且只能訪問訂閱通道上的交易,實現了不同通道中的數據的相互隔離。Fabric網絡中的身份是使用數字證書實現的,因此需要CA來處理證書的管理。Fabric-CA是超級賬本自帶的證書管理工具,可以為用戶注冊身份和頒發證書,當用戶信息改變時,同步地更新證書信息。
Fabric-CA架構如圖1所示,與CA服務器的交互有兩種方式:Fabric-CA-Client和SDK。所有與Fabric-CA服務器的交互都是通過REST APIs來完成的。Fabric Server端包括一個由樹結構構成的服務器集群,包括Root和若干中間節點。在服務器集群中,可以通過客戶端或者SDK與CA服務器進行交互。

圖1 Fabric-CA架構
屬性基加密的思想是讓密文和密鑰與屬性集合和訪問結構產生關聯。當且僅當屬性集合滿足訪問結構的時候,才可以解密成功,從而實現一對多的數據細粒度訪問控制。在密文策略屬性基加密(CP-ABE)方案中,由數據的擁有者來制定密文訪問策略,以決定誰可以解密密文。訪問策略與密文相關聯,代表著數據擁有者具有了對自己的數據的訪問控制權,根據設置的策略可以判斷哪些訪問者能夠合法訪問數據。而策略的邏輯判斷表達式中,一般以屬性為判斷依據。也就是對自己的數據做了一個粒度可以達到屬性級別的細粒度加密訪問控制。CP-ABE方案一般用于分布式環境中的數據加密存儲。
CP-ABE包含4個基本算法:Setup、Encrypt、Key Generation、Decrypt[11]。
Setup:輸入隱式的安全參數。輸出公共參數PK和主密鑰MK。
Encrypt(PK,M,A):輸入PK,消息M和訪問結構A,對M進行加密,產生密文CT。
Key Generation(MK,S):輸入主密鑰MK和描述密鑰的屬性集合S。輸出私鑰SK。其中SK由屬性來確定。
Decrypt(PK,CT,SK):輸入公共參數PK、包含訪問結構A的密文CT,以及私鑰SK。其中私鑰由屬性集合S生成。若S符合A的訪問控制策略,則對CT進行解密并返回消息M。
IPFS是一個分布式文件系統協議。IPFS的設計與WEB類似,是全新的超媒體文本傳輸協議。采用去中心化分片加密存儲技術,文件被分割存儲在IPFS網絡節點中。區塊鏈系統和IPFS的協作可以突破區塊鏈本身的存儲瓶頸。著名的區塊鏈項目Filecoin是運行在IPFS的一個激勵層,以代幣為溝通橋梁,將數據提供者和使用者聯系在一起。IPFS的優勢在于其效率高、隱私性強,安全性方面則可以抵御女巫攻擊、外包攻擊和DDoS攻擊等。
針對提出的Fabric區塊鏈缺乏隱私保護的問題,本文提出了一種基于CP-ABE算法的Fabric區塊鏈隱私保護模型CP-PPM。
模型設計思想是利用CP-ABE算法實現對上鏈數據的隱私保護,并通過調整訪問控制策略達到細粒度訪問控制。將CP-ABE算法中的生成包含用戶屬性的密鑰和密鑰分發任務交由Fabric-CA模塊,省去與第三方CA機構交互的步驟,提高算法執行效率,減少證書和密鑰泄露的風險。將Fabric區塊鏈系統和IPFS系統相結合,上鏈原數據轉變為IPFS文件存儲地址,減少CP-ABE算法加解密原數據的開銷,同時增強區塊鏈系統存儲大文件的能力。
模型主要包含4部分:區塊鏈網絡Fabric、星際文件系統IPFS、客戶端Client和證書頒發機構Fabric-CA。模型框架如圖2所示。

圖2 Fabric區塊鏈隱私保護模型CP-PPM
(1)區塊鏈網絡Fabric:該部分主要承擔區塊鏈網絡的基礎功能。在模型CP-PPM的設計流程中,該部分的作用是與IPFS系統交互,利用IPFS存儲原始文件。經過背書、排序、節點驗證等上鏈流程后,在通道中存儲使用CP-ABE算法加密后的IPFS文件路徑。
(2)星際文件系統(IPFS):該部分的功能是運行IPFS系統,進行原數據的存儲。需要上鏈的數據分布式存儲在IPFS節點中,并返回文件地址給客戶端。
(3)客戶端(Client):原有的Fabric區塊鏈網絡中,該部分的作用是發起交易和接受用戶證書。在CP-PPM中,客戶端需要先對用戶屬性密鑰SK進行接收,成功接收后完成CP-ABE方案中的對IPFS存儲地址的加解密,即運行Encrypt算法和Decrypt算法。
(4)證書頒發機構(Fabric-CA):該部分主要實現的功能是:①管理系統用戶的身份證書,包括頒發證書及撤銷證書。②CP-ABE方案初始化,由Setup生成公共參數PK以及主密鑰MK。③用戶屬性密鑰的生成與分發,對應CP-ABE方案中的Key Generation算法,針對用戶的屬性生成并分發包含該用戶屬性私鑰SK。
(1)用戶注冊:該模塊主要是用戶User與Fabric-CA的交互,首先User向Fabric-CA申請注冊用戶證書,由Fabric-CA中MSP對用戶的證書申請請求進行數字簽名,生成X.509證書形式的數字身份Ucert。用戶身份注冊成功后,初始化CP-ABE算法,初始化階段的主要工作是通過輸入系統安全參數λ,生成主密鑰MK以及公開參數PK,并且根據數字證書生成包含用戶屬性的私鑰SK。最后Fabric-CA將用戶證書Ucert和用戶屬性私鑰SK返回給User。
(2)數據存儲:該模塊主要是Fabric區塊鏈網絡和Fabric-Client以及IPFS系統。當數據所有者Owner需要將自己的數據上傳到區塊鏈系統上時,先向Fabric-Client提交自己的數據上傳請求,Fabric-Client與IPFS系統進行交互,等待IPFS系統初始化完成。IPFS系統中將單位數據塊大小設置成256 KB,當數據大小超過數據塊容量時,會對數據進行切割處理,并分段存儲在不同數據塊里。IPFS系統將數據存儲到分布式節點中后,會生成一個數據的存儲地址M并返回。Owner根據自己的訪問控制需求設置訪問控制策略P,并將P和公開參數PK作為公鑰,對返回的M進行加密,生成密文CT。接下來通過交易的方式讓CT上鏈,使用交易負載的方式上傳CT。在對Fabric發起交易請求后,區塊鏈網絡將交易進行全網同步。Fabric區塊鏈網絡先對交易進行背書,背書過程完成后由User封裝交易,并以Envelope的形式發送給排序節點。排序完成后交易先被打包生成區塊,經由排序節點傳輸,接著在通道組織內接受驗證。通過最終驗證的區塊會被存儲到同一通道內的各個節點上,至此數據存儲階段完成。數據存儲流程如圖3所示。

圖3 數據存儲流程
(3)數據訪問:該模塊主要是數據訪問者Visitor與Fabric網絡的交互。當Visitor需要訪問上鏈的數據時,通過Fabric-Client請求獲取Fabric區塊鏈網絡中存儲CT的交易信息,得到CT后,Visitor首先使用自己的屬性私鑰SKV對CT進行解密,如果SKV屬性滿足訪問控制策略P時,則可以成功解密,得到加密數據所對應的數據存儲地址M,Visitor可根據數據存儲地址M訪問數據。反之,SKV屬性與P不匹配時則解密失敗。數據流程訪問如圖4所示。

圖4 數據訪問流程
CP-ABE算法中,使用樹結構來保護密鑰,與、或邏輯操作和門限操作表現為樹的節點[12,13],葉子節點則用于表示屬性并且存儲相應的屬性值。當數據訪問者需要訪問數據時,要匹配數據所有者設定的屬性才能解密出該葉子節點的秘密值[14]。其中非葉子節點為門限節點,數據訪問者需達到門限最低值才能解密此節點的密碼值。用戶不同的屬性關系組合在一起,并形成邏輯表達式,即為訪問控制策略。
在模型CP-PPM中,訪問控制策略關系到訪問控制的粒度,用戶屬性是CP-ABE方案屬性集中的最細粒度。在Fabric網絡中,可以同時存在多個通道,而且每個通道內可以存在多個組織,用戶被包含在不同的組織內。區塊的分發是按照通道ID進行分發的,那么不同的用戶所屬的通道ID即為該用戶的固定屬性之一。此外,數據所有者可根據自己的訪問控制需求靈活選擇用戶屬性,例如組織ID、用戶ID,并將這些屬性設置成策略,當訪問者的屬性集滿足訪問策略時才被授權訪問數據。
針對不同的使用場景,訪問控制的策略也有所不同,對數據訪問控制的粒度也會產生影響,例如在學校管理系統中,A用戶屬性是:①通道ID Channel1;②計算機學院;③學生;④機器學習實驗室;B用戶屬性是:①通道ID Channel2;②計算機學院;③;教師;④網絡安全實驗室;C用戶屬性是:①通道ID Channel1;②計算機學院;③學生;④網絡安全實驗室。
當數據所有者需要在某一個通道內共享自己的數據,則可以將通道ID這一屬性設為唯一的通道策略,屬于該通道ID的用戶都可以訪問該數據。如只讓Channel1通道內的用戶訪問,可將策略設為:(Channel ID=Channel1),此時用戶A和用戶C可以合法訪問。
當數據所有者具有更細粒度的數據訪問控制需求時,則可以按照自己的需求將特定的用戶屬性加入到訪問控制策略中。如需要讓用戶所屬院系為計算機學院,且職業是老師訪問,則可將訪問控制策略設為:(Department=CS,Occupation=Teacher),此時僅有用戶B可以合法訪問。
訪問控制策略以邏輯表達式為基礎,訪問控制策略中的屬性數量越多,該訪問控制結構就越復雜,細粒度訪問的程度也就越高。
為了對模型CP-PPM的性能進行分析。實驗環境為Ubuntu 16.04 LTS虛擬機,虛擬機內存為4 GB,處理器數量為2。硬件信息見表1。在虛擬機中搭建了Fabric區塊鏈網絡和IPFS存儲系統。該區塊鏈網絡使用了官方超級賬本框架,包含一個排序服務節點和兩個組織,每個組織中分配了兩個Peer節點。IPFS存儲系統使用Go-IPFS技術搭建,該存儲系統共有5臺機器,所有機器接入到相同的局域網內。云存儲服務則由一臺本地服務器提供。CP-ABE算法采用斯坦福開放源碼cpabe-0.11程序庫來編寫和實現。

表1 硬件信息
3.2.1 數據加解密時間效率比較
本實驗是測試模型CP-PPM中CP-ABE算法加解密數據的性能,并與文獻[10,13,14]的方案進行對比。
由于IPFS系統生成的文件存儲地址時采用了SHA-256算法,對任意長度的內容,生成長度固定為32個字節的Hash值,封裝成Multihash之后,最后轉化為Base58,最終文件存儲地址都是46個字節。相較于文獻[10]的方案,模型CP-PPM數據大小固定,且遠小于1 MB,無需考慮單個區塊的容納量。同時加解密算法與原始方案一致,密鑰長度和公鑰長度均小于文獻[13-15]。在將屬性個數設置為相同,且文件大小大于46字節時,模型CP-PPM數據加解密效率更高。
根據上述,本實驗將文件大小設置為46 Byte,分別計算當屬性個數為2、4、8、12、16、20時,CP-ABE方案的加密和解密的時間。從圖5可以觀察到,CP-ABE算法進行加解密運算的時間與訪問控制策略中設置的屬性個數,是一種線性關系。當屬性數量增大時,CP-ABE算法加解密時間也隨之增加,且加密時間增長速率大于解密時間增長速率。因此,訪問控制需求越高,所需設置的屬性個數也越多,訪問控制粒度更細的同時,所產生的時間開銷也會增加。

圖5 不同屬性個數時CP-ABE算法加解密時間
3.2.2 兩種存儲系統的存儲效率比較
模型CP-PPM在原有Fabric區塊鏈系統的基礎上增加了IPFS系統,用IPFS系統來代替區塊鏈系統存儲原始數據。所以需要測試引入這種鏈下存儲方式的時間開銷,并與其它鏈下存儲方式進行對比。
本實驗是針對云存儲系統和IPFS存儲系統兩種常用鏈下存儲方式的性能對比實驗。在同一局域網下使用了一臺本地服務器模擬云存儲系統,并且搭建了IPFS分布式網絡集群。實驗測試的目的是,比較IPFS和云存儲在對不同大小的文件進行上傳和下載時的時間開銷。
為了不失一般性,實驗分別設置了500 KB、1000 KB、2000 KB、3000 KB、5000 KB、10 000 KB的文件,分別在兩種存儲系統上進行上傳和下載的操作,測試100次后求平均值,圖6比較了兩種存儲系統的文件上傳時間,圖7比較了兩種存儲系統的文件下載時間,從圖6和圖7可以明顯看出,文件大小相同時,IPFS存儲系統文件上傳和下載的時間開銷都低于云存儲系統,當文件大小增大時,IPFS系統的上傳和下載時間變化幅度更小。因此本文使用IPFS系統來進行原數據的存儲,可以減少系統開銷,提升存儲性能。

圖6 云存儲和IPFS存儲系統的文件上傳時間

圖7 云存儲和IPFS存儲系統的文件下載時間
3.2.3 Fabric的吞吐效率測速
本實驗的目的是測試密文CT作為交易負載上鏈對Fabric系統吞吐量的影響。實驗時將源數據文件大小設置為46 Byte,屬性數量固定為10個,經過CP-ABE算法加密后,生成的模擬CT大小為52 Byte。編寫一個交易鏈碼,通過Tape工具來對Fabric系統吞吐量進行測試。實驗組每次交易將模擬CT上傳為交易負載;對照組每次不上傳交易負載。為防止瞬間交易量過大而導致部分交易被丟棄,每輪只運行兩次Test函數,共進行100輪測試,取結果平均值。實驗結果見表2,由結果可知,將CT上傳為交易負載保存在區塊鏈中,對Fabric區塊鏈網絡吞吐量影響在可接受范圍內。

表2 吞吐量測試
隱私保護模型CP-PPM可以保證系統數據的機密性和完整性。Fabric-CA作為超級賬本網絡的原始模塊是完全可信的,所以在算法初始化階段中,密鑰的生成過程可信、用戶屬性的真實性可信。在數據的存儲和訪問過程中,數據的傳輸都包含加密步驟,當用戶不符合數據所有者所設置的訪問權限時,無法訪問原始數據,因此可以確保數據機密性。采用的IPFS系統進行存儲時,先使用哈希算法對存儲數據的單位數據塊進行加密,計算結果由一個數組保存,然后再次對存儲哈希值的數組使用哈希算法,得到一個數組的哈希值。當數據被篡改時,該數組的哈希值也會改變,因此可以保證數據的完整性。Fabric區塊鏈網絡中的每個區塊內容中都包含上一區塊所有數據的哈希值,區塊相連形成鏈接關系,也保證了鏈上數據的完整性。此外,為保證數據可用性,訪問控制策略的設置由數據所有者決定,數據訪問者需要符合數據所有者制定的訪問策略要求,即數據訪問者自身屬性與訪問策略屬性集合相匹配。通過訪問策略之后,數據訪問者才可以獲取訪問數據的權限。數據所有者根據使用場景、使用需求的差異,可以靈活使用不同的屬性集合來設置訪問控制策略,將數據的訪問控制粒度細化到屬性級別。
CP-PPM隱私保護模型利用CP-ABE算法實現對區塊鏈上數據的細粒度訪問控制,并使用Fabric區塊鏈中的原有的Fabric-CA來承擔CP-ABE算法中的密鑰生成和分發工作。性能分析結果表明,CP-PPM方案節省了初始化CP-ABE算法的時間。同時為減少CP-ABE算法加解密數據的消耗,使用IPFS系統來代替區塊鏈系統存儲加密數據,CP-ABE算法僅需對數據的存儲地址進行加解密。實驗結果表明,相較于云存儲的鏈下存儲方案,IPFS系統的上傳文件的時間開銷減少了90%,下載文件的時間開銷減少了84%。有效緩解了區塊鏈系統的存儲壓力。安全分析結果表明,CP-PPM可以實現數據安全和細粒度隱私保護。
針對超級賬本區塊鏈系統中存在的數據安全共享和隱私保護問題,提出了一種融合了CP-ABE、區塊鏈和IPFS的隱私保護模型CP-PPM。與前人方案相比,CP-ABE算法加解密效率更高,訪問控制策略的使用更靈活,訪問控制細粒度化更高,并且提升了存儲效能。通過性能分析與安全性分析,并且與已有方案進行對比,表明了隱私保護模型CP-PPM對Fabric區塊鏈網絡的鏈上數據實現訪問控制具有可行性。CP-PPM模型基于Fabric區塊鏈網絡設計,也可與其它擁有CA模塊的聯盟鏈適配。未來考慮利用Fabric系統中的鏈碼機制配合CP-ABE算法達到更加靈活的隱私保護效果。