呂金娜,張志軍
(1.河南科技學(xué)院,河南 新鄉(xiāng) 453003;2.空軍 95824部隊(duì),北京 100195)
安全群組通信系統(tǒng)[1]是構(gòu)建可靠到網(wǎng)絡(luò)應(yīng)用程序的中間件,有利于實(shí)現(xiàn)程序設(shè)計(jì)的模塊化結(jié)構(gòu),降低程序設(shè)計(jì)的時(shí)間與減少程序的漏洞.最近幾年,在學(xué)術(shù)與工業(yè)領(lǐng)域,安全群組通信系統(tǒng)已成為集群服務(wù)器和復(fù)制產(chǎn)品的標(biāo)準(zhǔn)構(gòu)件.
現(xiàn)有安全群組通信只能防止一些主動(dòng)攻擊或者被動(dòng)攻擊,基本上還是第一代網(wǎng)絡(luò)安全防御技術(shù)的思想,能夠?qū)崿F(xiàn)數(shù)據(jù)的保密性、獨(dú)立性、前向保密性及后向保密性等,但是很難預(yù)防帶有容忍入侵式攻擊,如內(nèi)部攻擊、叛變攻擊等.大部分群組通信系統(tǒng)[2-3]忽視Byzantine故障的原因是群組通信系統(tǒng)用于集群應(yīng)用中,這些應(yīng)用程序運(yùn)行在局域網(wǎng)內(nèi),在這較為緊湊的環(huán)境內(nèi)都假設(shè)成員是可信的.現(xiàn)在大部分工作均處在異步異構(gòu)網(wǎng)絡(luò)環(huán)境下,如Internet環(huán)境,所以群組成員的可信度是很低的,達(dá)不到可信組成員的標(biāo)準(zhǔn).一些組成員的惡意攻擊,如進(jìn)程出錯(cuò),發(fā)布不一致的消息或者群組協(xié)商時(shí)讓其它成員無(wú)限等待消息.基于這種思想,設(shè)計(jì)一種Byzantine故障環(huán)境下的安全群組通信方案,旨在抵抗群組成員的叛變攻擊.
在Byzantine故障環(huán)境下,安全群組通信系統(tǒng)從結(jié)構(gòu)上可劃分為四層:可靠多播層,全序多播層,群組管理層,通信安全層(圖1).其中可靠多播層用于發(fā)送的信息被接收方正確接收到要通過(guò)通過(guò)可靠性保證措施,即數(shù)據(jù)重傳機(jī)制;全序多播層用于通過(guò)全序多播協(xié)議提供發(fā)送方到接收方群組各成員的可靠、有序的信息傳送的保證;群組管理層包括群組地址分配、群組的建立、群組的關(guān)閉、群組成員的動(dòng)態(tài)加入和退出、錯(cuò)誤恢復(fù)等功能,通過(guò)為群組群組分配地址,所有發(fā)送到這個(gè)群組的信息都以這個(gè)群組地址為接收方地址,所有組成員都接收發(fā)送到該群組的數(shù)據(jù);通信安全層主要從群組管理層的安全性角度出發(fā),進(jìn)行群組密鑰管理,保證成員加入的合法性、離開后的安全性等性質(zhì),群組密鑰管理主要包括密鑰的產(chǎn)生、交換、存儲(chǔ)、更新和銷毀等操作.
圖1 安全群組通信分層結(jié)構(gòu)
完善的通信安全層需要提供的安全服務(wù),包括認(rèn)證服務(wù)、訪問(wèn)控制服務(wù)、數(shù)據(jù)機(jī)密服務(wù)、數(shù)據(jù)完整性服務(wù)、數(shù)據(jù)源點(diǎn)認(rèn)證服務(wù)等.通過(guò)密鑰協(xié)商協(xié)議維護(hù)一個(gè)組成員共享的群組密鑰保護(hù)組內(nèi)數(shù)據(jù)不被非組成員破譯;使用加密算法保證數(shù)據(jù)機(jī)密性.數(shù)據(jù)完整性由高速M(fèi)AC算法保證;對(duì)客戶端加入或離開進(jìn)行身份認(rèn)證,對(duì)系統(tǒng)資源進(jìn)行訪問(wèn)控制;對(duì)于在Byzantine故障環(huán)境下,能夠應(yīng)對(duì)組成員的惡意攻擊等.為了實(shí)現(xiàn)上述安全服務(wù),設(shè)計(jì)通信安全層至少包含四個(gè)模塊:加密模塊、密鑰協(xié)商模塊、Byzantine模塊和認(rèn)證與訪問(wèn)控制模塊(圖2).
圖2 通信安全層結(jié)構(gòu)
(1)認(rèn)證與訪問(wèn)控制模塊當(dāng)一個(gè)客戶端應(yīng)用程序連接服務(wù)器組時(shí),服務(wù)器組對(duì)其進(jìn)行認(rèn)證[4],必須是合法用戶.當(dāng)客戶端應(yīng)用程序加入群組后,對(duì)群組的信息源認(rèn)證以及資源的訪問(wèn)控制.
(2)Byzantine模塊Byzantine探測(cè)模塊進(jìn)行心跳檢測(cè),當(dāng)發(fā)現(xiàn)有群組成員進(jìn)行異常時(shí),就調(diào)用Byzantine協(xié)議模塊進(jìn)行協(xié)商,通過(guò)認(rèn)證模塊確定叛變成員以避免惡意攻擊行為保證系統(tǒng)正常運(yùn)行.
(3)加密模塊客戶端發(fā)送數(shù)據(jù)要進(jìn)行加密時(shí),調(diào)用加密模塊.該模塊共有三個(gè)部分:①加密引擎,當(dāng)檢測(cè)到發(fā)送消息時(shí),該模塊傳遞信息給加密選擇器;②加密選擇器,當(dāng)加密引擎送來(lái)信號(hào)時(shí),加密選擇器就調(diào)用一個(gè)加密算法;③加密算法,加密算法序列集合提供DES,AES,Blowfish加密算法.
(4)密鑰協(xié)商模塊該模塊功能是根據(jù)加密算法協(xié)商群組密鑰用于加密組內(nèi)數(shù)據(jù).當(dāng)群組成員有加入、離開或更新密鑰時(shí),密鑰協(xié)商協(xié)議重新協(xié)商群組密鑰.該模塊也分三個(gè)部分:①密鑰協(xié)商引擎,當(dāng)客戶端應(yīng)用程序加入、離開或者密鑰更新時(shí),密鑰協(xié)商引擎被觸發(fā),并傳遞值到密鑰協(xié)商選擇器;②密鑰協(xié)商選擇器,當(dāng)密鑰協(xié)商引擎送來(lái)信號(hào)時(shí),密鑰協(xié)商選擇器就調(diào)用密鑰協(xié)商協(xié)議;③密鑰協(xié)商協(xié)議,密鑰協(xié)商協(xié)議序列集合提供TGDH協(xié)議,STR協(xié)議,GDH協(xié)議,BD協(xié)議及CKD協(xié)議[5].
假定有m個(gè)叛徒的Byzantine[6]環(huán)境,其算法OM(m),m>0
(1)司令官發(fā)送他的值給每一個(gè)副官;
(2)對(duì)于每一個(gè)i,用vi表示第i個(gè)副官?gòu)乃玖罟偬幗邮盏降南?當(dāng)它沒有接收到來(lái)自司令官的值時(shí),則采用默認(rèn)值.第i個(gè)副官扮演算法OM(m-1)中的司令官,將值vi發(fā)送給其它n-2個(gè)副官中的每一個(gè);
(3)對(duì)于每一個(gè)i,以及不等于i的每一個(gè)j,用vj表示在算法OM(m-1)的第2步中將軍i從將軍j處接收到的消息.當(dāng)它沒有接收到任何消息時(shí),則采用默認(rèn)值.將軍i使用majority(v1,...,vn-1)求出最終的值.
從通信安全層具體的實(shí)現(xiàn)模式上把通信安全層的安全服務(wù)分為兩部分,認(rèn)證與訪問(wèn)控制模塊與密鑰協(xié)商模塊放在服務(wù)器端,把加密算法模塊與Byzantine模塊放在客戶端函數(shù)庫(kù)內(nèi).在服務(wù)器端主要有認(rèn)證與訪問(wèn)控制模塊與密鑰協(xié)商模塊.通過(guò)在客戶端函數(shù)庫(kù)設(shè)計(jì)一個(gè)函數(shù)來(lái)完成從服務(wù)器組密鑰到客戶端群組密鑰的映射.服務(wù)器端通信安全層為如下圖3所示.
圖3 服務(wù)器端通信安全層
客戶端函數(shù)庫(kù)內(nèi)容由加密模塊與一個(gè)單向函數(shù)f_key_s-c(…)構(gòu)成如圖4所示.
圖4 客戶端函數(shù)庫(kù)
其中設(shè)計(jì)單向函數(shù)目的是完成從服務(wù)器組密鑰到客戶端群組密鑰的映射.函數(shù)參數(shù):服務(wù)器組密鑰、群組名與群組成員數(shù)量.服務(wù)器組密鑰:服務(wù)器組間調(diào)用群組密鑰協(xié)商協(xié)議協(xié)商的組密鑰;群組名:客戶端申請(qǐng)加入群組名稱;群組成員數(shù)量:一個(gè)群組動(dòng)態(tài)標(biāo)識(shí).此設(shè)計(jì)單向函數(shù):f_key_s-c(chararray[i],chara[j],intk).該函數(shù)功能:通過(guò)三個(gè)輸入?yún)?shù)返回一個(gè)字符數(shù)組;具體函數(shù)偽代碼如下:
(1)輸入 chararray[i],chara[j],intk;
(2)求出數(shù)組 array[i],的長(zhǎng)度 length(array[i]);
(3)求出字符數(shù)組 a[j]的長(zhǎng)度 length(a[j]);
(4)求 length(a[j])與 k 的和 num=length(a[j])+k;
(5)if(num=length(array[i]))thennum+=1;
(6)if(length(array[i]%2=0))循環(huán)左移num次;
(7)else循環(huán)右移num次;
(8)returnarray[i];
本方案運(yùn)行分為服務(wù)器啟動(dòng)、客戶端端連接、客戶端加入群組.服務(wù)器啟動(dòng)包括連接服務(wù)器成為一個(gè)服務(wù)器組,為后來(lái)客戶端應(yīng)用程序通信提供消息傳輸?shù)确?wù);客戶端連接主要是指服務(wù)器與客戶端的連接,基于負(fù)載均衡的思想,使安全服務(wù)包含在客戶端與服務(wù)器兩端.客戶端經(jīng)過(guò)連接服務(wù)器后要進(jìn)行群組通信就要加入群組,組通信維護(hù)于連接的客戶端應(yīng)用程序之中,具有實(shí)時(shí)性.
假定服務(wù)器組為S={S1,S2,…,Sm}.客戶端應(yīng)用程序組為C={C1,C2,…,Cn}.一般情況下m< Step1:服務(wù)器Sj請(qǐng)求加入服務(wù)器組S; Step2:檢查服務(wù)器組的請(qǐng)求服務(wù)器的IP列表是否與匹配.如果匹配,允許加入,否則不允許加入;Step3:服務(wù)器組生成新的成員關(guān)系ID發(fā)送給每一服務(wù)器組成員. 客戶端應(yīng)用程序Ci連接服務(wù)器組S,客戶端通過(guò)調(diào)用連接函數(shù)連接客戶端,安全群組通信采用C/S通信模式,在這個(gè)過(guò)程要對(duì)客戶端應(yīng)用程序Ci進(jìn)行認(rèn)證.認(rèn)證機(jī)制的目的在于確認(rèn)潛在的組成員的身份,并為訪問(wèn)控制模塊提供必要的主體信息.認(rèn)證主要是對(duì)客戶端所宣稱的身份認(rèn)證,在客戶端與服務(wù)器端均有認(rèn)證模塊,分為客戶端認(rèn)證模塊與服務(wù)器端認(rèn)證模塊,其認(rèn)證過(guò)程如下: Step1:客戶端Ci調(diào)用客戶端函數(shù)庫(kù)的設(shè)置認(rèn)證方法函數(shù); Step2:客戶端向服務(wù)器端請(qǐng)求連接并發(fā)送用戶ID與其他信息給服務(wù)器組S; Step3:服務(wù)器組S接收到連接后發(fā)送一個(gè)所有允許認(rèn)證方法列表給客戶端Ci; Step4:客戶端Ci根據(jù)返回的列表,選擇認(rèn)證方法并提供相關(guān)信息客戶端ID,用戶名稱等并發(fā)送給服務(wù)器組S; Step5:服務(wù)器組就調(diào)用對(duì)應(yīng)的認(rèn)證函數(shù)對(duì)客戶端Ci進(jìn)行認(rèn)證; Step6:如果認(rèn)證超過(guò)時(shí)間閾值△t,就調(diào)用對(duì)應(yīng)的回調(diào)函數(shù)終止認(rèn)證過(guò)程,斷開連接; Step7:認(rèn)證模塊把認(rèn)證結(jié)果返回給后臺(tái)程序; Step8:如果認(rèn)證成功后臺(tái)程序允許該連接請(qǐng)求,否則斷開連接. 認(rèn)證是由客戶端與服務(wù)器之間完成,主要有服務(wù)器組對(duì)客戶端進(jìn)行認(rèn)證.認(rèn)證結(jié)束后進(jìn)行訪問(wèn)控制,訪問(wèn)控制機(jī)制在群組成員之間完成.由于各成員之間都是對(duì)等的關(guān)系,不存在中心控制點(diǎn),所以每當(dāng)新成員加入時(shí),所有該群成員都要參與新成員加入的決策.加入策略應(yīng)由群組創(chuàng)建者來(lái)確定,并且由當(dāng)前群組成員共同協(xié)商完成維護(hù).因此,訪問(wèn)控制機(jī)制應(yīng)分為兩部分,組創(chuàng)建過(guò)程與新成員加入.在對(duì)等群組通信中,組策略應(yīng)該有組創(chuàng)建者首先創(chuàng)建并有以后加入的所有成員共同維護(hù).組創(chuàng)建者要規(guī)定自己的組策略,其組策略創(chuàng)建過(guò)程如圖5所示. 圖5 組策略創(chuàng)建過(guò)程 在這個(gè)階段客戶端程序Cn+1要加入群組C進(jìn)行通信,群組C是由客戶端程序組成C={C1,C2,…,Cn}.新成員Cn+1加入之前,組策略不變的.若需要改變,組成員共同協(xié)定.組創(chuàng)建者應(yīng)規(guī)定組成員是否允許加入其它組、單播、多播、廣播等,因此當(dāng)允許新成員Cn+1加入時(shí),其組策略只需要由組成員發(fā)送給其新成員即可. Step1:新成員Cn+1發(fā)送一條加入請(qǐng)求消息給群組C; Step2:群組C的所有組成員協(xié)商完成加入組策略; Step3:所有成員發(fā)送贊成消息或拒絕消息給其他成員; Step4:每個(gè)群組成員計(jì)算收到的信息來(lái)確定是否同意新成員加入,若拒絕加入群組C,所有組成員發(fā)送拒絕消息給新成員Cn+1,否則轉(zhuǎn)入下一步; Step5:群組C的任意一個(gè)成員發(fā)送加入策略給新成員Cn+1; Step6:新成員Cn+1收到允許加入群組C的消息并收到組策略; Step7:服務(wù)器組檢測(cè)群組成員關(guān)系變化或密鑰更新請(qǐng)求時(shí),服務(wù)器組調(diào)用密鑰協(xié)商協(xié)議計(jì)算服務(wù)器組密鑰; Step8:群組C的所有成員調(diào)用客戶端函數(shù)庫(kù)群組密鑰計(jì)算函數(shù)f_key_s-c(chararray[i],chara[j],int k)計(jì)算出群組C的群組密鑰; Step9:客戶端運(yùn)行Byzantine協(xié)議,檢測(cè)所有組成員為忠誠(chéng)的組成員進(jìn)入下一步,否則刪除掉叛變者,進(jìn)入Step3; Step10:檢查客戶端是否請(qǐng)求加入其他群組.如果是,則轉(zhuǎn)到Step7,否則下一步; Step11:服務(wù)器組S檢測(cè)是否更新服務(wù)器組密鑰,如果是,則轉(zhuǎn)到Step19,否則下一步; Step12:服務(wù)器組S檢測(cè)是否客戶端離開群組C,如果是,則轉(zhuǎn)到Step10,否則下一步; Step13:服務(wù)器組S檢測(cè)是否客戶端加入群組C,如果是,則轉(zhuǎn)到Step1,否則停止. 為了提高群組通信系統(tǒng)安全性及具有容忍入侵性,本文提出了一種Byzantine故障環(huán)境下的安全群組通信方案:在安全群組通信的通信安全層中引入Byzantine協(xié)議.通過(guò)采用Byzantine機(jī)制在組成員間達(dá)成一致的意見,從而檢測(cè)出叛變者.在忠誠(chéng)的組成員之間進(jìn)行密鑰協(xié)商,從而能夠保證在組密鑰協(xié)商之前參與協(xié)商的群組成員不是叛變者,與以前方案相比,該方案能夠防御內(nèi)部攻擊,但是它在通信開銷與計(jì)算開銷都有所增加. [1]CristinaNita-Rotaru.High-Performance Secure GroupCommunication[M].Baltimore,Maryland,2003. [2]Ohad R,Kenneth P B,Danny D.The Architecture and Performance of Security Protocols in the Ensemble Group Communication SystemUsingDiamonds toguardthe castle[J].ACMTrans onInformationandSystemSecurity(TISSEC),2001,4(3):289-319. [3]YairAmir.Secure Spread An integrated Architecture forsecure Group Communication[J].IEEE transactions on dependable and secure computing,2005,2(3):248-261. [4]YairA,Nita-Rotaru C,Stanton J.Framework forauthentication and access control of client-servergroup communication systems[R/OL].CNDS2001-2,Johns Hopkins University,Center of Networking and Distributed Systems,2001.http://www.cnds.jhu.edu/publications/. [5]YairAmir.Onthe Performance ofGroupKeyAgreementProtocols[J].ACMTransactions oninformation,2004,7(3):457-488. [6]Leslie Lamport.The Byzantine Generals Problem[J].ACMTransactions on Programming Languages and Systems,1982,4(3):382-401.2.2 客戶端連接服務(wù)器組
2.3 客戶端加入群組
3 結(jié)論