唐忠原,何利文,陳 超,焦宏宇,吳 超,周 睿
(南京郵電大學 計算機學院,江蘇 南京 210003)
隨著云計算的發展,云安全已成為亟待解決的關鍵問題,嚴重制約了云服務的快速發展[1]。目前云服務還存在如下安全問題:(1)云平臺的不可信性;用戶將數據存儲在公有云上,失去了對數據的直接控制,服務器可能會對用戶的敏感數據進行窺探、修改等操作,因此嚴重威脅用戶數據的安全;(2)用戶身份隱私的保護;只有通過身份認證的用戶才有權限對數據進行訪問,而常用的認證信息是身份信息,一旦泄露,將會造成用戶隱私的泄露[2]。因此要讓企業與個人用戶大規模地使用云平臺,必須著手解決云存儲面臨的一系列安全問題,目前對數據的訪問控制成為解決數據安全的關鍵技術。
通過訪問控制,可以顯式地對關鍵數據的訪問進行有效控制,保護用戶隱私數據安全。針對云計算面臨的安全問題,通過傳統的訪問控制機制(自主訪問控制、強制訪問控制等)難以達到完美的效果;所以將數據加密后再上傳到云服務器,是保護數據安全的一個重要思路。因此,基于密碼學方法和工具實現的訪問控制技術是目前的研究熱點[2]。
Shamir和Boneh等提出基于身份的加密機制(identity-based encryption,IBE),通過將用戶的私鑰與用戶的身份關聯,以達到對信息的訪問控制[3]。基于此,2005年,Sahai和Waters提出了基于模糊身份的加密機制(fuzzy identity-based encryption,FIBE),將用戶的身份信息用多個屬性來標識,開啟了基于屬性加密的先河(attribute-based encryption,ABE)[4]。為了實現更加靈活的訪問控制策略,2006年,Goyal提出了基于密鑰策略的屬性加密方案(key-policy attribute-based encryption,KP-ABE)[5],使用文件的描述信息作為屬性,實現了對加密數據的細粒度訪問。2007年,Benthcourt等提出了基于密文策略的屬性加密方案(ciphertext-policy attribute-based encryption,CP-ABE)[6],以用戶身份信息作為屬性,數據擁有者可以決定數據的訪問策略,適合作為云計算環境中的訪問控制。文中正是基于CP-ABE加密的訪問控制策略。
在傳統的基于CP-ABE的訪問策略中,密文與密鑰的長度依賴于屬性的數量,隨著屬性數量的增加,密鑰與密文長度也隨之增加,導致系統性能嚴重下降。文獻[7]提出了基于固定密文長度的CP-ABE,該方案采用“與”門限訪問結構,但要求訪問控制結構中的屬性數目與用戶私鑰保持一致,并且該方案加、解密的計算代價與屬性的個數呈線性關系,因此不利于實際應用。文獻[8-9]同樣使用“與”門的訪問結構,提出了固定密文長度與固定計算開銷的訪問控制方案。但是文獻[8]在加密和解密時效率低下,時間復雜度過高。文獻[10]為了降低用戶的計算開銷,進行了大量的預計算,該方案確實可以降低用戶的計算量,適合輕量級設備,但是需要大量的可信實體來保存并傳送數據,并加重了云服務提供商的計算負擔。文獻[11]使用LSSS的訪問結構,提出了兩種不同的CP-ABE策略以適應不同的場景,可以大大降低密文的長度。文獻[12]使用一個優化的矩陣來達到固定密文長度。文獻[13]基于CP-ABE的加密策略,采用“與”的訪問結構,可以實現固定密鑰長度,適合應用于輕量級設備的訪問控制。文獻[14]在文獻[13]的基礎上實現了固定密文與密鑰長度的解決方案,降低了通信開銷,但是加解密計算開銷量較大的問題仍然沒有解決,并且沒有涉及用戶權限撤銷的問題。因此設計一個固定密文與密鑰長度,固定的加、解密計算開銷并且包含撤銷功能的CP-ABE算法仍然是一個具有挑戰性的難題。
文中在文獻[13-14]的基礎上,針對傳統CP-ABE加密方案中密文與密鑰長度過大,加、解密計算量較大的問題,提出了基于RSA的CP-ABE訪問控制策略。使用“與”門的訪問結構,在保證密文與密鑰固定長度的前提下提高了加解密的計算效率,放棄了傳統的雙向性映射的計算方式。為了保證屬性、密文在傳輸過程中的完整性,引入了簽名方案。并且添加了用戶撤銷的功能[15],將用戶身份標識嵌入密文當中,可以在不實現對密文重新加密與更新密鑰的前提下,臨時撤銷用戶的權限,并不影響其他用戶的正常使用。
文中仿照文獻[13]的方式來定義屬性集與訪問結構,定義具有n個屬性的屬性全集U={A1,A2,…,An}。每一個Visitor作為Owner文件的訪問用戶,具有的身份信息以屬性集V表示,是屬性全集U的非空子集(V?U)。V用一個n位字符串a1a2…an表示,定義如下:

例如:若n=4,定義一個Visitor的屬性集為V={A1,A2,A4},所以Visitor的屬性字符串為1101。
定義一個訪問策略P,其也為屬性全集U的非空子集,P用一個n位字符串b1b2…bn表示;

例如:若n=4,訪問策略字符串為1010,則訪問策略P的屬性集為{A1,A3}。
文中使用“與”門的訪問策略進行研究。假設Visitor的屬性集V的字符串為a1a2…an,訪問策略字符串P為b1b2…bn。如果ai≥bi(?i=1,2,…,n),則P?V,則Visitor的屬性集V滿足訪問策略P。
(1)整數因子分解難題。
依據RSA算法,選取兩個ρ位的大素數p,q,N=pq。GenF是一個以1ρ作為輸入、(N,p,q)作為輸出的多項式時間算法。由于已知一個大數N,因式分解得到p與q是異常困難的,這也是RSA加密算法安全的根本原因;根據文獻[16]中的定義,對于概率多項式時間(PPT)算法T,因式分解的優勢可以定義如下:

(2)困難性假設。
文中訪問控制方案的安全性依賴于Diffie-Hellman假設[17],使用RSA模數N=pq解決Diffie- Hellman模式與基g的問題等同于計算如下函數:
DH(N,g,X,Y):〈g〉N×〈g〉N→〈g〉N
其被定義如下:
DH(N,g,ga,gb)=gab(modN)

定義1:一個t多項式時間算法T,當Z=grd時,輸出0,否則輸出1;算法T解決n-IF-DH問題的優勢定義如下:
文中的CP-ABE的加密策略共包含以下五個算法:
(1)Setup(ρ,U)→(MPK,MSK)。
系統建立算法,算法以安全參數ρ與屬性集合U={A1,A2,…,An}作為輸入,輸出公共參數MPK與系統主密鑰MSK,選擇一個無法偽造的簽名方案生成簽名密鑰Signkey和驗證密鑰Verifykey。
(2)Encrypt(P,MPK,M,Rev)→(C)。
加密算法,算法使用E[P,M,MPK,Rev]加密算法將訪問策略P、公共參數MPK、明文M與用戶撤銷列表Rev加密,輸出密文C。
(3)KeyGen(A,MPK,MSK,T)→(SKuor ⊥)。
密鑰生成算法,當Visitor訪問CA請求私鑰時,CA運行該算法;算法以Visitor屬性集V、公共參數MPK、系統主密鑰MSK以及過期標志T作為輸入,如果Visitor合法,生成用戶的密鑰SKu;否則輸出⊥。
(4)Decrypt(C,P,MPK,SKu,GID)→(Mor ⊥)。
該算法根據密文C、訪問策略P、公共參數MPK、用戶私鑰SKu以及用戶標識GID,如果P?A,并且GID?Rev,則可解密得到明文M,否則得到⊥。
(5)Revoke(FID,GID)→(C)。
用戶權限撤銷算法,Owner將二元組(FID,GID)發送給CS,CS根據FID查找相應的文件密文C,并將GID寫入文件密文C的Rev集合中。
系統模型如圖1所示,主要包含以下四個實體:
Owner:是一個數據擁有者,定義數據的訪問控制結構,對數據進行加密并上傳云服務器,同時擁有撤銷用戶訪問共享文件的權限。
CS:是云存儲服務器,是一個半可信的數據存儲結構,同時提供數據訪問服務;但它會對Owner的數據保持好奇,并猜測其中內容。
CA:是一個可信的授權機構,負責生成系統的公共參數MPK與系統主密鑰MSK,同時會根據用戶的訪問請求與屬性集生成私鑰并發送給用戶。
Visitor:是數據的使用者,當其擁有的屬性值集合滿足訪問控制結構時才能成功下載并解密密文。

圖1 系統模型
文中通過一個敵手與挑戰者之間的游戲來驗證系統的安全性,其定義如下:
(1)初始化階段:敵手A輸出想要挑戰的n位訪問控制策略P,并將其發送給挑戰者B。B使用安全參數ρ運行Setup與KeyGen算法,得到(MSK,MPK),并將MPK發送給A。
(2)查詢階段1:敵手A開始向挑戰者B進行如下查詢:
敵手A進行多次提交其屬性集Vi向挑戰者B進行查詢,但是屬性集都不滿足訪問結構Pi,即Pi?Vi。挑戰者B運行KeyGen算法,并將生成的密鑰SKi發送給敵手A。
敵手A對被E[Pi,Mi]加密的密文進行解密查詢。
(3)挑戰階段:敵手A提交兩個長度相同的明文(M0,M1)且M0≠M1;挑戰者取一個隨機值c∈{0,1},并運行加密算法E[P,M]輸出密文C發送給敵手A。
(4)查詢階段2:敵手可以繼續進行密鑰查詢與解密查詢,但是屬性集Vi不滿足訪問結構Pi;繼續執行,同查詢階段1。
在該游戲中,敵手A贏得游戲的優勢ξ定義如下:
該部分將密鑰管理融入到訪問結構當中,根據RSA加密原理,因式分解N=pq是一個可計算的難題,因此在不知道安全參數p與q的值的前提下計算φ(N)=(p-1)(q-1)也基本不可能。據此,選取安全的素數pi(?i=1,2,…,n),滿足gcd(pi,φ(N))=1;然后計算qi,滿足piqi≡1 (modφ(N)),其中如果i≠j則pi≠pj。因此可以使用整數因式分解難題來保存與公開素數pi相關的qi;所以將{φ(N),q1,…,qn}作為秘密參數,則{N,p1,…,pn}是公開參數。
選取一個隨機數g(2 KV=gdV(modN) KP=gdP(modN) 另一方面,如果P?V,則KP計算如下: 文中使用的所有符號及定義如表1所示。 表1 符號的定義 輸入用戶的安全參數ρ與屬性集合U={A1,A2,…,An}。 Step1:CA執行Setup函數,使用一個無法偽造的簽名方案,生成簽名密鑰Signkey和驗證密鑰Verifykey。合法的Visitor注冊時,需要向CA提交自己的屬性,CA為該Visitor生成一個全局唯一的標識符GID與一個時間過期標志T,使用Signkey簽名后生成標簽flag(GID,A,T),發送給Visitor。 Step2:根據RSA算法,來選擇兩個大素數p、q(p≠q),N=pq;然后隨機選擇Pi,并且Pi與φ(N)互質;再計算與屬性Ai(?i=1,2,…,n)相關的Qi,PiQi≡1 (modφ(N))。接著選擇系統的私有密鑰對k、x,滿足gcd(k,φ(N))=1,gcd(k,Qi)=1,gcd(x,Qi)=1(?i=1,2,…,n)。最后選擇一個隨機數g,滿足2 Step3:選擇三個抗碰撞hash函數H1,H2,H3,定義如下: H1:{0,1}*→{0,1}ρ H2:{0,1}*→{0,1}lσ H3:{0,1}*→{0,1}lm 其中,lσ為安全參數隨機字符串的長度;lm為明文信息M的長度。 Step5:輸出系統主密鑰MSK與公共參數MPK: MPK={N,DU,Y,R,H1,H2,H3,P1,…,Pn,Signkey} Owner將數據上傳到CS共享之前,首先進行加密,該方案基于文獻[12]的加密方案,使用MPK、M與R作為輸入,加密計算經過如下階段: Step1:Owner為每個文件生成唯一的標識符FID,用于標識各個文件。并為每個文件生成一個用戶撤銷列表Rev,用于臨時保存被Owner撤銷的用戶GID。 Step3:為了保證明文的有效性,計算簽名Sm=H1(σm)⊕M,并計算Ym=gxrm,Rm=gkrm,使用σm對明文M加密,Cm=H3(σm)⊕M。 最后輸出密文:C={FID,P,Rev,Ym,Rm,Cσm,Cm,Sm},并將加密好的密文發送到CS。 Step1:Visitor請求訪問數據,首先將自己的標簽信息flag(GID,A,T)發送到CA,CA通過Verifykey驗證用戶是否合法,如果合法,并且Visitor的身份信息T在有效期內,則進行下一步,否則輸出⊥。 Step3:選取兩個隨機數ru與tu,通過dV=ksu+rux(modφ(N))計算su,然后計算k1=su+xtu(modφ(N))與k2=ru-ktu(modφ(N))。 最后輸出用戶密鑰SK=(GID,k1,k2)。 Visitor想要訪問某個文件時,將自己的標簽信息flag(GID,A,T)發送給CS,CS判斷用戶信息是否在有效期內,并判斷GID是否在訪問文件密文的Rev列表中,如果用戶信息在有效期內且用戶權限沒有被撤銷,則CS將該文件密文發送給Visitor。Visitor經過以下步驟進行解密。 Step1:為了保證密文不被撤銷的用戶解密,再次查看密文C中的Rev中是否包含GID,如果包含,則無法解密,否則進入下一步。 如果數據Owner想要臨時撤銷某個Visitor對某個共享文件的訪問,向CS提交二元組(FID,GID),CS根據該二元組找到對應的文件,并將GID添加到該密文C中的Rev中。被添加到Rev中的文件將無法被下載與解密。 定理1:該策略可以抵擋敵手對系統私鑰對(k,x)的碰撞攻擊。 (1) (2) 在密鑰生成階段有: dVi=k·sui+rui·x(modφ(N)) (3) 由以上式得,如果sui與tui是已知的,可以得到唯一的(k,x)的解;然而,由等式1與2分別形成的l個線性等式中有2l+1個未知數,即等式1需要猜測(sui,tui)的值才能解出x,等式2也需要猜測(rui,tui)的值才能解出k的值。由于sui與rui對敵手來說是兩個未知的隨機數對;因此,敵手根據自己的私鑰對SKi是無法合謀得到系統私鑰(k,x)的。 定理2:該策略可以抵擋敵手根據屬性集V獲得有效用戶私鑰SK=(GID,k1,k2)。 證明:由定理1可得,敵手A無法通過合謀碰撞攻擊獲取系統的私鑰對(k,x),因此也無法獲取中間變量su,因為根據dV=ksu+rux(modφ(N))求解su類似于RSA中求p與q。因此在不知道(k,x)與su的前提下,即使敵手可以自己隨機選取ru與tu,也無法獲得用戶密鑰SKu=(GID,k1,k2),因為它依賴復雜的歐拉函數φ(n)=(p-1)(q-1)。 定理3:由于整數因式分解問題是密碼學難題,所以該策略可以抵擋敵手根據用戶屬性V(P?V),獲取其相關的密文C={FID,P,Rev,Ym,Rm,Cσm,Cm,Sm}相關的關鍵中間變量Km,因此敵手無法解密密文。 證明:由解密公式得: 如果P?V,由命題1得,將無法計算Km,在不知道Km的前提下,無法計算密文。因此,該方案可以抵擋未授權的用戶解密密文。 定理4:由于DH問題的難解性,該策略可以抵擋多個未授權用戶合謀攻擊。 其中,C=A∩B。由于解決DH問題如同解決RSA的模數問題,所以該策略可以抵擋多用戶的合謀攻擊。 下面給出文中方案與文獻[13-14]中的方案在通信、存儲與計算方面的性能比較與分析。通常,通信開銷指的是密文長度,存儲開銷指的是密鑰長度。由表2可知,存儲開銷三種方案是相同的;但是通信開銷中,文中方案要優于文獻[13],即文中方案的密文長度不隨屬性的增加而增加;并且文中方案支持用戶的臨時撤銷,可以很好地解決撤銷用戶而頻繁進行重新加密對稱密鑰或者需要重新加密原始數據的問題,大大降低了系統開銷,可以很好地應用于實際的開發環境。 表2 通信與存儲方面的對比 其中,L為明文M的長度;G與Gt均為素數階配對群。 同時,為了更好地驗證文中方案在加密、解密方面的優勢,與文獻[13-14]的方案進行對比,進行仿真實驗;實驗環境為Intel(R) Core(TM) i5 6300HQ處理器,主頻2.3 GHz,8 G內存,操作系統為Ubuntu 14.04,算法基于cpabe庫使用C++實現。該實驗使用的屬性個數|U|=1 000,訪問策略中屬性個數|P|=500,用戶Visitor擁有的屬性個數|V|=600。 表3展示的是文中方案與文獻[13-14]方案的對比。文中方案的加密與解密耗時都為2 ms,因為文中方案放棄了復雜的雙向性運算,大大降低了算法加解密的計算時間。 表3 加解密的計算開銷對比 ms 在CP-ABE加密散發的基礎上,提出了基于固定密鑰與密文策略的訪問控制方案,實現了固定密鑰與密文長度,提高了算法加解密的計算開銷與密文密鑰的存儲開銷。該方案還引入了用戶實時撤銷的功能,在不使用代理重新加密密文與更新密鑰的前提下,臨時撤銷用戶私鑰的權限,并且不影響其他用戶的正常使用;該方案對用戶私鑰添加了過期函數,如果達到過期函數,則私鑰作廢需要重新申請私鑰,來保證系統的安全。通過理論分析,該方案可以有效抵擋合謀攻擊與選擇密文攻擊。目前,文中暫沒考慮屬性撤銷等問題,如何將屬性撤銷機制融入到該訪問控制方案中是下一步將要考慮的問題。



2.7 符號使用與定義

3 模型設計
3.1 系統初始化

3.2 加密階段
3.3 密鑰生成階段
3.4 解密階段




3.5 用戶撤銷
4 方案的可擴展性與安全性分析



5 性能比較


6 結束語