杜瑞忠,閆沛文,劉妍
(1.河北大學網絡空間安全與計算機學院,河北 保定 071000;2.河北省高可信信息系統重點實驗室,河北 保定 071000)
云計算通過基礎設施向用戶提供服務,為應用提供彈性資源,但云計算提供的資源主要集中在遠離用戶的核心網絡中,這導致用戶和云之間交互信息時會產生時延。隨著用戶對低時延的需求越來越高,霧計算作為云計算的延伸被提出[1]。霧計算將云服務與靠近網絡邊緣的分布式資源相結合,使存儲和數據處理等貼近網絡邊緣設備,可以提供外包計算、資源分配和緩存等多種服務[2-4],有效緩解了云計算中存在的時延問題,在智能醫療、智慧城市等對低時延需求較高的領域被廣泛應用[5-6]。
霧計算更貼近終端用戶,數據中包含大量用戶隱私信息,由于存在虛假節點惡意獲取數據的情況,因此需要一種霧計算環境下高效的訪問控制方案[7-8]。在霧計算中,邊緣設備基于密文策略的屬性加密(CP-ABE,ciphertext policy attribute based encryption)是實現細粒度訪問控制的技術之一,數據所有者根據屬性對數據進行加密,而不需要知道用戶的確切身份,只有滿足屬性的用戶才能對數據進行訪問。CP-ABE 多采用門限秘密共享方案,需用多項式插值法來重建秘密,其解密階段配對和求冪開銷較大的計算,給霧計算中資源受限的邊緣設備帶來計算瓶頸。另外,霧計算中邊緣設備的屬性會頻繁變化,為防止用戶使用更新前屬性密鑰進行訪問,需要建立有效即時屬性撤銷機制以提高其靈活性。
為了解決上述問題,本文提出了一種霧計算中細粒度屬性更新的外包計算訪問控制方案;結合霧計算的特點,建立了云-霧-用戶分層的訪問控制架構,用戶通過霧節點與云進行交互;采用CP-ABE技術實現數據機密性和細粒度訪問控制,并設計安全高效的外包加解密方案,將加密和解密中繁重的計算外包給霧節點,使用模加法技術構建訪問控制樹,避免了多項式插值法產生的計算開銷,使加密、密鑰生成和解密階段的計算量更少,減少數據所有者和數據用戶的計算負擔;在霧節點建立組密鑰二叉樹生成屬性組密鑰,用戶提交訪問請求時對密文進行重加密,實現了屬性的細粒度更新與即時撤銷。通過霧節點對用戶進行管理,減小了組密鑰二叉樹規模與更新私鑰的用戶數量,并在更新時將屬性組內用戶標記為未更新用戶,避免了頻繁更新私鑰的冗余操作,提升了屬性更新效率;對方案進行仿真實驗對比,實驗結果表明,用戶加解密時間消耗較小且穩定,外包解密階段耗時更少,屬性更新時的效率更高。
本文主要的研究工作如下。
1) 建立更適用于霧計算的云-霧-用戶分層的訪問控制架構,霧節點對用戶進行管理,用戶必須通過霧節點與云進行交互。
2) 改進模加法機制構建訪問控制樹,降低計算開銷,利用外包加解密思想和重加密機制設計了一種霧計算環境下細粒度屬性更新的外包計算訪問控制方案。
3) 進行安全性分析,基于決策雙線性Diffie-Hellman 假設,證明了所提方案滿足明文攻擊安全。通過仿真實驗分析與其他方案在各階段運行時間進行對比,所提方案在滿足安全性前提下,效率更高。
2007 年,Bethencourt 等[9]首次提出CP-ABE 方案,之后其被廣泛應用于云存儲環境中數據的細粒度訪問控制[10-11],但由于加解密的計算開銷隨著訪問結構中屬性的數量線性增加,該方案效率較低且不適用于資源受限的邊緣設備。Ibraimi 等[12]提出了一種高效的CP-ABE 算法,該算法使用模加法一致同意控制方案(UCCMA,unanimous consent control by modular addition)建立訪問控制樹,避免多項式插值法的計算開銷。為了進一步提高效率并減小用戶負擔,將加解密階段的復雜計算進行外包[13-14]。Jin 等[15]以文獻[12]為基礎,設計了安全輕量級的訪問控制方案用于移動云計算,引入加密服務提供商(ESP,encryption service provider)和解密服務提供商(DSP,decryption service provider)降低加解密過程中的計算開銷,在實現系統高效性的同時,將移動設備大部分計算外包給ESP 和DSP,使移動設備可以有效地對存儲在云端的數據進行訪問和管理。Green 等[16]改進了ABE(attribute based encryption)外包系統中的密鑰生成算法,使用盲密鑰技術生成轉換密鑰并發送給第三方代理,將滿足訪問策略的密文轉換為簡單密文,使明文恢復所需開銷較小。為解決外包計算的正確性問題,Mao等[17]和Kumar等[18]提出了基于屬性的可驗證外包解密的訪問控制方案,外包計算后驗證了數據的正確性,用戶解密密文時只需要進行恒定數量的計算。外包計算的訪問控制方案得到了廣泛應用,Kibiwott 等[19]提出了基于云的電子健康大數據系統訪問控制方案,通過cloudlet 服務器進行外包計算,實現了機密性和數據完整性。但以上外包計算方案沒有考慮屬性撤銷問題,在動態性較強的霧計算中并不適用。
在CP-ABE 方案中,為防止用戶使用過期的屬性密鑰,必須使用密鑰撤銷機制。Al-dahhan 等[20]通過管理聯合屬性集存儲數據,提供策略更新和密鑰失效2 種技術來消除共謀攻擊,并解決密鑰撤銷問題,但密鑰維護代價和計算復雜度高。Zhang 等[21]提出了一種霧環境下外包加密和屬性更新方案,在屬性更新時,所有擁有該屬性的用戶必須對屬性密鑰進行更新,對未撤銷屬性進行大量計算,這會大大降低屬性更新的效率。為了避免撤銷屬性時密鑰的大量更新,Chen 等[22]在方案中引入衰落函數,使屬性密鑰可以隨時間進行動態更新,需要為每個屬性設置生存周期,但選取合適的生存周期是一個難題,且衰落函數存在產生沖突的情況。Hur 等[23]提出了一種建立二叉樹對密文雙重加密的方法,龐大的設備數量會導致二叉樹的維護開銷較大。Liu等[24]將用戶身份信息分配給葉子節點信息以跟蹤惡意用戶,并通過將惡意用戶添加到吊銷列表和更新密文,實現對惡意用戶的撤銷操作。張凱等[25]提出了高效撤銷的多機構訪問控制方案,將撤銷列表嵌入密文對用戶的整體屬性進行撤銷,但無法對部分屬性進行撤銷操作,存在撤銷粒度較粗的問題。以上方案雖然解決了屬性撤銷問題,但目前屬性密鑰撤銷仍然給系統帶來較大的開銷。
綜上所述,傳統的訪問控制方案效率較低,并缺乏高效的屬性撤銷方法。為此,本文提出了霧計算中細粒度屬性更新的外包計算訪問控制方案,在保障安全的前提下,降低用戶開銷,提升屬性更新效率。
G,GT是2 個階為P的循環群,g是G的生成元,雙線性映射e:G0×G0→GT滿足以下性質。
1) 雙線性:對任意u,v∈G0和a,b∈Zp,都有e(u a,vb)=e(u,v)ab。
2) 非退化性:存在u,v∈G0使e(ua,vb) ≠ 1。
3) 可計算性:對于任意的u,v,存在一個有效的算法計算e(u,v) 。
令根節點為r的訪問控制樹T描述訪問控制策略,該策略指定了在解密密文時需要的屬性組合。T中的每一個內部節點都是邏輯運算符,例如AND、OR。每個葉子節點都表示一種屬性。屬性可以是定義、分類或注釋用戶的任何描述性字符串。根據秘密共享的思想,訪問樹的每個節點表示一個秘密。在加密階段需要自頂向下遞歸地為每一個節點分配一個秘密。而在解密階段,需要自底向上回復根節點的秘密。
在秘密分享方案中,發放者將一個秘密S分割成t份,需要所有的分割部分才可以重新構造出S。為了共享秘密S(0≤S≤p-1),發放者生成t-1個隨機數Si,即1≤Si≤p-1,1≤i≤t-1,同時。秘密S通過進行恢復,將Si分享給Pi個參與方,1≤i≤t。對每一個參與者Pi,得到的是0~p-1 的隨機數,因此,除了發放者之外沒有任何一方知道關于秘密S的任何信息。
決策雙線性Diffie-Hellman(DBDH,decision bilinear Diffie-Hellman)問題的定義如下。挑戰者根據安全參數選擇一組階為素數p的G0。讓g作為生成元,選取隨機數a,b,s∈Zp。如果挑戰者給予對手(g,g a,g b,gs),對于對手來說,將很難區分有效的元組e(g,g)abs∈GT與隨機元素R∈GT。
一個概率性多項式時間算法Q能夠以優勢ε求解DBDH 問題,當且僅當滿足

如果概率多項式在解決DBDH 問題上的優勢可以忽略不計,則DBDH 假設成立。
本文為解決霧計算中用戶加解密開銷大、屬性更新效率低的問題,設計了云-霧-用戶分層的系統模型,主要由5 類實體組成,系統結構如圖1所示。
云服務提供商(CSP,cloud service provider)。CSP 提供數據存儲等方面的服務,在本文方案中假設CSP 可信。
霧節點。霧節點提供計算、存儲等服務,負責對密文進行外包加解密計算,生成組密鑰對密文進行重加密,并在未更新用戶提交訪問請求時,更新其私鑰。

圖1 系統結構
數據所有者(DO,data owner)。DO 是有文件要上傳到云端存儲的用戶,為文件定義訪問結構,然后生成部分密文發送到霧節點。
數據用戶(DU,data user)。DU 是訪問存儲在CSP 中的文件的用戶,當數據用戶的屬性集滿足嵌入給定密文中的訪問結構時,可以從密文中解密文件。若用戶被標記為未更新用戶,在請求訪問時需要先更新私鑰。
可信權威機構(TA,trusted authority)。TA 是完全受信任的一方,遵循協議規范執行分配任務,然后輸出正確的結果,主要負責處理用戶注冊,為每個系統用戶生成系統參數和密鑰SK,向霧節點發送屬性更新信息。
本文系統由系統初始化(Setup)、私鑰生成(KeyGen)、數據加密(Encrypt)、組密鑰生成(GKeyGen)、密文重加密(reEncrypt)、私鑰更新(upGKeyGen)、密文解密(Decrypt)幾個算法構成。
1) 系統初始化Setup(1k,L)→(PK,MSK)。初始化階段輸入安全參數k和屬性域L={a1,a2,…,am},進行運算獲得系統的公鑰PK 和主密鑰MSK。
2) 私鑰生成KeyGen(MSK,S)→SK。私鑰生成算法通過輸入主密鑰MSK,以及私鑰所包含的屬性集合S,計算得到私鑰SK 并發送給用戶。
3) 數據加密Encrypt。為了獲得較高的加密效率,DO 首先使用隨機密鑰ck 對指定文件進行加密,然后使用對稱加密算法對ck 進行加密,該算法包含以下2 個子算法:DO 在本地運行DO.Encrypt,霧節點運行外包加密算法Fog.Encrypt。
DO.Encrypt(PK,ck,A)→C1T,算法輸入PK、ck 和訪問結構A,然后輸出部分密文C1T,最后DO將C1T 發送給霧節點。
Fog.Encrypt(PK,CT1)→CT,該算法輸入PK 和CT1,然后輸出密文CT 并發送給CSP。
4) 組密鑰生成GKeyGen(a1,a2,…,am)。該算法輸入屬性域L={a1,a2,…,am}給霧節點,霧節點為用戶生成二叉樹τ并推算出組密鑰Ej(1 ≤j≤m)。
5) 密文重加密reEncrypt(Ej,CT) →CT′。霧節點收到數據用戶訪問請求后,從CSP 獲取密文CT,利用生成的組密鑰Ej(1 ≤j≤m)與密文CT 進行運算,得到重加密密文CT′。
6) 私鑰的更新upGKeyGen(iE,SK) SK′→。用戶通過計算得到組密鑰Ej,與SK 中對應的屬性私鑰進行更新運算,得到新私鑰SK′。
7) 密文解密Decrypt。霧節點接受用戶發來的部分密鑰SK′,與重加密之后的'CT 進行計算得到T,并發送給用戶。如果用戶的密鑰滿足訪問結構A,則運行以下算法得到ck,該算法包括2 個子算法:霧節點運行外包解密算法Fog.Decrypt,用戶執行本地子算法User.Decrypt。
Fog.Decrypt(PK,CT′,SK′)→T。輸入PK、CT′和SK′,通過計算輸出結果T,并將其發送給DO。
User.Decrypt(T,SK)→ck。使用T和SK 進行計算,生成密鑰ck。
因此,使用 ck 通過對稱解密算法將得到文件。
本節描述了霧計算中細粒度屬性更新的外包計算訪問控制方案的具體結構。霧計算應用對低時延有較高需求,因此降低用戶計算復雜度和提高屬性更新效率成為用戶的重要需求。首先,本節提出一種安全外包加解密方法,以減少用戶在訪問控制過程中的計算負擔。外包方法主要是將加密和解密階段所有訪問結構和屬性相關的操作外包給霧節點,留給數據所有者和數據用戶執行少量操作。然后,利用重加密機制在霧節點和用戶之間構建一個組密鑰二叉樹τ,隨機生成樹中的節點密鑰,并生成組密鑰,當用戶的屬性要增加或者撤銷時,僅需改變屬性的組密鑰即可實現屬性的細粒度更新。
假設系統中擁有m個屬性并表示為L={a1,a2,…,am},將用戶所屬霧節點設置為一種屬性。e:G0×G0→GT為雙線性映射,G0為素數階p以g為生成元的雙線性群。哈希函數H:{0,1}*→G0,將任意屬性映射到G0的一個隨機元素上,具體細節如下。
階段1系統初始化Setup
Setup(1k,L)→(PK,MSK)。系統定義階為p、以g為生成元的雙線性映射群e:G0×G0→GT,隨機選取參數α∈Zp,對任意a j∈L選取一個隨機數vj,計算PKj=gvj,設置霧節點屬性值為Afg∈Zp,最后得到公鑰與主密鑰。

階段2私鑰生成KeyGen
KeyGen(MSK,S)→SK。該算法首先隨機選擇r=Z p,r是分配給每個系統用戶的唯一密鑰;然后,選取隨機數y∈Zp,將霧節點屬性標記為Dfg,計算私鑰。
階段3數據加密Encrypt
在文件M上傳到CSP 之前需要進行的步驟如下。
1) DO.Encrypt(PK,ck,A)→C1T。DO 定義一個訪問結構A,并隨機選取密鑰ck,用對稱加密算法對M進行加密,加密后的密文表示為Eck(M)。DO隨機選擇S'∈Zp,計算=cke(g,g)βs'。輸出密文CT1={A,Eck(M),=ck(e g,g)βs′C=gs′}。用戶DO 發送CT1給霧節點。
2) Fog.Encrypt(PK,CT1)→CT。霧節點根據收到的訪問結構A建立訪問控制樹T,如圖2 所示,為T的根節點賦值為S,隨機選擇Sfg∈Zp將其作為根節點的右子樹,其他子節點標記為未賦值,對于每個未賦值的非葉子節點遞歸地執行以下操作。
如果運算符是AND 且它的子節點未賦值,使用模加法方案為每個子節點賦值,對于除了最后一個子節點之外的每一個節點賦值為隨機數Si(1 ≤Si≤p-1),將最后一個子節點賦值為。
如果運算符是OR,為每一個子節點賦值S。T樹中葉子節點的值用來生成密文。為每一個葉子節點屬性a∈T,計算屬性密鑰C=gvjsi,i為訪問樹的索引屬性,對于給定的訪問結構,索引值被唯一地以排序的方式分配給節點。

圖2 訪問控制樹

最后通過計算得到
階段4組密鑰生成GKeyGen
組密鑰二叉樹τ的構成原理如下。霧節點根據管理用戶構建二叉樹τ,如圖3 所示,將所有用戶分配到葉子節點,并為τ中的每一個節點生成一個節點密鑰un,m∈Zp,用戶葉子節點到根節點通過的節點稱為路徑節點,用戶存儲路徑節點的節點密鑰。霧節點為屬性定義一個公開參數γj∈Zp,根據屬性所對應的用戶組,找到包含用戶的最大覆蓋子樹,建立組密鑰Ej={V1,1,V2,1,…,Vn,m||γj},通過門限法將Ej設置為(S,2)秘密共享,推算出Ej。假設屬性ωj的用戶組為{u1,u2,u3,u4,u7,u8},在組密鑰二叉樹中的最大覆蓋節點為{V2,1,V3,4},則屬性ωj的組密鑰為Ej={V2,1,V3,4||γj}。

圖3 屬性組密鑰二叉樹
階段5密文重加密reEncrypt
當用戶向霧節點請求訪問數據后,霧節點從CSP 獲取密文CT,然后通過組密鑰Ej對CT 進行重加密,計算得到

階段6密鑰更新upGKeyGen
霧節點接收到DO 的訪問請求之后,如果數據用戶被標記為未更新用戶。霧節點將其需要更新屬性路徑節點所在二叉樹層數發送給用戶。門限方案中Ei設置為(S,2)秘密共享,只要知道兩部分就可以計算出組密鑰Ei,由于γi是公開的,因此只要屬性覆蓋用戶組內包含該用戶,便能夠計算出Ei,DO 利用E進行計算,=,則更新之后的私鑰為

階段7密文解密Decrypt
如果用戶擁有的屬性滿足訪問結構A,則運行下面的解密算法解密CT,獲得內容密鑰ck,用戶可以使用ck 解密Eck(M) 并獲得明文M,由于密文和密鑰進行雙線性配對操作需要大量的計算開銷,因此解密的計算開銷非常大,為了減少用戶的計算開銷,將這些操作外包給霧節點。該解密算法分為外包解密算法Fog.decrypt 和User.Decrypt。
1) Fog.Decrypt(PK,CT′,SK′)→T。霧節點從用戶接受部分密鑰SK''={D'=g y,D''=gyr,?aj∈S:D=grv-j1E-j1,D=grAfg-1}對私鑰中的D與重加密后的CT′中的Cj,i進行如下運算

霧節點接著計算

將得到的T={Eck(M),C~=cke(g,g)αs′,C=g s′,ω}發送給用戶。
2) User.Decrypt(T,SK')→ck。用戶收到霧節點發送的T,與私鑰SK'計算得到ck。

因此,使用ck 通過對稱解密算法將得到M。
1) 屬性添加與撤銷
當用戶屬性進行添加或撤銷時,霧節點根據更新后用戶葉子節點重新尋找其最大子樹的根節點,運行GKeyGen 算法完成組密鑰的更新。用戶添加或撤銷新的屬性jω時,TA 將屬性的更新信息發送給霧節點,霧節點根據更新后屬性jω包含的用戶組,尋找能覆蓋所有用戶的最大子樹節點,根據組密鑰的構成方法計算得到新Ej′。將其他擁有屬性jω的用戶標記為未更新用戶,當未更新用戶向霧節點發送訪問請求時,進行私鑰更新,避免在屬性頻繁更新時,給用戶帶來冗余操作。屬性jω的組密鑰更新不會影響其他霧節點域內屬性的組密鑰,僅需要該霧節點域內持有該屬性的用戶更新私鑰,減小了更新所帶來的操作開銷。
2) 用戶整體變更
對用戶的變更分為用戶加入與撤銷,可以看作向新用戶分配屬性和將老用戶的所有屬性進行撤銷。因此,用戶的整體變更可以歸納為對屬性更新。
①當用戶節點加入系統時,將用戶分配到空葉子節點,為用戶生成組密鑰,并對用戶私鑰進行更新。
② 當用戶節點離開系統時,則修改用戶從葉子節點到根節點的所有密鑰鏈。首先霧節點生成隨機數Vtmp∈Zp,Vtmp與密鑰鏈節點進行XOR 操作生成新的節點密鑰;完成更新的節點將其節點密鑰通過廣播加密的方式發送給其子樹的葉子節點。
在所提霧計算中細粒度屬性更新和外包計算訪問控制方案中選擇明文攻擊安全模型,基于DBDH問題進行安全性分析。設G,GT為2個階為P、生成元為g的雙線性群,雙線性映射e:G0×G0→GT。模型生成(g,g a,g b,g s,Z),其中a,b,s,θ∈,設置參數?∈{0,1},一個隨機元素R∈GT,當參數?=0時,Z=e(g,g)abs;否則Z=R。
定理1如果故手A 能夠在一個概率多項式時間內以不可忽略的優勢ε>0 求解,那么算法φ能夠區分一個DBDH 元組和一個隨機元組,并且優勢為ε/2。
證明敵手A 和挑戰者B 執行操作如下。
初始化敵手A 定義訪問控制樹T*,并發送給挑戰者B。
系統設置挑戰者B 對系統進行初始化,B 選擇一個隨機數χ′∈Zp,計算α=χ′+ab。設置u=e(g,g)α=e(g,g)χ'e(g,g)ab。對每一個屬性a j∈L,B 選擇隨機數sj,如果a j∈T*,則v j=;如果a j?T*,則v j=sj。最后B 將公鑰PK={G0,g,u,{PKj|a j∈L}}發送給敵手A。

挑戰階段敵手A 向挑戰者B 發送長度相同的兩段信息m0和m1,B 選擇一個值S′∈Zp,隨機選取參數?∈{0,1},通過執行Encrypt 和reEncrypt 算法對信息m?進行加密。B 構造密文CT1中的和C。

然后,將CT1發送到霧節點,霧節點設S為訪問控制樹T*的根節點的值,根據訪問控制樹T*的構造方法對每個葉子節點屬性aj,i∈T*,計算C=gvjsi,gs,則C'=g s'gs=Sgs,C=gAfgSfg得j,ifg到密文CT,霧節點運行重加密算法將CT 更新為

挑戰者B 將密文返還給A。
階段2同階段1,敵手A 可以繼續向挑戰者B 進行詢問。
猜測游戲中如果?'=?,挑戰者B 輸出0,表明Z=e(g,g)abs;否則,B 輸出1,表明Z=R。當Z=e(g,g)abs時,A 獲得有效的密文,則A 的優勢為

當Z=R時,A 無法獲得任何明文信息,即

因此,φ的優勢為

在以上挑戰過程中,假設DBDH 成立,如果沒有敵手在多項式時間內完成,則本文方案是滿足選擇明文攻擊安全的,且該方案具有前后向安全性、抗共謀安全性。
1) 在本文方案屬性更新機制中,當添加或者撤銷用戶屬性時,霧節點運行GKeyGen 算法更新組密鑰得到Ej',再運行upGKeyGen 算法對用戶私鑰進行更新得到SK',因為在門限方案中將E′j設置為(S,2)秘密分享,在該屬性用戶組內的用戶可以利用Lagrange 插值得出組密鑰,所以已撤銷屬性的用戶無法推出;同理,添加屬性的用戶也無法通過,在霧節點進行外包解密計算FR時,。因為組密鑰無法匹配問題,無法計算得到 (,)rsL e g g,便無法對密文進行解密,所以本文方案滿足前向后向安全性。
2)DO設置訪問結構A對文件進行加密,只有DU 的屬性S∈A時才能解密cke(g,g)βs'。假設多個未滿足訪問結構的用戶相互勾結交換密鑰,組成了滿足訪問結構中的屬性集。根據密鑰生成KeyGen算法,不同用戶的身份標識r都是隨機數,則產生不同的私鑰D j=grv-j1,若互相勾結的用戶身份表示分別為r1,r2,通過計算得到FR=e(g,g)r1r2sL,A=e(g,g)r1r2s,便無法推出e(g,g)rs',所以仍然無法對密文進行解密。因此,方案具有抗串謀攻擊性。
證畢。
在性能分析中,對本文方案在理論上和實驗上進行分析,證明其可行性。將本文方案與其他方案進行功能比較,結果如表1 所示。

表1 功能比較
在理論分析中,將本文方案與其他方案在性能和計算開銷方面進行了比較。為了更好地理解分析,表2 總結了所使用的符號,表3 針對方案中加解密開銷與屬性更新開銷進行了比較。
從表3 可以看出,文獻[12,24]方案沒有進行加解密的外包,用戶的計算開銷是巨大的,會隨著訪問結構的復雜化而加大計算量。但使用了模加一致性構建訪問控制樹的文獻[12]方案在用戶加密與解密時,計算開銷小于使用了線性秘密分享方案(LSSS,linear secret sharing scheme)訪問結構的文獻[24]方案。其他方案對加解密計算進行了外包,因此用戶的計算量是恒定的,與屬性以及訪問控制結構無關。文獻[18]方案在用戶解密時直接將對稱密鑰通過第三方審計平臺發送給用戶,使用戶只需要進行一次對稱解密就可以解密密文,雖然解密效率更高,但存在安全隱患,對稱密鑰如果泄露,數據將會被獲取。在用戶外包解密方案中,本文方案使用了模加法技術構建訪問控制樹,減小霧節點外包解密的開銷,在外包解密中本文方案是最優的。在屬性撤銷方面,文獻[21]方案為了實現用戶屬性的即時撤銷,在屬性發生撤銷時,需要對該用戶以及其他持有該屬性的用戶更新私鑰,當用戶數量龐大且屬性需要頻繁更新時,計算開銷是巨大的。文獻[24]方案為了實現撤銷機制,將撤銷方法嵌入加解密中,使用戶所持有屬性在加解密時都要進行是否撤銷的判斷操作。本文方案通過霧節點對密文進行重加密便可以實現對屬性的即時撤銷。綜上所述,本文方案為實現外包加解密和屬性更新,在保證安全性的前提下,計算開銷與其他方案相比較低。

表2 性能分析中使用的符號
通過仿真實驗將本文方案與文獻[18,21,24]方案在外包加密、外包解密與屬性更新等方面進行比較分析。本文在charm-crypto 框架內進行仿真實驗,使用英特爾i5-4200U 2.3 GHz 處理器,8 GB 內存,搭建環境為Ubuntu14.04 64 位系統與Python2.7。實驗中所有結果均為10 次結果的平均值。
用戶加解密時間的比較如圖4 所示。從圖4可以看出,沒有涉及外包加解密的文獻[24]方案隨著屬性數量的增多,用戶加密時間線性增長;本文方案與其他外包加解密方案在用戶進行加解密操作時,將復雜計算外包出去計算,用戶所消耗的時間是基本恒定的,因此不會隨著屬性數量的增加而增長。在圖4(a)中,在用戶加密的效率方面使用了外包加密的方案所消耗時間較相近,可以看到本文方案是較優的。在圖4(b)中,文獻[18]方案在設計外包解密時,由第三方審計直接將對稱加密密鑰發送給用戶,用戶在解密時只需要進行一次對稱解密,所以用戶解密時間要低于本文方案,但是直接將對稱加密的密鑰進行傳輸,會帶來一些安全性問題。在安全性的前提下,本文方案用戶解密效率較高。

表3 計算開銷比較

圖4 用戶加解密時間的比較
外包加解密時間的比較如圖5 所示。從圖5 可以看出,外包加密時方案之間的差異較小,時間消耗隨著屬性數量的增加線性增長,所以訪問控制策略越復雜加密時間也會越大。外包解密中,因為本文方案使用UCCMA 技術建立訪問控制樹,避免了多項式插值法產生的巨大計算開銷,計算時間上低于其他方案,隨著屬性數量的不斷增多,這種優勢將逐漸擴大。

圖5 外包加解密時間的比較
屬性更新時間的比較如圖6 所示。仿真實驗中,假設所有的用戶都擁有要更新的屬性,圖6(a)中設定用戶數量為30,圖6(b)中設定更新次數為2 次。文獻[24]方案為了實現對屬性的撤銷,將屬性撤銷嵌入加解密過程中,導致用戶在進行加解密操作時所持有屬性都需要進行計算,使用戶在加解密時開銷太大,所以在此不做比較。文獻[21]方案在屬性更新時,為了實現屬性的即時更新,需要立即對所有持有該屬性的用戶進行私鑰的更新,隨著用戶數量的增多,以及屬性更新次數的增加,該方案在屬性更新時的開銷會越來越大。本文方案實現對屬性的即時更新,只需要改變屬性對應組密鑰并對密文進行重加密操作,因為用戶由不同霧節點管理,更新用戶私鑰時只需要對當前霧節點內用戶私鑰進行更新,當短時間內屬性頻繁更新時,未與霧節點進行交互的用戶只需要更新一次私鑰即可。圖6(a)中用戶數量恒定,隨著更新次數的增加本文方案時間消耗趨于穩定,文獻[21]方案呈線性增加趨勢。圖6(b)中更新次數為2 次時,隨著用戶數量的增加,本文方案與文獻[21]方案均呈線性增加趨勢,但本文方案增加速率相對較慢。所以本文方案在屬性更新方面效率較高。

圖6 屬性更新時間的比較
本文提出了一種霧計算中細粒度屬性更新的外包計算訪問控制方案,將加解密的復雜運算外包給霧節點,降低了用戶的計算開銷,并通過重加密的方法實現了屬性的細粒度更新,能夠根據需求完成對屬性的添加與撤銷。在安全性的前提下保證了其高效率,通過決策雙線性Diffie-Hellman 假設分析了安全性,通過仿真實驗計算了在用戶加解密、外包加解密和屬性更新時的計算開銷,得出本文方案中的用戶終端設備開銷較小,屬性更新時效率較高,更適用于霧計算。
本文還存在一些不足,方案中通過霧節點對用戶進行管理,沒有涉及霧節點域的劃分,并且隨著萬物互聯的發展,海量邊緣設備的增多,存在虛假節點或用戶騙取數據的情況。在用戶跨域訪問時實現跨域的認證至關重要,因此霧環境下用戶如何跨域認證實現動態高效且安全的訪問控制是下一步需要研究的內容。