周 波 王樹磊
(*南京信息職業(yè)技術(shù)學(xué)院電子信息學(xué)院 南京 210023) (**常州工學(xué)院民航飛行學(xué)院 常州 213032)
軟件定義網(wǎng)絡(luò)[1](software defined network,SDN)是一種區(qū)別于傳統(tǒng)計(jì)算機(jī)網(wǎng)絡(luò)的新型網(wǎng)絡(luò)架構(gòu)模式,自提出以來得到了學(xué)術(shù)界乃至工業(yè)界的廣泛關(guān)注。SDN吸取了ForCES架構(gòu)[2]的思想,將網(wǎng)絡(luò)的控制層與數(shù)據(jù)層分離,該設(shè)計(jì)不僅有利于降低網(wǎng)絡(luò)當(dāng)中的硬件成本,還使得網(wǎng)絡(luò)管理員能夠方便地對來自不同廠商的設(shè)備進(jìn)行集中化的調(diào)試和管理。相比傳統(tǒng)計(jì)算機(jī)網(wǎng)絡(luò),SDN具備前者所沒有的性能優(yōu)勢,但SDN的一系列安全問題[3]卻成為了阻礙其進(jìn)一步廣泛應(yīng)用的難題。其中最關(guān)鍵的問題之一就是,如何在遠(yuǎn)程控制環(huán)境下保證由SDN控制器掌控的用戶和設(shè)備敏感信息不被攻擊者竊取[4]。SDN的控制器負(fù)責(zé)管理流表,而流表包含敏感的控制信息,對于數(shù)據(jù)的轉(zhuǎn)發(fā)起到了決定性的作用。然而當(dāng)前的SDN架構(gòu)允許應(yīng)用程序接口輕易地調(diào)用流表而無需權(quán)限認(rèn)證。更為嚴(yán)重的是相當(dāng)一部分接口具備公開信息的權(quán)限。因此SDN控制器必須保證只有經(jīng)過授權(quán)的設(shè)備才能獲取以上的敏感信息。如今許多大型的SDN架構(gòu)都采用了多控制器管理域間通信,控制器除了與數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備進(jìn)行交互,還要與各個控制器之間保證規(guī)則統(tǒng)一與信息同步。因此在SDN當(dāng)中必須采用一種機(jī)制,該機(jī)制不僅能夠保證SDN流表的安全性還必須對流表的訪問權(quán)限進(jìn)行靈活、細(xì)粒度的控制。
Ethane系統(tǒng)[5]作為SDN前身提供了集中化的網(wǎng)絡(luò)安全管理方案。該系統(tǒng)利用規(guī)定的安全信道實(shí)現(xiàn)控制信息在控制器和交換機(jī)之間的傳輸,但其過于簡單,無法滿足在大規(guī)模部署時的安全需求。文獻(xiàn)[6]根據(jù)OpenFlow規(guī)則說明書提出,控制器與數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備間必須通過傳輸層安全協(xié)議(transport layer security protocol,TLS)實(shí)現(xiàn)雙向認(rèn)證,以避免非法用戶偽裝成控制器與交換機(jī)進(jìn)行通信。然而并沒有規(guī)定域間訪問的控制方法,這使得大型SDN架構(gòu)有可能面臨未知的非法規(guī)則插入或規(guī)則修改操作。文獻(xiàn)[7]提出了一種針對SDN控制器的訪問控制系統(tǒng)。為實(shí)現(xiàn)不同SDN組件訪問權(quán)限的配置,該系統(tǒng)首先將SDN的各個組件在邏輯上進(jìn)行隔離,其次對不同組件的訪問權(quán)限進(jìn)行詳細(xì)的描述,然后在用戶試圖對組件進(jìn)行訪問和控制時必須對用戶進(jìn)行身份認(rèn)證。此外,該方案配置了一種用戶訪問沖突的解決機(jī)制,保證多個用戶可以同時訪問同一個組件。文獻(xiàn)[8]提出了一種面向SDN控制層和應(yīng)用層的訪問控制方案,該方案對不同網(wǎng)絡(luò)組件的可執(zhí)行指令做出了不同程度的限制,使得在云計(jì)算環(huán)境下實(shí)現(xiàn)安全、快速地訪問控制。Kamath等人[9]設(shè)計(jì)了一種SDN認(rèn)證架構(gòu),該架構(gòu)提供一種靈活的身份認(rèn)證和訪問控制方法,同時將所有未授權(quán)的設(shè)備隔離起來以保證網(wǎng)絡(luò)資源的安全性。盡管在訪問控制領(lǐng)域有大量的研究成果,但是SDN控制器始終面臨的是一種動態(tài)變化的網(wǎng)絡(luò)結(jié)構(gòu),這使得SDN控制器在執(zhí)行訪問控制操作時必須具備相當(dāng)?shù)撵`活性、安全性以及高效率。這對現(xiàn)有的訪問控制理論提出了嚴(yán)峻的挑戰(zhàn),然而現(xiàn)有的訪問控制方法幾乎無法滿足這樣的需求。
屬性加密[10](attribute-based encryption,ABE)是近些年來提出的一種功能加密算法,它能夠從密碼學(xué)原理上填補(bǔ)以上的空白。ABE為數(shù)據(jù)加解密操作賦予了一套訪問策略以及具備一定描述性的屬性集合。只要屬性集合與訪問策略的相似度超過事先設(shè)定的閾值,那么解密者就可以成功解密。具體來說目前有2種主要的ABE算法。一種是基于密鑰策略的ABE算法[11](key policy ABE,KP-ABE),它將訪問策略嵌入到密鑰當(dāng)中,而屬性集合則嵌入到密文當(dāng)中,最早提出的ABE算法正是這種KP-ABE;一種是基于密文策略的ABE算法[12](ciphertext policy ABE,CP-ABE ),它將訪問策略嵌入到密文當(dāng)中,而屬性集合則嵌入到密鑰當(dāng)中。由于CP-ABE算法允許加密者自由制定訪問策略,而密鑰當(dāng)中嵌入的屬性集合又能夠表征不同解密者的身份,因而CP-ABE更適合構(gòu)建一種安全又靈活的云存儲訪問控制算法。文獻(xiàn)[13]提出了一種基于多屬性權(quán)威的ABE算法,每個屬性權(quán)威擁有各自的主密鑰,這使得單個屬性權(quán)威不再擔(dān)負(fù)過重的計(jì)算任務(wù)。文獻(xiàn)[14]提出了一種基于雙向安全計(jì)算產(chǎn)生主密鑰的機(jī)制,同時設(shè)計(jì)了一種高效的撤銷方法,在提高計(jì)算效率的同時也豐富了ABE的功能。文獻(xiàn)[15]采用零知識證明使2個屬性權(quán)威互動產(chǎn)生主密鑰,從而有效防止密鑰托管問題的產(chǎn)生,同時支持密鑰追責(zé)防止用戶將自己的私鑰交由他人使用。文獻(xiàn)[16]提出了一種CP-ABE的屬性直接撤銷方法保證了用戶更新的靈活性,同時使得其密文、私鑰和公鑰的長度都有所優(yōu)化。文獻(xiàn)[17]提出了一種不需要進(jìn)行配對運(yùn)算的ABE算法,但是由于使用閾值門作為訪問策略,因此算法整體顯得不夠靈活。文獻(xiàn)[18]提出了一種分布式的CP-ABE密鑰管理協(xié)議,同時利用外包解密使得終端用戶無需進(jìn)行任何配對計(jì)算就可以進(jìn)行解密,但是算法整體的計(jì)算負(fù)載仍然較大。
ABE算法在大型訪問控制系統(tǒng)上的應(yīng)用潛力已被相關(guān)領(lǐng)域?qū)W者所認(rèn)可,但是其復(fù)雜的計(jì)算將造成系統(tǒng)運(yùn)算負(fù)載急劇上升,現(xiàn)有的ABE算法還遠(yuǎn)不能達(dá)到在SDN中實(shí)際部署的水平。尤其在大型SDN環(huán)境下,來自各類廠商的設(shè)備性能不同,如果性能稍有限制,就不能保證SDN訪問控制的靈活性、即時性和安全性。文獻(xiàn)[19]提出了在SDN環(huán)境中應(yīng)用屬性加密算法并提出了一種基于等級CP-ABE的SDN訪問控制方案,使得SDN控制器能夠靈活管理SDN的用戶、設(shè)備和流表數(shù)據(jù)。文獻(xiàn)[20]提出基于代理群的ABE算法,把復(fù)雜計(jì)算全部交給可信的代理節(jié)點(diǎn)群處理。雖然降低了ABE算法的計(jì)算門檻,但是系統(tǒng)整體的安全性不再單純依賴于ABE算法的安全性,而在某種程度上幾乎依賴于代理節(jié)點(diǎn)的可信等級。此外,代理節(jié)點(diǎn)群的存在使得加解密過程中產(chǎn)生了額外的通信開銷。
本文結(jié)合SDN實(shí)際環(huán)境在現(xiàn)有的CP-ABE方案基礎(chǔ)上對算法的安全性、計(jì)算效率進(jìn)行了改進(jìn)。提出了一種抗密鑰暴露的密文策略屬性快速加密算法(anti-key-exposure ciphertext policy attribute-based fast encryption,AKE-CP-ABFE),首先利用預(yù)計(jì)算技術(shù)(pre-computation technique,PCT)將必要的元素計(jì)算出來并存儲起來,加密者在進(jìn)行加密時無需進(jìn)行任何復(fù)雜的指數(shù)運(yùn)算或雙線性映射,提高了屬性加密的計(jì)算效率。同時基于拓展圖技術(shù)(expander Graph technique,EGT)減少了預(yù)計(jì)算產(chǎn)生的元素?cái)?shù)量,進(jìn)一步降低了預(yù)計(jì)算產(chǎn)生的存儲開銷。除此之外,本文將用戶或者設(shè)備的MAC地址嵌入到私鑰當(dāng)中,如果私鑰當(dāng)中的地址信息與設(shè)備本身不符,則無法完整解密。這保證了即使將私鑰有意或者無意地暴露給其他非法用戶或者設(shè)備,他們也無法獲取此私鑰獲取敏感信息。理論分析證明AKE-CP-ABFE具備良好的安全性。基于該算法構(gòu)建了一種針對多控制器設(shè)置的SDN域間信息訪問控制系統(tǒng)模型,該模型降低了開源API造成的用戶或者網(wǎng)絡(luò)設(shè)備敏感信息泄露的風(fēng)險。仿真實(shí)驗(yàn)表明,該系統(tǒng)能夠在部署多控制器的大型SDN環(huán)境下以較高的計(jì)算效率保證敏感信息域間分享的安全性和靈活性。
設(shè){P1,P2,…,Pn}是由若干元素組成的集合,訪問策略A是集合{P1,P2,…,Pn}的非空子集,即A∈2{P1, P2,…, Pn}
若滿足S∈A,則集合S是關(guān)于訪問策略A的合法集合,反之,則稱S為非法集合。
令Γ是一個樹形的訪問策略。Γ中每一個節(jié)點(diǎn)由一個閾值門表示,閾值門由該節(jié)點(diǎn)的子節(jié)點(diǎn)個數(shù)及一個閾值組成。設(shè)任意節(jié)點(diǎn)x的子節(jié)點(diǎn)個數(shù)為numx,閾值為kx,那么0≤kx≤numx。當(dāng)kx=1時該閾值門表示的是一個“或”門,而當(dāng)kx=numx時表示的是一個“與”門。對于Γ當(dāng)中的葉節(jié)點(diǎn),其表示的是一個屬性,此類節(jié)點(diǎn)的閾值是1。為便于展開討論,定義以下函數(shù):
(1)parent(x):返回節(jié)點(diǎn)x的父節(jié)點(diǎn);
(2)att(x):返回葉節(jié)點(diǎn)x所代表的屬性;
(3)index(x):返回節(jié)點(diǎn)x的索引號,訪問樹Γ為每一個節(jié)點(diǎn)設(shè)置了唯一的索引號。
對于一個屬性集合S和訪問樹Γ,若S滿足Γ則表示為Γ(S)=1。通過如下的迭代方法來判斷S是否滿足Γ:假設(shè)R是訪問樹Γ的根節(jié)點(diǎn),Γx是關(guān)于節(jié)點(diǎn)x的子樹。如果x是非葉節(jié)點(diǎn),設(shè)其任意的子節(jié)點(diǎn)為z并首先計(jì)算Γz(S)。當(dāng)且僅當(dāng)kx個子節(jié)點(diǎn)的返回值為1才使得Γx(S)=1成立。若x是葉節(jié)點(diǎn),當(dāng)且僅當(dāng)att(x)∈S才使得Γx(S)=1成立。
設(shè)G1和G2是2個階為大素?cái)?shù)p的循環(huán)群,G是G1的一個生成元,映射e:G1×G1→G2是關(guān)于G1和G2的雙線性映射,當(dāng)且僅當(dāng)e滿足以下性質(zhì):
(1)雙線性:對于任意的u,v∈G1以及a,b∈Zp,都有e(ua,vb)=e(u,v)ab;
(2)非退化性:存在生成元G,使得e(G,G)≠1,其中1是G2的單位元;
(3)可計(jì)算性:對于任意的u,v∈G1,存在多項(xiàng)式時間算法能夠有效計(jì)算出e(u,v)的值。
由于即時的雙線性映射會消耗相當(dāng)多的計(jì)算資源,這直接成為了ABE算法在效率上難以提高的瓶頸。雖然也有學(xué)者提出了去雙線性化的思想,但是去雙線性化后的安全性始終無法與原有的ABE算法相提并論。雙線性映射預(yù)計(jì)算的基本思想是將一系列雙線性映射預(yù)先計(jì)算并存儲起來,因此在ABE算法上采用預(yù)計(jì)算方法能夠在運(yùn)算負(fù)載、存儲負(fù)載以及算法安全性上達(dá)到更好的平衡,從而使得ABE算法更適用于構(gòu)建SDN域間信息訪問控制系統(tǒng)。
預(yù)計(jì)算的基本思想是,首先產(chǎn)生一個橢圓曲線上的生成元P,其次提前計(jì)算好n個元組(ri,riP)。在此基礎(chǔ)上,每一個新的元組都由k個已有的元組共同產(chǎn)生,即:
r=∑1≤i≤krimodp
rP=∑1≤i≤kriPmodp
也就是說,通過k-1次模加操作來代替相對復(fù)雜的橢圓曲線點(diǎn)乘操作。為了進(jìn)一步提高計(jì)算效率,本文采用了一種基于拓展圖的預(yù)計(jì)算方法來降低參數(shù)k的值。
本方法的安全性建立在判定雙線性Diffie-Hellman困難假設(shè)(decisional bilinear Diffie-Hellman assumption, DBDH)上。
設(shè)G1是一個根據(jù)安全參數(shù)生成的階為素?cái)?shù)p的群。產(chǎn)生3個秘密的隨機(jī)數(shù)a,b,c∈Zp。若敵手已知一組參數(shù){P,aP,bP,cP},那么該敵手難以區(qū)分e(P,P)abc與e(G,G)z。若存在一個敵手A在獲得參數(shù){P,aP,bP,cP,Y}后,輸出1表示Y=e(P,P)abc,反之輸出0表示Y=e(P,P)z。敵手A能夠以優(yōu)勢ε解決DBDH問題,當(dāng)且僅當(dāng):
AKE-CP-ABFE模型涉及以下4類交互角色。
(1)屬性權(quán)威:是一個可信的權(quán)威機(jī)構(gòu),負(fù)責(zé)所有屬性的認(rèn)證以及公鑰私鑰的發(fā)布。
(2)SDN控制器:負(fù)責(zé)收集、存儲和管理SDN流表、路由以及數(shù)據(jù)量等重要信息,其中包含各類用戶或者設(shè)備的敏感信息。本方案針對大型SDN采用多控制設(shè)置,將SDN劃分為多個SDN域,每一個域內(nèi)部署唯一的SDN控制器。每個SDN控制器管理各自域內(nèi)的重要信息,同時負(fù)責(zé)與其他域的SDN控制器交互。
(3)加密者:是數(shù)據(jù)的初始擁有者(可以是用戶,也可以是產(chǎn)生數(shù)據(jù)的SDN設(shè)備),能夠上傳自己的數(shù)據(jù)并根據(jù)自己的意愿或需求自由制定相應(yīng)的訪問策略。
(4)解密者:是試圖獲取SDN控制器內(nèi)信息的用戶或者設(shè)備,其身份用一個屬性集合來表示。解密者擁有一個與其屬性集合相對應(yīng)的私鑰,并通過私鑰來解密密文。
AKE-CP-ABFE算法包括初始化算法、私鑰生成算法、預(yù)計(jì)算算法、快速加密算法和解密算法共5個主要算法,算法框架如下:
(1)初始化算法:由屬性權(quán)威執(zhí)行。算法輸入一個安全參數(shù)k,輸出公鑰PK和主密鑰MSK,其中公鑰PK向全網(wǎng)公開,而主密鑰MSK由屬性權(quán)威秘密保存。
(2)私鑰生成算法:由屬性權(quán)威執(zhí)行。解密者發(fā)起密鑰生成請求時輸入其唯一的MAC地址AMAC、屬性集合S、公鑰PK以及主密鑰MSK,最終輸出與其MAC地址以及屬性集合相對應(yīng)的私鑰SK。
(3)預(yù)計(jì)算算法:由屬性權(quán)威執(zhí)行。算法由2個子算法組成,分別是預(yù)處理子算法以及元組生成算法。預(yù)處理子算法輸入公鑰PK,輸出兩組列表L和L′。元組生成算法輸入一個訪問樹Γ,輸出與訪問樹Γ相對應(yīng)的元組Tuple1和Tuple2。
(4)快速加密算法:由加密者執(zhí)行,算法首先輸入一個訪問樹Γ、公鑰PK以及消息明文M,然后通過調(diào)用預(yù)處理算法輸出與訪問樹Γ對應(yīng)的密文CT,最后將密文CT上傳至域內(nèi)的SDN控制器。
(5)解密算法:由解密者執(zhí)行,輸入其MAC地址AMAC、密文CT以及私鑰SK,當(dāng)解密者的屬性集合滿足訪問策略,同時其MAC地址與隱藏在私鑰SK當(dāng)中的MAC地址信息相吻合時,才會輸出消息明文M,否則退出執(zhí)行。
基于以上算法本文構(gòu)建了面向多控制器SDN的域間訪問控制系統(tǒng)模型。該模型在2個SDN域之間進(jìn)行信息分享的工作流程如圖1所示,系統(tǒng)啟動時屬性權(quán)威執(zhí)行初始化算法生成公鑰PK和主密鑰MSK。與此同時,屬性權(quán)威執(zhí)行預(yù)計(jì)算算法生成一系列參數(shù)并存儲在列表L和L′當(dāng)中用于后續(xù)的快速加密。當(dāng)由解密者請求生成私鑰時,屬性權(quán)威執(zhí)行密鑰生成算法產(chǎn)生與其屬性集合S以及其MAC地址AMAC相關(guān)的私鑰SK。對于加密者產(chǎn)生的流表等各類信息,加密者制定相應(yīng)的訪問樹Γ并通過快速加密算法生成密文CT并將密文CT上傳給當(dāng)前SDN域的控制器。對于不同域的解密者,當(dāng)其發(fā)出解密請求時,當(dāng)前SDN域控制器首先將密文CT發(fā)送給另一個SDN域控制器,然后將密文CT轉(zhuǎn)發(fā)給解密者。如果此時解密者的屬性集合S滿足密文當(dāng)中的訪問樹Γ,而且解密者本身的MAC地址AMAC與私鑰SK當(dāng)中嵌入的MAC地址信息吻合,那么解密者才能獲取該信息的訪問權(quán)限。反之則無法獲取任何有用的信息。
圖1 基于AKE-CP-ABFE的SDN域間訪問控制系統(tǒng)模型
為方便算法構(gòu)建,首先假設(shè)G1和G2是階為大素?cái)?shù)p的雙線性群,P是G1的一個生成元,e:G1×G1→G2是群G1到群G2的雙線性映射。取一個安全參數(shù)k,這個參數(shù)決定了大素?cái)?shù)p的比特位數(shù)。然后定義拉格朗日函數(shù)Δi,S(x),使得集合S當(dāng)中的任意一個元素i都有:
此外定義2個哈希函數(shù)H1:{0,1}*→G1和H2:{0,1}48→Zp。其中H1將任意一串二進(jìn)制數(shù)組映射為群G1中的元素,H1將48 bit的MAC地址映射為Zp上的元素。
初始化算法首先輸入全局的屬性集合Ω={att1,att2,att3,…,attn}以及一個安全參數(shù)k,根據(jù)參數(shù)k生成2個階為p的雙線性群G1和G2,其次選擇G1的一個生成元P以及一個雙線性映射e:G1×G1→G2。然后定義2個哈希函數(shù)H1:{0,1}*→G1和H2:{0,1}48→Zp,并選擇2個隨機(jī)數(shù)α,β∈Zp。最后生成如下公鑰:
PK={p,P,e,Ω,e(P,P)α,
同時保存如下的主密鑰:
MSK={αP,β}
SK={S,D=((α+rH2(AMAC))/β)P,
預(yù)計(jì)算算法由2個子算法組成,分別為預(yù)處理算法和元組生成算法。為方便算法描述,本文定義了一些變量,變量定義說明如表1所示。
表1 變量定義說明
預(yù)處理算法預(yù)處理算法的執(zhí)行流程如下。
(1)生成n個隨機(jī)數(shù)r1,r2,…,rn∈Zp;
(2)對于?i∈[1,n],計(jì)算e(P,P)αri、riP以及{?attj∈Ω:riH1(attj)};
(3)生成一張空列表L,對于?i∈[1,n]將{e(P,P)αri,riP, {?attj∈Ω:riH1(attj)}}添加到列表L當(dāng)中;
(4)計(jì)算ne=c(ε)loG2(p)并生成ne個隨機(jī)數(shù)d1,…,dne∈Zp;
(5)對于?i∈[1,ne],計(jì)算e(P,P)αdi、diP以及{?attj∈Ω:diH1(attj)};
(6)生成一張空列表L′,對于?i∈[1,ne]將{e(P,P)αdi,diP, {?attj∈Ω:diH1(attj)}}添加到列表L′當(dāng)中;
(7)隨機(jī)選擇di,初始化參數(shù)t=di、T1=e(P,P)αdi、T2=diP以及{?attj∈Ω:T3, j=diH1(attj)}。
元組生成算法元組生成算法輸入一個訪問樹Γ,輸出與訪問樹Γ相關(guān)的2個元組。該算法由A1和A22個算法組成,算法執(zhí)行流程如下。
對于訪問樹Γ的根節(jié)點(diǎn),執(zhí)行A1算法。
(1)在列表L′當(dāng)中隨機(jī)選擇一組元素{e(P,P)αdi,diP, {?attj∈Ω:diH1(attj)}};
(2)重新賦值T1=T1e(P,P)αdi、T2=T2+diP以及?attj∈UR:T3, j=T3, j+diH1(attj);
(3)隨機(jī)提取一個集合S?[1,n]使得|S|=k;
(4)從列表L當(dāng)中隨機(jī)地抽取一組元素{e(P,P)αri,riP, {?attj∈Ω:riH1(attj)}};
(5)聲明并初始化變量e(P,P)αs=T1∏i∈Se(P,P)αri,如果e(P,P)αs是群G2的單位元則立即返回步驟(1)重新計(jì)算;
(6)聲明并初始化變量sP=T2+∑i∈SriP以及?attj∈UR:sH1(attj)=T3, j+∑i∈SriH1(attj),最終返回元組:
Tuple1=(e(P,P)αs,sP,{?attj∈UR:sH1(attj)})。 對于訪問樹中的任意節(jié)點(diǎn)x,執(zhí)行A2算法。
(1)聲明并初始化常量d=kx-2;
(2)從列表L′中隨機(jī)選擇一組元素{e(P,P)αdi,diP, {?attj∈Ω:diH1(attj)}};
(3)重新賦值變量T2=T2+diP以及?attj∈Ux:T3, j=T3, j+diH1(attj);
(4) 隨機(jī)提取一個集合Sd?[1,n]使得|Sd|=k;
(5)從列表L中隨機(jī)選擇一組元素{e(P,P)αri,riP,{?attj∈Ω:riH1(attj)}};
(6)聲明并初始化變量cdP=T2+∑i∈SdriP,若cdP是群G1中的單位元則立即返回步驟(1)重新計(jì)算;
(7)從列表L′當(dāng)中隨機(jī)選擇一組元素{e(P,P)αdi,diP, {?attj∈Ω:diH1(attj)}};
(8)對于?u∈[0,d-1]重新賦值變量T2=T2+diP;
(9)對于?u∈[0,d]重新賦值變量?attj∈Ux:T3, j=T3, j+diH1(attj);
(10) 隨機(jī)選擇一個集合Su?[1,n]使得|Su|=k;
(11)在列表L當(dāng)中隨機(jī)選擇一組元素{e(P,P)αri,riP, {?attj∈Ω:riH1(attj)}};
(12)對于?u∈[0,d-1]聲明并賦值變量cuP=T2+∑i∈SuriP;
(13)對于?u∈[0,d]聲明并賦值變量?attj∈Ux:cuH(attj)=T3, j+∑i∈SuriH1(attj),返回元組:
Tuple2={?i∈[0,d]:Dx,i=ciP,
為了生成明文M與訪問樹Γ相對應(yīng)的密文,快速加密算法需要對訪問樹Γ當(dāng)中任意一個節(jié)點(diǎn)x產(chǎn)生一個次數(shù)為kx-1的隨機(jī)多項(xiàng)式。為了減小加密的計(jì)算負(fù)擔(dān),利用預(yù)計(jì)算算法來生成每個節(jié)點(diǎn)的隨機(jī)多項(xiàng)式。根據(jù)訪問樹Γ的結(jié)構(gòu),這種方法采用一種自上而下的迭代方式。
對于訪問樹的根節(jié)點(diǎn)R,快速加密算法調(diào)用A1算法獲取元組:
(e(P,P)αs,sP, {?attj∈UR:sH1(attj)})
如果kR-1≠0,則繼續(xù)調(diào)用A2算法獲取元組:
{?i∈[0,kR-2]:DR,i=ciP,
利用獲取的以上2個元組,同時聲明并初始化常量dR=kR-2,然后定義一個次數(shù)為dR的多項(xiàng)式:
r(X)=∑0≤i≤dRciXi
隨后,關(guān)于根節(jié)點(diǎn)R的完整多項(xiàng)式為
qR(X)=r(X)·X+s
對于?l∈SR, ?j∈UR計(jì)算:
qR(index(l))P=∑0≤i≤dRindex(l)i+1DR,i+sP
+sH1(attj)
對于訪問樹Γ當(dāng)中的任意節(jié)點(diǎn)x,調(diào)用A2算法獲取元組:
{?i∈[0,kx-2]:Dx,i=ciP,
聲明并初始化常量dx=kx-2,利用上式中的系數(shù)ci定義一個次數(shù)為dx的多項(xiàng)式:
r(X)=∑0≤i≤dxciXi
然后生成關(guān)于節(jié)點(diǎn)x的完整多項(xiàng)式:
qx(X)=r(X)·X+qparent(x)(index(x))
對于?l∈Sx, ?j∈Ux計(jì)算:
qx(index(l))P=∑0≤i≤dxindex(l)i+1Dx,i
+qparent(x)(index(x))P
+qparent(x)(index(x))H1(attj)
因此對于任意的葉節(jié)點(diǎn)x,快速加密算法通過迭代得到了qx(0)P和qx(0)H1(att(x))。最終生成如下的密文。
如果x是葉節(jié)點(diǎn),則令atti=att(x)并進(jìn)行如下的判斷與計(jì)算。
(1)若atti∈S則計(jì)算并輸出以下結(jié)果
=e(P,P)rqx(0)
(2)若atti?S則輸出以下結(jié)果表示放棄該節(jié)點(diǎn)的計(jì)算
DecryptNode(CT,SK,x)=⊥
如果x是非葉節(jié)點(diǎn),那么對于其任意子節(jié)點(diǎn)z調(diào)用函數(shù)DecryptNode并記其返回結(jié)果為Fz。然后進(jìn)行如下的判斷與計(jì)算。
(1)判斷是否存在關(guān)于節(jié)點(diǎn)x的包含kx子節(jié)點(diǎn)的集合Sx,使得?z∈Sx:Fz≠⊥成立。若不存在,那么輸出⊥表示放棄該節(jié)點(diǎn)的計(jì)算。
(2)若存在集合Sx,計(jì)算并輸出以下結(jié)果:
=e(G,G)rqx(0)
到目前為止,本文定義了函數(shù)DecyrptNode,現(xiàn)在進(jìn)一步定義解密算法。算法首先從訪問樹Γ的葉節(jié)點(diǎn)開始調(diào)用函數(shù)DecyrptNode。如果屬性集合S滿足訪問樹,那么就可以通過層層迭代獲取隱藏在根節(jié)點(diǎn)R當(dāng)中的秘密,記作:
A=DecryptNode(CT,SK,R)=e(P,P)rqR(0)
=e(P,P)rs
隨后通過如下計(jì)算就可以得到明文:
=M
反之,如果屬性集合S不能滿足訪問樹Γ,那么將無法在多項(xiàng)式時間內(nèi)恢復(fù)出根節(jié)點(diǎn)R當(dāng)中的秘密。與此同時,如果當(dāng)前的MAC地址信息與私鑰SK當(dāng)中的MAC地址信息不吻合,即使恢復(fù)出根節(jié)點(diǎn)R當(dāng)中的秘密也無法通過進(jìn)一步的計(jì)算得到消息明文。以上兩步中只要任何一步不滿足條件,都將導(dǎo)致解密算法退出執(zhí)行。
本小節(jié)給出AKE-CP-ABFE的安全證明。通過規(guī)約至DBDH困難假設(shè),證明了AKE-CP-ABFE具備密文的不可區(qū)分性。首先給出如下定理。
定理(不可區(qū)分性)給定2段長度相同的明文,如果DBDH問題是難解的,那么一定不存在多項(xiàng)式時間內(nèi)的敵手能夠以不可忽略的優(yōu)勢辨別出AKE-CP-ABFE的密文來自于哪段明文。
證明為證明以上定理本文設(shè)計(jì)了一個挑戰(zhàn)游戲,該游戲涉及敵手A、模擬器B以及挑戰(zhàn)者C 3個角色。
首先,游戲進(jìn)入初始化階段,該階段的流程如下:
(1)敵手A向模擬器B發(fā)送一個挑戰(zhàn)訪問樹Γ*;
(2)挑戰(zhàn)者C產(chǎn)生3個秘密隨機(jī)數(shù)a,b,c∈Zp和一個雙線性群G1,然后選擇該群上的一個生成元P,最后將P、P1=aP、P2=bP、P3=cP和Z發(fā)送給模擬器B;
(3)模擬器B產(chǎn)生一個隨機(jī)數(shù)β∈Zp、一個雙線性群G2、一個雙線性映射e:G1×G1→G2、一個全局屬性集合Ω={att1,att2,att3,…,attn}以及一個隨機(jī)預(yù)言機(jī) 和H:{0,1}*→G1。最后,模擬器B把如下的公鑰發(fā)送給敵手A。
其次,游戲進(jìn)入詢問階段,在該階段敵手A向模擬器B進(jìn)行有限次數(shù)的參數(shù)詢問,參數(shù)詢問包括私鑰詢問和加密詢問。
私鑰詢問的流程如下:
(1)敵手A向模擬器B發(fā)送一個屬性集合S;
(2)模擬器B產(chǎn)生2個隨機(jī)數(shù)R1,R2∈Zp,然后對于屬性集合S當(dāng)中的任意屬性attj產(chǎn)生一個對應(yīng)的秘密隨機(jī)數(shù)rj∈Zp,最終返回私鑰:
SK={S,D=R1P,?attj∈S:Dj
(3)模擬器B將元組{S,R1,R2}添加到一個列表L1當(dāng)中。
加密詢問的流程如下:
(1)敵手A向模擬器B選擇一個消息明文M以及一個訪問樹Γ;
(2)模擬器B選擇一個秘密數(shù)s∈ZP,然后按照真實(shí)的PB-CP-ABFE調(diào)用快速加密算法和預(yù)計(jì)算算法,輸入公鑰PK、訪問樹Γ以及消息明文M并最終產(chǎn)生密文:
再次,游戲進(jìn)入挑戰(zhàn)階段,該階段的流程如下:
(1)敵手A向模擬器B提交2個長度相同的消息M1和M2;
(2)模擬器B選擇一個秘密數(shù)s∈Zp以及一個隨機(jī)的比特θ∈{0,1}并返回如下的挑戰(zhàn)密文給敵手A:
然后,游戲再次進(jìn)入詢問階段。在本階段,敵手A繼續(xù)向模擬器B發(fā)送有限次數(shù)的私鑰詢問或加密詢問。在敵手A發(fā)送詢問的過程中始終存在如下的限制:
(1)所有在私鑰詢問包含的屬性集合S必須滿足Γ(S)≠1;
(2)不能將元組(Γ*,M1)或(Γ*,M2)作為加密詢問的輸入。
最后,游戲進(jìn)入最終猜測階段,該階段的流程如下:
(1)敵手A輸出θ′∈{0,1}作為對θ值的猜測;
(2)模擬器B判斷θ′值,如果θ′=θ那么敵手A贏得挑戰(zhàn)游戲,同時模擬器B輸出1表示其認(rèn)為挑戰(zhàn)者C產(chǎn)生的DBDH難題答案為Z=e(P,P)abc;
(3)如果θ′≠θ那么敵手A輸?shù)籼魬?zhàn)游戲,同時模擬器B輸出0表示其認(rèn)為DBDH難題答案為Z=e(P,P)z。
當(dāng)Z=e(P,P)abc,模擬器產(chǎn)生的挑戰(zhàn)密文CT*與真實(shí)的AKE-CP-ABFE密文服從相同的分布。假設(shè)敵手A在真實(shí)的AKE-CP-ABFE算法中區(qū)分密文來自于哪段消息明文的優(yōu)勢為ε′,那么模擬器B輸出1的概率為
Pr[B(P,P1,P2,P3,Z=e(G,G)abc)=1]
=Pr[θ=1|Z=e(P,P)abc]
·Pr[Z=e(P,P)abc]
當(dāng)Z=e(P,P)z,敵手A獲取的挑戰(zhàn)密文CT*是完全隨機(jī)分布的,所以敵手A實(shí)際上只能隨機(jī)地輸出θ′值。于是模擬器B輸出1的概率是
Pr[B(P,P1,P2,P3,Z=e(G,G)z)=1]
=Pr[θ=1|Z=e(P,P)z]
·Pr[Z=e(P,P)z]
于是模擬器B成功解出挑戰(zhàn)者C提出的DBDH難題的優(yōu)勢滿足:
因此可以斷定,如果DBDH難題假設(shè)成立,即不存在多項(xiàng)式時間算法能夠以不可忽略的優(yōu)勢ε解決DBDH問題,那么也一定不存在多項(xiàng)式時間敵手A能夠以不可忽略的優(yōu)勢ε′區(qū)分出密文來自于哪一段消息明文。
本文針對幾種典型的SDN訪問控制系統(tǒng)的功能進(jìn)行了分析比較,比較結(jié)果如表2所示。
表2 SDN訪問控制方案功能比較
在文獻(xiàn)[7]的方案里,為了將SDN的各個組件在邏輯上進(jìn)行隔離,事先對不同組件的訪問權(quán)限進(jìn)行了詳細(xì)的描述。文獻(xiàn)[8]則是對不同網(wǎng)絡(luò)組件的可執(zhí)行指令做出了不同程度的約束,從而實(shí)現(xiàn)安全快速的訪問控制。以上2種方案不僅對SDN控制器當(dāng)中的流表、路由等信息進(jìn)行加密,還不支持訪問策略的靈活制定,因此在不同程度上限制了訪問控制方案的安全性和可擴(kuò)展性。文獻(xiàn)[19]基于等級CP-ABE設(shè)計(jì)了一種SDN訪問控制方案,使得SDN控制器能夠靈活管理SDN的用戶、設(shè)備和流表數(shù)據(jù)。相比文獻(xiàn)[7]和文獻(xiàn)[8]的方案,該方案在安全性和可擴(kuò)展性上有所提升,同時支持細(xì)粒度的訪問策略。但是考慮到等級CP-ABE龐大的計(jì)算量,并不能很好地兼顧整個方案的計(jì)算效率。在本文設(shè)計(jì)的基于AKE-CP-ABFE的SDN域間信息訪問控制系統(tǒng),在現(xiàn)有的ABE算法優(yōu)勢基礎(chǔ)上利用預(yù)計(jì)算技術(shù)實(shí)現(xiàn)了快速加密。除此之外,即使SDN用戶或者設(shè)備暴露了私鑰,其他非法用戶也無法通過該私鑰獲取任何有用的消息明文,可以有效防止私鑰暴露產(chǎn)生的信息泄露風(fēng)險。因此在訪問控制的功能上,本文提出的方案具有顯著的優(yōu)勢。
為進(jìn)一步驗(yàn)證基于AKE-CP-ABFE的SDN跨間訪問控制模型的性能,進(jìn)行了一系列加解密仿真實(shí)驗(yàn)。本系統(tǒng)的仿真硬件為Intel (R)Core(TM) i7-5600U@2.6 GHz,內(nèi)存為8 G,系統(tǒng)為Cent OS 6.7, 使用代碼庫為JPBC 1.2.1,實(shí)驗(yàn)基于256位的橢圓曲線,曲線階為120 bit的大素?cái)?shù)。實(shí)驗(yàn)分別基于文獻(xiàn)[12]、文獻(xiàn)[18]以及AKE-CP-ABFE構(gòu)建了SDN域間訪問控制模型,并在不同的屬性數(shù)量條件下記錄了20次加解密所需的平均時間。
基于以上3種算法構(gòu)建的SDN域間訪問控制模型在不同屬性數(shù)量情況下的平均加密時間如圖2所示??梢钥闯?,基于文獻(xiàn)[18]算法的方案的加密時間要高于基于文獻(xiàn)[12]算法的方案,這是因?yàn)槲墨I(xiàn)[18]的方案構(gòu)建了一種重加密機(jī)制,使得方案在執(zhí)行解密的過程中可以將龐大的解密計(jì)算部分外包給第三方,同時方便解密者更新屬性集合。而在相同屬性數(shù)量條件下,基于AKE-CP-ABFE的SDN訪問控制方案的平均解密時間約為基于文獻(xiàn)[12]方案的50%,即只需要一般的算力就可以完成相同的加密計(jì)算。因此本文提出的模型具備較高的加密效率。
圖2 平均加密時間對比
圖3展示了基于3種方案構(gòu)建的SDN域間訪問控制模型在不同屬性數(shù)量情況下的平均解密時間??梢钥闯鲈诓煌瑢傩詳?shù)量情況下,文獻(xiàn)[18]的方案所需的解密時間都是最多的,而且隨著屬性數(shù)量增加,與文獻(xiàn)[12]方案以及AKE-CP-ABFE方案的解密時間差越大。這是因?yàn)閷傩栽蕉啵~外關(guān)于重加密以及屬性更新的計(jì)算操作就越復(fù)雜。而基于AKE-CP-ABFE算法構(gòu)建的SDN訪問控制模型在解密時間上與文獻(xiàn)[12]方案相當(dāng),但在解密過程中需要進(jìn)行MAC地址驗(yàn)證所以要多消耗平均9 ms的計(jì)算時間,總體來說幾乎不產(chǎn)生過多的計(jì)算量。因此本文提出的方案在解密過程中仍能保持較好的計(jì)算效率。
圖3 平均解密時間對比
隨著計(jì)算機(jī)網(wǎng)絡(luò)規(guī)模的擴(kuò)大,網(wǎng)絡(luò)管理的難度與日俱增,大型復(fù)雜網(wǎng)絡(luò)呈現(xiàn)爆發(fā)式增長。SDN作為一種控制與數(shù)據(jù)分離的新型網(wǎng)絡(luò)架構(gòu),為大型網(wǎng)絡(luò)提供了全新的集中化管理與配置方法。與此同時如何提供安全的信息保護(hù)以及靈活的訪問控制機(jī)制以保證用戶及設(shè)備的隱私,正成為部署SDN尤其是多控制器設(shè)置下的大型SDN的關(guān)鍵問題。本文提出了一種抗密鑰暴露快速屬性加密算法,利用預(yù)計(jì)算技術(shù)使得加密者在進(jìn)行加密時無需進(jìn)行任何復(fù)雜運(yùn)算,提高了加密效率。同時基于拓展圖技術(shù)進(jìn)一步降低了預(yù)計(jì)算的存儲開銷。除此之外,將用戶或者設(shè)備的MAC地址嵌入到私鑰當(dāng)中,即使將私鑰有意或者無意地暴露給其他非法用戶或者設(shè)備也不會泄露任何敏感信息。理論分析和仿真實(shí)驗(yàn)表明,基于該算法構(gòu)建的SDN域間信息訪問控制系統(tǒng)模型,降低了開源API造成的用戶或者網(wǎng)絡(luò)設(shè)備敏感信息泄露的風(fēng)險,同時能以較高的計(jì)算效率保證敏感信息域間分享的安全性和靈活性。如何在屬性動態(tài)變化的環(huán)境中保證SDN訪問控制的有效性將是下一步的研究方向。