鄒莉萍 , 馮朝勝 , 秦志光 , 袁 丁 , 羅王平 , 李 敏,3
1(四川師范大學 計算機科學學院,四川 成都 610101)2(電子科技大學 信息與軟件工程學院,四川 成都 610054)3(網絡與數據安全四川省重點實驗室(電子科技大學),四川 成都 610054)
大數據的出現,使得企業特別是中小型企業將數據外包給云服務商[1]變得緊迫,而數據外包首先要解決好數據機密性和隱私性[2]問題.加密是確保數據機密性和隱私性的有效途徑.如果只是進行加密保存,傳統的加密方法即可勝任;如果還要實現密文共享,雖然傳統的加密方法也可以實現,但只有采取效率低下的“一對一”加密方式和粗粒度的訪問控制[3]方式.為了實現密文共享的高效性和訪問控制的細粒度,基于屬性的加密方法被提出[4].基于屬性的加密方法可以分為兩種:密文策略基于屬性加密方法CP-ABE[5]和密鑰策略基于屬性加密方法KP-ABE(key-policy attribute-based encryption)[6].由于CP-ABE 的訪問控制方法和企業IT 系統在明文訪問控制上廣泛采用的基于角色的訪問控制方法RABC(role-based access control)相似,更加受到企業的關注.然而,現有的大部分CP-ABE 方案在解密時所用的時間隨著匹配訪問策略的屬性數量呈線性增長,用戶客戶端計算量急劇增長,對用戶終端設備要求較高,常用的用戶終端特別是平板、手機難以勝任.針對這一問題,利用Spark 集群中的Map 運算和Reduce 運算,提出一種基于Spark 的支持快速解密的CP-ABE 方案.本文具體貢獻包括:
(1) 提出一種基于Spark 集群的解密外包方案.在該方案中,云服務器對大量密文進行存儲,授權中心生成僅由用戶存儲的最終解密密鑰DK和用于云服務器解密的轉換密鑰TK,降低用戶客戶端對于存儲性能的需求.利用轉換密鑰TK對上傳到云服務器端密文使用Spark 集群中的Map 運算與Reduce 運算進行半解密,將用戶客戶端解密代價降低到一次指數運算,顯著減少云服務器計算時間;
(2) 設計了一種快速求解共享訪問樹根節點值的算法.該策略的核心是:將求解任務分成若干個可并行執行的子任務,然后將子任務交由Spark 集群中的Map 節點去完成,Reduce 節點通過匯聚Map 節點的輸出結果計算出目標值.現有的包括Bethencourt 等人[5]的方案(以下簡稱BSW 方案)在內的用樹來表示訪問策略CP-ABE 方案,幾乎所有的方案求解根節點所需的指數運算次數都和共享訪問樹的節點數量成正比,而基于所設計的快速求解算法求解根節點值所需的指數運算時間僅和葉子節點的數量成正比;
(3) 證明方案的有效性.安全性分析表明,在一般群模型和隨機預言模型下可抵御選擇明文攻擊.性能分析表明,該方案在計算上對用戶客戶端要求較低,手機、平板、電腦等移動設備亦可勝任.
2005 年,Sahai 和Waters[4]在歐洲密碼學年度會議上首先提出了一種基于屬性的加密算法(attribute-based encryption,簡稱ABE),并在學術界受到了廣泛的關注與研究.在該方案中,將每一個標識視為一組描述屬性,并且將用戶私鑰和密文都與屬性相關聯,只有當用戶私鑰的屬性集合滿足密文屬性集合時,才能解密出正確的明文數據.之后,Bethencourt 和Goyal 分別提出了密文策略基于屬性加密CP-ABE[5]和密鑰策略基于屬性加密KPABE[6].在 CP-ABE 中,密文策略與訪問屬性相關聯;在 KP-ABE 中,密鑰策略與訪問屬性相關聯.2007 年,Ostrovsky 等人[7]提出了一種允許使用任意訪問結構的ABE 方案,并且基于DBDH 假設(decisional bilinear diffie-Hellman assumption)進行了安全性證明.同年,Ling 等人[8]提出一種支持訪問結構包含正屬性和負屬性的CP-ABE 方案,在DBDH 假設下,證明了該論文提出的基本方案滿足CPA 安全,然后使用Canetti-Halevi-Katz 技術進行一次性簽名,使得改進方案滿足CCA 安全.但是該方案只適用于僅限于門限與(“AND”)的共享訪問策略.2008 年,Goyal 等人[9]首次提出了一種基于數論理論假設且支持高級訪問結構的CP-ABE 方案,并且在DBDH假設下給出安全性證明.2009 年,Li 等人[10]提出了一種具有用戶責任的ABE 方案,在該方案中,給每個用戶私鑰中嵌入額外的用戶特定信息,以防止用戶間非法密鑰共享問題,進一步解決用戶訪問隱私問題.2011 年,Waters[11]提出一種更加安全的易于實現的高效CP-ABE 方案,在該方案中,提出了3 種不同的結構,這些結構允許在系統效率和不同的安全假設間進行不同的權衡,使其比基本的CP-ABE 方案擁有更好的實用效率.但是其解密時間還是隨著密文大小增長,隨著訪問結構復雜度增加而增加.同年,Green 等人[12]在Water 等人[11]的方案上提出了一種實現了RCCA 安全并且同時適用于CP-ABE 和KP-ABE 的解密外包方案.該方案將大量解密計算外包給云服務器,減少了用戶客戶端解密計算量,但是沒有給出云服務器端進行解密的具體操作.2012 年,Li 等人[13]基于Zhou 等人[14]提出的外包加密CP-ABE 方案,提出了一種基于MapReduce 的外包加密方案.但是在該方案中,沒有提出相應的使用MapReduce 的快速解密方案,且Hadoop 中的MapReduce 存在高延遲性的特性,在實際應用中較難實現.2013 年,Lai 等人[15]基于Green 等人[12]的方案,提出了一種可驗證的外包解密方案,并且該方案的安全性不依賴于隨機預言模型.在該方案中,除了對明文數據進行加密,還需要對GT域中的一個隨機元素進行加密處理.由于加密工作量的增加,導致解密時計算代價增加一倍.2015 年,Qin 等人[16]基于Green 等人[12]的方案,提出了一個高效的可驗證的解密外包方案,與Lai 等人[15]方案相比,在該方案中引入了哈希映射來驗證第三方解密的正確性.同年,Lin 等人[17]也提出了一種可驗證的外包解密方案,并且證明其在標準模型下是安全的.與Lai 等人[15]方案相比,密文長度減少,解密計算代價減少接近一半.2016 年,Mao 等人[18]提出一種CPA 安全的可驗證的外包解密方案.與其他可驗證的CPA 安全相比,該方案不再單獨加密一個額外的隨機消息,而是采用同時對一個消息和一個隨機值進行加密,然后通過該隨機值來將消息提交給云服務器,使得其擁有比一般CPA 安全外包方案更短的密文長度.同年,Zhang 等人[19]提出一種具有可驗證性外包功能的自適應安全的多授權CP-ABE方案.該方案不僅實現了解密外包驗證,并且降低了公鑰大小.但是在該方案中,每個屬性不是由唯一的控制權限控制,所以僅能被視為適當的多授權ABE 方案,且其僅支持單調訪問結構.2017 年,Liu 等人[20]提出一種將離線與在線技術相結合的密文策略ABE 方案,并且支持可驗證的外包解密.該方案將密鑰生成和大部分加密計算都進行離線計算,減少在線計算時間,并且將大部分解密工作量都外包給第三方服務器,但是仍然沒有對云服務器端解密方式進行快速處理.
由以上分析可知:現有的ABE 方案,無論是在用戶端還是云服務器端,都存在計算量過大、計算時間過長的問題.
支持快速解密的CP-ABE 系統模型如圖1 所示,包括授權中心、云服務器、數據所有者和數據消費者.

Fig.1 Ciphertext-policy attribute-based encryption system model with fast decryption圖1 支持快速解密的密文共享系統模型
(1) 授權中心:通常在企業可信域內,負責生成系統公鑰PK、系統主密鑰MK、用戶最終解密密鑰DK和云服務器轉換密鑰TK;
(2) 云服務器:云服務器是模型中半可信的第三方,用于存儲大量密文數據,并且從授權中心獲取轉換密鑰TK對密文進行半解密;
(3) 數據所有者:數據所有者是模型中數據的原始擁有者,將數據進行加密并上傳至云服務器進行存儲;
(4) 數據消費者:數據消費者是模型中數據的使用者,使用由授權中心獲取到的最終解密密鑰DK,將從云服務器獲取到的半解密密文進行解密,以獲得共享數據.
定義1.一種基于Spark 集群的解密外包方案由以下5 個算法構成.
·Setup(λ,U)→(PK,MK):由授權中心執行,輸入安全參數λ、屬性空間U,輸出系統公鑰PK和系統主密鑰MK;
·Encrypt(PK,M,T)→(CT):由用戶客戶端執行,輸入訪問策略T、明文M和系統公鑰PK,輸出密文CT;
·KeyGen(MK,S)→(DK,TK):由授權中心執行,輸入用戶屬性集合S、系統主密鑰MK,輸出用戶最終解密密鑰DK和轉換密鑰TK;
·Transform(CT,TK)→(CT′):由云服務器執行,輸入密文CT和轉換密鑰TK,輸出半解密密文CT′;
·Decrypt(DK,CT′)→(M):由用戶客戶端執行,輸入用戶最終解密密鑰DK和半解密密文CT′,輸出解密密文M.
3.1.1 雙線性映射
雙線性映射(bilinear map)[21,22]因其在密鑰生成上具有高效、精確和安全的特點,使其成為ABE 的數學基礎之一.其具體定義如下.
設G1,G2和GT都是階為素數p的乘法循環群,記G1的生成元為g1,G2的生成元為g2.形如e:G1×G2→GT的映射就是雙線性映射.雙線性映射具有以下特性.
(1) 雙線性.對于?a,b∈Zp,?u∈G1,?v∈G2有e(ua,vb)=e(ub,va)=e(u,v)ab,當G1=G2時,該映射被稱為對稱雙線性映射;
(2) 可計算性.對于任意取值,雙線性映射的計算都是高效的;
(3) 非退化性.e(g,g)≠1,即不會將所有的數對都映射為GT中的同一元素.
3.1.2 拉格朗日插值系數
拉格朗日插值法[23]是以法國數學家約瑟夫·拉格朗日命名的一種多項式插值方法.假設平面上有(x0,y0),(x1,y1),…,(xn-1,yn-1)共n個點,令函數f(x)經過這n個點,設Dn={0,1,…,n-1},存在n個多項式pj(x),j∈Dn.則對于任意k∈Dn,都有pk(x),Bk={i|i≠k,i∈Dn},使得:

pk(x)就是拉格朗日系數.拉格朗日插值公式的一般表達形式如下:

在本文方案中,令i∈,S表示一個節點集合,Δi,S(x)表示拉格朗日系數,則由公式(1)可得:

3.1.3 共享訪問樹
為實現秘密共享,訪問策略可以用共享訪問樹表達.設共享訪問樹為T,且其根節點為R.共享訪問樹T的每一個非葉子節點都代表一個“AND”門或“OR”門.為實現基于屬性的訪問控制,共享訪問數T的每一個葉子節點都和一個屬性相對應.
令共享訪問樹T的每個節點x的閾值為kx(當x為葉子節點時,設kx=1),為x隨機選擇一元kx-1 次多項式qx.秘密共享從T的根節點R開始,采用自上而下的方式進行.選擇隨機數s∈(p為大素數),令根節點的秘密共享數qR(0)=s,加密共享數為e(g,g)αs(α∈);令其他節點的秘密共享數為qx(0)=qparent(x)(index(x))(parent(x)表示節點x的父節點;index(x)表示節點x在兄弟節點中的序號,按共享訪問樹結構從左往右依次進行編號),加密共享數為e(g,g)αqx(0).
如果屬性集S滿足Tx(以x為根的樹),記作Tx(S)=1.計算Tx(S)按照遞歸方式進行.如果x不是葉子節點,則為x的每個孩子節點x′計算Tx′(S);如果x代表“AND”門,只有所有孩子的返回值都為1 時,才有Tx(S)=1;如果x代表“OR”門,只要有一個孩子的返回值為1,就有Tx(S)=1.如果x是葉子節點且其關聯的屬性屬于S,則Tx(S)=1.
3.2.1 共享訪問樹的最優子樹
如果某個用戶屬性集滿足共享訪問樹T,就可以用用戶密鑰和葉子節點的共享數計算出根節點R對應的共享數e(g,g)αs,其中,s為秘密共享數.顯然,滿足共享訪問樹并不一定要求屬性集中的屬性和每個葉子節點關聯的屬性都匹配,可能只需匹配部分葉子節點就能滿足訪問樹.
定義2.如果屬性集S只和T的葉子節點集LT的某個子集SLT匹配就能實現對T的滿足,即T(S)=1,那么由從T的根節點到葉子節點集SLT形成的T的子樹,就被稱作共享訪問樹T的解密子樹.
定義3.共享訪問樹T的解密子樹中葉子節點最少的子樹,被稱作共享訪問樹T的最優解密子樹.
定義4.將共享訪問樹T的最優解密子樹中所有的“OR”節點刪除后所形成的樹,稱作共享訪問樹T的最優簡化解密子樹.
3.2.2 加密共享數
觀察如圖2 所示共享訪問樹,該樹的所有非葉子節點都代表“AND”門,si和F=Esi分別表示節點i的秘密共享數和加密共享數,lij表示i的第j個孩子的拉格朗日系數,其中,E=e(g,g)α.

Fig.2 Sharing access tree圖2 共享訪問樹
根據共享訪問樹秘密共享方法和拉格朗日插值法,計算根節點加密共享數的過程如下:
根據以上觀察,得到定理1.
定理1.共享訪問樹的最優簡化子樹根節點對應的加密共享數等于以每個葉子節點對應的加密共享數為底、以從葉子節點到根節點路徑上所有節點對應的拉格朗日系數的積為指數的冪的乘積.
證明:用數學歸納法容易證明,限于篇幅考慮,省略證明過程.□
方案包括系統初始化、數據加密、密鑰生成、數據轉換和數據解密這5 個模塊.
(1) 系統初始化:Setup(λ,U)→(PK,MK)
系統初始化算法由授權中心執行,該算法以系統空間U和安全參數λ作為輸入,選擇一個階為大素數p的雙線性群G0,記G0的生成元為g,定義雙線性映射e:G0×G0→GT.設定哈希函數H1:GT→{0,1}l,選擇兩個隨機數α,β∈,輸出系統公鑰PK信息如下:

將其上傳至云服務器,并向云服務器及所有用戶公開.
授權中心保存系統主密鑰:MK=(β,gα).
(2) 數據加密:Encrypt(PK,M,T)→(CT)
數據加密算法由用戶客戶端執行,該算法以系統公鑰PK、明文數據M、密文共享訪問樹T作為輸入,輸出明文數據M與共享訪問樹T相關聯的密文數據CT.
隨機選擇秘密共享數s∈,令qR(0)=s(R表示共享訪問樹T的根節點).按照第3.1.3 節介紹的方法進行秘密共享.令Y是共享訪問樹T中的所有葉子節點的集合,輸出如下密文:

(3) 密鑰生成:KeyGen(MK,S)→(DK,TK)
密鑰生成算法由授權中心執行,該算法以系統主密鑰MK和屬性集合S作為輸入,選擇一個隨機數對于任意屬性j∈S,選擇隨機數.在授權中心輸出用戶私鑰SK如下:


最后,通過安全信道將最終解密密鑰DK=n發送給用戶客戶端.
(4) 數據轉換:Transform(CT,TK)→(CT′)
數據轉換算法由云服務器執行,該算法以密文消息CT和轉換密鑰TK作為輸入,根據定理1,使用Spark 集群快速計算半解密密文CT′的模型如圖3 所示.
首先檢測用戶屬性是否滿足共享訪問樹:若不滿足,則直接輸出⊥;否則,針對最優簡化解密子樹中的節點x(包括葉子節點)啟動Spark 中的Map 運算,對最優解密子樹中的葉子節點y啟動Spark 中的Reduce 運算.整個算法包括Transform(Map),Transform(Reduce)和Transform(Multiple)這3 個重要模塊.
①Transform(Map)
對每個葉子節點y,使用轉換密鑰TK,通過如下計算獲得該節點的部分秘密值CTy′:

令NodeLeafy為葉子節點標識符,將每個葉子節點的標識符和部分秘密值鍵值對分別發送到不同的Reduce.
對于從葉子節點y到根節點路徑上的每個非葉子節點x,計算該節點在該路徑上的孩子節點sx對應的拉格朗日系數值Δindex(sx),S(0).對于x的每個子孫葉子節點y,將(NodeLeafy,Δindex(sx),S(0))鍵值對發送給y所對應的Reduce.
②Transform(Reduce)
對每一個Reduce 運算,首先判斷傳入的值是葉子節點的值還是非葉子節點的值:如果是兩個非葉子節點的值,則將兩個節點的拉格朗日系數值相乘;如果是一個葉子節點的值、一個非葉子節點的值且該輪Reduce 運算所需要的所有非葉子節點的值還未全部傳入,則將非葉子節點的拉格朗日系數值保存起來,直到所有節點的值傳入完畢.在Reduce 節點接收到所有值后,根據定理1 計算葉子節點y對應的冪值:

③Transform(Multiply)
令共享訪問樹T的最優簡化解密子樹ST的葉子節點的總數為num(ST),將每一個Reduce 的結果收集起來進行連乘運算,得到根節點的秘密共享數:

然后進行如下計算,得到半解密密文CT′.

Fig.3 Spark-based semi-decryption model圖3 基于Spark 平臺進行半解密模型圖
(5) 數據解密:Decrypt(DK,CT′)→(M)
數據解密算法由用戶客戶端執行,以用戶最終解密密鑰DK和云服務器傳回的半解密密文CT′作為輸入,輸出明文M.
首先,使用最終解密密鑰DK對從云服務器傳回的半解密密文CT′進行開方處理,得到密文解密參數A=e(g,g)αs,再通過如下計算得到明文M′:

如果H1(M′)等于,則表明M′等于M,輸出明文M;否則,輸出⊥.
實現CPA 安全的CP-ABE 安全模型如下.
· 初始化:挑戰者運行Setup算法,產生系統公鑰PK,并且將公鑰PK公開給敵手;
· 第1 階段:敵手A查詢屬性集S1,...,Sq1分別對應的私鑰;
· 挑戰:敵手提交要挑戰的訪問結構A*和兩個等長的明文消息M0和M1.選擇挑戰的訪問結構時,應保證第1 階段查詢過的任意屬性集都不滿足該訪問結構.挑戰者選擇一個隨機數b,并且基于訪問結構A*加密數據Mb形成密文CT*,然后將密文CT*提供給敵手;
· 第2 階段:選擇一組都不滿足訪問結構的屬性Sq1+1,...,Sq,重復第1 階段的操作;
· 猜測:敵手A輸出與隨機數b對應的猜測值b′.
敵手能夠贏得上述挑戰游戲的優勢為Pr[b′=b]-1/2.在上述游戲中,如果敵手在多項式時間內贏得游戲的優勢是可忽略不計的,就可以認為對應的CP-ABE 方案是安全的.
定理2.本文所提出的方案,在一般群模型和隨機預言模型下可抵御選擇明文攻擊.
證明:假設敵手(算法)A在一般群模型和隨機預言模型能以不可忽略優勢攻破本文所提出的方案,那么可以基于A構建敵手(算法)B,使得其可以在同樣模型下攻破BSW 方案,這與在一般群模型和隨機預言模型下BSW方案可以抵御選擇明文攻擊矛盾,故本文所提出的方案在一般群模型和隨機預言模型下可抵御選擇明文攻擊.下面說明敵手B的構建過程.
· 初始化階段:敵手B獲取BSW 方案的公鑰PK=(G0,g,h=gβ,e(g,g)α),并將其發送給A;
· 第1 階段:敵手B建立空表T,敵手A可重復發出查詢請求.A發出一次查詢后,B將要查詢屬性集S發送給BSW 方案挑戰者(模擬器),由BSW 方案挑戰者利用密鑰生成算法生成與S對應的私鑰SK′并返回給B.B選擇一個隨機數n∈Z*p,由SK′計算出轉換密鑰TK,計算SK=(n,TK).將SK返回給A.將(S,SK,TK)存入到表T中;
· 挑戰階段:當A確定第一個階段結束后,向B提交要挑戰的訪問結構樹T和兩個明文消息M0,M1∈G1.提交T時,要確保已經查詢的屬性集中沒有一個滿足T.B將T和兩個消息發送給BSW 方案挑戰者以獲得密文CT;
· 第2 階段:B繼續接受A的查詢,但查詢分為如下兩種情況.
?S不滿足T.重復第1 階段的查詢過程;
?S滿足T.該情況下,無法查詢S對應私鑰,故只能按如下方法生成偽轉換密鑰:B隨機選擇t∈G0,運行KeyGen((d,t,PK),S)生成密鑰SK′,令TK=SK′,SK=(d,TK).將TK返回給A,將(S,SK,TK)存入到表T中;
· 猜測:如果A輸出的猜測為b′,那么B輸出的猜測也為b′.因此,如果A能以不可忽略優勢攻破本文所提出的方案,那么B也能以不可忽略優勢攻破BSW 方案.
在進行數據處理時,雙線性運算B和指數運算E所需要的時間占CP-ABE 方案絕大部分時間,故以這兩個指標作為衡量計算性能的指標.令|TL|為T的葉子節點個數(樹結構)或矩陣的行數(LSSS 結構),則針對本文方案,在解密時,用戶客戶端僅需對從云服務器端獲取到的半解密密文CT′進行一次指數運算,即用戶客戶端解密代價僅為1E.云服務器端需要對每一個葉子節點進行一次雙線性運算和一次指數運算,最后在求解半解密密文時再進行一次雙線性運算,所以在云端的解密代價為(|TL|+1)B+|TL|E,且其運行在Spark 集群上,將云服務器的解密代價分給集群中各個節點,從而進一步減少了云服務器解密時間.故本文方案解密總代價為(|TL|+1)B+(|TL|+1)E.
本文方案與BSW 方案、文獻[12]中的方案、文獻[18]中的方案在用戶端解密計算開銷、服務器端解密計算開銷以及解密計算總開銷對比見表1~表3.

Table 1 Comparison of decryption time in user client表1 用戶客戶端解密計算開銷對比
實驗采用Eclipse 開發工具,利用雙線性對加密庫(JPBC)(http://crypto.stanford.edu/pbc/)和CP-ABE 開發工具包(http://acsc.csl.sri.com/cpabe/),基于本文提出的方案,在Spark 集群環境下進行.雙線性運算和指數運算皆采用JPBC 中原有的操作,從素數階群y2=x3+x中選取群G和GT,群G和GT中的元素長度為512 位.實驗使用的虛擬PC 機用戶客戶端配置為:1 個Intel(R) Xeon(R) CPU(E5-2620 2.0GHZ),內存1GB,系統CentOS6.5 64 位;實驗使用的虛擬移動設備用戶客戶端配置為:1 個Google APIs Intel Atom(x86_64),內存2GB,系統Android7.0;實驗使用的虛擬云服務器端配置為:4 個Intel(R) Xeon(R) CPU(E5-2620 2.0GHZ),內存8GB,系統CentOS6.5 64 位;實驗使用的虛擬云服務器端Spark 集群配置為:11 臺虛擬機,其中1 臺為master 節點,另外10 臺均為node 節點.每臺配置均為:2 個Intel(R) Xeon(R) CPU(E5-2620 2.0GHZ),內存8GB,系統CentOS6.5 64 位.
實驗時,分別使用PC 機和手機作為客戶端進行對比實驗.為保證數據的可靠性,每組對比實驗中每個方案每輪進行50 次運算并取其平均值.針對PC 機用戶客戶端解密時間和總解密時間,將本文方案分別與BSW 方案、文獻[12]中的方案、文獻[18]中的方案進行對比;針對移動設備用戶客戶端解密時間和總解密時間,將本文方案分別與文獻[12]中的方案、文獻[18]中的方案進行對比;針對云服務器端解密時間,將本文方案分別和基于BSW 方案的Proxy 方案(即將解密工作外包給云服務器但未進行并行化處理)、文獻[12]中的方案、文獻[18]中的方案進行對比.為方便進行實驗比較,密文共享訪問結構之間的邏輯關系均為邏輯與(即“AND”關系).每組對比實驗進行25 輪測試,每輪增加4 個共享訪問策略屬性,為保證實驗變量的唯一性,每一輪所使用的數據及共享訪問策略相同.
當用戶客戶端分別為PC 機和移動設備時,本文方案與BSW 方案、文獻[12]中的方案、文獻[18]中的方案在用戶客戶端解密時間對比分別如圖4、圖5 所示.當用戶客戶端為PC 機時,本文方案、文獻[12]中的方案、文獻[12]中的方案在用戶客戶端解密時間在3ms~5ms 之間,而BSW 方案的解密時間隨著訪問策略屬性數量的增加呈急劇上升趨勢;當用戶客戶端為移動設備時,本文方案、文獻[12]中的方案和文獻[18]中的方案這3 種方案在用戶客戶端解密時間均在4ms~8ms 之間.

Fig.4 Comparison of decryption time in user client (PC)圖4 用戶端解密時間對比圖(PC)

Fig.5 Comparison of decryption time in user client (Android)圖5 用戶端解密時間對比圖(安卓)
本文方案與Proxy 方案、文獻[12]中的方案、文獻[18]中的方案在云服務器端解密時間對比如圖6 所示,幾種方案在云服務器端的解密時間都隨著訪問策略屬性的增加而逐漸增長,但是當共享訪問策略屬性數量增加時,本文方案具有明顯優勢.

Fig.6 Comparison of decryption time in cloud server圖6 云服務器端解密時間對比圖
當用戶客戶端為PC 機時,本文方案與BSW 方案、文獻[12]中的方案、文獻[18]中的方案總解密時間對比如圖7 所示;當用戶客戶端為移動設備時,本文方案與文獻[12]中的方案、文獻[18]中的方案總解密時間對比如圖8 所示.無論是使用PC 機還是移動設備,幾種方案的解密時間都隨著訪問策略屬性的增加呈現上升趨勢,但是在兩種環境下,本文方案在共享訪問策略數量增加的情況下都具有明顯優勢,且當訪問策略屬性的數量達到100 個時,本文方案總解密時間在1s 左右,滿足用戶響應時間要求.

Fig.7 Comparison of total decryption time (PC)圖7 總解密時間對比圖(PC)

Fig.8 Comparison of total decryption time (Android)圖8 總解密時間對比圖(安卓)
現有的CP-ABE 方案在解密時普遍存在計算量過大、計算時間過長等問題,難以在用戶終端特別是運算能力較弱的移動終端上實施.為了減少用戶客戶端的負擔,一些將解密外包給云服務器的CP-ABE 方案被提出.這些方案雖然明顯降低了用戶終端解密時的計算量,但計算時間過長問題并沒有得到有效解決.針對該問題,將Spark 集群技術和并行計算技術引入到CP-ABE 方案的設計之中,提出了一種面向公有云的支持快速解密的CP-ABE 方案.在該方案中,將計算量較大的求解共享訪問樹根節點對應的加密共享數的任務分解為若干個可并行執行的Map 任務和Reduce 任務.Map 任務負責拉格朗日系數的計算或葉子節點加密共享數的計算,Reduce節點負責計算出葉子節點對應的冪值.最后,計算出的冪值的乘積即為共享訪問樹根節點對應的加密共享數.性能分析表明,與BSW 方案、文獻[12]中的方案、文獻[18]中的方案相比,所提出的方案在解密速度上有顯著提高;而安全性分析表明,所提出方案在一般群模型和隨機預言模型下能對抗選擇明文攻擊.