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

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

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

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

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

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

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

圖6 云存儲和IPFS存儲系統(tǒng)的文件上傳時間

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

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