張曉東,陳韜偉,余益民,3
1.云南財(cái)經(jīng)大學(xué) 信息學(xué)院,昆明 650221
2.云南省區(qū)塊鏈應(yīng)用技術(shù)重點(diǎn)實(shí)驗(yàn)室,昆明 650221
3.云南財(cái)經(jīng)大學(xué) 智能應(yīng)用研究院,昆明 650221
目前,新一代信息技術(shù)促進(jìn)了數(shù)據(jù)的指數(shù)級(jí)增長(zhǎng),使得數(shù)據(jù)成為了新的生產(chǎn)要素。然而,隨著數(shù)據(jù)的開(kāi)放和共享,越來(lái)越多的信息泄露事件使得敏感數(shù)據(jù)的所有權(quán)、安全性和隱私性成為各行各業(yè)必須面臨的問(wèn)題。但傳統(tǒng)的密文共享方法解決敏感數(shù)據(jù)安全和隱私保護(hù)的同時(shí)采用中心化的數(shù)據(jù)訪(fǎng)問(wèn)控制模型,導(dǎo)致了需要耗費(fèi)大量的通信開(kāi)銷(xiāo)和運(yùn)算代價(jià)[1]。而作為一種新型公鑰加密體制的密文屬性基加密算法CP-ABE(ciphertextpolicy attribute-based encryption)[2-3],主要由數(shù)據(jù)所有者制定訪(fǎng)問(wèn)策略,將私鑰與屬性相關(guān)聯(lián)后嵌入密文,實(shí)現(xiàn)了“一對(duì)多細(xì)粒度”的密文訪(fǎng)問(wèn)控制。因此,將CPABE 算法結(jié)合分布式數(shù)據(jù)共享管理機(jī)制可以有效解決上述問(wèn)題。
2011 年,Waters 等人[4-6]提出一個(gè)基于線(xiàn)性秘密共享方案(linear secret sharing scheme,LSSS)的高效率CP-ABE算法,并在標(biāo)準(zhǔn)模型下證明了屬性基加密的安全性。2010 年,Lewko 等人[7]將訪(fǎng)問(wèn)結(jié)構(gòu)設(shè)計(jì)為L(zhǎng)SSS矩陣,實(shí)現(xiàn)了CCA 安全的雙系統(tǒng)加密機(jī)制。2012 年,Okamoto等人[8]解除了以往屬性基加密方案對(duì)謂詞和屬性大小的限制,提出了無(wú)界內(nèi)積屬性基加密方案。2013年,Gorbunov等人[9]提出了由基于布爾公式向基于多項(xiàng)式邏輯電路的轉(zhuǎn)變的屬性基加密方案,有效抵御合謀攻擊。2014 年,Waters 等人[10]在Rouselakis 等人[11]研究基礎(chǔ)上提出線(xiàn)上線(xiàn)下結(jié)合的屬性基加密方案,減少了在線(xiàn)階段的計(jì)算開(kāi)銷(xiāo)。2015 年,De 等人[12]提出多機(jī)構(gòu)的密文屬性加密機(jī)制,但方案中隱私性難以保證。2017年,仲紅等人[13]提出一種高效且可驗(yàn)證的多授權(quán)機(jī)構(gòu)屬性基加密方案(MA-CP-ABE),通過(guò)外包解密方式減少解密計(jì)算開(kāi)銷(xiāo),但其私鑰仍由多個(gè)屬性授權(quán)機(jī)構(gòu)生成。
綜上,當(dāng)前的CP-ABE算法由于其屬性密鑰僅與屬性集合相關(guān),而與用戶(hù)標(biāo)識(shí)無(wú)關(guān),因此無(wú)法預(yù)防和追溯非法用戶(hù)持有合法用戶(hù)的私鑰。此外,由于ABE 均由中心化的單權(quán)威機(jī)構(gòu)授權(quán),不能滿(mǎn)足大規(guī)模分布式應(yīng)用對(duì)于不同機(jī)構(gòu)協(xié)作的需求,這要求了該權(quán)威機(jī)構(gòu)必須完全誠(chéng)實(shí)可信,違背了分布式應(yīng)用信任分散的需求[14]。
隨著比特幣區(qū)塊鏈系統(tǒng)于2009 年由中本聰[15]首次上線(xiàn),實(shí)現(xiàn)了P2P網(wǎng)絡(luò)與密碼學(xué)相結(jié)合的分布式賬本機(jī)制,具有去中心化、防篡改、透明公開(kāi)驗(yàn)證等特點(diǎn)。這些特點(diǎn)符合當(dāng)前CP-ABE對(duì)密鑰審計(jì)與追溯的需求,同時(shí)分布式管理方式也可解決單點(diǎn)故障、計(jì)算開(kāi)銷(xiāo)大等問(wèn)題。因此,Bramm 等人[16]將CP-ABE 與區(qū)塊鏈結(jié)合,采用分布式密鑰管理提升系統(tǒng)的安全性和效率;Fan 等人[17]則結(jié)合區(qū)塊鏈解決了云服務(wù)器的數(shù)據(jù)存儲(chǔ)隱私和密文訪(fǎng)問(wèn)控制問(wèn)題;田有亮等人[18]提出了區(qū)塊鏈密文溯源系統(tǒng),實(shí)現(xiàn)了交易數(shù)據(jù)的隱私和動(dòng)態(tài)保護(hù);閆璽璽等人[19]提出一種基于區(qū)塊鏈的屬性基搜索加密方案,解決了對(duì)半誠(chéng)實(shí)且好奇的模型下云服務(wù)器返回搜索結(jié)果的可驗(yàn)證問(wèn)題。
以上的CP-ABE方案[16-19]中雖然采用區(qū)塊鏈系統(tǒng)進(jìn)行了分布式管理,但方案仍沿用了中央機(jī)構(gòu)CA(central authority)進(jìn)行密鑰計(jì)算和分發(fā),并未解決存在的單點(diǎn)安全隱患。為此,Gao等人[20]通過(guò)同態(tài)加密的方式將用戶(hù)屬性隱藏,區(qū)塊鏈作為進(jìn)行身份證明和驗(yàn)證的實(shí)體,從而獲得主密鑰,并由用戶(hù)生成私鑰,實(shí)現(xiàn)了分布式的密鑰計(jì)算和屬性保存,但其主密鑰仍由中心化機(jī)構(gòu)保管,存在安全隱患;鄭良漢等人[21]設(shè)計(jì)了一種層次化多權(quán)威CP-ABE 算法,通過(guò)區(qū)塊鏈技術(shù)進(jìn)行私鑰分發(fā),但與區(qū)塊鏈的相關(guān)程度不高。
因此,本文采用代理密鑰封裝技術(shù),提出屬性基加密的區(qū)塊鏈雙鏈方案PKEM-CPABE(proxy key encapsulation mechanism ciphertext-policy attribute-based encryption)。實(shí)現(xiàn)數(shù)據(jù)的隱私保護(hù)和加密過(guò)程的追蹤審計(jì)。本文的主要貢獻(xiàn)如下:
(1)在Waters[4]所提的CP-ABE方案基礎(chǔ)上,通過(guò)區(qū)塊鏈代理密鑰封裝機(jī)制對(duì)主密鑰進(jìn)行封裝。其中,設(shè)計(jì)主密鑰代理保管節(jié)點(diǎn)和密鑰轉(zhuǎn)換節(jié)點(diǎn),分別負(fù)責(zé)保管主密鑰密文與解密主密鑰密文,通過(guò)區(qū)塊鏈節(jié)點(diǎn)不同分工實(shí)現(xiàn)了主密鑰的安全分布式計(jì)算與用戶(hù)屬性的管理,無(wú)需可信第三方的參與。
(2)方案采用主從式雙鏈架構(gòu),主鏈采用POW共識(shí)機(jī)制,激勵(lì)節(jié)點(diǎn)參與交易的驗(yàn)證并獲得信譽(yù)積分獎(jiǎng)勵(lì),并為子鏈選舉許可計(jì)算節(jié)點(diǎn)。子鏈共識(shí)采用POA 機(jī)制,提高算法主密鑰安全分發(fā)通信和共識(shí)效率。另外,子鏈?zhǔn)聞?wù)區(qū)塊的hash綁定主鏈區(qū)塊中,確保子鏈中事務(wù)的追蹤與可驗(yàn)證。
(3)設(shè)計(jì)了支持雙鏈架構(gòu)的區(qū)塊結(jié)構(gòu),對(duì)算法中參數(shù)的產(chǎn)生、使用和分發(fā)的交易進(jìn)行分類(lèi)歸管。通過(guò)全流程追溯防止密鑰濫用,確定作惡用戶(hù)節(jié)點(diǎn)行為,實(shí)現(xiàn)交易的可驗(yàn)證、可追責(zé)和可審計(jì)性。
本文中基于PKEM-CPABE算法所涉及的主要參數(shù)如表1所示。
表1 方案主要參數(shù)Table 1 Notations in this paper
設(shè)p是一大素?cái)?shù),G0、G1是兩個(gè)階為p的乘法循環(huán)群,g為群G0生成元,定義雙線(xiàn)性映射[22]e:G0×G0→G1。滿(mǎn)足以下性質(zhì):
(1)雙線(xiàn)性:對(duì)于任意g∈G0,a,b∈Zp,有e(ga,gb)=e(gb,ga)=e(g,g)ab;
(2)非退化性:存在g∈G0,e(g,g)≠1;
(3)可計(jì)算性:存在有效計(jì)算e(g,g)。
參與方集合p上的秘密共享方案Γ如果滿(mǎn)足下列條件,則稱(chēng)為Zp上的線(xiàn)性秘密共享方案[22]:
每個(gè)共享秘密的份額組成Zp上的一個(gè)向量。
對(duì)于秘密共享方案Γ,存在一個(gè)l×n矩陣M,映射函數(shù)ρ為M的行指定屬性。對(duì)于i=1,2,…,l,ρ(i)是與第i行相關(guān)聯(lián)的參與方??紤]一個(gè)列向量v=(s,y2,…,yn),s是被共享的秘密,ri是隨機(jī)選取的i=2,3,…,n,根據(jù)方案Γ,Mv是秘密s被共享的l個(gè)秘密份額,λi=vi·Mi(i=1,2,…,l)表示秘密共享密鑰份額。
線(xiàn)性秘密共享方案具有線(xiàn)性重構(gòu)的特性,如果S∈A是一個(gè)訪(fǎng)問(wèn)授權(quán)集合,那么存在一個(gè)常數(shù)ωi∈Zp,使得成立,其中λi是秘密s的有效份額,I={i:ρ(i)∈S}。
PKEM-CPABE算法由以下9個(gè)算法構(gòu)成,其關(guān)系圖如圖1所示。
圖1 PKEM-CPABE算法流程圖Fig.1 Process of PKEM-CPABE algorithm
(1)系統(tǒng)初始化
AbeSetup(1k)→(PK,MSK)。輸入安全參數(shù)k和屬性集合U,輸出系統(tǒng)密鑰對(duì)(PK,MSK)。
設(shè)α,β∈Zp及群G0的元素h1,h2,…,hu,其中{1,2,…,u}表示屬性集合U對(duì)應(yīng)的屬性標(biāo)號(hào),系統(tǒng)輸出密鑰對(duì)(PK,MSK)為:
(2)用戶(hù)初始化
PkemSetup(1φ)→(pk,sk)。算法輸入系統(tǒng)安全參數(shù)φ,輸出用戶(hù)公私鑰對(duì)(pk,sk)。
定義G2是Zq階數(shù)為q的循環(huán)群,令f為群G2的生成元,定義哈希函數(shù)Hi,隨機(jī)選擇a∈Zq,輸出用戶(hù)密鑰對(duì)為(pk,sk):
(3)主密鑰的封裝
PkemMSK(MSK,pkA)→(CTMSK,capsule1)。算法輸入系統(tǒng)主密鑰MSK和用戶(hù)公鑰pkA,輸出封裝后的的主密鑰密文CTMSK和膠囊capsule1。
定義哈希函數(shù)H2,隨機(jī)選擇e,v∈Zq,定義G 為AES對(duì)稱(chēng)加密函數(shù):EAES,DAES。輸出主密鑰密文CTMSK和膠囊capsule1為:
(4)用戶(hù)私鑰轉(zhuǎn)換
PkemKeyGen(skA,pkB)→(XA,rkA→B)。輸入A的用戶(hù)私鑰skA和B的用戶(hù)公鑰pkB,輸出轉(zhuǎn)換密鑰rkA→B。
隨機(jī)選擇xA∈Zq,定義哈希函數(shù)H3,計(jì)算轉(zhuǎn)換密鑰rkA→B:
(5)用戶(hù)私鑰重加密
PkemEnc(rkA→B,capsule1)→capsule2。輸入轉(zhuǎn)換密鑰rkA→B和膠囊capsule1,輸出膠囊capsule2:
(6)主密鑰解密
PkemDec(CTMSK,XA,skB,capsule2)→MSK。通過(guò)輸入主密鑰密文CTMSK,用戶(hù)私鑰skB和capsule2,輸出主密鑰MSK。
定義哈希函數(shù)H3,計(jì)算主密鑰MSK:
(7)系統(tǒng)加密
AbeEnc(PK,m,(M,ρ))→CT。輸入系統(tǒng)公鑰PK、明文m和訪(fǎng)問(wèn)控制策略(M,ρ),輸出密文CT。加密過(guò)程中采用秘密共享技術(shù),最終密文CT為:
(8)屬性私鑰生成:
AbeKeyGen(MSK,S)→SK。輸入系統(tǒng)主密鑰MSK和用戶(hù)屬性集合S,輸出用戶(hù)的屬性私鑰SK。
(9)解密
AbeDec(CT,SK)→m。輸入密文CT、屬性集合S對(duì)應(yīng)的私鑰SK,如果S滿(mǎn)足訪(fǎng)問(wèn)結(jié)構(gòu),則輸出明文m,反之則解密失敗。
解密計(jì)算:
本文安全模型選擇明文攻擊下的不可區(qū)分性(indistinguish ability against selective access structure and chosen plaintext attack,IND-SAS-CPA)游戲,游戲中挑戰(zhàn)者(challenger)和敵手(adversary)的交互過(guò)程如下[23]。
(1)初始化。挑戰(zhàn)者初始化系統(tǒng)AbeSetup(1k),保存用于應(yīng)答的秘密參數(shù)mk,并將公鑰pk發(fā)送給敵手,敵手宣布要挑戰(zhàn)的舊訪(fǎng)問(wèn)策略(M,ρ) 和新訪(fǎng)問(wèn)策略(M*,ρ*)。
(2)詢(xún)問(wèn)。敵手向挑戰(zhàn)者發(fā)送多個(gè)屬性集合S1,S2,…,Sn,這些屬性不滿(mǎn)足訪(fǎng)問(wèn)策略(M,ρ)和(M*,ρ*),挑戰(zhàn)者運(yùn)行AbeKeyGen(MSK,S)將生成的相應(yīng)屬性私鑰并發(fā)給敵手。
(3)挑戰(zhàn)明文。①敵手發(fā)送兩條等長(zhǎng)明文m0、m1給挑戰(zhàn)者,挑戰(zhàn)者隨機(jī)選取c∈{0,1}使用舊訪(fǎng)問(wèn)策略進(jìn)行mc加密;②挑戰(zhàn)者根據(jù)(M*,ρ*)進(jìn)行策略更新,生成相應(yīng)更新密文CT*;③挑戰(zhàn)者將更新密文CT*發(fā)送至敵手。
(4)重復(fù)步驟(2),敵手向挑戰(zhàn)者發(fā)送屬性集合Sn+1,Sn+2,…,Sn+m,申請(qǐng)相對(duì)應(yīng)私鑰,其屬性不滿(mǎn)足訪(fǎng)問(wèn)結(jié)構(gòu)(M*,ρ*)。
(5)猜測(cè)。敵手輸出c的判斷結(jié)果c∈{0,1}。
定義1若多項(xiàng)式時(shí)間敵手贏得以上安全模型游戲優(yōu)勢(shì)可以忽略,則本文方案安全。
本文采用雙鏈架構(gòu),主鏈public chain(PC)基于POW共識(shí)算法;子鏈child chain(CC)基于POA共識(shí)算法。
(1)PC:主鏈中將信譽(yù)積分作為主鏈網(wǎng)絡(luò)的激勵(lì)機(jī)制以吸引節(jié)點(diǎn)參與共識(shí)并獲得積分獎(jiǎng)勵(lì),同時(shí)抵抗作惡節(jié)點(diǎn)的攻擊和確保網(wǎng)絡(luò)安全。另外,主鏈上設(shè)置主密鑰代理存儲(chǔ)節(jié)點(diǎn)PSN(proxy storage node)、密鑰轉(zhuǎn)換節(jié)點(diǎn)RKCN(re-key calculate node)等許可計(jì)算節(jié)點(diǎn)的選舉,被選舉出的PSN、RKCN節(jié)點(diǎn)與數(shù)據(jù)擁有者DO、數(shù)據(jù)使用者DU 共同維護(hù)子鏈賬本。PC 中的區(qū)塊pb(public block)存儲(chǔ)由DO 上傳的加密密文CT 摘要和各節(jié)點(diǎn)信譽(yù)積分RS(rating score)。
(2)CC:PSN、RKCN 節(jié)點(diǎn)由主鏈選舉構(gòu)成子鏈,并與DO、DU節(jié)點(diǎn)組成的臨時(shí)計(jì)算委員會(huì),采用POA共識(shí)機(jī)制,提高子鏈?zhǔn)聞?wù)處理速度和讀寫(xiě)吞吐量、降低交易成本。子鏈中的區(qū)塊cb(child block)存儲(chǔ)各參數(shù)傳遞過(guò)程的事務(wù)信息,實(shí)現(xiàn)密鑰傳遞的可追溯性。
在雙鏈結(jié)構(gòu)中,PC和SC通過(guò)hash值方式進(jìn)行錨定。DO 將密文CT存儲(chǔ)于IPFS 數(shù)據(jù)庫(kù)中,將密文CT地址摘要記錄在公鏈;子鏈中各節(jié)點(diǎn)通過(guò)智能合約進(jìn)行交互。
在雙鏈架構(gòu)中,設(shè)計(jì)信譽(yù)積分RS,作為節(jié)點(diǎn)的量化評(píng)價(jià)指標(biāo),可以客觀(guān)反映出該節(jié)點(diǎn)的好壞。同時(shí),信譽(yù)積分采取連帶責(zé)任制,對(duì)于表現(xiàn)好的節(jié)點(diǎn),根據(jù)其貢獻(xiàn)程度獎(jiǎng)勵(lì)一定數(shù)量的積分值作為獎(jiǎng)勵(lì);對(duì)于故障或惡意節(jié)點(diǎn),作為懲罰則扣除相應(yīng)的RS。
3.1.1 投票機(jī)制
本文結(jié)合信譽(yù)積分提出一種新的計(jì)算節(jié)點(diǎn)總票數(shù)(Votes)的公式:
其中,AV表示贊成票,NV表示反對(duì)票,RSi為第i個(gè)節(jié)點(diǎn)所擁有的RS值,m為該節(jié)點(diǎn)獲得贊成票個(gè)數(shù),n為該節(jié)點(diǎn)獲得反對(duì)票個(gè)數(shù)。為第i個(gè)節(jié)點(diǎn)投票所占權(quán)重。總贊成票減去總反對(duì)票數(shù),與節(jié)點(diǎn)自身RS值相加,獲得最終票數(shù)Votes。
3.1.2 節(jié)點(diǎn)選舉
基于PKEM-CPABE雙鏈架構(gòu)中的子鏈節(jié)點(diǎn)負(fù)責(zé)代理主密鑰封裝的密鑰存儲(chǔ)和轉(zhuǎn)換密鑰計(jì)算。對(duì)于Votes值小于0的節(jié)點(diǎn)則默認(rèn)其Votes值為0。在一輪投票中,對(duì)所有參與節(jié)點(diǎn)Votes值進(jìn)行由高到低排序,將節(jié)點(diǎn)分為不同類(lèi)型:
(1)PSN:Votes值為前20%的節(jié)點(diǎn);
(2)RKCN:Votes值為20%~80%的節(jié)點(diǎn);
(3)危險(xiǎn)節(jié)點(diǎn):Votes值為最后20%的節(jié)點(diǎn)。
3.1.3 信譽(yù)積分獎(jiǎng)懲機(jī)制
在子鏈CC 中,對(duì)于成功貢獻(xiàn)的節(jié)點(diǎn)會(huì)給予一定的獎(jiǎng)勵(lì);反之,則給予一定的懲罰。設(shè)共有k個(gè)節(jié)點(diǎn)參與,單個(gè)節(jié)點(diǎn)的工作量為WL(work load),獎(jiǎng)勵(lì)系數(shù)為τ,根據(jù)其工作量所占權(quán)重,進(jìn)行獎(jiǎng)勵(lì)或懲罰。
以某積極節(jié)點(diǎn)為例,當(dāng)其成功完成其工作時(shí),工作量為WLi,節(jié)點(diǎn)獲得獎(jiǎng)勵(lì):
參與投積極票AV的節(jié)點(diǎn)也將獲得獎(jiǎng)勵(lì),設(shè)共有m個(gè)節(jié)點(diǎn)為該節(jié)點(diǎn)投積極票,獎(jiǎng)勵(lì)系數(shù)為γ:
則該節(jié)點(diǎn)最終信譽(yù)積分為RSFinal=RS+Score。
若該節(jié)點(diǎn)需要受到懲罰,Score計(jì)算方法同上式,參與投積極票NV的節(jié)點(diǎn)也將受到懲罰,該節(jié)點(diǎn)最終信譽(yù)積分為RSFinal=RS-Score,當(dāng)信譽(yù)積分RS等于0時(shí),便不再減少。
3.1.4 RS閾值與獎(jiǎng)勵(lì)調(diào)整因子
當(dāng)RS增加到一定值時(shí),需要利用獎(jiǎng)勵(lì)調(diào)整因子平衡該節(jié)點(diǎn)與網(wǎng)絡(luò)中其他節(jié)點(diǎn)的關(guān)系。設(shè)α為RS的閾值,αmax為RS最大值,β為該節(jié)點(diǎn)達(dá)到RS閾值時(shí)對(duì)應(yīng)的投票輪數(shù),x為投票輪數(shù),當(dāng)Score大于閾值后所獲取的獎(jiǎng)勵(lì)為:
當(dāng)節(jié)點(diǎn)RS值達(dá)到閾值時(shí),此后所獲獎(jiǎng)勵(lì)將逐步減緩,但RS值仍保持增長(zhǎng)。既使得某節(jié)點(diǎn)在選舉中保持優(yōu)勢(shì),又維護(hù)了其他節(jié)點(diǎn)被選舉的公平性,保持了網(wǎng)絡(luò)中各節(jié)點(diǎn)的積極性。
3.2.1 雙鏈及區(qū)塊結(jié)構(gòu)
基于PKEM-CPABE的雙鏈架構(gòu)如圖2所示。
圖2 雙鏈架構(gòu)和區(qū)塊結(jié)構(gòu)Fig.2 Architecture and structure of blockchain
每個(gè)數(shù)據(jù)塊一般包含區(qū)塊頭和區(qū)塊體兩部分。區(qū)塊頭封裝了當(dāng)前版本號(hào)、前一區(qū)塊地址、當(dāng)前區(qū)塊目標(biāo)哈希值、Merkle根、隨機(jī)數(shù)以及時(shí)間戳等信息。其中,公鏈PC的前一區(qū)塊信息中包括前一pb塊的Hash值和掛接于該區(qū)塊的子鏈cb塊的Hash值,而子鏈區(qū)塊cb的前一區(qū)塊信息中包括前一cb區(qū)塊的Hash值。
3.2.2 事務(wù)結(jié)構(gòu)
為實(shí)現(xiàn)基于PKEM-CPABE的雙鏈架構(gòu)中密鑰流轉(zhuǎn)的來(lái)源追溯,定位各節(jié)點(diǎn)行為。本文基于PKEM-CPABE算法對(duì)區(qū)塊結(jié)構(gòu)進(jìn)行設(shè)計(jì),利用區(qū)塊鏈進(jìn)行密鑰傳遞過(guò)程的行為追責(zé)。事務(wù)結(jié)構(gòu)7元組定義如下:
其中,ID表示事務(wù)標(biāo)識(shí)號(hào);From和To分別表示該事務(wù)的發(fā)送方與接收方;TxType表示該事務(wù)類(lèi)型,Y為可以公開(kāi),N為不可公開(kāi);TimeStamp表示事務(wù)發(fā)布時(shí)間戳;Sig表示發(fā)布者簽名;Data表示事務(wù)包含的可選數(shù)據(jù)域。
某共識(shí)節(jié)點(diǎn)在收到一筆事務(wù)后進(jìn)行狀態(tài)初始化,提取事務(wù)信息并下載至本地,根據(jù)TxType 字段判斷該事務(wù)是否可公開(kāi),從Data字段中獲取事務(wù)的公共參數(shù)。
基于PKEM-CPABE 的數(shù)據(jù)共享模型如圖3 所示,共包含個(gè)參與方,分別是數(shù)據(jù)擁有者DO(data owner)、數(shù)據(jù)使用者DU(data user)、主密鑰代理存儲(chǔ)節(jié)點(diǎn)PSN(proxy storage node)、轉(zhuǎn)換密鑰計(jì)算節(jié)點(diǎn)RKCN(re-key calculate node)、星際文件系統(tǒng)IPFS(inter planetary file system)和區(qū)塊鏈BC(blockchain)。
圖3 PKEM-CPABE系統(tǒng)架構(gòu)圖Fig.3 System architecture of PKEM-CPABE
(1)初始化。數(shù)據(jù)擁有者DO 通過(guò)2.1 節(jié)算法Abe-Setup(1k)生成系統(tǒng)主密鑰對(duì)(PK,MSK)。各節(jié)點(diǎn)通過(guò)算法PkemSetup(1φ)生成各自的用戶(hù)公私鑰對(duì)(pk,sk)。
(2)加密。數(shù)據(jù)擁有者輸入公共密鑰PK、數(shù)據(jù)集合m以及訪(fǎng)問(wèn)策略(M,ρ),通過(guò)算法AbeEnc(PK,m,(M,ρ))輸出加密數(shù)據(jù)CT,數(shù)據(jù)擁有者將CT發(fā)送給IPFS,事務(wù)信息為T(mén)x=(ID,DO,IPFS,Y,TimeStamp,Sig,CT)。
(3)主密鑰(MSK)封裝。數(shù)據(jù)擁有者通過(guò)算法PkemMSK(MSK,pkA),輸入PSN 節(jié)點(diǎn)公鑰pkPSN和主密鑰MSK,獲得封裝好的主密鑰密文CTMSK和膠囊capsule1,并通過(guò)事務(wù)Tx=(ID,DO,CC,Y,TimeStamp,Sig,CTMSK)將CTMSK上傳至子鏈,通過(guò)事務(wù)Tx=(ID,DO,RKCN,N,TimeStamp,Sig,capsule1)將capsule1發(fā)送給RKCN。
(4)用戶(hù)私鑰轉(zhuǎn)換。當(dāng)DU請(qǐng)求獲取主密鑰MSK,向PSN 發(fā)送請(qǐng)求,PSN 驗(yàn)證Sig簽名后,輸入自己的私鑰skPSN和DU公鑰pkDU,通過(guò)算法PkemKeyGen(skA,pkB)生成轉(zhuǎn)換密鑰rkPSN→DU和XA。并發(fā)送給RKCN:Tx=(ID,PSN,RKCN,N,TimeStamp,Sig,(XA,rkPSN→DU))。
(5)用戶(hù)私鑰重加密。轉(zhuǎn)換密鑰計(jì)算節(jié)點(diǎn)RKCN收到計(jì)算請(qǐng)求,輸入capsule1和rkPSN→DU,通過(guò)算法PkemEnc(rkA→B,capsule1) 生成新的膠囊capsule2,并連同XA發(fā)送給DU。Tx=(ID,RKCN,DU,N,TimeStamp,Sig,(XA,capsule2))。
(6)主密鑰解密。DU 獲得XA和capsule2后,從鏈上獲得主密鑰密文CTMSK,輸入XA,capsule2和skDU,通過(guò)算法PkemDec(CTMSK,XA,skB,capsule2)獲得主密鑰MSK:Tx=(ID,CC,DU,Y,TimeStamp,Sig,CTMSK)。
(7)屬性私鑰生成。DU獲得MSK后,輸入自身屬性集合S,通過(guò)算法AbeKeyGen(MSK,S)獲得屬性私鑰SK。
(8)解密。DU 通過(guò)事務(wù)Tx=(ID,PC,DU,Y,TimeStamp,Sig,CT)獲得密文CT,輸入屬性私鑰SK,通過(guò)算法AbeDec(CT,SK)獲得明文m。
定理1若困難性假設(shè)q-parallel BDHE 成立,則不存在多項(xiàng)式時(shí)間敵手能夠選擇挑戰(zhàn)訪(fǎng)問(wèn)結(jié)構(gòu)(M*,ρ*)攻破本文方案。
證明在本文選定結(jié)構(gòu)模型下,如果敵手A在多項(xiàng)式時(shí)間的以ε的優(yōu)勢(shì)攻破本文方案,則存在另一敵手B以ε/2 的優(yōu)勢(shì)解決判定性q-parallel BDHE假設(shè)。
選取兩個(gè)乘法循環(huán)群G0、G1以及雙線(xiàn)性映射e:G0×G0→G1,隨機(jī)選擇β,s,b1,b2,…,bq∈Zp,公開(kāi):
隨機(jī)選取θ∈{0,1},若θ=0,則取設(shè)置T=(y,Z);若θ=1,取Z∈G1,設(shè)置T=(y,Z)。
B收到多元組T后,通過(guò)與敵手A進(jìn)行以下游戲[23]。
(1)初始化。B 選擇隨機(jī)數(shù)α?∈Zp,計(jì)算e(g,g)α=敵手B 隨機(jī)選擇α=α′+βq+1并按以下方式編排群元素h1,h2,…,h|u|。對(duì)于每一個(gè)x(1 ≤x≤|U|)都選擇一個(gè)對(duì)應(yīng)的隨機(jī)數(shù)zx,令X是使得ρ*(i)=x的指標(biāo)i的集合。求hx:
由于gzx的隨機(jī)性,hx是隨機(jī)分布的。如果X≠?,則有hx=。
(2)Phase 1。A對(duì)不滿(mǎn)足矩陣M*的集合S做秘密鑰提取詢(xún)問(wèn)。B 選擇隨機(jī)數(shù)r∈Zp,求向量ω=(ω1,ω2,…,ωn*)∈使得ω1=-1 且對(duì)所滿(mǎn)足ρ*(i)∈S的i,ω·=0。由LSSS的定義知這樣的向量一定存在,否則向量(1,0,0,…,0)在S的張成空間中。求:
對(duì)?x∈S,計(jì)算Kx。當(dāng)x∈S,沒(méi)有i使得ρ*(i)=x時(shí),令Kx=。當(dāng)x∈S,且有多個(gè)i使得ρ*(i)=x時(shí),因?yàn)椤う?0。根據(jù)這一特性可以消除Kx中包含的。再次令X表示使得ρ*(i)=x的指標(biāo)i的集合,B 可以按照下式構(gòu)造Kx:
(3)挑戰(zhàn)。敵手發(fā)送兩個(gè)等長(zhǎng)挑戰(zhàn)消息m0和m1。B 隨機(jī)選β∈{0,1},計(jì)算mβ的密文的各分量:C=mβ·Z·e(g,g)αs和C′=gs。
(4)Phase 2。與Phase 1類(lèi)似。
(5)Guess。A輸出對(duì)c的猜測(cè)c′,如果c′=c,B 輸出θ=0,表示T∈Pq-parallelBDHE,此時(shí)敵手的優(yōu)勢(shì)Pr[c=;如果θ≠0,則表示T∈Rq-parallelBDHE。此時(shí)敵手的優(yōu)勢(shì)為。敵手B 攻擊qparallel BDHE假設(shè)的優(yōu)勢(shì)為:
故任何多項(xiàng)式時(shí)間敵手贏得IND-SAS-CPA游戲的優(yōu)勢(shì)可以忽略。
證畢。
定理2令Γ=(KG,RG,E,R,D)是一種單向代理密鑰封裝方案。
標(biāo)準(zhǔn)(密文)安全:底層密碼系統(tǒng)(KG,E,D)是語(yǔ)義安全的,不會(huì)被未獲得解密權(quán)的挑戰(zhàn)者攻破。
證明對(duì)于所有的PPT算法Ak,Ei∈E和m0,m1∈Mk:
密鑰安全:即使發(fā)動(dòng)合謀攻擊,委托人(或被委托人)的密鑰仍無(wú)法被計(jì)算或推算。
證明對(duì)于所有PPT算法Ak:
證畢。
(1)可信任與隱私性。為保證主密鑰安全,當(dāng)前CPABE方案均需要用戶(hù)向密鑰中心提供屬性集合來(lái)生成用戶(hù)所需的私鑰SK,易導(dǎo)致信任成本高、單點(diǎn)故障、用戶(hù)隱私泄露和私鑰安全等問(wèn)題。本文提出的PKEMCPABE方案利用代理密鑰封裝機(jī)制,在私鑰SK生成過(guò)程中各節(jié)點(diǎn)間相互制約,有效抵御許可計(jì)算節(jié)點(diǎn)臨時(shí)作惡?jiǎn)栴}。
①PSN節(jié)點(diǎn):DO在使用PkemMSK(MSK,pkPSN)對(duì)主密鑰進(jìn)行封裝時(shí),為防止PSN 作惡,將密鑰E,V嵌入KMSK,即PSN需要同時(shí)持有pkPSN,E,V才可生成解密密鑰KMSK。而DO 將E,V封裝進(jìn)capsule1并發(fā)送給RKCN 節(jié)點(diǎn),PSN 僅持有pkPSN,無(wú)法通過(guò)生成KMSK來(lái)解密CTMSK,因此可有效防止PSN節(jié)點(diǎn)作惡。
②RKCN 節(jié)點(diǎn):為防止RKCN 節(jié)點(diǎn)作惡,PSN 節(jié)點(diǎn)使用PkemKeyGen(skPSN,pkDU)生成轉(zhuǎn)換密鑰rkPSN→DU時(shí),使用密鑰XA,pkDU對(duì)skPSN進(jìn)行加密,RKCN 需再持有XA和skDU才可生成解密密鑰KMSK。因此可有效防止RKCN節(jié)點(diǎn)作惡。
③鑒于以上分析可知,區(qū)塊鏈網(wǎng)絡(luò)中各參與方均無(wú)法獲得生成用戶(hù)屬性私鑰SK所需的主密鑰MSK和用戶(hù)屬性隱私,且屬性私鑰由DU本地保存,很好地解決了信任成本高、單點(diǎn)故障、隱私泄露和私鑰安全等問(wèn)題。
(2)可追溯性。本文所提出的PKEM-CPABE 方案中,初始化、數(shù)據(jù)加解密、主密鑰加解密以及相關(guān)密鑰生成均在鏈下計(jì)算,而鏈上則通過(guò)事務(wù)進(jìn)行相關(guān)參數(shù)的傳遞,所有事務(wù)均為不可篡改,因此鏈上節(jié)點(diǎn)可追溯整個(gè)過(guò)程.此外,由于事務(wù)的不可篡改,各節(jié)點(diǎn)還可通過(guò)事務(wù)信息檢測(cè)惡意節(jié)點(diǎn)相關(guān)攻擊,維護(hù)區(qū)塊鏈網(wǎng)絡(luò)穩(wěn)定。
基于區(qū)塊鏈的PKEM-CPABE算法實(shí)驗(yàn)采用一臺(tái)主機(jī)(CPU為酷睿i7 8代,內(nèi)存為16 GB,主頻2.20 GHz,操作系統(tǒng)為Ubuntu19.04),并利用基于配對(duì)的PBC密碼庫(kù)(v0.5.14)[24]和Python來(lái)實(shí)現(xiàn)本文PKEM-CPABE算法,利用以太坊區(qū)塊鏈設(shè)置若干節(jié)點(diǎn),采用Solidity 編寫(xiě)的智能合約進(jìn)行模擬。同時(shí),使用基于512 bit 有限域上的橢圓曲線(xiàn)y2=x3+x構(gòu)造160 位橢圓曲線(xiàn)群,實(shí)驗(yàn)數(shù)據(jù)在條件相同情況下,獨(dú)立重復(fù)性實(shí)驗(yàn)30次取得平均值。
如圖4所示,當(dāng)數(shù)據(jù)大小設(shè)置為308 Byte,訪(fǎng)問(wèn)策略屬性值在2~16 范圍內(nèi)分別選取間隔為2 的數(shù)值。由于本文方案在加密時(shí)需要引入代理密鑰封裝機(jī)制,隨著屬性個(gè)數(shù)的增加,與文獻(xiàn)[4]的方案進(jìn)行比較,本文方案加密時(shí)間和解密時(shí)間代價(jià)平均高出50 ms。
如圖5所示,當(dāng)數(shù)據(jù)大小設(shè)置為308 Byte,訪(fǎng)問(wèn)策略屬性個(gè)數(shù)設(shè)置為2~16、間隔為2時(shí),隨著屬性個(gè)數(shù)增加,密鑰生成平均時(shí)間總體高于Waters方案27 ms。
圖5 同文件下單用戶(hù)密鑰生成時(shí)間對(duì)比Fig.5 Keygen time comparision of same message and single-user
如圖6所示,當(dāng)數(shù)據(jù)大小設(shè)置為308 Byte,訪(fǎng)問(wèn)策略屬性個(gè)數(shù)設(shè)置為4個(gè),用戶(hù)數(shù)量分別以偶數(shù)遞增為16時(shí),本文方案密鑰生成時(shí)間對(duì)比Waters方案有明顯的優(yōu)勢(shì)。由于Waters方案私鑰SK由密鑰中心生成,本文方案由各用戶(hù)單獨(dú)生成,因此在分布式應(yīng)用時(shí)具有明顯優(yōu)勢(shì)。
圖6 同文件下多用戶(hù)密鑰生成時(shí)間對(duì)比Fig.6 Keygen time comparision of same message and multi-user
為對(duì)3.1節(jié)信譽(yù)積分和投票機(jī)制進(jìn)行仿真,設(shè)定100個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)行投票模擬,其中優(yōu)秀節(jié)點(diǎn)、普通節(jié)點(diǎn)和惡意節(jié)點(diǎn)的占比分別設(shè)置為20%、60%和20%,初始積分RS=60,閾值RS=80,最大RS=100。隨機(jī)選取工作量比例0~0.5,獎(jiǎng)勵(lì)系數(shù)與懲罰系數(shù)值為0~10,節(jié)點(diǎn)作惡概率范圍0~0.5,共進(jìn)行50輪投票。
如圖7所示,多輪投票后優(yōu)秀節(jié)點(diǎn)獲得的票數(shù)逐漸升高并在后續(xù)投票過(guò)程保持領(lǐng)先,由于無(wú)不良記錄,其他節(jié)點(diǎn)更傾向于投票給信譽(yù)值高的節(jié)點(diǎn);普通節(jié)點(diǎn)則比較穩(wěn)定;而惡意節(jié)點(diǎn)的RS值隨著選舉輪數(shù)的增加,其信譽(yù)值逐漸減少,有效阻止了惡意節(jié)點(diǎn)進(jìn)入子鏈。
圖7 50輪投票結(jié)果Fig.7 50 rounds of voting results
當(dāng)前眾多基于區(qū)塊鏈的CP-ABE 數(shù)據(jù)共享方案仍采用一個(gè)或多個(gè)權(quán)威機(jī)構(gòu)來(lái)進(jìn)行密鑰的生成、分發(fā)和屬性的管理工作,工作量巨大且影響工作效率;并且容易造成單點(diǎn)故障和用戶(hù)隱私泄露等問(wèn)題。因此,本文引入密鑰封裝機(jī)制,設(shè)計(jì)了一種PKEM-CPABE算法,能夠?qū)崿F(xiàn)無(wú)授權(quán)機(jī)構(gòu)參與下的可證明數(shù)據(jù)安全共享及其隱私保護(hù)?;谶@種可分布式計(jì)算的CP-ABE算法,本文設(shè)計(jì)了適用于該算法的雙鏈架構(gòu)、區(qū)塊結(jié)構(gòu)和信譽(yù)積分機(jī)制。仿真結(jié)果表明本文所提方案能夠?qū)崿F(xiàn)安全、高效和細(xì)粒度的數(shù)據(jù)訪(fǎng)問(wèn)控制,顯著減少了私鑰生成時(shí)間,提高了系統(tǒng)效率,同時(shí)利用雙鏈特性使各節(jié)點(diǎn)能夠誠(chéng)實(shí)、并行和去中心化地為用戶(hù)分發(fā)私鑰,并實(shí)現(xiàn)了密鑰的全過(guò)程管理和操作行為可追溯的鏈上監(jiān)管。