楊業(yè)平, 林德威, 黃芳芳, 王斌, 楊旸
(1. 國(guó)網(wǎng)福建省電力有限公司信息通信分公司, 福建 福州 350003; 2. 國(guó)網(wǎng)信通億力科技有限責(zé)任公司, 福建 福州 350003; 3. 福州大學(xué)計(jì)算機(jī)與大數(shù)據(jù)學(xué)院, 福建 福州 350108)
基于區(qū)塊鏈的物聯(lián)網(wǎng)模型可以廣泛應(yīng)用于智能電網(wǎng)、 車聯(lián)網(wǎng)、 智慧醫(yī)療等領(lǐng)域, 實(shí)現(xiàn)分布式的資源管理以及更低的管理開(kāi)銷和更高的商業(yè)價(jià)值[1]. 在巨大的商業(yè)潛在價(jià)值背后, 區(qū)塊鏈物聯(lián)網(wǎng)技術(shù)的推廣也面臨著巨大的安全威脅和挑戰(zhàn): 增加數(shù)據(jù)竊聽(tīng)、 拒絕服務(wù)攻擊和僵尸網(wǎng)絡(luò)攻擊等風(fēng)險(xiǎn). 其中, 最大的安全威脅是數(shù)據(jù)泄露, 這些數(shù)據(jù)極易被攻擊者竊聽(tīng)和搜集, 然后在暗網(wǎng)中進(jìn)行售賣[2]. 因此, 區(qū)塊鏈物聯(lián)網(wǎng)的隱私性保護(hù)是一個(gè)亟待解決的問(wèn)題.
Lu等[3]提出基于區(qū)塊鏈的安全數(shù)據(jù)共享架構(gòu), 通過(guò)僅共享數(shù)據(jù)模型來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)隱私性的保護(hù). Hassija等[4]通過(guò)博弈論模型來(lái)實(shí)現(xiàn)電網(wǎng)和車輛之間交互的性能優(yōu)化, 但是系統(tǒng)對(duì)數(shù)據(jù)安全性的保護(hù)較弱. 喬康等[5]設(shè)計(jì)了面向物聯(lián)網(wǎng)數(shù)據(jù)共享的鏈下交易機(jī)制, 基于閃電網(wǎng)絡(luò)的方案可以提高交易吞吐量, 降低交易時(shí)延. 蔣宇娜等[6]構(gòu)造了基于區(qū)塊鏈的去中心化物聯(lián)網(wǎng)數(shù)據(jù)共享和存儲(chǔ)算法, 通過(guò)存儲(chǔ)證明的共識(shí)機(jī)制, 對(duì)區(qū)塊傳播時(shí)延進(jìn)行均衡化處理. Yu等[7]綜合屬性基加密(attribute based encryption, ABE)算法和變色龍哈希技術(shù), 提出可更新的數(shù)據(jù)共享訪問(wèn)控制方案. 任天宇等[8]提出基于多級(jí)身份驗(yàn)證和輕量級(jí)加密的電力物聯(lián)網(wǎng)數(shù)據(jù)安全方案, 采用RC6和Fiestel加密算法對(duì)敏感數(shù)據(jù)進(jìn)行處理, 但是加密數(shù)據(jù)共享的方式不夠靈活. Ren等[9]結(jié)合ABE和區(qū)塊鏈技術(shù)實(shí)現(xiàn)了跨域的數(shù)據(jù)訪問(wèn)令牌申請(qǐng)和更新. Qi等[10]設(shè)計(jì)了基于壓縮算法的物聯(lián)網(wǎng)隱私數(shù)據(jù)共享框架, 從而利用區(qū)塊鏈對(duì)隱私數(shù)據(jù)進(jìn)行管理.
為了實(shí)現(xiàn)對(duì)數(shù)據(jù)的隱私保護(hù), 本研究提出一種新型區(qū)塊鏈物聯(lián)網(wǎng)安全數(shù)據(jù)共享算法, 利用屬性基加密方式, 實(shí)現(xiàn)對(duì)物聯(lián)網(wǎng)數(shù)據(jù)訪問(wèn)權(quán)限的細(xì)粒度控制, 并且通過(guò)外包解密技術(shù)降低用戶端的計(jì)算開(kāi)銷. 本系統(tǒng)的一個(gè)核心功能是實(shí)現(xiàn)對(duì)用戶訪問(wèn)次數(shù)的控制, 運(yùn)用同步聚合簽名、 可驗(yàn)證隨機(jī)函數(shù)等算法, 對(duì)用戶的每次訪問(wèn)進(jìn)行管理. 在付費(fèi)使用模型線下, 根據(jù)用戶對(duì)數(shù)據(jù)的付費(fèi)情況, 分配有限次數(shù)的物聯(lián)網(wǎng)數(shù)據(jù)訪問(wèn). 同時(shí), 區(qū)塊鏈的智能合約功能可以提供用戶管理和訪問(wèn)驗(yàn)證功能. 此外, 本研究對(duì)方案進(jìn)行了性能測(cè)試, 包括通信開(kāi)銷、 計(jì)算時(shí)間、 消耗的區(qū)塊鏈Gas值等指標(biāo), 實(shí)驗(yàn)結(jié)果表明本方案具有高效性和實(shí)用性.
密文策略屬性基加密(ciphertext-policy attribute based encryption, CP-ABE)可以為數(shù)據(jù)共享提供保護(hù)隱私的細(xì)粒度訪問(wèn)控制, 通過(guò)引入外包解密功能, 可以降低數(shù)據(jù)使用者的恢復(fù)明文數(shù)據(jù)的計(jì)算開(kāi)銷. 具體包含五個(gè)算法:
1) Setup(1λ)→(PP, MSK): 輸入安全參數(shù)λ, 輸出系統(tǒng)公開(kāi)參數(shù)PP和主密鑰MSK.
2) KeyGen(PP, MSK,S)→(TK, RK): 輸入PP, MSK和用戶屬性集合, 輸出密文轉(zhuǎn)換密鑰TK和提取密鑰RK.
3) Enc(PP,m,A)→(EK, CT): 輸入PP, 消息m和訪問(wèn)策略A, 輸出封裝密鑰EK和密文CT.
4) Trans(TK, CT)→TCT/⊥: 輸入TK, CT, 如果TK中的屬性集合S與CT中的訪問(wèn)A匹配(f(S,A)=1), 則輸出轉(zhuǎn)換密文(或稱為部分解密密文)TCT, 否則輸出0.
5) Dec(RK, TCT)→(EK,m): 輸入RK, TCT, 輸出封裝密鑰EK和消息m.
本系統(tǒng)使用同步聚合簽名(synchronized aggregate signature, SAS)對(duì)云服務(wù)器提供的數(shù)據(jù)安全訪問(wèn)服務(wù)進(jìn)行審計(jì). SAS包含六個(gè)算法:
1) Setup(1λ)→PP: 輸入安全參數(shù)λ, 輸出系統(tǒng)公開(kāi)參數(shù)PP.
2) KeyGen(PP)→(pk,sk): 輸入PP, 輸出公私鑰pk/sk.
3) Sign(PP,sk,m,ω)→σ: 輸入PP,sk, 消息m和有效期ω, 輸出簽名σ.
4) Verify(PP,pk,m,σ)→1/0: 輸入PP,pk,m,σ, 輸出1表示簽名有效, 否則輸出0.
5) Agg(PP, PK, Msg, Sig)→σ∑: 輸入PP, 一組公鑰PK=(pk1, …,pkl), 一組消息Msg=(m1, …,ml), 一組簽名Sig=(σ1, …,σl), 輸出聚合簽名σ∑.
6) AggVerify(PP, PK, Msg,σ∑)→1/0: 輸入PP, PK, Msg,σ∑, 輸出1表示聚合簽名有效, 否則輸出0.
可驗(yàn)證隨機(jī)函數(shù)(verifiable random function, VRF)是一種可提供驗(yàn)證功能的偽隨機(jī)函數(shù), 包含四個(gè)算法:
1) Setup(1λ)→PP: 輸入安全參數(shù)λ, 輸出系統(tǒng)公開(kāi)參數(shù)PP.
2) KeyGen(PP)→(pk,sk): 輸入PP, 輸出公私鑰pk/sk.
3) Prove(PP,sk,x)→(y,π): 輸入PP,sk和消息x, 輸出VRF評(píng)估值y和證明值π.
4) Verify(PP,pk,x,y,π)→1/0: 輸入PP,pk,x,y,π, 輸出1表示(y,π)是對(duì)x的有效評(píng)估和證明值, 否則輸出0.
屬性集合定義: 本系統(tǒng)用符號(hào)A表示單個(gè)屬性, 令{A1,A2, …,An}表示所有屬性的集合.令符號(hào)S表示用戶的屬性集合, 并滿足S?{A1,A2, …,An}.利用n比特串表示屬性集合S=(a1,a2, …,an), 其中ai∈{0, 1}表示第i個(gè)屬性對(duì)應(yīng)的比特值: 若Ai?S, 則ai=1; 若Ai?S, 則ai=0.例如, 假設(shè)n-6, 則S=(1, 0, 1, 0, 1, 1)表示屬性集合S包含屬性{A1,A2, …,An}.
訪問(wèn)策略定義: 本系統(tǒng)使用基于與門(mén)(AND gate)和屬性集合{A1,A2, …,An}的訪問(wèn)結(jié)構(gòu)來(lái)定義訪問(wèn)策略A.利用n比特字符串表示訪問(wèn)策略A=(b1,b2, …,bn), 其中bi∈(0, 1)表示第i個(gè)屬性對(duì)應(yīng)的比特值: 若Ai∈A, 則bi=1; 若Ai?A, 則bi=0.例如, 假設(shè)n=6, 則A=(0, 0, 1,0, 1, 0)表示滿足訪問(wèn)策略A需要包含屬性{A3,A5}.
屬性與訪問(wèn)策略匹配定義: 對(duì)于屬性集合S=(a1,a2, …,an)和訪問(wèn)策略a=(b1,b2, …,bn), 如果對(duì)于所有的i∈(1, 2, …,n), 都滿足ai≥bi, 則稱屬性集合S和訪問(wèn)策略A匹配, 表示為A?S.
系統(tǒng)架構(gòu)如圖1所示, 包括密鑰生成中心、 云服務(wù)器、 區(qū)塊鏈、 物聯(lián)網(wǎng)和數(shù)據(jù)使用者.
圖1 系統(tǒng)架構(gòu)和工作流程圖Fig.1 System model and workflow
密鑰生成中心. 產(chǎn)生公開(kāi)參數(shù)PP, 并分發(fā)密鑰(步驟①): 為物聯(lián)網(wǎng)設(shè)備分發(fā)公私鑰對(duì)(PKO, SKO), 為數(shù)據(jù)使用者分發(fā)(PKU, SKU), 為用戶生成密文轉(zhuǎn)換密鑰TKU和提取密鑰RKU, 將(PKU, SKU, RKU)發(fā)送給數(shù)據(jù)使用者, 并將(PKU, TKU)發(fā)送給云平臺(tái).
物聯(lián)網(wǎng). 物聯(lián)網(wǎng)設(shè)備需要對(duì)產(chǎn)生的數(shù)據(jù)m進(jìn)行加密, 并使用訪問(wèn)控制策略A來(lái)對(duì)允許訪問(wèn)數(shù)據(jù)的用戶屬性S進(jìn)行限定產(chǎn)生密文CT. 假設(shè)物聯(lián)網(wǎng)設(shè)備授權(quán)用戶對(duì)數(shù)據(jù)訪問(wèn)次數(shù)為κ, 物聯(lián)網(wǎng)設(shè)備產(chǎn)生κ對(duì)簽名密鑰對(duì), 并對(duì)簽名私鑰進(jìn)行加密產(chǎn)生CK. 最后, 物聯(lián)網(wǎng)設(shè)備將密文CT和簽名密鑰對(duì)CK上傳到云平臺(tái)進(jìn)行存儲(chǔ), 云平臺(tái)將CT發(fā)送到區(qū)塊鏈平臺(tái)進(jìn)行存證(步驟②). 物聯(lián)網(wǎng)調(diào)用智能合約對(duì)云平臺(tái)的服務(wù)證明proof∑進(jìn)行驗(yàn)證, 然后進(jìn)行付費(fèi)操作(步驟⑦).
數(shù)據(jù)使用者. 將訪問(wèn)請(qǐng)求req提交給云服務(wù)器(步驟③), 由云服務(wù)器完成密文轉(zhuǎn)換操作(步驟④). 數(shù)據(jù)使用者將接收到的轉(zhuǎn)換密文TCT提交給區(qū)塊鏈智能合約進(jìn)行正確性驗(yàn)證, 若正確則對(duì)其進(jìn)行解密恢復(fù)出明文m. 然后, 數(shù)據(jù)使用者需要生成數(shù)據(jù)資源使用證明proof(步驟⑤).
云服務(wù)器. 提供數(shù)據(jù)存儲(chǔ)服務(wù)和外包解密服務(wù), 根據(jù)訪問(wèn)控制策略對(duì)授權(quán)數(shù)據(jù)使用者提供服務(wù)(步驟④). 在收到數(shù)據(jù)使用者訪問(wèn)證明proof后, 云平臺(tái)將proof提交給區(qū)塊鏈智能合約進(jìn)行驗(yàn)證. 若通過(guò)驗(yàn)證則進(jìn)行聚合生成聚合證明proof∑以對(duì)提供的服務(wù)進(jìn)行收費(fèi)(步驟⑥).
區(qū)塊鏈. 為物聯(lián)網(wǎng)數(shù)據(jù)存儲(chǔ)、 共享、 訪問(wèn)、 收費(fèi)過(guò)程提供存證服務(wù), 同時(shí)利用智能合約對(duì)數(shù)據(jù)使用者的數(shù)據(jù)使用、 付費(fèi)行為, 以及云服務(wù)器產(chǎn)生的聚合簽名進(jìn)行驗(yàn)證(步驟①②④⑥⑦).
KGC.Setup(1λ)→(PP, MSK): 密鑰生成中心根據(jù)安全參數(shù)λ, 生成橢圓曲線群G=(p,Ep(a,b),Q), 其中Q是橢圓曲線G的生成元, 群G的階為素?cái)?shù)p.生成雙線性對(duì)(p,G,GT,e), 其中群G和GT的階為素?cái)?shù)p, 雙線性對(duì)映射e:G×G→GT.令系統(tǒng)的全局屬性集合為U=(A1, …,An).
U.DecVerify(PP, PKO, RKU, TCT, CSKctr)→(m,ski)/⊥: 數(shù)據(jù)使用者從轉(zhuǎn)換密文恢復(fù)出訪問(wèn)密鑰ski和明文消息m. 數(shù)據(jù)使用者用密文提取密鑰RKU=ζ恢復(fù)出原始消息m. 首先計(jì)算下式:
通過(guò)個(gè)人電腦終端, 借助Charm庫(kù)和以太坊測(cè)試網(wǎng)絡(luò)進(jìn)行安全數(shù)據(jù)共享系統(tǒng)進(jìn)行性能測(cè)試. Charm庫(kù)是一種可以用來(lái)對(duì)密碼系統(tǒng)進(jìn)行原型開(kāi)發(fā)的函數(shù)庫(kù), 使用的編程語(yǔ)言是Python. 本研究從Charm庫(kù)選取了三條橢圓曲線進(jìn)行系統(tǒng)性能測(cè)試: secp384r1, secp256k1和secp224r1, 橢圓曲線的代數(shù)公式為E:y2=x3+ax+b, 定義在素?cái)?shù)域Fp上,p為大素?cái)?shù), 其參數(shù)a,b∈Fp. 這三條曲線均為NIST(national institute of standards and technology)推薦的Weierstrass型曲線, 在OpenSSL庫(kù)中可以實(shí)現(xiàn). OpenSSL是一個(gè)開(kāi)放源代碼的軟件庫(kù), 應(yīng)用程序可以使用OpenSSL庫(kù)來(lái)進(jìn)行安全通信, 被廣泛應(yīng)用在互聯(lián)網(wǎng)的網(wǎng)頁(yè)服務(wù)器上. secp384r1橢圓曲線的大素?cái)?shù)p=2384-2128-296+232-1,p的長(zhǎng)度為384-bit, 可以實(shí)現(xiàn)192-bit的安全等級(jí)(該曲線方程參數(shù)均為長(zhǎng)度大于100-bit的大整數(shù), 故此處未列出). secp256k1的橢圓方程為E:y2=x3+7, 256-bit的大素?cái)?shù)p=2256-232-29-28-27-26-24-1, 可以實(shí)現(xiàn)128-bit的安全等級(jí). secp224r1的橢圓方程為E:y2=x3+5, 224-bit的大素?cái)?shù)p=2224-232-212-211-29-27-24-2-1, 可以實(shí)現(xiàn)112-bit的安全等級(jí). 以太坊測(cè)試網(wǎng)絡(luò)(release-1.8 version)可以用過(guò)Solidity編程語(yǔ)言進(jìn)行智能合約的編寫(xiě)和部署. 本研究使用Python庫(kù)中的py-solc和web3聯(lián)接以太坊的智能合約并進(jìn)行編譯, 通信過(guò)程采用RPC遠(yuǎn)程過(guò)程調(diào)用. 實(shí)驗(yàn)環(huán)境環(huán)境為PC, 配置為Intel Core i7-9700 CPU@ 3.00 GHz*8, 16 GB RAM, 運(yùn)行64-bit Ubuntu 18.04.5 LTS操作系統(tǒng).
根據(jù)系統(tǒng)初始化階段、 密鑰生成階段、 物聯(lián)網(wǎng)數(shù)據(jù)加密和共享階段、 物聯(lián)網(wǎng)數(shù)據(jù)請(qǐng)求階段、 區(qū)塊鏈聚合證明階段以及區(qū)塊鏈聚合驗(yàn)證階段的劃分, 對(duì)區(qū)塊鏈安全數(shù)據(jù)共享系統(tǒng)的通信開(kāi)銷和計(jì)算開(kāi)銷進(jìn)行了測(cè)試, 實(shí)驗(yàn)結(jié)果如圖2~5所示.
(a) 各算法計(jì)算開(kāi)銷
(b) 各算法通信開(kāi)銷
(a) 初始化階段計(jì)算開(kāi)銷
(b) 初始化階段通信開(kāi)銷
(a) 加密階段計(jì)算開(kāi)銷
(b) 加密階段通信開(kāi)銷
在圖2中, 密鑰生成階段, 解密和證明階段, 聚合證明階段和聚合驗(yàn)證階段的計(jì)算開(kāi)銷都是固定值, 對(duì)于secp384r1橢圓曲線, 計(jì)算時(shí)間分別為2.126、 31.725、 27.473 和27.473 ms. 密鑰生成階段、 數(shù)據(jù)請(qǐng)求階段、 解密和證明階段、 聚合證明階段的通信開(kāi)銷都是固定值, 對(duì)于secp384r1橢圓曲線, 通信量分別為0.56、 0.49、 0.56 和0.07 kbit. 圖2的實(shí)驗(yàn)結(jié)果表明, 方案的各個(gè)算法在secp224r1、 secp256k1和secp384r1三條橢圓曲線上分別進(jìn)行測(cè)試時(shí), 計(jì)算開(kāi)銷和通信開(kāi)銷呈現(xiàn)依次遞增的趨勢(shì), 這是因?yàn)槿龡l曲線的參數(shù)依次增大, 隨著素?cái)?shù)域中素?cái)?shù)比特長(zhǎng)度的增加, 每一次橢圓曲線上的加法和乘法操作計(jì)算開(kāi)銷都會(huì)增加. 但是由此帶來(lái)的是安全級(jí)別的提升, 從112-bit安全性, 提高到192-bit安全性. 因此, 在secp224r1曲線上的密鑰生成階段、 解密和證明階段、 聚合證明階段、 聚合驗(yàn)證階段的算法實(shí)現(xiàn)具有高效性, 在secp384r1曲線上的實(shí)現(xiàn)會(huì)帶來(lái)更高的安全級(jí)別. 因此, 該系統(tǒng)在實(shí)際部署時(shí)可以根據(jù)需求
對(duì)效率和安全性之間做出權(quán)衡.
圖3展示了系統(tǒng)初始化階段的通信和計(jì)算開(kāi)銷, 兩者都隨著系統(tǒng)中支持的屬性數(shù)量n線性增長(zhǎng), 選擇n的變化值分別為{5, 10, 15, 20, 25, 30}. 在系統(tǒng)初始化階段, 密鑰生成中心會(huì)為系統(tǒng)全局屬性集合中的每個(gè)屬性Ai分別生成公開(kāi)參數(shù)(Qi,Ui,Vi), 其中i∈{1, …,n}.因此, 隨著屬性數(shù)量n的增長(zhǎng), KGC在初始化過(guò)程中的計(jì)算量和通信量也會(huì)隨之增加. 當(dāng)n=30時(shí), 為了實(shí)現(xiàn)112-bit、 128-bit和192-bit的安全性, 系統(tǒng)初始化的時(shí)間開(kāi)銷分別為48.41、 61.852 和99.927 ms, 通信量分別為3.906、 4.278和6.51 kbit.
圖4為物聯(lián)網(wǎng)數(shù)據(jù)加密和共享階段的計(jì)算和通信量, 圖5為請(qǐng)求階段的計(jì)算開(kāi)銷, 兩幅性能圖的對(duì)比可以看出加密時(shí)間高于請(qǐng)求階段的計(jì)算時(shí)間, 并且都隨著屬性數(shù)量增加而線性遞增. 加密階段的運(yùn)算量主要來(lái)自于屬性基加密的計(jì)算, 耗時(shí)最多的是橢圓曲線上的冪指數(shù)運(yùn)算. 請(qǐng)求階段的數(shù)據(jù)使用方運(yùn)算量較小, 云服務(wù)器對(duì)密文進(jìn)行轉(zhuǎn)換的計(jì)算量較大, 主要目的是降低用戶端的解密開(kāi)銷. 當(dāng)n=30時(shí), 對(duì)于secp384r1橢圓曲線(192-bit安全性), 物聯(lián)網(wǎng)數(shù)據(jù)加密的計(jì)算和通信開(kāi)銷分別是83.363 ms和2.66 KB, 數(shù)據(jù)請(qǐng)求和密文轉(zhuǎn)換的計(jì)算量和通信量分別為72.568 ms和0.49 Kbit.
圖5 請(qǐng)求階段的計(jì)算開(kāi)銷 Fig.5 Computation overheads of query phase
通過(guò)上述實(shí)驗(yàn)結(jié)果表明, 本研究所提出的基于區(qū)塊鏈的物聯(lián)網(wǎng)安全數(shù)據(jù)共享系統(tǒng)中的各個(gè)階段在不同的橢圓曲線上效率較高, 通信量低, 能夠有效保護(hù)物聯(lián)網(wǎng)數(shù)據(jù)的隱私性, 同時(shí)提供細(xì)粒度的數(shù)據(jù)共享策略, 并能夠?qū)κ跈?quán)用戶的訪問(wèn)次數(shù)進(jìn)行限定.
針對(duì)傳統(tǒng)物聯(lián)網(wǎng)數(shù)據(jù)共享系統(tǒng)中安全性保護(hù)級(jí)別低、 共享靈活性不足等問(wèn)題, 提出一種基于區(qū)塊鏈的物聯(lián)網(wǎng)安全數(shù)據(jù)共享系統(tǒng), 不僅能夠?qū)崿F(xiàn)數(shù)據(jù)保密性, 非交互式的細(xì)粒度訪問(wèn)控制和數(shù)據(jù)不可偽造性, 還具有防篡改性, 抗分布式拒絕服務(wù)攻擊和數(shù)據(jù)過(guò)度下載等特性, 適用于付費(fèi)商業(yè)模型. 實(shí)驗(yàn)測(cè)試結(jié)果表明, 本研究提出的數(shù)據(jù)共享系統(tǒng)有很低的計(jì)算開(kāi)銷和通信量, 同時(shí), 具有高效性, 系統(tǒng)能夠在通過(guò)橢圓曲線的選取達(dá)到不同的安全級(jí)別.