黃鳳鳴,涂山山,孟 遠
(北京工業大學 信息學部,北京 100124)
近年來,由于移動物聯網設備數量的爆發式增長,海量的數據、設備的移動性以及實時處理的要求對云計算提出了嚴峻的挑戰。由于云計算的靜態條件以及云服務器與終端用戶之間的物理距離限制,云計算不適用于范圍廣泛的移動應用,移動應用程序的數據處理必須在地理上分布的數據中心進行,為解決這些問題,霧計算技術應運而生[1-2]。
霧計算是一種極具研究前景的新型計算范式,它將云計算擴展到網絡邊緣,可以實現云計算和物聯網設備之間的平滑融合,具有低時延、位置感知、支持終端設備的移動性、支持物聯網設備的異構性以及卸載云計算[3-4]等特點。隨著物聯網設備的增長,數以億計的海量數據對云計算提出了嚴峻的要求,霧計算可以處理一些低計算要求的數據,因而減緩了云計算的任務處理壓力,滿足了移動應用實時處理的要求。
然而,由于霧計算是云計算的重要擴展,因此繼承了云計算的許多安全問題和隱私挑戰,其中的主要問題如下:云計算中傳統的數據加密技術不能直接應用到霧計算;傳統的數據加密技術運算復雜,不適用于霧計算中計算資源有限的物聯網設備;傳統的訪問控制技術粒度太粗,不具有霧計算中終端設備多樣性的特點。
基于以上問題,文獻[5]提出了基于屬性的加密(Attribute-Based Encryption,ABE)的解決方案,基于屬性的加密機制將屬性這一概念引入到密碼體制中,各個實體都可以通過一系列的屬性進行描述,加密者不需要知道用戶的具體身份信息,只需在加密時將屬性或訪問結構嵌入到密文中,解密者在進行解密時,只有當用戶的屬性滿足定義的訪問結構時才能解密成功,由此實現了對密文細粒度的訪問控制。然而在實際應用中,常常涉及用戶權限變更和屬性到期的情況,因此在基于屬性的加密機制中實現屬性撤銷是一個亟待解決的問題。
為滿足霧計算中權限變更的需要,本文提出一種基于CP-ABE的屬性撤銷方案。該方案通過細粒度的訪問控制與安全的數據傳輸,以實現霧計算網絡中的安全通信。
基于屬性的加密技術由文獻[5]提出并以其顯著的優勢迅速成為廣大科研者的關注熱點。屬性基加密是一種公鑰加密機制,其關鍵思想是在密文中嵌入一系列的屬性或訪問控制結構,解密者在解密時,用于描述身份特征的屬性必須滿足定義的訪問結構時才能解密成功。文獻[6-8]根據訪問控制結構所在的位置不同,又將ABE劃分為基于密鑰策略的屬性加密方案(Key Policy Attribute-Based Encryption,KP-ABE)和基于密文策略的屬性加密方案(Ciphertext Policy Attribute-Based Encryption,CP-ABE)。文獻[9]將屬性加密方案應用到霧計算中,來實現霧節點和云服務器之間的安全密鑰共享,但針對屬性撤銷問題沒有做出解釋。
在實際應用中,由于用戶權限會發生變更,這就要求系統能夠根據實際需要對屬性進行一定的管理,主要包括更新和刪除等。近年來在關于ABE的方案中,側重點大多在于怎樣實現表達更為豐富的訪問策略,而沒有重點考慮加密機制中屬性撤銷問題[10]。目前比較流行的兩種撤銷模式由文獻[11]提出,分別是直接撤銷模式和間接撤銷模式。文獻[12]將代理重加密技術引入屬性撤銷中,其核心思想是利用版本號來標識系統主密鑰的演進過程,同時系統公鑰、用戶私鑰和密文都與版本號相關,但代理者需要實時在線。文獻[13]提出屬性群密鑰的概念,系統會依照撤銷列表產生相應的群密鑰,群密鑰當中含有撤銷需要用到的信息,只有合法用戶才能獲得群密鑰,但其復雜的計算開銷不適合物聯網環境中資源有限的設備,無法直接用于霧計算。文獻[14]提出了通過為每個用戶的私鑰設置版本號實現用戶屬性的撤銷,但撤銷粒度太粗。
文獻[15]提出了將屬性基加密技術中的解密操作外包的新范式。文獻[16]提出了一個CP-ABE隱私保護方案,該方案允許便攜式設備將加密和解密操作外包給云服務提供商,而無需泄露數據,但是加密的計算開銷會隨著數據所有者訪問結構的復雜性而增加。文獻[17]介紹了一種基于屬性的加密通用結構,其中具有可驗證的外包解密,為用戶留下了數量不變的簡單計算來解密密文。文獻[18]將解密外包給霧節點,但沒有實現加密外包。文獻[19]提出將加解密過程中復雜的操作轉移到云服務器中,但該方案不適合于霧計算。
本文提出一種基于“云-霧-終端”的三層系統模型,將傳統云計算中的屬性加密機制引入到霧計算中,保證了數據傳輸的機密性,實現依據霧節點的身份驗證和訪問控制。由于用戶屬性動態變化的問題,給出一種基于CP-ABE的屬性撤銷機制,依據屬性組密鑰,實現屬性的即時撤銷,有效保證方案的可用性。本文通過將部分加解密運算外包給霧節點,減輕了終端設備的計算負擔,提高了系統的計算效率,并且通過仿真實驗對計算開銷進行了有效分析,證明了本文提出的方案相比現有方案具有高效性和可靠性。
本文提出了“云-霧-終端”的三層系統模型,并在此基礎上引入了屬性中心來實現屬性撤銷。
本文的系統模型如圖1所示,此模型由云服務器、霧節點、屬性中心以及終端設備(包括數據提供者和用戶)實體組成。

圖1 本文系統模型
在本文模型中,霧節點為超級基站,其與終端設備之間通過無線網絡連接,而其他實體之間是光纖連接。其各個實體的功能如下:
1)屬性中心。屬性中心負責生成系統公鑰PK和主密鑰MK,公鑰PK公開,屬性中心自己保存MK。生成PK和 MK后,屬性中心可以為用戶進行授權。
2)云服務器。云服務器提供數據存儲和管理功能,包括數據存儲服務器和數據管理服務器兩部分。當有屬性撤銷事件發生時,可以通過重新加密密文,來阻止撤銷用戶的訪問。
3)霧節點。霧節點承擔了部分加解密工作,數據擁有者將部分加密操作外包給霧節點,用戶將部分解密操作外包給霧節點,以此來減輕終端設備的計算負擔。
4)數據擁有者。數據擁有者為需要加密的數據定義一個訪問策略,規定哪些用戶可以訪問,定義授權用戶的范圍,定義訪問策略之后即可加密隱私數據。
5)用戶。用戶在訪問數據時,可以通過霧節點從云服務器下載數據并解密,只有符合訪問策略的用戶可以訪問數據,未授權以及相關屬性撤銷的用戶不可以訪問數據,實現了細粒度的訪問控制。
本文方案包括初始化(Setup)、密鑰生成(KeyGen)、加密(Enc)、重加密(Re-Enc)、解密(Dec)和屬性撤銷(Attribute Revocation)6個步驟。具體算法流程如下:
1)初始化(Setup)
首先屬性中心運行Setup算法,生成階為素數p、生成元為g的雙線性群G0和雙線性映射e:G0×G0→GT,然后生成隨機數h∈G0、α,β∈Zp以及哈希函數H:{0,1}*→G0,最后輸出公鑰PK和主密鑰MK分別為:
PPK=(g,h,gα,gβ,hβ,e(g,g)αβ)
(1)
MMK=(α,β)
(2)
2)密鑰生成(KeyGen)
密鑰生成算法包括私鑰生成算法和屬性組密鑰生成算法兩部分。
(1)私鑰生成(SKGen)
屬性中心運行SKGen算法,選擇一個隨機數γ∈Zp,這是分配給每個用戶的唯一秘密數,然后屬性中心為每個屬性j∈S選擇隨機數ε∈Zp和rj,其中,S為用戶的屬性集,輸出私鑰SK和外包私鑰SK′分別為:
SSK=(D=g(α+γ)β)
(3)
(4)
用戶的外包密鑰SK′發送到霧節點,用戶只存儲SK。
(2)屬性組密鑰生成(AGKGen)
云服務管理器為全體用戶生成二叉KEK樹,如圖2所示。在KEK樹中,每個節點vj被設置一個隨機數KEKj∈Zp,每個用戶ut被分配給樹的葉節點。

圖2 KEK樹
每個用戶ut接收到從其葉節點到樹的根節點的路徑密鑰PATHt。例如,u2的路徑密鑰為PATH2={KEK9,KEK4,KEK2,KEK1}。
3)加密(Enc)
加密算法包括霧節點加密算法和數據擁有者加密算法兩部分。首先數據擁有者定義一個訪問策略Ta,并將Ta發送給霧節點,然后運行霧節點加密算法。
(1)霧節點加密(Fog.Enc)
霧節點運行Fog.Enc算法來執行外包加密。對于訪問策略樹Ta中的每個節點x,霧節點選擇一個多項式px。從根節點R開始,從上到下選擇px。對于樹中的每個節點x,將多項式px的最高次數dx設置為比該節點的閾值kx-1,即dx=kx-1。
從根節點R開始,算法選擇一個隨機數s∈Zp,令pR(0)=s。對于任何其他節點x,設置px(0)=pparent(x)(index(x))。設Y為Ta中的葉節點集,霧節點輸出部分密文CT′:
(5)
霧節點將CT′發送給數據擁有者。
(2)數據擁有者加密(Owner.Enc)
數據擁有者接收到部分密文CT′后,運行Owner.Enc算法。首先選擇隨機數t∈Zp和DK∈Zp,DK被用作對稱密鑰,使用對稱加密算法對數據M進行加密,即C=SEDK(M)。然后計算C1=DK·e(g,g)αβt,C2=gt,C3=C′3·gβt和C4=C′4·hβt。最后,數據所有者輸出密文CT:
CT=(Ta,C,C1,C2,C3,C4,C5)
(6)
數據所有者將密文CT發送給霧節點,霧節點將接收到的密文CT上傳到云服務器上,然后云服務將對密文進行重新加密。
4)重加密(Re-Enc)
在分發數據前,云數據服務管理器首先使用屬性組密鑰Kλy重新加密密文:
(7)
在KEK樹中,選擇可以覆蓋與用戶集Gi關聯的所有葉節點的最小根節點覆蓋集KEK(Gi)。例如,如果Gi={u1,u2,u3,u4,u7,u8},則其最小根結點覆蓋集KEK(Gi)={KEK2,KEK7}。
生成標頭信息如下:
Hdr=(?y∈Y:{Ek(Kλy)}K∈KEK(Gy))
(8)
其中,EK(Kλy)為對稱加密算法。
5)解密(Dec)
解密算法包括霧節點解密算法和用戶解密算法兩部分。
(1)霧節點解密(Fog.Dec)
霧節點從云服務器下載密文后,運行Fog.Dec算法。首先從標頭信息中獲取屬性組密鑰Kj,然后更新其私鑰如下:
(9)
運行DecryptNode算法,這是一種遞歸算法。該算法訪問策略Ta中的節點x,密文CT″和外包密鑰SK″作為輸入。
如果節點x是葉節點,那么設置z=attrx。若z∈S,計算:
(10)
如果Z?S,則DecryptNode(CT″,SK″,x)=⊥。如果節點x是非葉節點,則計算:
e(g,g)rβ·px(0)
(11)
其中,j=index(n),S′x={index(n):n∈Sx}。
如果屬性集S滿足訪問策略Ta,則計算:
F=DecryptNode(CT″,SK″,R)=e(g,g)γβpR(0)=
e(g,g)γβs
(12)
然后,計算霧節點:
B=(e(D1,C3))/(e(D2,C4))=
(e(gγhε,gβ(s+t)))/(e(gε,hβ(s+t)))=
e(g,g)γβ(s+t)
(13)
A=B/F=e(g,g)γβ(s+t)/e(g,g)γβs=e(g,g)γβt
(14)
最后,霧節點發送部分密文T=(Ta,C,C1,C2,A)給用戶。
(2)用戶解密(User.Dec)
用戶從霧節點接收到部分密文T后,運行User.Dec算法,得到對稱密鑰DK:
(15)
最終,應用對稱加密算法可以解密出明文M。
6)屬性撤銷

(16)
標頭信息更新如下:
(17)
此屬性撤銷過程可確保細粒度的訪問控制,例如每個屬性組中能夠實現立即用戶吊銷。此外,它也可以通過在Hdr中選擇性地發送更新的屬性組密鑰,實現立即屬性撤銷。因此,撤銷可以在屬性級別而不是系統級別完成[13]。
屬性基加密方案需要保證數據機密性、抗共謀性和前向/后向安全,基于此對本文方案的安全性進行分析。
1)數據機密性
首先使用訪問策略對數據進行加密,如果用戶不具備滿足訪問策略的一組屬性,則可以保證數據的機密性。在加密階段,盡管霧節點為數據提供者執行加密計算,但由于沒有密鑰,它仍然無法訪問數據。在解密階段,因為屬性集不能滿足密文中的訪問策略,且它們不知道用戶的D值,所以云服務器或霧節點無法恢復值A=e(g,g)γβt以進一步獲得所需的對稱密鑰DK。因此,只有具有滿足訪問策略的有效屬性的用戶才能解密密文。
2)抗共謀性
在本文方案中,屬性中心為不同的用戶生成私鑰,私鑰和隨機數γ有關,與每個用戶都有唯一的關聯,使得不同私鑰中的組件組合毫無意義。假設2個或多個具有不同屬性的用戶組合在一起以滿足訪問策略,他們無法在外包解密階段計算F=e(g,g)γβs。因此,該方案具有抗共謀性。
3)前向和后向安全
在基于屬性的加密算法中,后向安全意味著應該阻止任何持有屬性(滿足訪問策略)的用戶在他持有屬性之前訪問先前交換的數據的明文。另一方面,前向安全意味著禁止任何丟棄屬性的用戶訪問其丟棄屬性后交換的后續數據的明文,除非用戶持有的其他有效屬性滿足訪問策略。在本文方案中,由于不滿足訪問策略的用戶無法解密密文,因此保證了后向安全。屬性被撤銷后,密文經過重加密得到更新,被撤銷用戶無法恢復出屬性組密鑰,因此無法解密密文,從而保證了前向安全。
因為本文方案算法的執行時間主要分布在指數運算和雙線性對運算上,乘法運算量可以忽略不計,所以接下來將分析指數運算和雙線性對運算的計算量。各個算法的計算開銷如表1所示,其中,n表示屬性的總個數,G代表一次雙線性對運算,E代表一次指數運算。

表1 4種算法的計算開銷
本文實驗在ubuntu16.04操作系統下進行,使用處理器為2.40 GHz,Intel Core i5的計算機,利用Charm加密庫來包裝基于斯坦福配對的密碼學(PBC)。Charm加密庫是一個開源庫,執行基于配對的密碼系統的核心數學函數。本文的仿真實驗是在具有對稱雙線性對的橢圓曲線y2=x3+x下對提出的算法和現有算法進行分析比較,并在10~50中選擇屬性數量。
KeyGen算法的運行時間與用戶的屬性集合中元素個數的關系如圖3所示。隨著用戶的屬性集合中元素個數的增加,算法的運行時間也不斷增加。由于本文提出的方案需要在KeyGen階段生成外包私鑰以及屬性組密鑰,因此其運行時間比文獻[13]方案長。

圖3 KeyGen算法計算時間與屬性個數的關系
Enc算法的計算時間與屬性個數的關系如圖4所示。在Enc算法中,本文方案將部分加密工作外包給霧節點,因此其運行時間是常數級別,與訪問策略中的屬性個數無關,而在文獻[13]方案中,Enc算法的運行時間與訪問策略中的屬性個數呈現線性關系。

圖4 Enc算法計算時間與屬性個數的關系
ReEnc算法的運行時間與用戶的屬性集合中元素個數的關系如圖5所示。在ReEnc算法中,本文方案與文獻[13]方案的運行時間相差不大,都隨著屬性個數的增加而增加。

圖5 ReEnc算法計算時間與屬性個數的關系
Dec算法的計算時間與屬性個數的關系如圖6所示。由于在Dec算法中本文方案將部分解密工作外包給霧節點,因此其運行時間是常數級別,與訪問策略中的屬性個數無關,而在文獻[13]方案中,其運行時間與訪問策略中的屬性個數呈現線性遞增關系。解密相較于加密更頻繁,由圖6可知,本文方案的解密時間處于毫秒級,充分體現了本文方案的高效性。通過實驗結果可以看出,由于本文方案將部分加解密操作外包給霧節點,計算開銷總體較低,優于文獻[13]方案,更適合于終端計算資源有限的設備,滿足物聯網環境的應用需求。

圖6 Dec算法計算時間與屬性個數的關系


圖7 Enc算法的通信時間與數據大小和傳播距離的關系



圖8 Dec算法的通信時間與數據大小和傳播距離的關系
針對霧計算環境下屬性基加密機制中訪問權限撤銷管理困難的問題,本文提出基于CP-ABE的屬性撤銷方法。通過將部分加解密運算外包給霧節點,減輕終端設備的計算負擔,提高系統的運算效率。仿真實驗結果表明,相比現有屬性基加密方案,本文方案可靠性更高,滿足實際霧環境中屬性撤銷的應用需求。由于本文僅采用單屬性中心進行授權,工作量較大,因此下一步將對多授權中心問題進行研究。