苗志偉, 巫朝霞
(新疆財經大學 統計與數據科學學院, 烏魯木齊 830011)
隨著物聯網設備產生的數據的激增,云服務器的系統響應時間也隨之出現延遲,因此一種稱為霧計算的新算法就應運而生,允許其在邊緣處理和分析數據,霧節點與云服務器一樣,都是以存儲和計算巨大資源為目的。 然而,不同層次的數據存儲和計算增加了數據隱私的風險。 因此,物聯網環境中的霧云框架需要一種訪問控制機制。
云霧計算不僅可以像傳統的云計算一樣提供存儲和加解密服務,而且還可以通過霧節點將這些服務轉移到離用戶更近的地方,從而降低在資源受限設備上的加解密開銷和系統的響應時間。 2016 年,Peng 等學者[1]針對資源受限的物聯網設備環境下,提出了第一個支持霧計算的CP-ABE 方案,霧節點充當數據所有者、數據使用者和云服務提供商之間的橋梁,以便于在本地設備上執行。 隨后,Fan 等學者[2]提出了一種高效且保護隱私的外包多權限訪問控制方案,用戶的所有屬性都被轉化為匿名的和可驗證的,以實現隱私保護。 Derki 等學者[3]提出了一種可驗證機制和基于屬性的密鑰管理方案來維護細粒度的訪問控制。 該方案中的物聯網設備的執行時間更短,并且可以容忍。 Tu 等學者[4]提出了一種用于資源受限設備的安全數據共享方案。 該方案設計了安全通信協議,利用混沌密碼學中的邏輯映射來生成一次性加密密鑰,并使用該密鑰加密新屬性。隨著密文策略屬性基加密的應用場景不斷變化,其需求也是不斷增長的。
基于此,本文提出了一種云霧環境下支持可追責和可撤銷的屬性基加密方案。 該方案將物聯網數據加解密時涉及的計算代價高昂的操作外包給霧節點進行運算,同時采用了部分策略隱藏以減少霧節點的計算量。 此外,用戶持有一個恒定大小的用戶私鑰,在任何更新期間都保持不變;引入了屬性管理器,可多層次撤銷,提高撤銷效率;該方案通過給定格式良好的解密密鑰綁定用戶身份來跟蹤惡意用戶,無需初始化用戶信息列表用戶信息可以直接加密;該方案確保了單個機構不能代表任何用戶解密密文,抵抗密鑰托管問題。 性能分析表明,該方案對于資源受限的物聯網設備用戶是高效的。
定義1 素數階群下的雙線性映射[5]:p表示大素數,G1,G2與GT表示3 個p階循環群,g與~g則分別表示群G1與G2的生成元。e:G×G→GT表示一個滿足下列條件的雙線性映射:
(1)雙線性:對于任意的u∈G1,∈G2和x,y∈Zp,等式成立。
(2)非退化性:存在g∈G1與∈G2,使得e g,( ) 在GT中的階為p。
(3)可計算性:對于任意u∈G1和∈G2,存在計算e u,( ) 的多項式時間算法。
需要注意的是,若G1≠G2,那么稱其為非對稱雙線性映射,否則為對稱雙線性映射。
二叉樹如圖1 所示。 令N表示完全二叉樹的葉子節點總數,則該二叉樹的節點總數為2N -1。 假設系統用戶集合U={u1,u2,…,uN},用戶的最大數量為Nmax=2d,其中d為完全二叉樹的深度。 系統的屬性集合L={x1,x2,…,xn},設Gi?U,Gi被看作是能夠訪問屬性xi的用戶集合。

圖1 二叉樹Fig. 1 Binary tree
屬性管理器按照如下過程根據完全二叉樹為用戶生成屬性組密鑰的相關參數:
(1)用戶集合U中每一個用戶被指定在二叉樹的葉子節點中,每個節點j都存儲一個隨機值θj。
(2)路徑節點生成算法Path(ui): 對于每一個用戶ui,從葉子節點到根節點上的所有節點被定義為用戶ui的路徑節點。
(3)最小覆蓋集算法Mincs(Gi):對于擁有相同屬性的屬性組Gi, KEK 樹中能覆蓋Gi中所有用戶的最小節點集合為最小覆蓋集[6]。
(4)求Path(ui) 與Mincs(Gi) 的交集:若用戶ui屬性屬于Gi,則交集有且只有一個節點j存儲隨機值θj。
當某一個用戶ui進行私鑰申請時,需要完成以上4 個步驟,且只針對未在撤銷列表的用戶ui擁有的屬性進行多次求交集,而不需要計算其它用戶的交集情況。
本文方案系統一共包含6 個實體。 本文方案的系統模型如圖2 所示。 由圖2 可見,對此方案模型擬做闡釋分述如下。

圖2 本文方案的系統模型Fig. 2 System model of the proposed scheme
(1)中央機構(Central Authority,CA):是一個完全可信的全局認證中心,負責承擔本系統的初始化。
(2)屬性機構(Attribute Authority,AA):主要負責授予不同用戶的訪問權限,生成數據用戶的相關密鑰。
(3)屬性管理器(Attribute Manager,AM):主要負責生成和維護完全二叉樹,生成用戶的屬性組密鑰,也負責重新加密霧節點發送過來的密文生成最終密文。
(4)云服務器(Cloud Server,CS):主要負責密文的存儲,還可以將密文分享給霧節點。
(5)霧節點(Fog Node,FN):霧節點是放置在CSP 和物聯網設備中的實體。 是不完全可信的實體。
(6)數據擁有者(Data Owner,DO):DO 負責數據的部分加密,本系統中DO 是不可信的。
(7)數據用戶(Data User):當用戶申請訪問數據時,DU 向霧節點發送訪問請求,將會得到霧節點返回的半解密文,用戶利用個人私鑰最終可以解密得到明文。
(1)全局初始化GlobalSetup(λ) →{GP,uid,R}:算法輸入一個安全參數λ,生成全局公共參數GP,其中G和GT是2 個階為素數p的循環群,g是G的生成元,e:G × G→GT。 CA 隨機選取α,a∈Zp,h∈G并計算Y =e(g,g)α:GP={G,GT,g,Y,ga,h,H}。 選擇一種對稱加密方案(Enc ,Dec)[7],隨機選擇對稱加密密鑰k∈Zp,加密任意長度比特串 0,1{ }*得到屬于Zp的密文。 并且,中央機構為注冊成功的用戶生成全局唯一的身份標識uid,初始化一個空的撤銷列表R。
(2)屬性機構初始化AuthoritySetup(GP) →{APK,ASK,V,{PK}vx∈V}: 屬性機構AA 將管理的屬性集合劃分為屬性名集合以及屬性值集合。 這里,AA 定義屬性名集合為cV,每個屬性名對應的屬性值集合定義為Vi={vx},i∈cV,x∈wi,其中wi表示屬性名i對應的屬性值集合,屬性值集合為V =Ui∈cV Vi。 AA 選取隨機數β∈Zp,對于任意屬性值vx∈V,隨機選取群元素hvx,hvx∈G。 最后生成屬性密鑰和AA 的公私鑰對: {PK}vx∈V =hvx, APK ={e(g,g)β,hvx},ASK={a,β,α}。
(3) 屬 性 管 理 器 初 始 化AMSetup(T,U,L,GP) →{MPK,MSK}:該算法以二叉樹T,用戶集合U,系統屬性集合L和公共參數GP為輸入。 其中,T為完全二叉樹,u∈U,完全二叉樹的深度為d。由完全二叉樹的結構可知,用戶數目最多為|U |=2d,樹種的節點數目總共為|L |=2|U |-1。 對于樹中的每一個節點,隨機選擇,并計算Ti =gti。 輸出AM 的公私鑰:MPK={Ti |1 ≤i≤|L |},MSK={ti |1 ≤i≤|L |}
(4)私鑰生成階段。 首先屬性機構通過算法生成與屬性集合相關的屬性私鑰,然后屬性管理器通過算法生成屬性組密鑰。
① 屬 性 密 鑰 生 成AAKeyGen(GP,ASK,{PK}vx∈V,MPK,Suid) →{PxK,SK,KEK′}: 假設用戶擁有屬性集Suid=(cuid,v*),其中cuid?cV,v*={vi |vi∈Vi,i∈cuid} 分別表示用戶屬性名和需要隱藏的屬性值。 AA 選取一個全局唯一的隨機數,計算和c =Enck(id),令c為追蹤因子。 其中,id是與用戶u在二叉樹上相關聯的節點值。 對于i∈cuid計算:PxK=(k′ =c,k=gzuid),KEK′={atti,keki}i∈[1,|L|],SK =zuid。
其中,屬性機構AA 將代理密鑰PxK發送給霧節點,并通過安全信道將個人私鑰SK 發送給用戶。
②屬 性 組 密 鑰 生 成FNKeyGen(GP,Suid,KEK′) →KEK:對于每一個屬性xi∈Suid,霧節點計算ηi∈Path(u) ∩Mincs(Gi),然后判斷ηi是否為空。 如果ηi =?,霧節點停止計算;如果ηi≠?,霧節點計算, 其中節點隨機值θj,Path(u)={i1,…,ij,…,iid},i1為二叉樹的根節點,iid是完全二叉樹與數據用戶u相關聯的葉子節點值,ij =j。 最后輸出屬性組密鑰KEK={xi,j,keki,KEKi}i∈[0,d]
(5)數據加密階段:首先,數據所有者通過對稱密鑰加密算法,使用內容密鑰ck加密文件M,生成Eck(M)。 然后,定義一個應用于其上的訪問策略W,并將其發送到指定的霧節點中,霧節點在其中重新加密密文策略下的部分密文。
①DO.Encrypt(GP,ck,APK,W)→CT1:數據擁有者根據訪問控制策略W=(A,ρ,τ),其中A為l ×n的矩陣,l為訪問策略中涉及的屬性總數。 定義一個函數ρ將矩陣中每一行都映射到的屬性名cuid中,每個屬性名只能出現一次。τ=(tρ(1),tρ(2),tρ(3),…,tρ(l)) ∈Zlp表示屬性名對應的屬性值。 數據擁有者隨機隨機選擇s1∈Zp,計算CT1=(W,Eck(M),C=ck·Ys1,C0=gas1,
②FN.Encrypt(GP,{PK}vx∈V,M,W) →CT′:霧節點隨機選擇秘密值s∈Zp和一個隨機向量=(s,v2,v3,…,vn) ∈, 其中隨機數v2,v3,…,vn是用來共享秘密值s。 對于i∈[1 ,l],霧節點分別計算λi =Ai·,其中Ai表示矩陣A的第i行。 然后,計算密文組件C1=gs1gs,。 最后,輸出密文
③AM.Encrypt(GP,FSK,CT′,R)→{CT,Hdr}:屬性管理器對于?i∈[1 ,l],隨機選擇ri∈Zp并調用Mincs(Gi) 算法計算該屬性對應屬性組的最小覆蓋集,然后重新加密密文CT′獲得密文CT。 另外,其計算密文頭Hdr,最后AM 將(CT,Hdr) 上傳至云服務器進行存儲,即:
(6) 霧 節 點 解 密FN.Decrypt(PxK,CT,Hdr,KEK) →B:當數據用戶發出訪問數據的請求時,霧節點判斷用戶是否滿足部分隱藏后的訪問控制策略。 如果滿足,霧節點利用代理密鑰為其完成屬性名認證操作,輸出半解密密文,否則返回⊥。 該算法的輸出存在以下2 種情況:
①情況1。 若用戶的身份u∈R,則輸出⊥。
②情況2。 若用戶的身份u ?R,對于滿足部分隱藏訪問策略的用戶,可以借助矩陣A的逆,求出一組常數量wi∈Zp, 使得∑wi λi =s, 其中i∈[1 ,l]。 輸出的半解密密文如下:
(7)用戶解密(Decrypt(CT,B,SK)→M):身份認證成功以后,數據用戶DU 可以利用用戶私鑰執行,然后使用相同的ck來解密Eck(M) 獲得消息M。
(8) 密 鑰 完 整 性 檢 查KeySanityCheck((GP,APK,PxK) →True or False):中央權威機構運行該算法,評估解密密鑰是否需要跟蹤。 如果懷疑解密密鑰PxK, 則算法將檢查解密密鑰是否滿足KeySanityCheck,該算法由3 部分組成:k′∈Zp,k,L,L′,Di,D′∈G,e(g,L)= e(g,g)β·e(h,L′) ≠1,?i∈cuid,s.t.e(hvi,D′)= e(g,Di)·e(g,g)βk′≠1。 如果解密密鑰PxK滿足上述3 個公式,則算法輸出True;否則,算法輸出False。
(9)追蹤認責(Trace(GP,R,PxK) →u or⊥):該算法由權威機構執行。 如果解密密鑰PxK不能通過KeySanityCheck, 輸出⊥。 否則,算法執行如下操作:首先計算Deck(id) 來恢復與用戶u相關聯的葉子節點值id。 然后,在二叉樹中搜索值為id的葉子節點,檢索屬性機構輸出與id相關聯的用戶u。 如果不存在這樣的節點,則輸出⊥。
(10)用戶撤銷:當接收到更新的撤銷列表R′后,根據用戶uid檢索代理密鑰列表,刪除被撤銷用戶對應的代理密鑰和個人私鑰。 霧節點就不能進行部分解密工作,用戶也不能解密恢復內容密鑰。
①屬性撤銷:當用戶ui的屬性xx被撤銷后,可以更新屬性組為G′x對應的其他未撤銷用戶的相應KEK,并且與撤銷屬性相關聯的密文也將重新加密。
④更新密文頭:
最后輸出更新后的密文和密文頭,并存儲到云服務器上。
在ABE 方案中,2 個或多個數據用戶可能會嘗試對其屬性鍵進行分組,以恢復各用戶無法單獨解鎖的文件。 因此,在本文方案中,AA 為每個用戶生成密鑰,該密鑰由用戶特定的隨機值zuid隨機化。即使2 個用戶嘗試組合其屬性鍵,也無法獲得e(g,g)αs1/zuid,因為這2 個用戶的zuid都是唯一的??赡馨l生共謀攻擊的另一個例子是被撤銷的用戶和不具有足夠屬性的現有用戶共同攻擊,在該方案中,AA 和AM 分別生成的屬性密鑰ASK 和KEK,這使得2 個不同用戶的2 個不同密鑰的組合沒有意義。因此,本文方案是抗共謀攻擊的。
在該方案中,一旦從用戶中刪除屬性,AM 將重建主密鑰的組件和被撤銷屬性公鑰的相應組件。 其重新定義了KEK 和組件ri,通過隨機選擇的秘密s′重新加密用秘密s加密的相關密文,并且還用更新的ri和相關聯的密文頭Hdr。 在這種情況下,被撤銷的用戶將無法恢復消息,因為密文被s′重新加密,并且該方案被構造為使得被撤銷用戶不可能確定e(g,g)α(s+s′)。 因此,被撤銷的用戶決不可能進一步解密出由被撤銷屬性組成的訪問策略加密的消息,從而實現了前向保密。 當新用戶加入系統時,用戶的屬性集中將會包含一個新屬性。 AM 根據更新后屬性組信息去為該特定用戶生成與新添加的屬性相關的關鍵組件,從而保證了該方案的后向安全性。
用戶生成密鑰的機構惡意使用這些密鑰并代表用戶解密消息(稱為密鑰托管問題)。 因此,在該方案中,用戶的解密密鑰是由AA 和AM 分別生成的,因此都不知道完整的密鑰。 實體AA 生成解密密鑰APK和ASK, 而AM 生成KEK。 在該方案中,密鑰APK、ASK和KEK是獲得內容密鑰ck所必需的,因此AA 或AM 不能單獨解密消息,保證了針對實體AA、AM、霧節點、CSP 和未授權用戶的數據保密性。
對本文所提出方案進行了全面的性能分析,并在功能、計算和存儲開銷方面與文獻[6]、[8]、[9]、[10]的相關工作進行了討論。 不同方案系統功能對比結果見表1。
在表1 中,討論了功能的對比,文獻[8]和文獻[9]所提出的方案支持訪問策略隱藏。 因此,由訪問策略導致的隱私泄漏被減少到最小。 文獻[8]支持可追溯性和撤銷,但與本文方案相比該方案不支持霧計算環境和抗密鑰托管性,因為被撤銷的用戶和授權用戶可以通過組合相關的密鑰來解密密文,而單獨地卻無法解密。 文獻[9]和文獻[10]均實現了抗密鑰托管,但沒有實現可追溯性,當密鑰泄露給第三方時無法追蹤到惡意用戶。 此外,本文方案和文獻[6]支持外包解密期間涉及的所有昂貴操作,但文獻[6]的訪問策略任務仍會給資源受限的設備帶來沉重的計算負擔。 由此可以觀察到,僅有本文方案同時解決了云霧系統中多個方面的問題。

表1 不同方案系統功能對比Tab. 1 System function comparison of different schemes
所提方案和文獻[8-10] 方案中Encrypt、Decrypt 算法的性能和時間成本比較。 圖3、圖4 比較了加、解密算法的時間成本。 由圖3、圖4 可以看到,在本文方案中,無論屬性的數量如何,所有者的加密時間和用戶的解密時間都基本上更少且恒定,而在文獻[8-10]中,隨著屬性的數量線性增加。

圖3 加密時間分析Fig. 3 Encryption time analysis

圖4 解密時間分析Fig. 4 Decryption time analysis
從以上討論可以推斷,在數據所有者加密、數據用戶解密、屬性撤銷和惡意用戶追蹤期間,所提方案要比其余方案更為高效。 此外,本文方案對資源受限的數據用戶分配了非常小且恒定的存儲開銷。
本文提出了一種云霧環境下可追責可撤銷的數據安全共享方案,用于使用CP-ABE 的物聯網環境。將LSSS用作訪問策略,用戶屬性表示為屬性名和屬性值,其中屬性值用于加密,因此密文相關訪問策略僅包含屬性名稱以滿足部分隱藏策略。 本文方案可以基于用戶解密密鑰中的追蹤因子來跟蹤用戶,確保了該方案實現白盒的可追溯性,然后通過使用與用戶信息相關聯的二叉樹的葉節點值來撤銷用戶。 本文所提出的方案安全且高效,適用于資源受限的物聯網設備。