王秀利, 江曉舟, 李 洋
(中央財(cái)經(jīng)大學(xué) 信息學(xué)院,北京 100081)
對(duì)企業(yè)而言,數(shù)據(jù)越來越有價(jià)值,甚至已經(jīng)上升到戰(zhàn)略核心地位.企業(yè)關(guān)注的重點(diǎn)也從如何利用數(shù)據(jù)轉(zhuǎn)向如何保護(hù)數(shù)據(jù).傳統(tǒng)的集中式存儲(chǔ)存在許多安全隱患,若防火墻被攻克或數(shù)據(jù)泄露,將導(dǎo)致大范圍數(shù)據(jù)丟失,而且也不利于企業(yè)內(nèi)部多層級(jí)的訪問控制需求和監(jiān)督管理.區(qū)塊鏈以數(shù)據(jù)難偽造、難篡改和可追溯引起了學(xué)術(shù)界和產(chǎn)業(yè)界的廣泛關(guān)注[1],成為解決上述問題的關(guān)鍵技術(shù).以比特幣等數(shù)字貨幣為代表的區(qū)塊鏈 1.0[2]解決了去中心化等問題,但仍存在不足之處:(1) 交易完全透明且等待時(shí)間過長(zhǎng);(2) 在設(shè)計(jì)之初,有部分功能以規(guī)避監(jiān)管為目的,并不適用于企業(yè)內(nèi)部與行業(yè)內(nèi)部;(3) 賬戶加密通常使用傳統(tǒng)的非對(duì)稱加密方式,在加密貨幣一對(duì)一的交易場(chǎng)景下可以提供很高的安全性,但對(duì)于企業(yè)內(nèi)部場(chǎng)景,不便于靈活地訪問控制,也不便于密鑰的管理與保存.因此,傳統(tǒng)區(qū)塊鏈并不適合直接應(yīng)用于企業(yè).
對(duì)行業(yè)而言,同行業(yè)中的各個(gè)企業(yè)往往有合作與競(jìng)爭(zhēng)的雙重關(guān)系——既需要各個(gè)企業(yè)數(shù)據(jù)共享來完成整個(gè)行業(yè)版圖的繪制,又需要保護(hù)好自己企業(yè)的數(shù)據(jù).另外,各行業(yè)通常都有國(guó)家部門進(jìn)行監(jiān)管,如何在保證有效監(jiān)管的同時(shí)又保護(hù)好各自的數(shù)據(jù),成為了亟待解決的問題.
為解決上述問題,本文結(jié)合現(xiàn)實(shí)場(chǎng)景,分為企業(yè)內(nèi)部與企業(yè)之間兩部分,利用屬性基加密(attribute-based encryption,簡(jiǎn)稱ABE)對(duì)區(qū)塊鏈進(jìn)行改進(jìn),提出一種新的企業(yè)內(nèi)部訪問控制與企業(yè)之間數(shù)據(jù)安全共享模型.
區(qū)塊鏈?zhǔn)抢眉用苕準(zhǔn)絽^(qū)塊結(jié)構(gòu)來驗(yàn)證與存儲(chǔ)數(shù)據(jù)、利用分布式節(jié)點(diǎn)共識(shí)算法來生成和更新數(shù)據(jù)、利用智能合約來編程和操作數(shù)據(jù)的一種去中心化基礎(chǔ)架構(gòu)與分布式計(jì)算范式[3].比特幣、萊特幣是典型的公有鏈,所有節(jié)點(diǎn)中立、開放,并不適用于企業(yè)內(nèi)部與行業(yè)內(nèi)部.同時(shí),由于所有節(jié)點(diǎn)都參與投票,交易的確認(rèn)和區(qū)塊的形成速度都非常慢.以比特幣為例,每分鐘確認(rèn)7筆交易,每10分鐘生成一個(gè)區(qū)塊[4](為了確保安全,通常需要等待6個(gè)區(qū)塊生成,即 1小時(shí)完成交易確認(rèn)),這在很多行業(yè)內(nèi)是無法接受的.與公有鏈對(duì)應(yīng)的是許可鏈,即只有被許可的節(jié)點(diǎn)才能參與投票、記賬,其所有節(jié)點(diǎn)都在企業(yè)或行業(yè)內(nèi)部,數(shù)量相對(duì)較少,因此響應(yīng)速度較快.私有鏈、聯(lián)盟鏈都屬于許可鏈.
區(qū)塊鏈通常使用單鏈結(jié)構(gòu),將賬目、合約、交易等信息全部放在一條鏈上,所有參與計(jì)算的節(jié)點(diǎn)都在該鏈上投票以保證一致性.而這既沒有保護(hù)隱私,又因大量冗余數(shù)據(jù)造成響應(yīng)遲緩,平行區(qū)塊鏈[5]應(yīng)運(yùn)而生.文獻(xiàn)[6,7]提出了雙鏈結(jié)構(gòu),所有參與的機(jī)構(gòu)分享元數(shù)據(jù)及協(xié)議,但不分享數(shù)據(jù).所有參與的機(jī)構(gòu)都可以與其他機(jī)構(gòu)交易,而保證隱私性.以此設(shè)計(jì)出兩類區(qū)塊鏈:(1) 僅存儲(chǔ)賬戶信息和交易后的信息,但不執(zhí)行交易的賬戶區(qū)塊鏈;(2) 僅存儲(chǔ)對(duì)交易有用的信息并且執(zhí)行相關(guān)交易的交易區(qū)塊鏈.這極大地提高了整個(gè)區(qū)塊鏈的運(yùn)行效率,同時(shí),將賬戶自身變動(dòng)與交易信息變動(dòng)相分離,增加數(shù)據(jù)管理的靈活性.其所使用的雙鏈結(jié)構(gòu)主要用于金融領(lǐng)域,交易依然是一對(duì)一進(jìn)行,未對(duì)原有非對(duì)稱密碼體制進(jìn)行改動(dòng).
將區(qū)塊鏈應(yīng)用于數(shù)據(jù)共享,業(yè)內(nèi)已有實(shí)踐.如 Enigma[8,9]是一個(gè)分散的計(jì)算平臺(tái),擁有隱私性與可拓展性等特點(diǎn).通過安全多方計(jì)算,其數(shù)據(jù)查詢以分布式方式計(jì)算,任何一個(gè)節(jié)點(diǎn)都不能完整地訪問數(shù)據(jù).通過脫鏈存儲(chǔ)技術(shù),將區(qū)塊鏈與分布式散列表[10]相關(guān)聯(lián),在區(qū)塊鏈上僅保存數(shù)據(jù)存放的地址.MedRec框架[11]將智能合約與訪問控制相結(jié)合進(jìn)行自動(dòng)化的權(quán)限管理,實(shí)現(xiàn)了對(duì)不同組織的分布式醫(yī)療數(shù)據(jù)的整合和權(quán)限管理.
非對(duì)稱加密[12]是保證眾多加密貨幣安全交易的基礎(chǔ)之一,它包含2個(gè)密鑰,即公鑰和私鑰.系統(tǒng)先以某種密鑰生成算法(如SHA256 Hash算法[13]、Base58轉(zhuǎn)換),將輸入經(jīng)過計(jì)算得出私鑰(一串固定長(zhǎng)度的字符串),然后采用另一個(gè)算法(如 Secp256k1橢圓曲線算法[14])分解私鑰生成公鑰,此過程是不可逆的.非對(duì)稱加密在區(qū)塊鏈中有兩種用途:(1) 數(shù)據(jù)加密,用信息接收者的公鑰對(duì)發(fā)送的信息進(jìn)行加密,接收者以自己的私鑰解密;(2) 數(shù)字簽名,信息發(fā)送者以自己的密鑰對(duì)信息哈希值加密(簽名),接收者以發(fā)送者公鑰解密后與原文哈希進(jìn)行比對(duì),用以確認(rèn)此信息確實(shí)由發(fā)送者發(fā)送,達(dá)到不可偽造和不可抵賴目的.
區(qū)塊鏈?zhǔn)褂玫臋E圓曲線非對(duì)稱加密機(jī)制雖然可以提供很高的安全性,但其密鑰不可更改,且每個(gè)賬戶都要有單獨(dú)的密鑰.另外,加密貨幣只限于兩個(gè)賬戶之間的交易,因此不存在權(quán)限管理問題.而在企業(yè)內(nèi)部,這種加密方式難以滿足大量員工對(duì)數(shù)據(jù)的多層級(jí)訪問控制.
ABE[15-17]以屬性為公鑰,將密文、私鑰與屬性相關(guān)聯(lián),能更加靈活地表示訪問控制策略.ABE有以下優(yōu)點(diǎn):(1) 加密時(shí)只需要根據(jù)成員屬性加密消息,而不需要關(guān)心群體中成員的數(shù)量和身份,降低了數(shù)據(jù)加密開銷,也保護(hù)了成員隱私;(2) 只有符合密文屬性要求的群體成員才能解密消息,不符合屬性要求的成員無法解密,從而保證了數(shù)據(jù)安全;(3) 用戶密鑰與隨機(jī)多項(xiàng)式或隨機(jī)數(shù)相關(guān),不同用戶的密鑰無法聯(lián)合,防止了用戶的串謀攻擊;(4) 支持基于屬性的靈活訪問控制策略,可以實(shí)現(xiàn)屬性的與、或、非等門限操作.因此,ABE在細(xì)粒度訪問控制、隱私保護(hù)等方面具有良好的應(yīng)用前景.
使用樹狀圖表示訪問控制策略,以T表示.樹中葉結(jié)點(diǎn)表示屬性,非葉結(jié)點(diǎn)表示與、或等邏輯門限.設(shè)U={A1,A2,…,An}是系統(tǒng)中的屬性集合,leaves(T)表示T中所有葉結(jié)點(diǎn)集合.設(shè)numv為v的子結(jié)點(diǎn)數(shù),kv(1≤kv≤numv)為v的門限值,以att(v)表示與結(jié)點(diǎn)v有關(guān)的屬性.給定一個(gè)屬性集U和訪問控制策略樹Tv,如下定義函數(shù)F(U,Tv).
· 若v是葉結(jié)點(diǎn),當(dāng)且僅當(dāng)att(v)∈U時(shí),F(U,Tv)=1;
· 在其他情況下,F(U,Tv)=0.
哈希算法是一個(gè)函數(shù),將任意長(zhǎng)度的數(shù)據(jù)作為輸入,都將被映射為固定長(zhǎng)度的字符串.同時(shí),它也是一個(gè)單向函數(shù),由輸入可以輕易地算出數(shù)據(jù)的哈希值,卻無法由哈希值逆向推出原數(shù)據(jù).
Merkle樹[18]是基于哈希算法的樹型數(shù)據(jù)結(jié)構(gòu),每個(gè)非葉結(jié)點(diǎn)都是其葉結(jié)點(diǎn)的哈希值.將數(shù)據(jù)進(jìn)行分組哈希,并將生成的新哈希值插入到樹中,如此遞歸,直到只剩最后一個(gè)根哈希值.相較于對(duì)所有數(shù)據(jù)打包進(jìn)行哈希計(jì)算而言,這極大減少了工作量.以圖1為例,當(dāng)加密文件3出現(xiàn)改動(dòng)時(shí),需要更新哈希值,若不使用Merkle樹,則要把所有4個(gè)文件重新哈希;而使用Merkle樹,則只需重新計(jì)算哈希值3和6,便可以得到新的根哈希值.
本模型分為5層:存儲(chǔ)層、區(qū)塊鏈服務(wù)層、API層、鏈上代碼(智能合約)層、應(yīng)用層,其架構(gòu)如圖2所示.
· 存儲(chǔ)層:為快速生成檢索區(qū)塊,采用鏈下存儲(chǔ)方式,即鏈上只存儲(chǔ)數(shù)據(jù)地址,原數(shù)據(jù)經(jīng)過對(duì)稱加密后存儲(chǔ)在底層數(shù)據(jù)庫,由企業(yè)維護(hù).存儲(chǔ)層設(shè)在企業(yè)內(nèi)部,其存儲(chǔ)結(jié)構(gòu)可以使數(shù)據(jù)擁有者在將數(shù)據(jù)存入時(shí)決定數(shù)據(jù)的訪問控制策略;
· 區(qū)塊鏈服務(wù)層:分為企業(yè)鏈(company blockchain,簡(jiǎn)稱CBC)和行業(yè)鏈(industry blockchain,簡(jiǎn)稱IBC).其中,CBC記錄企業(yè)內(nèi)部的數(shù)據(jù)存儲(chǔ)地址與變化情況,由企業(yè)內(nèi)部節(jié)點(diǎn)共同維護(hù),確保不同節(jié)點(diǎn)狀態(tài)一致,提供基于屬性的訪問控制服務(wù);IBC記錄行業(yè)內(nèi)部企業(yè)之間的數(shù)據(jù)交換與調(diào)用,數(shù)據(jù)的請(qǐng)求與共享都將記錄在IBC上以便查詢和監(jiān)管;
· API層:接口用于數(shù)據(jù)的查詢、區(qū)塊廣播、發(fā)送等;
· 鏈上代碼層:提供智能合約服務(wù).主要功能是提供屬性基訪問控制,即在CBC與IBC上提供自定義的訪問控制策略,只有滿足特定屬性(或級(jí)別)的賬戶才能讀取(或?qū)懭?數(shù)據(jù);
· 應(yīng)用層:提供各種應(yīng)用程序,如監(jiān)管系統(tǒng)、查詢系統(tǒng)等.
無論企業(yè)內(nèi)部還是行業(yè)內(nèi)部,都是弱信用環(huán)境.因此本模型基于聯(lián)盟鏈,即只有被許可的節(jié)點(diǎn)才能進(jìn)行讀寫操作.同時(shí)摒棄了公有鏈常用的 POW,POS等共識(shí)機(jī)制,而是使用信用制,當(dāng)發(fā)現(xiàn)節(jié)點(diǎn)有違規(guī)寫入垃圾信息或其他作惡行為,則直接將其剔除出整個(gè)系統(tǒng),收回其權(quán)限.
整個(gè)行業(yè)區(qū)塊鏈系統(tǒng)由3種節(jié)點(diǎn)維護(hù),分別為企業(yè)節(jié)點(diǎn)、行業(yè)節(jié)點(diǎn)與邊緣節(jié)點(diǎn),節(jié)點(diǎn)之間關(guān)系如圖3所示.各自職能如下.
(1) 企業(yè)節(jié)點(diǎn):用于維護(hù)企業(yè)鏈.當(dāng)新數(shù)據(jù)達(dá)到閾值后,企業(yè)節(jié)點(diǎn)將數(shù)據(jù)經(jīng)過對(duì)稱加密后存放至底層數(shù)據(jù)庫,并將其存放地址和密鑰及Merkle樹一同放到鏈上用于查詢與驗(yàn)證;
(2) 行業(yè)節(jié)點(diǎn):用于維護(hù)行業(yè)鏈而非企業(yè)內(nèi)部數(shù)據(jù),由行業(yè)協(xié)會(huì)或行業(yè)內(nèi)所有企業(yè)共同維護(hù),用于確認(rèn)行業(yè)內(nèi)各企業(yè)之間的數(shù)據(jù)交互(數(shù)據(jù)交集查詢).行業(yè)節(jié)點(diǎn)僅維護(hù)行業(yè)鏈而不屬于任何企業(yè)鏈.其主要功能是便于監(jiān)管機(jī)構(gòu)或行業(yè)協(xié)會(huì)對(duì)行業(yè)鏈進(jìn)行監(jiān)管;
(3) 邊緣節(jié)點(diǎn):同時(shí)加入企業(yè)內(nèi)部區(qū)塊鏈網(wǎng)絡(luò)與行業(yè)區(qū)塊鏈網(wǎng)絡(luò),用于連接企業(yè)鏈與行業(yè)鏈,進(jìn)行數(shù)據(jù)傳遞.企業(yè)鏈與行業(yè)鏈?zhǔn)褂猛惶讓傩曰用芩惴?將授權(quán)中心 CA部署在邊緣節(jié)點(diǎn)可以提高資源利用率.當(dāng)某企業(yè)在行業(yè)鏈上發(fā)出數(shù)據(jù)共享請(qǐng)求時(shí),其他企業(yè)邊緣節(jié)點(diǎn)上的智能合約自動(dòng)驗(yàn)證其訪問權(quán)限,并進(jìn)行交集操作.
整個(gè)系統(tǒng)包括企業(yè)鏈與行業(yè)鏈兩部分,是平行區(qū)塊鏈結(jié)構(gòu):企業(yè)鏈負(fù)責(zé)存儲(chǔ)具體數(shù)據(jù)的位置索引,行業(yè)鏈負(fù)責(zé)記錄企業(yè)之間的數(shù)據(jù)交集操作.具體如下.
(1) 企業(yè)區(qū)塊鏈:確保企業(yè)內(nèi)部數(shù)據(jù)的安全與可追溯.
當(dāng)緩存區(qū)中的數(shù)據(jù)達(dá)到閾值,企業(yè)內(nèi)部節(jié)點(diǎn)將其加密后傳輸至底層數(shù)據(jù)庫中,同時(shí)將數(shù)據(jù)的輸入時(shí)間戳、區(qū)塊長(zhǎng)度及前一個(gè)區(qū)塊的哈希值作為區(qū)塊頭,根據(jù)訪問控制樹將數(shù)據(jù)位置索引、明文形式的訪問控制策略和數(shù)據(jù)Merkle根加密后打包成塊,存儲(chǔ)至區(qū)塊體中,其后上傳至企業(yè)鏈上.其數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)如圖4所示.
(2) 行業(yè)區(qū)塊鏈:將行業(yè)內(nèi)各企業(yè)置于監(jiān)管之下,并可通過多方計(jì)算將所有企業(yè)的數(shù)據(jù)進(jìn)行統(tǒng)一分析.
與企業(yè)鏈中的準(zhǔn)備工作相同,每個(gè)企業(yè)在將數(shù)據(jù)位置索引上傳至企業(yè)鏈時(shí),將行業(yè)內(nèi)其他企業(yè)的屬性也納入訪問控制樹中,一個(gè)典型的屬性基加密策略樹如圖 5所示.其左支代表對(duì)企業(yè)的屬性要求,右支代表企業(yè)中有權(quán)限部門的賬戶要求.只有特定企業(yè)中的特定部門才能進(jìn)行解密.數(shù)據(jù)請(qǐng)求者在提出數(shù)據(jù)交集請(qǐng)求時(shí),需將所請(qǐng)求數(shù)據(jù)與含有自己屬性的令牌一同發(fā)布至行業(yè)區(qū)塊鏈上.所有企業(yè)的邊緣節(jié)點(diǎn)都將驗(yàn)證其是否有訪問本企業(yè)數(shù)據(jù)的權(quán)限,只有通過權(quán)限驗(yàn)證,邊緣節(jié)點(diǎn)才會(huì)自動(dòng)對(duì)所請(qǐng)求的數(shù)據(jù)進(jìn)行交集操作,并返回給請(qǐng)求企業(yè).由于屬性基訪問控制策略的存在,全行業(yè)鏈節(jié)點(diǎn)都將記錄這一過程,但只有交易雙方可見交易的細(xì)節(jié).另外,對(duì)于需要監(jiān)管者查看所有數(shù)據(jù)的行業(yè),可直接將監(jiān)管者屬性列入訪問控制樹左支,即可使其擁有訪問權(quán)限.
數(shù)據(jù)存儲(chǔ)方面,本模型使用了密文存儲(chǔ)與脫鏈存儲(chǔ)來保證數(shù)據(jù)的安全.
(1) 密文存儲(chǔ):由于系統(tǒng)主要功能是保護(hù)企業(yè)內(nèi)部重要數(shù)據(jù),通常是用戶隱私數(shù)據(jù)、財(cái)務(wù)數(shù)據(jù)等,因此底層存儲(chǔ)應(yīng)采用密文存儲(chǔ).而直接使用非對(duì)稱加密會(huì)導(dǎo)致密鑰管理混亂,同時(shí)對(duì)于大量底層數(shù)據(jù)而言效率不高.因此,選用對(duì)稱加密方式對(duì)底層數(shù)據(jù)進(jìn)行加密;
(2) 脫鏈存儲(chǔ):由于區(qū)塊鏈處理速度較慢,不適宜將所有數(shù)據(jù)直接存儲(chǔ)在鏈上,因此使用脫鏈存儲(chǔ).通過建立分布式散列表,區(qū)塊鏈存儲(chǔ)對(duì)數(shù)據(jù)的引用,而非數(shù)據(jù)本身.數(shù)據(jù)在存儲(chǔ)時(shí)進(jìn)行加密,并編輯數(shù)據(jù)訪問控制策略.Merkle樹保證了數(shù)據(jù)即使沒有存在鏈上,也不能被篡改,且在部分?jǐn)?shù)據(jù)變動(dòng)后可以較小代價(jià)更新Merkle根.
該方案由企業(yè)鏈與行業(yè)鏈兩個(gè)相互隔離又可通過邊緣節(jié)點(diǎn)相互通信的雙鏈系統(tǒng)組成,其中:企業(yè)鏈用于加密存儲(chǔ)企業(yè)內(nèi)部數(shù)據(jù)的地址,行業(yè)鏈則用于記錄行業(yè)內(nèi)部企業(yè)之間的數(shù)據(jù)請(qǐng)求.具體步驟如下.
3.2.1 企業(yè)內(nèi)部訪問控制
(1) 初始化:根據(jù)安全參數(shù)lλ,由授權(quán)中心CA執(zhí)行產(chǎn)生主私鑰mk和公共參數(shù)pp;
(2) 身份注冊(cè):企業(yè)內(nèi)各部門向系統(tǒng)提出注冊(cè)申請(qǐng),獲取其真實(shí)身份信息對(duì)應(yīng)的標(biāo)識(shí)UID及屬性集合SU;
(3) 密鑰分發(fā):按照密鑰分發(fā)算法KeyGen(mk,SU),CA根據(jù)注冊(cè)者屬性集U∈SU,計(jì)算其屬性私鑰、屬性參數(shù),并由此計(jì)算出使用者的私鑰SK,將其通過安全信道發(fā)送給使用者保存;
(4) 加密數(shù)據(jù):數(shù)據(jù)上傳者根據(jù)訪問者的屬性對(duì)數(shù)據(jù)制定訪問控制策略樹StrGen(SU)→Tcom,隨機(jī)生成對(duì)稱加密密鑰rs,數(shù)據(jù)經(jīng)過對(duì)稱加密計(jì)算后放入底層數(shù)據(jù)庫.對(duì)稱加密算法可以表示為
(5) 數(shù)據(jù)上傳:企業(yè)節(jié)點(diǎn)根據(jù)訪問控制策略樹對(duì)數(shù)據(jù)索引地址add、對(duì)稱加密密鑰rs進(jìn)行加密,并將其廣播至區(qū)塊鏈.同時(shí),節(jié)點(diǎn)生成該數(shù)據(jù)索引id與鏈上數(shù)據(jù)的映射,將其放入底層數(shù)據(jù)庫(不與經(jīng)對(duì)稱加密后的數(shù)據(jù)一同存放):
(6) 訪問密文:訪問者根據(jù)數(shù)據(jù)索引id在鏈上查得該數(shù)據(jù)的地址與對(duì)稱加密密鑰.若該訪問者沒有權(quán)限訪問此數(shù)據(jù),則無法得到密鑰rs,無法對(duì)索引地址進(jìn)行解密,也就無法訪問原數(shù)據(jù);若該訪問者屬性滿足訪問控制策略樹,則其可以解密得到地址add與密鑰rs,可以至底層數(shù)據(jù)庫訪問該數(shù)據(jù):
3.2.2 行業(yè)內(nèi)部訪問控制
(1) 前4步與企業(yè)內(nèi)部數(shù)據(jù)訪問控制相同,但在對(duì)數(shù)據(jù)加密時(shí),其訪問控制策略樹不僅考慮企業(yè)內(nèi)部賬戶,還加入行業(yè)內(nèi)其他可進(jìn)行交集操作的企業(yè)屬性SU′,StrGen(SU′)→Tind;
(2) 令牌生成:每個(gè)企業(yè)生成一個(gè)token令牌,包含該企業(yè)的權(quán)限與屬性信息;
(3) 加密請(qǐng)求:請(qǐng)求數(shù)據(jù)的企業(yè)將需要與其他企業(yè)進(jìn)行交集操作的數(shù)據(jù)D(d1,d2,d3,…,dn)用訪問控制樹Tind進(jìn)行加密,使其僅滿足被請(qǐng)求企業(yè)的屬性:
(4) 發(fā)送交集操作請(qǐng)求:請(qǐng)求數(shù)據(jù)企業(yè)將加密后的數(shù)據(jù)與自己的令牌一同發(fā)送至行業(yè)區(qū)塊鏈上,所有企業(yè)都可以看到并記錄這一消息,并由令牌中的信息判定其來源,但只有符合密文中所包含的訪問控制樹的企業(yè)節(jié)點(diǎn)可以解密此消息:
(5) 交集操作:由于邊緣節(jié)點(diǎn)既是企業(yè)鏈的節(jié)點(diǎn),又是行業(yè)鏈的節(jié)點(diǎn),被請(qǐng)求方的邊緣節(jié)點(diǎn)在完成解密后,可以自動(dòng)在其內(nèi)部企業(yè)鏈上檢索該數(shù)據(jù)是否開放給請(qǐng)求方.若接收到的令牌可以滿足交集數(shù)據(jù)的訪問控制樹,則邊緣節(jié)點(diǎn)自動(dòng)將數(shù)據(jù)進(jìn)行交集操作,并通過安全信道返回給請(qǐng)求方:
(6) 上傳區(qū)塊鏈確認(rèn):當(dāng)請(qǐng)求方完成交集操作后,全局廣播一條包含此令牌的數(shù)據(jù),表明已完成交集操作,其他企業(yè)確認(rèn)后將此行為記錄在行業(yè)區(qū)塊鏈上.
以A,B,C這3家處于同一個(gè)行業(yè)鏈中的企業(yè)為例.A為數(shù)據(jù)請(qǐng)求方,B和C為數(shù)據(jù)共享方.其中,B在企業(yè)鏈的訪問控制樹中將本年度1月~3月數(shù)據(jù)設(shè)為對(duì)A可操作,而C只共享了一月數(shù)據(jù)給A.A試圖請(qǐng)求B,C的1月、2月數(shù)據(jù)用作交集操作,則將自己1月、2月數(shù)據(jù)經(jīng)過Enc(D(JanA,FebA))得到cphA,此密文所含訪問控制樹僅B,C可解密.將cphA連同tokenA發(fā)送至區(qū)塊鏈.B和C都將接收到此信息,但邊緣節(jié)點(diǎn)用tokenA嘗試解密各自的1月、2月數(shù)據(jù)時(shí),只有B能完成操作,則B的邊緣節(jié)點(diǎn)將D(JanB,FebB)∩D(JanA,FebA)返回給A,C返回空.在B,C都完成上述操作后,A將自動(dòng)向區(qū)塊鏈廣播一條消息表明已完成交集操作.
假設(shè)B在企業(yè)鏈的訪問控制樹中將數(shù)據(jù)d1,d2,d3設(shè)為對(duì)A可操作,而C只共享d1給A.A向B和C提出d1,d2,d3數(shù)據(jù)交集申請(qǐng)的具體算法如下.
算法.
1.B,C利用StrGen(SU)分別生成各自的TindB和TindC;
2.B,C分別使用隨機(jī)生成的對(duì)稱密碼對(duì)數(shù)據(jù)加密:
3.B,C根據(jù)各自策略樹對(duì)數(shù)據(jù)地址索引與對(duì)稱密碼加密:
4. 數(shù)據(jù)上鏈:
5.A向B,C發(fā)起交集請(qǐng)求,B的邊緣節(jié)點(diǎn)將會(huì)進(jìn)行如下操作:
對(duì)于C,由于A不滿足C設(shè)定的交集訪問權(quán)限,因此無法使用Dec算法解密數(shù)據(jù),返回null.
6.A在完成上述操作后,將此操作上傳至行業(yè)區(qū)塊鏈IBC,使行業(yè)鏈上的其他企業(yè)都記錄下這一操作過程:
表1從數(shù)據(jù)安全、企業(yè)間弱信用環(huán)境和數(shù)據(jù)存儲(chǔ)等方面將本模型與傳統(tǒng)區(qū)塊鏈進(jìn)行對(duì)比分析.
隨著區(qū)塊鏈的快速發(fā)展,越來越多的應(yīng)用場(chǎng)景被開發(fā)出來,其在數(shù)據(jù)存儲(chǔ)與共享方面的研究與實(shí)踐也受到廣泛關(guān)注.本文提出一種應(yīng)用區(qū)塊鏈的數(shù)據(jù)訪問控制與共享模型,用屬性基加密對(duì)現(xiàn)有區(qū)塊鏈的加密方式、數(shù)據(jù)存儲(chǔ)方式進(jìn)行了改進(jìn),以滿足數(shù)據(jù)在企業(yè)內(nèi)部的訪問控制以及企業(yè)之間數(shù)據(jù)共享的需求,達(dá)到了細(xì)粒度訪問控制與安全共享的目的.其中,脫鏈存儲(chǔ)、非對(duì)稱加密與對(duì)稱加密相結(jié)合的措施已可在Hyperledger Fabric[19]等平臺(tái)上實(shí)現(xiàn).
Table 1 Comparative analysis between the model and traditional blockchain表1 本模型與傳統(tǒng)區(qū)塊鏈對(duì)比分析