曾志兵,吳曉鸰,凌 捷
(廣東工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,廣州 510006)
隨著物聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能等信息技術(shù)的發(fā)展,隨之產(chǎn)生的數(shù)據(jù)正以指數(shù)級(jí)的速度增長(zhǎng).其隱藏的巨大潛在價(jià)值亟需挖掘利用,同時(shí)也存在“數(shù)據(jù)孤島”式困境,其有效的解決途徑是建立安全高效的數(shù)據(jù)存儲(chǔ)與共享模型[1].實(shí)現(xiàn)數(shù)據(jù)充分共享的前提是保證數(shù)據(jù)的安全與可信[2].通常資源受限的個(gè)人和企業(yè)用戶(hù)傾向于將數(shù)據(jù)外包給具有豐富的存儲(chǔ)和計(jì)算資源的云進(jìn)行存儲(chǔ)與共享.然而,基于中心化的云存儲(chǔ)容易出現(xiàn)許多安全和隱私問(wèn)題,例如單點(diǎn)故障、虛假數(shù)據(jù)注入、sybil攻擊漏洞、參與者之間的信任問(wèn)題以及文件訪(fǎng)問(wèn)和檢索操作中的問(wèn)題[3],造成數(shù)據(jù)泄露、篡改或無(wú)法訪(fǎng)問(wèn),威脅用戶(hù)隱私,給用戶(hù)造成不可彌補(bǔ)的損失.因此,如何在實(shí)現(xiàn)數(shù)據(jù)充分共享中保證數(shù)據(jù)存儲(chǔ)的安全性和數(shù)據(jù)共享的可信性是目前的研究熱點(diǎn).區(qū)塊鏈?zhǔn)潜忍貛诺牡讓蛹夹g(shù),可以不依賴(lài)可信的第三方構(gòu)建分布式數(shù)據(jù)庫(kù),具有去中心化、防篡改、可溯源、公開(kāi)透明等特性[4],保證數(shù)據(jù)的可信性和可用性,為數(shù)據(jù)的安全存儲(chǔ)與共享帶來(lái)了新的解決方案.然而,區(qū)塊鏈的存儲(chǔ)空間存在瓶頸,需進(jìn)行優(yōu)化.星際文件系統(tǒng)(InterPlanetary File System,IPFS)是面向全球的點(diǎn)對(duì)點(diǎn)分布式文件系統(tǒng),數(shù)據(jù)在IPFS上分布式持久化存儲(chǔ),沒(méi)有單點(diǎn)故障問(wèn)題,節(jié)點(diǎn)間不需要相互信任,支持重復(fù)數(shù)據(jù)刪除、高吞吐量、按內(nèi)容尋址,可以作為區(qū)塊鏈的數(shù)據(jù)存儲(chǔ)方案,優(yōu)化區(qū)塊鏈存儲(chǔ)空間.
在傳統(tǒng)云存儲(chǔ)中安全存儲(chǔ)與共享數(shù)據(jù)時(shí)通常用加密技術(shù)保證機(jī)密性,同時(shí)需要對(duì)數(shù)據(jù)進(jìn)行訪(fǎng)問(wèn)控制.Bethencourt等[5]首次提出了密文策略屬性基加密(Ciphertext-Policy Attribute-Based Encryption,CP-ABE)方案,允許數(shù)據(jù)所有者加密與訪(fǎng)問(wèn)策略相關(guān)聯(lián)的數(shù)據(jù),當(dāng)用戶(hù)的屬性集滿(mǎn)足數(shù)據(jù)密文中的訪(fǎng)問(wèn)策略時(shí)才能解密獲得數(shù)據(jù),實(shí)現(xiàn)了對(duì)數(shù)據(jù)的機(jī)密性保護(hù)和細(xì)粒度訪(fǎng)問(wèn)控制,廣泛應(yīng)用在云環(huán)境下安全存儲(chǔ)與共享數(shù)據(jù).傳統(tǒng)的CP-ABE方案大多都存在計(jì)算開(kāi)銷(xiāo)較大的雙線(xiàn)性配對(duì)運(yùn)算,很難適用于資源受限的用戶(hù).一些工作[6,7]通過(guò)將CP-ABE方案中大量的計(jì)算開(kāi)銷(xiāo)外包給云端來(lái)減輕用戶(hù)的負(fù)擔(dān),但就整個(gè)系統(tǒng)來(lái)說(shuō),并沒(méi)有有效降低計(jì)算開(kāi)銷(xiāo),反而增加了云端的成本和通信開(kāi)銷(xiāo).為了從根本上降低計(jì)算開(kāi)銷(xiāo),Odelu等[8]提出了基于橢圓曲線(xiàn)的CP-ABE方案,使用較輕量級(jí)的標(biāo)量乘替代雙線(xiàn)性配對(duì)運(yùn)算,從算法方面來(lái)降低加解密計(jì)算開(kāi)銷(xiāo).經(jīng)過(guò)實(shí)驗(yàn)測(cè)試,在同一橢圓曲線(xiàn)下,一次雙線(xiàn)性配對(duì)計(jì)算開(kāi)銷(xiāo)比一次標(biāo)量乘計(jì)算開(kāi)銷(xiāo)大2~3倍.CP-ABE方案中還存在惡意用戶(hù)為謀取非法利益,向非授權(quán)用戶(hù)共享其解密私鑰的情況,而解密私鑰僅取決于用戶(hù)的屬性,因此無(wú)法確定其身份.為了追蹤惡意泄露私鑰的用戶(hù)身份,文獻(xiàn)[9]提出了首個(gè)白盒可追蹤C(jī)P-ABE方案.文獻(xiàn)[10]則在該方案中加入了用戶(hù)撤銷(xiāo)功能.針對(duì)文獻(xiàn)[10]存在隱私保護(hù)、合謀攻擊等問(wèn)題,文獻(xiàn)[11]在其基礎(chǔ)上實(shí)現(xiàn)了隱私保護(hù)功能,但仍存在效率低下,訪(fǎng)問(wèn)結(jié)構(gòu)表達(dá)能力和靈活性較差等不足.Li等[12]基于有序二元決策圖(Ordered Binary Decision Diagram,OBDD)提出了一種新型的CP-ABE方案,該訪(fǎng)問(wèn)結(jié)構(gòu)可同時(shí)支持屬性的正負(fù)值,具有豐富的表達(dá)能力和計(jì)算高效性,但仍存在雙線(xiàn)性配對(duì)運(yùn)算.Ding等[13]基于OBDD訪(fǎng)問(wèn)結(jié)構(gòu)提出了一種新型的無(wú)配對(duì)CP-ABE方案,降低了方案整體的存儲(chǔ)和計(jì)算開(kāi)銷(xiāo).
目前,已有大量工作將區(qū)塊鏈技術(shù)應(yīng)用到數(shù)據(jù)安全存儲(chǔ)與共享的研究中.文獻(xiàn)[14]提出了一個(gè)基于區(qū)塊鏈的個(gè)人數(shù)據(jù)管理系統(tǒng),數(shù)據(jù)所有者可以采用訪(fǎng)問(wèn)控制策略控制其數(shù)據(jù),但是該方案在加密共享數(shù)據(jù)時(shí)使用的是對(duì)稱(chēng)加密,在共享數(shù)據(jù)時(shí)需要給每個(gè)用戶(hù)單獨(dú)授權(quán),這給系統(tǒng)管理密鑰和訪(fǎng)問(wèn)控制策略帶來(lái)了挑戰(zhàn).文獻(xiàn)[15]將CP-ABE方案應(yīng)用于區(qū)塊鏈,以實(shí)現(xiàn)數(shù)據(jù)隱私保護(hù)和細(xì)粒度共享,也支持對(duì)惡意泄露密鑰用戶(hù)的追蹤,但數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈上容易遭遇存儲(chǔ)瓶頸.文獻(xiàn)[16]使用以太坊區(qū)塊鏈技術(shù)結(jié)合CP-ABE方案提出了一種新的云存儲(chǔ)安全訪(fǎng)問(wèn)控制框架,在不需要可信的第三方下實(shí)現(xiàn)云存儲(chǔ)中共享數(shù)據(jù)的細(xì)粒度訪(fǎng)問(wèn)控制.文獻(xiàn)[17]為了安全共享患者的健康記錄,基于區(qū)塊鏈在不需要第三方參與的情況下提供安全通信,使用層次化訪(fǎng)問(wèn)結(jié)構(gòu)的CP-ABE方案實(shí)現(xiàn)對(duì)共享數(shù)據(jù)的層次化訪(fǎng)問(wèn)控制.文獻(xiàn)[16,17]都將共享數(shù)據(jù)存儲(chǔ)在中心化的云存儲(chǔ)上,存在安全和隱私問(wèn)題并且不支持對(duì)惡意泄露密鑰用戶(hù)的追蹤.文獻(xiàn)[18]針對(duì)P2P網(wǎng)絡(luò)中數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)共享分發(fā)時(shí)存在網(wǎng)絡(luò)失信、非法訪(fǎng)問(wèn)及溯源難等安全問(wèn)題,基于信任模型構(gòu)建的P2P分發(fā)平臺(tái),提出一種結(jié)合區(qū)塊鏈和屬性基加密的可信數(shù)據(jù)分發(fā)機(jī)制,并利用IPFS作為數(shù)據(jù)的鏈下存儲(chǔ)平臺(tái),實(shí)現(xiàn)鏈上鏈下協(xié)同管理數(shù)據(jù).文獻(xiàn)[19]將區(qū)塊鏈、CP-ABE和IPFS結(jié)合起來(lái),提出了一種基于區(qū)塊鏈的個(gè)人數(shù)據(jù)安全共享和隱私保護(hù)方案,數(shù)據(jù)所有者對(duì)其數(shù)據(jù)進(jìn)行細(xì)粒度訪(fǎng)問(wèn)控制,并將共享數(shù)據(jù)安全可信地存儲(chǔ)在IPFS上,支持在不影響其他用戶(hù)的情況下從屬性級(jí)撤銷(xiāo)特定的用戶(hù),但仍不支持對(duì)惡意泄露密鑰用戶(hù)的追蹤.
綜上所述,本文提出了一種結(jié)合區(qū)塊鏈和可追蹤C(jī)P-ABE的數(shù)據(jù)存儲(chǔ)與共享方案(BTABEDSS),主要貢獻(xiàn)如下.
1)本文提出了一種結(jié)合區(qū)塊鏈和可追蹤C(jī)P-ABE的數(shù)據(jù)存儲(chǔ)與共享方案模型.數(shù)據(jù)所有者將數(shù)據(jù)密文存儲(chǔ)在IPFS上,區(qū)塊鏈上僅存儲(chǔ)數(shù)據(jù)的唯一標(biāo)識(shí)、數(shù)據(jù)的哈希值和數(shù)據(jù)密文在IPFS檢索的內(nèi)容哈希值等元數(shù)據(jù)信息,這樣不僅保證數(shù)據(jù)的安全可信存儲(chǔ)與訪(fǎng)問(wèn),還有效解決了區(qū)塊鏈的存儲(chǔ)瓶頸問(wèn)題.利用智能合約和CP-ABE協(xié)同實(shí)現(xiàn)數(shù)據(jù)所有者對(duì)其數(shù)據(jù)進(jìn)行細(xì)粒度訪(fǎng)問(wèn)控制,只有滿(mǎn)足訪(fǎng)問(wèn)控制策略的非惡意用戶(hù)才能訪(fǎng)問(wèn)共享數(shù)據(jù).
2)使用橢圓曲線(xiàn)上的標(biāo)量乘運(yùn)算和表達(dá)性、計(jì)算性更優(yōu)的OBDD訪(fǎng)問(wèn)結(jié)構(gòu),有效降低了系統(tǒng)的計(jì)算和存儲(chǔ)開(kāi)銷(xiāo).
3)采用概率加密方案將用戶(hù)身份信息隨機(jī)化處理后嵌入用戶(hù)密鑰,從而實(shí)現(xiàn)對(duì)惡意泄露密鑰的用戶(hù)進(jìn)行高效追蹤并撤銷(xiāo)其訪(fǎng)問(wèn)權(quán)限.
4)進(jìn)行了安全性與實(shí)驗(yàn)分析,結(jié)果表明本文方案是安全可行的,與對(duì)比方案相比,降低了系統(tǒng)運(yùn)行成本和開(kāi)銷(xiāo),提升了系統(tǒng)操作效率,更加高效與實(shí)用.
橢圓曲線(xiàn)加密(ECC)是一種基于橢圓曲線(xiàn)離散對(duì)數(shù)問(wèn)題(ECDLP)的非對(duì)稱(chēng)加密算法,橢圓曲線(xiàn)E在有限域FG(p)上定義,表示為公式(1):
y2=x3+ax+b(modp),4a3+27b2≠0
(1)


3)私鑰解密.根據(jù)公鑰Q對(duì)應(yīng)的私鑰d和密文C,通過(guò)計(jì)算M+cQ-d(cG)=M,即可計(jì)算出明文消息M.
有序二元決策圖(OBDD)是一個(gè)有根、有向的非循環(huán)圖G=(V,E),在一個(gè)預(yù)定義變量序的布爾變量集{x0,x1,…,xn-1}上表示一個(gè)布爾函數(shù)f(x0,x1,…,xn-1)[20].其中布爾變量描述屬性,n為集合中屬性的數(shù)量,OBDD具有以下特性.
1)圖G中V不是非終端節(jié)點(diǎn)就是終端節(jié)點(diǎn).
2)每個(gè)非終端節(jié)點(diǎn)表示一個(gè)變量(屬性)xi,并有兩個(gè)子節(jié)點(diǎn).當(dāng)xi賦值為1,其子節(jié)點(diǎn)記為high(xi)稱(chēng)作高子節(jié)點(diǎn);當(dāng)xi賦值為0,其子節(jié)點(diǎn)記為low(xi)稱(chēng)作低子節(jié)點(diǎn).每個(gè)非終端節(jié)點(diǎn)用一個(gè)四元組(i,id,low(v),high(v))來(lái)標(biāo)記,其中i∈I是該節(jié)點(diǎn)表示的屬性序號(hào),id∈ID是為標(biāo)識(shí)該節(jié)點(diǎn)的唯一編號(hào),low(v)和high(v)分別表示指向該節(jié)點(diǎn)的低子節(jié)點(diǎn)和高子節(jié)點(diǎn).I是訪(fǎng)問(wèn)結(jié)構(gòu)中的屬性集合,ID是非終端節(jié)點(diǎn)的編號(hào)集合.
3)終端節(jié)點(diǎn)被標(biāo)為0或1,不表示屬性也沒(méi)有子節(jié)點(diǎn).
4)從根節(jié)點(diǎn)到終端節(jié)點(diǎn)的任一有向路徑上,每個(gè)變量(屬性)xi都以同樣的順序且至多一次出現(xiàn).
對(duì)于屬性集S,判斷S是否滿(mǎn)足OBDD訪(fǎng)問(wèn)結(jié)構(gòu):從根節(jié)點(diǎn)開(kāi)始,對(duì)于具有屬性i的非終端節(jié)點(diǎn),若i∈S,將沿high(v)轉(zhuǎn)到高子節(jié)點(diǎn);否則,將沿low(v)轉(zhuǎn)到低子節(jié)點(diǎn).重復(fù)上述過(guò)程直到終端節(jié)點(diǎn),若終端節(jié)點(diǎn)為1,則S滿(mǎn)足OBDD訪(fǎng)問(wèn)結(jié)構(gòu);否則,S不滿(mǎn)足OBDD訪(fǎng)問(wèn)結(jié)構(gòu).
假設(shè)系統(tǒng)定義的屬性集為{x0,x1,…,xn-1},訪(fǎng)問(wèn)策略包括系統(tǒng)定義的所有屬性.xi的屬性值為正,表示訪(fǎng)問(wèn)策略要求滿(mǎn)足訪(fǎng)問(wèn)策略的屬性集需要有屬性xi;xi的屬性值為負(fù),表示訪(fǎng)問(wèn)策略要求滿(mǎn)足訪(fǎng)問(wèn)策略的屬性集不需要有屬性xi.若有一訪(fǎng)問(wèn)策略(x0AND (x1ORx2) ANDx3),則表示屬性集{x0,x1,x3}或{x0,x2,x3}的用戶(hù)滿(mǎn)足訪(fǎng)問(wèn)策略,將該訪(fǎng)問(wèn)策略轉(zhuǎn)換成布爾函數(shù)為f(x0,x1,x2,x3)=x0x1x3+x0x2x3,預(yù)定義變量序?yàn)閤0→x1→x2→x3,生成對(duì)應(yīng)的OBDD訪(fǎng)問(wèn)結(jié)構(gòu)如圖1所示.非終端節(jié)點(diǎn)由圓圈表示,終端節(jié)點(diǎn)由方塊表示,實(shí)線(xiàn)指向高子節(jié)點(diǎn),虛線(xiàn)指向低子節(jié)點(diǎn).在OBDD中,從根節(jié)點(diǎn)到終端節(jié)點(diǎn)為1的路徑被稱(chēng)為滿(mǎn)足訪(fǎng)問(wèn)策略的有效路徑.例如路徑(x0=1)→(x1=0)→(x2=1)→(x3=1)→1是一條有效路徑.

圖1 OBDD訪(fǎng)問(wèn)結(jié)構(gòu)Fig.1 OBDD access structure
Buterin在以太坊白皮書(shū)[21]中率先引入了智能合約,提出了第一個(gè)內(nèi)置圖靈完備語(yǔ)言的以太坊區(qū)塊鏈.以太坊內(nèi)置有成熟的圖靈完備的編程語(yǔ)言來(lái)編寫(xiě)智能合約,智能合約本質(zhì)上是一個(gè)用戶(hù)自定義的計(jì)算機(jī)協(xié)議程序,在一些外部或內(nèi)部條件的觸發(fā)下自動(dòng)運(yùn)行在以太坊虛擬機(jī)上,借助其專(zhuān)用加密貨幣以太幣來(lái)計(jì)量和控制程序執(zhí)行的資源開(kāi)銷(xiāo),使用區(qū)塊鏈來(lái)同步和保存系統(tǒng)狀態(tài).由于區(qū)塊鏈存儲(chǔ)了智能合約的程序代碼、狀態(tài)、數(shù)據(jù),從而使智能合約的使用具有去中心化、防篡改、可溯源等特性.
本文方案使用的相關(guān)符號(hào)及其含義如表1所示.系統(tǒng)模型如圖2所示,主要由訪(fǎng)問(wèn)中心(AC)、可信授權(quán)機(jī)構(gòu)(TA)、數(shù)據(jù)所有者(DO)、數(shù)據(jù)使用者(DU)、區(qū)塊鏈和IPFS組成,每個(gè)實(shí)體的具體描述如下.

表1 相關(guān)符號(hào)描述Table 1 Description of related notations

圖2 系統(tǒng)模型Fig.2 System model
1)訪(fǎng)問(wèn)中心(AC):是系統(tǒng)的半可信實(shí)體,負(fù)責(zé)在區(qū)塊鏈上部署系統(tǒng)的智能合約,對(duì)每個(gè)加入系統(tǒng)的用戶(hù)進(jìn)行嚴(yán)格的資格審查.通過(guò)資格審查后方可注冊(cè)為系統(tǒng)用戶(hù),為系統(tǒng)用戶(hù)公開(kāi)系統(tǒng)合約調(diào)用信息,定義系統(tǒng)屬性集N,為系統(tǒng)每個(gè)用戶(hù)分配一個(gè)用戶(hù)屬性集S和用戶(hù)身份唯一標(biāo)識(shí)uid,調(diào)用系統(tǒng)合約的注冊(cè)函數(shù),將系統(tǒng)用戶(hù)的uid和區(qū)塊鏈賬戶(hù)信息進(jìn)行注冊(cè),使系統(tǒng)用戶(hù)擁有調(diào)用系統(tǒng)合約的訪(fǎng)問(wèn)權(quán)限.同時(shí)維護(hù)一個(gè)惡意用戶(hù)撤銷(xiāo)列表RL,注銷(xiāo)RL中的每個(gè)惡意用戶(hù)并調(diào)用系統(tǒng)合約的撤銷(xiāo)函數(shù),撤銷(xiāo)每個(gè)惡意用戶(hù)調(diào)用系統(tǒng)合約的訪(fǎng)問(wèn)權(quán)限.此外,為系統(tǒng)用戶(hù)存儲(chǔ)和檢索共享數(shù)據(jù)的元數(shù)據(jù)信息.
2)可信授權(quán)機(jī)構(gòu)(TA):是系統(tǒng)的可信實(shí)體,根據(jù)AC定義的系統(tǒng)屬性集N,負(fù)責(zé)為系統(tǒng)生成系統(tǒng)公鑰PK、系統(tǒng)主密鑰MSK和用戶(hù)屬性私鑰SK.此外,還負(fù)責(zé)對(duì)惡意泄露的密鑰進(jìn)行追蹤,追蹤到惡意用戶(hù)uid后發(fā)送給AC,AC將此uid加入惡意用戶(hù)撤銷(xiāo)列表RL.
3)數(shù)據(jù)所有者(DO):是可信的數(shù)據(jù)擁有者,在區(qū)塊鏈上注冊(cè)賬戶(hù)信息并向AC注冊(cè)為系統(tǒng)用戶(hù),根據(jù)系統(tǒng)中定義的屬性和相關(guān)信息,為需要安全存儲(chǔ)與共享的數(shù)據(jù)制定訪(fǎng)問(wèn)控制策略,對(duì)數(shù)據(jù)及相關(guān)元數(shù)據(jù)信息進(jìn)行加密,然后將數(shù)據(jù)的密文和相關(guān)元數(shù)據(jù)信息分別上傳到IPFS、AC和區(qū)塊鏈.
4)數(shù)據(jù)使用者(DU):是不可信的數(shù)據(jù)訪(fǎng)問(wèn)者,同樣需要注冊(cè)區(qū)塊鏈賬戶(hù)并向AC注冊(cè)為系統(tǒng)用戶(hù).當(dāng)DU需要訪(fǎng)問(wèn)共享數(shù)據(jù)時(shí),只有當(dāng)DU是非惡意用戶(hù)且其用戶(hù)屬性集S滿(mǎn)足DO為數(shù)據(jù)制定的訪(fǎng)問(wèn)控制策略時(shí),才能成功解密數(shù)據(jù),還可以驗(yàn)證數(shù)據(jù)的完整性.DU是不可信的,可能因利益驅(qū)使而惡意泄露其用戶(hù)屬性私鑰SK,在無(wú)法解密一些數(shù)據(jù)密文的情況下發(fā)起合謀攻擊.
5)區(qū)塊鏈:AC在區(qū)塊鏈上部署了系統(tǒng)合約,系統(tǒng)用戶(hù)通過(guò)調(diào)用系統(tǒng)合約在區(qū)塊鏈上傳和下載數(shù)據(jù)的相關(guān)元數(shù)據(jù)信息.
6)IPFS:IPFS為DO去中心化存儲(chǔ)數(shù)據(jù)密文,然后根據(jù)數(shù)據(jù)密文內(nèi)容生成在IPFS檢索的內(nèi)容哈希值并返回給DO,被授權(quán)的DU可以根據(jù)該內(nèi)容哈希值從IPFS下載數(shù)據(jù)密文.
本文方案主要包括以下算法:
1)系統(tǒng)初始化算法.Setup(1λ,N)→(PK,MSK,RL):TA運(yùn)行該算法,輸入安全參數(shù)λ和系統(tǒng)屬性集N,輸出系統(tǒng)公鑰PK和系統(tǒng)主密鑰MSK.同時(shí)AC初始化一個(gè)空的惡意用戶(hù)撤銷(xiāo)列表RL.
2)密鑰生成算法.KeyGen(PK,MSK,S,uid)→SK:TA運(yùn)行該算法,輸入系統(tǒng)公鑰PK、系統(tǒng)主密鑰MSK、用戶(hù)屬性集S和用戶(hù)身份唯一標(biāo)識(shí)uid,輸出用戶(hù)屬性私鑰SK.
3)數(shù)據(jù)加密算法.Encrypt(PK,OBDD,ck)→CTck:DO運(yùn)行該算法,輸入系統(tǒng)公鑰PK、OBDD訪(fǎng)問(wèn)結(jié)構(gòu)和AES算法對(duì)稱(chēng)密鑰ck,輸出密鑰ck的密文CTck.
4)數(shù)據(jù)解密算法.Decrypt(PK,SK,CTck,RL,uid)→ck/⊥:DU運(yùn)行該算法,輸入系統(tǒng)公鑰PK、用戶(hù)屬性私鑰SK、密鑰ck的密文CTck、惡意用戶(hù)撤銷(xiāo)列表RL和用戶(hù)身份唯一標(biāo)識(shí)uid,輸出AES算法對(duì)稱(chēng)密鑰ck或解密失敗符號(hào)⊥.
5)密鑰追蹤算法.Trace(PK,MSK,SK)→uid/⊥:TA運(yùn)行該算法,輸入系統(tǒng)公鑰PK、系統(tǒng)主密鑰MSK和惡意泄露的用戶(hù)屬性私鑰SK,先驗(yàn)證SK是否滿(mǎn)足完整性檢驗(yàn)條件,若滿(mǎn)足并可追蹤到SK對(duì)應(yīng)的惡意用戶(hù)uid,則輸出該uid;否則,輸出追蹤失敗符號(hào)⊥.
2.2.1 系統(tǒng)初始化

2.2.2 密鑰生成

2.2.3 數(shù)據(jù)加密
DO為需要安全存儲(chǔ)與共享的數(shù)據(jù)明文F設(shè)置數(shù)據(jù)明文唯一標(biāo)識(shí)fid并生成AES算法對(duì)稱(chēng)密鑰ck,利用ck加密數(shù)據(jù)明文F得到數(shù)據(jù)密文Eck(F),將Eck(F)存儲(chǔ)至IPFS得到Eck(F)在IPFS檢索的內(nèi)容哈希值hashipfs,利用ck加密內(nèi)容哈希值hashipfs得到Eck(hashipfs).通過(guò)計(jì)算hashF=H2(F)得到數(shù)據(jù)明文F的哈希值hashF.隨后DO調(diào)用系統(tǒng)合約,將fid、hashF和Eck(hashipfs)存儲(chǔ)在區(qū)塊鏈上,其中fid和hashF、Eck(hashipfs)是映射關(guān)系.

最后輸出密鑰ck的密文CTck,然后DO將fid和CTck上傳至AC.
2.2.4 數(shù)據(jù)解密
DU在AC上檢索需要訪(fǎng)問(wèn)的共享數(shù)據(jù)時(shí)可以獲取對(duì)應(yīng)的元數(shù)據(jù)信息fid、CTck和RL.
Decrypt(PK,SK,CTck,RL,uid)→ck/⊥:DU運(yùn)行該算法,算法首先輸入DU的用戶(hù)身份唯一標(biāo)識(shí)uid,若uid∈RL,則輸出解密失敗符號(hào)⊥并終止算法,DU訪(fǎng)問(wèn)共享數(shù)據(jù)失敗;若uid?RL,算法繼續(xù)執(zhí)行,只有當(dāng)DU的用戶(hù)屬性集S滿(mǎn)足DO定義的OBDD訪(fǎng)問(wèn)結(jié)構(gòu),才能成功執(zhí)行解密操作獲取密鑰ck,具體步驟如下:
1)先找出OBDD中id=2的節(jié)點(diǎn),記為當(dāng)前節(jié)點(diǎn).
2)在當(dāng)前節(jié)點(diǎn)提取(i,id,low(v),high(v)),若屬性i∈S,算法跳轉(zhuǎn)到步驟3)執(zhí)行;否則,跳轉(zhuǎn)到步驟4)執(zhí)行.
3)找出當(dāng)前節(jié)點(diǎn)的高子節(jié)點(diǎn).若高子節(jié)點(diǎn)是終端節(jié)點(diǎn)0,算法終止執(zhí)行并返回解密失敗;若高子節(jié)點(diǎn)是終端節(jié)點(diǎn)1,算法跳轉(zhuǎn)到步驟5)執(zhí)行;若高子節(jié)點(diǎn)是非終端節(jié)點(diǎn),將高子節(jié)點(diǎn)記為當(dāng)前節(jié)點(diǎn),算法跳轉(zhuǎn)到步驟2)執(zhí)行.
4)找出當(dāng)前節(jié)點(diǎn)的低子節(jié)點(diǎn).若低子節(jié)點(diǎn)是終端節(jié)點(diǎn)0,算法終止執(zhí)行并返回解密失敗;若低子節(jié)點(diǎn)是終端節(jié)點(diǎn)1,算法跳轉(zhuǎn)到步驟5)執(zhí)行;若低子節(jié)點(diǎn)是非終端節(jié)點(diǎn),將低子節(jié)點(diǎn)記為當(dāng)前節(jié)點(diǎn),算法跳轉(zhuǎn)到步驟2)執(zhí)行.
5)若DU的用戶(hù)屬性集S滿(mǎn)足OBDD訪(fǎng)問(wèn)結(jié)構(gòu)中的某一條有效路徑Rj,然后算法進(jìn)行如下計(jì)算.
最后,通過(guò)計(jì)算ck=Cck⊕H1(sPy)獲取密鑰ck.若DU成功獲取密鑰ck,DU使用fid調(diào)用系統(tǒng)合約從區(qū)塊鏈上獲取hashF和Eck(hashipfs),使用密鑰ck解密Eck(hashipfs)得到hashipfs,從而在IPFS上獲取數(shù)據(jù)密文Eck(F),最終利用ck解密Eck(F)得到數(shù)據(jù)明文F并利用hashF驗(yàn)證數(shù)據(jù)的完整性;否則,DU訪(fǎng)問(wèn)共享數(shù)據(jù)失敗.
2.2.5 密鑰追蹤
Trace(PK,MSK,SK)→uid/⊥:TA運(yùn)行該算法,該算法由驗(yàn)證和追蹤兩個(gè)階段組成.
1)驗(yàn)證階段.對(duì)惡意泄露的用戶(hù)屬性私鑰SK進(jìn)行完整性檢驗(yàn).若SK通過(guò)完整性檢驗(yàn),則SK是有效的用戶(hù)屬性私鑰,進(jìn)入追蹤階段;否則,SK是非法的用戶(hù)屬性私鑰,算法輸出追蹤失敗符號(hào)⊥并終止,檢驗(yàn)過(guò)程如下:
2)追蹤階段.若惡意泄露的用戶(hù)屬性私鑰SK通過(guò)完整性檢驗(yàn),通過(guò)計(jì)算Decek((D2-y)/D3)=Decek(r)=uid,即可追蹤到SK對(duì)應(yīng)的惡意用戶(hù)uid,TA將惡意用戶(hù)uid發(fā)送給AC,AC將惡意用戶(hù)uid加入到惡意用戶(hù)撤銷(xiāo)列表RL,從而撤銷(xiāo)惡意用戶(hù)的訪(fǎng)問(wèn)權(quán)限;否則,算法輸出追蹤失敗符號(hào)⊥并終止.
本文方案(BTABEDSS)通過(guò)使用區(qū)塊鏈、分布式存儲(chǔ)IPFS、CP-ABE和智能合約等技術(shù)實(shí)現(xiàn)了數(shù)據(jù)的安全可信存儲(chǔ)與共享,提供了數(shù)據(jù)的細(xì)粒度訪(fǎng)問(wèn)控制和隱私保護(hù),實(shí)現(xiàn)了對(duì)泄露密鑰的惡意用戶(hù)的高效追蹤并撤銷(xiāo)其訪(fǎng)問(wèn)權(quán)限.此外,本文方案中智能合約的部署和調(diào)用都記錄在區(qū)塊鏈中,記錄所有用戶(hù)的存儲(chǔ)和訪(fǎng)問(wèn)操作,并且可溯源、不可篡改、不可抵賴(lài).
1)機(jī)密性.在數(shù)據(jù)存儲(chǔ)過(guò)程中,DO將使用AES算法加密數(shù)據(jù)的數(shù)據(jù)密文存儲(chǔ)在IPFS上,數(shù)據(jù)密文在IPFS上的內(nèi)容哈希值也使用AES算法加密后存儲(chǔ)在區(qū)塊鏈上,數(shù)據(jù)以及相關(guān)信息均以加密狀態(tài)傳輸和存儲(chǔ),無(wú)法獲取數(shù)據(jù)的任何有效信息.在數(shù)據(jù)共享過(guò)程中,DO使用CP-ABE加密AES算法密鑰ck時(shí),隨機(jī)選取s計(jì)算H1(sPy)加密ck,生成的密文Cck也是隨機(jī)的.基于橢圓曲線(xiàn)離散對(duì)數(shù)困難問(wèn)題,無(wú)法在多項(xiàng)式時(shí)間內(nèi)從Cs和Cj中獲取關(guān)于s的任何有價(jià)值信息,進(jìn)而無(wú)法計(jì)算出sPy.只有滿(mǎn)足訪(fǎng)問(wèn)控制策略且是非惡意用戶(hù)的DU才能計(jì)算出sPy,從而解密出ck,進(jìn)而解密數(shù)據(jù)密文獲取數(shù)據(jù).因此,本文方案在數(shù)據(jù)安全存儲(chǔ)與共享過(guò)程中保證了數(shù)據(jù)的機(jī)密性.
2)完整性.在本文方案中,DO采用抗碰撞哈希函數(shù)對(duì)數(shù)據(jù)進(jìn)行哈希計(jì)算,將數(shù)據(jù)的哈希值hashF存儲(chǔ)在區(qū)塊鏈上,區(qū)塊鏈上的數(shù)據(jù)是防篡改的,可以保證hashF的可信性和可用性.DU在訪(fǎng)問(wèn)獲取數(shù)據(jù)后可以在區(qū)塊鏈上獲取hashF,通過(guò)抗碰撞哈希函數(shù)對(duì)數(shù)據(jù)進(jìn)行哈希計(jì)算并與hashF進(jìn)行對(duì)比,驗(yàn)證數(shù)據(jù)的完整性.
3)抗單點(diǎn)故障.本文方案與傳統(tǒng)云存儲(chǔ)方案相比,在數(shù)據(jù)的存儲(chǔ)和訪(fǎng)問(wèn)過(guò)程中不需要中心化的可信第三方,使用的區(qū)塊鏈和IPFS皆是分布式技術(shù),即使部分節(jié)點(diǎn)發(fā)生故障,也不影響整個(gè)方案的可用性,有效解決傳統(tǒng)云存儲(chǔ)方案的單點(diǎn)故障問(wèn)題.

5)密鑰泄露追蹤.為了實(shí)現(xiàn)對(duì)由于利益驅(qū)使而泄露密鑰的惡意用戶(hù)的追蹤,在密鑰生成階段,TA把用戶(hù)身份唯一標(biāo)識(shí)uid通過(guò)概率加密方案計(jì)算出隨機(jī)值r,然后把r通過(guò)抗碰撞哈希函數(shù)計(jì)算出c,從而利用r和c來(lái)參與計(jì)算出用戶(hù)屬性私鑰SK.在惡意用戶(hù)泄露密鑰時(shí),TA可以使用系統(tǒng)公鑰PK和系統(tǒng)主密鑰MSK追蹤惡意用戶(hù),若惡意用戶(hù)偽造密鑰,其偽造密鑰是無(wú)法通過(guò)完整性檢驗(yàn)的,若泄露密鑰通過(guò)完整性檢驗(yàn),則可計(jì)算出惡意用戶(hù)uid,實(shí)現(xiàn)密鑰泄露追蹤.
本文通過(guò)仿真實(shí)驗(yàn)對(duì)所提出的方案進(jìn)行實(shí)驗(yàn)測(cè)試和性能分析,驗(yàn)證其可行性和有效性.實(shí)驗(yàn)利用兩臺(tái)PC,分別為PC1:Intel(R)Core(TM)i5-11320HCPU@3.20GHz 2.50GHz and 16GB of RAM、64位Windows 10操作系統(tǒng)和PC2:Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz 3.40GHz and 8GB of RAM、64位Windows 7操作系統(tǒng).在PC1上用ganache仿真以太坊網(wǎng)絡(luò),使用solidity編程語(yǔ)言在Remix IDE上開(kāi)發(fā)和測(cè)試智能合約,通過(guò)web3j在ganache上部署和調(diào)用智能合約,使用ipfs-desktop安裝搭建IPFS,引入外部資源庫(kù)JPBC進(jìn)行實(shí)驗(yàn)測(cè)試.在PC2上搭建服務(wù)器仿真云存儲(chǔ)服務(wù)器與IPFS進(jìn)行對(duì)比實(shí)驗(yàn).此外,所有實(shí)驗(yàn)測(cè)試都執(zhí)行多次以取平均值進(jìn)行實(shí)驗(yàn)分析,并將本文方案BTABEDSS與方案BPPTABE[15]、BCSWAC[16]、BMHASPHR[17]、BSSPD[19]進(jìn)行對(duì)比分析.
3.2.1 智能合約成本分析
在以太坊中,Gas是可以用于衡量執(zhí)行智能合約操作的價(jià)格單位,Gas值決定了智能合約操作的工作量,衡量了系統(tǒng)使用智能合約的成本開(kāi)銷(xiāo).本實(shí)驗(yàn)將方案BCSWAC與本文方案BTABEDSS進(jìn)行智能合約操作的Gas消耗進(jìn)行對(duì)比,分別測(cè)試了智能合約的部署、上傳元數(shù)據(jù)和下載元數(shù)據(jù)操作的Gas消耗.如圖3所示,本文方案BTABEDSS的智能合約部署、上傳元數(shù)據(jù)和下載元數(shù)據(jù)操作的成本較低且均低于BCSWAC.兩個(gè)方案智能合約上傳元數(shù)據(jù)和下載元數(shù)據(jù)操作的成本都遠(yuǎn)低于部署操作的成本,但本文方案BTABEDSS的智能合約僅需部署一次,BCSWAC的智能合約由數(shù)據(jù)所有者部署,隨著系統(tǒng)用戶(hù)的增加而會(huì)使系統(tǒng)使用智能合約的成本開(kāi)銷(xiāo)不斷增加.因此,采用本文方案后,系統(tǒng)使用智能合約的成本開(kāi)銷(xiāo)較低,更加可行與實(shí)用.

圖3 智能合約操作Gas消耗對(duì)比Fig.3 Comparison of Gas consumption for smart contract operations
3.2.2 數(shù)據(jù)存儲(chǔ)時(shí)間效率分析
本實(shí)驗(yàn)是測(cè)試IPFS和云存儲(chǔ)兩種存儲(chǔ)方式的存取時(shí)間效率的實(shí)驗(yàn).本文將數(shù)據(jù)密文存儲(chǔ)在IPFS,主要是針對(duì)數(shù)據(jù)的存儲(chǔ)使用,在PC1上使用ipfs-desktop安裝搭建IPFS,進(jìn)行數(shù)據(jù)上傳下載實(shí)驗(yàn)測(cè)試,其中連接的是IPFS真實(shí)主網(wǎng),由真實(shí)多節(jié)點(diǎn)連接構(gòu)成.其中,由于IPFS內(nèi)部機(jī)制,在同一文件首次上傳時(shí)是真實(shí)上傳該文件,而在其后多次上傳該文件操作則只是確認(rèn)該文件是否已存在,不會(huì)進(jìn)行二次存儲(chǔ).針對(duì)這一問(wèn)題,為了得到更可靠的測(cè)試結(jié)果,進(jìn)行了同一大小的不同文件的上傳測(cè)試.與其對(duì)比的是在PC2上搭建服務(wù)器仿真云存儲(chǔ)服務(wù)器,進(jìn)行數(shù)據(jù)上傳下載測(cè)試.在不同數(shù)據(jù)大小下,分別測(cè)試了云存儲(chǔ)和IPFS的數(shù)據(jù)上傳/下載時(shí)間消耗并進(jìn)行了對(duì)比.如圖4所示,隨著數(shù)據(jù)大小的增加,云存儲(chǔ)和IPFS的數(shù)據(jù)上傳/下載時(shí)間消耗都越多,但I(xiàn)PFS的增幅較小.在相同數(shù)據(jù)大小下,IPFS的數(shù)據(jù)上傳/下載時(shí)間消耗均較少并少于云存儲(chǔ)的數(shù)據(jù)上傳/下載時(shí)間消耗,隨著數(shù)據(jù)大小的增加,優(yōu)勢(shì)更加明顯.所以,采用本文方案,系統(tǒng)使用IPFS,不僅使數(shù)據(jù)安全存儲(chǔ)與訪(fǎng)問(wèn)、緩解了區(qū)塊鏈存儲(chǔ)壓力,還提升了系統(tǒng)操作效率.

圖4 云存儲(chǔ)和IPFS的數(shù)據(jù)上傳/下載時(shí)間對(duì)比Fig.4 Data upload/download time comparison between cloud storage and IPFS
3.2.3 性能分析
為了驗(yàn)證雙線(xiàn)性配對(duì)運(yùn)算計(jì)算開(kāi)銷(xiāo)大于標(biāo)量乘或冪乘運(yùn)算,基于JPBC庫(kù),選擇Type d159曲線(xiàn),取50次測(cè)試結(jié)果平均值,實(shí)驗(yàn)結(jié)果得出一次雙線(xiàn)性配對(duì)運(yùn)算的時(shí)間為15.56ms,一次標(biāo)量乘或冪乘運(yùn)算的時(shí)間為3.62ms,結(jié)果表明標(biāo)量乘或冪乘運(yùn)算的計(jì)算開(kāi)銷(xiāo)優(yōu)于雙線(xiàn)性配對(duì)運(yùn)算.進(jìn)一步對(duì)本文方案BTABEDSS與其他方案在CP-ABE方案中密文長(zhǎng)度、私鑰長(zhǎng)度和加解密計(jì)算開(kāi)銷(xiāo)方面進(jìn)行了性能對(duì)比分析.其中,T表示群元素的冪乘或標(biāo)量乘運(yùn)算,k表示訪(fǎng)問(wèn)策略中的屬性個(gè)數(shù),u表示訪(fǎng)問(wèn)策略中每個(gè)屬性對(duì)應(yīng)的撤銷(xiāo)列表中的用戶(hù)個(gè)數(shù),n表示私鑰生成所用到的用戶(hù)屬性個(gè)數(shù),d表示成功解密所用到的屬性個(gè)數(shù),v表示OBDD中有效路徑的個(gè)數(shù),L表示群元素長(zhǎng)度.由表2所示,本文方案BTABEDSS在多個(gè)方面都優(yōu)于其他方案.本文方案BTABEDSS中用戶(hù)屬性私鑰長(zhǎng)度是固定的,只有3個(gè)群元素長(zhǎng)度,而不是跟其他方案一樣正比于用戶(hù)屬性個(gè)數(shù),這顯然降低了系統(tǒng)的計(jì)算和存儲(chǔ)開(kāi)銷(xiāo).數(shù)據(jù)加密階段的密文長(zhǎng)度和計(jì)算開(kāi)銷(xiāo)都正比于OBDD中有效路徑個(gè)數(shù)v,而不是正比于訪(fǎng)問(wèn)策略中的屬性個(gè)數(shù),這樣可以有效降低系統(tǒng)的計(jì)算和存儲(chǔ)開(kāi)銷(xiāo),特別是當(dāng)v較小時(shí).此外,本文方案BTABEDSS的數(shù)據(jù)解密階段過(guò)程的時(shí)間復(fù)雜度為O(1),只需要幾次標(biāo)量乘運(yùn)算,因此效率很高,而不是跟方案BPPTABE、BCSWAC、BSSPD一樣需要正比于成功解密所用到的屬性個(gè)數(shù)的雙線(xiàn)性配對(duì)運(yùn)算.雖然方案BMHASPHR的時(shí)間復(fù)雜度也是O(1),但是需要第三方實(shí)體進(jìn)行外包解密.

表2 性能對(duì)比Table 2 Performance comparison
為了更直觀地說(shuō)明本文CP-ABE方案的優(yōu)越性,選擇本文1.2節(jié)所舉例的訪(fǎng)問(wèn)策略(x0AND (x1ORx2) ANDx3),進(jìn)一步對(duì)本文方案BTABEDSS與方案BPPTABE、BCSWAC、BMHASPHR進(jìn)行通信開(kāi)銷(xiāo)對(duì)比,以及基于JPBC庫(kù),選擇Type d159曲線(xiàn)實(shí)驗(yàn)測(cè)試,進(jìn)行計(jì)算開(kāi)銷(xiāo)對(duì)比.如圖5所示,本文方案BTABEDSS的CP-ABE方案的密文長(zhǎng)度優(yōu)于其他對(duì)比方案,私鑰長(zhǎng)度與BMHASPHR相當(dāng),優(yōu)于BPPTABE和BCSWAC.因此,本文CP-ABE方案通信開(kāi)銷(xiāo)優(yōu)于其他對(duì)比方案.如圖6所示,本文方案BTABEDSS的CP-ABE方案的加密計(jì)算開(kāi)銷(xiāo)最低,加密計(jì)算開(kāi)銷(xiāo)優(yōu)于其他對(duì)比方案.BMHASPHR的解密計(jì)算開(kāi)銷(xiāo)最低,因?yàn)樵摲桨甘褂脵E圓曲線(xiàn)的標(biāo)量乘運(yùn)算,并且擁有第三方實(shí)體進(jìn)行外包解密.本文CP-ABE方案也使用橢圓曲線(xiàn)標(biāo)量乘運(yùn)算,解密計(jì)算開(kāi)銷(xiāo)遠(yuǎn)低于需要復(fù)雜雙線(xiàn)性配對(duì)運(yùn)算的BPPTABE和BCSWAC.

圖5 方案通信開(kāi)銷(xiāo)對(duì)比Fig.5 Comparison of scheme communication overhead

圖6 方案計(jì)算開(kāi)銷(xiāo)對(duì)比Fig.6 Comparison of scheme computation overhead
本文提出了一種結(jié)合區(qū)塊鏈和可追蹤C(jī)P-ABE的數(shù)據(jù)存儲(chǔ)與共享方案(BTABEDSS),數(shù)據(jù)所有者將數(shù)據(jù)密文存儲(chǔ)在IPFS上,區(qū)塊鏈上僅存儲(chǔ)數(shù)據(jù)的唯一標(biāo)識(shí)、數(shù)據(jù)的哈希值和數(shù)據(jù)密文在IPFS檢索的內(nèi)容哈希值等元數(shù)據(jù)信息,可以使數(shù)據(jù)安全可信存儲(chǔ)與訪(fǎng)問(wèn),并緩解了區(qū)塊鏈的存儲(chǔ)壓力.將智能合約協(xié)同CP-ABE實(shí)現(xiàn)對(duì)數(shù)據(jù)的細(xì)粒度訪(fǎng)問(wèn)控制,只有滿(mǎn)足訪(fǎng)問(wèn)控制策略的非惡意用戶(hù)才能訪(fǎng)問(wèn)共享數(shù)據(jù).使用橢圓曲線(xiàn)上的標(biāo)量乘運(yùn)算和表達(dá)性、計(jì)算性更優(yōu)的OBDD訪(fǎng)問(wèn)結(jié)構(gòu),有效降低了系統(tǒng)的計(jì)算和存儲(chǔ)開(kāi)銷(xiāo).使用概率加密方案將用戶(hù)身份信息隨機(jī)化處理后嵌入用戶(hù)密鑰,從而實(shí)現(xiàn)對(duì)惡意泄露密鑰的用戶(hù)進(jìn)行高效追蹤并撤銷(xiāo)其訪(fǎng)問(wèn)權(quán)限.通過(guò)安全性與實(shí)驗(yàn)分析表明本文方案是安全可行的,與相關(guān)方案相比,本文方案具備更低的系統(tǒng)運(yùn)行成本和開(kāi)銷(xiāo),在實(shí)際運(yùn)行中更加高效與實(shí)用.在后續(xù)研究工作中,將解決可信授權(quán)機(jī)構(gòu)的信任和單點(diǎn)失效問(wèn)題,提升系統(tǒng)的安全性和魯棒性,同時(shí)進(jìn)一步研究區(qū)塊鏈的共識(shí)算法,提高系統(tǒng)的運(yùn)行效率.