專利名稱::一種基于avl樹的分布式密鑰更新方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于計算機網(wǎng)絡(luò)安全領(lǐng)域,特別涉及組播密鑰管理方案的技術(shù)。技術(shù)背景隨著組播技術(shù)在電視會議、網(wǎng)絡(luò)游戲等方面日益廣闊的應(yīng)用,組播的安全性問題也逐漸凸現(xiàn)。對傳輸?shù)臄?shù)據(jù)進行加密是保證數(shù)據(jù)安全性的最重要的手段。對一個組播系統(tǒng)來說,如何對用來加密數(shù)據(jù)的密鑰進行管理是一個核心的問題。密鑰的管理是一個復(fù)雜的過程,包括密鑰的生成,密鑰的存儲,密鑰的傳輸,以及密鑰的更新等。首先一個組播系統(tǒng)要生成數(shù)據(jù)源與組成員之間互相對應(yīng)的密鑰。由誰以何種方式來生成密鑰,這涉及到系統(tǒng)成員之間的一個分工和相互信任的問題。當(dāng)密鑰生成以后,如何將密鑰傳輸?shù)叫枰挠脩簦且粋€關(guān)鍵的問題。由于密鑰關(guān)系到了整個組播系統(tǒng)的安全問題,一旦密鑰被竊取或修改,將導(dǎo)致整個組播系統(tǒng)被擊潰或無法進行正常工作。同時,由于密鑰的重要性,各個節(jié)點的密鑰如何存儲,也是一個需要解決的問題。最后的一個問題也是最復(fù)雜的問題,如何進行密鑰的更新。由于組播系統(tǒng)的成員總是處在不停的變化當(dāng)中,隨時都有成員加入或離開,為了保證前向和后向安全性,每一次新用戶的加入或已有用戶的離開都需要對組播系統(tǒng)的密鑰進行更新。但由于組播系統(tǒng)密鑰的復(fù)雜性,以及其更新的頻繁性,如何有效,安全的更新組播組密鑰,成為密鑰管理系統(tǒng)主要需要解決的問題。為了解決密鑰管理中一系列的問題,研究人員進行了大量的工作。己有的密鑰管理方案按結(jié)構(gòu)大致可以分為三類集中式,分布式和分層分組式。在集中式的方案中,整個組播系統(tǒng)有一個中央管理器來負責(zé)密鑰的生成、存儲和更新。這種方案的最大缺點在于容易出現(xiàn)單點失效,當(dāng)中央管理器出現(xiàn)故障時,整個組播系統(tǒng)將陷于癱瘓。分布式的密鑰管理方案是指組播系統(tǒng)中不存在中央管理器,每個用戶都是獨立的通信實體,它們通過某種密鑰協(xié)商算法生成組密鑰。這種方案克服了集中式管理方案的單點失效的缺陷,大大增強了系統(tǒng)的魯棒性;但同時也由于缺少集中控制而給整個組播組的管理帶來了困難。分層分組式管理方案結(jié)合了集中式和分布式的優(yōu)點,將整個組播組分成若干個子組,每個子組由不同的子組控制器管理。所有子組之間可以是分布關(guān)系,或是由一個中央控制節(jié)點在最高層進行集中控制。在分布式的密鑰管理方案中,基于單向函數(shù)樹的分布式方案得到了充分的重視和研究。單向函數(shù)(0neiayFunction)是這樣一種函數(shù)g(x),當(dāng)給定任舄參數(shù)x,可以計算得到g(x)的值;而當(dāng)給定g00,不可能通過計算得到x。如Hash散列函數(shù)就是典型的單向函數(shù)。密鑰由單向函數(shù)產(chǎn)生,同時引入邏輯樹對密鑰進行管理。這種方案適合于組播系統(tǒng)中用戶成員關(guān)系動態(tài)變化的、無中央控制節(jié)點的、要求組播系統(tǒng)的組密鑰GK由各合法用戶共同參與協(xié)商產(chǎn)生的、需要前向和后向安全、中小規(guī)模的組播系統(tǒng)。如圖l所示是一棵典型的單向函數(shù)邏輯密鑰樹。整個組播系統(tǒng)對應(yīng)著這棵密鑰樹。樹中的每個葉子節(jié)點對應(yīng)著一個實際用戶。從根節(jié)點開始對每個節(jié)點進行編號。根節(jié)點編號為0,然后依次編號為v的節(jié)點的左兒子節(jié)點編號為2v+l,右兒子節(jié)點編號為2v+2。圖1中,編號為7、8、4、5、13、14的葉子節(jié)點分別對應(yīng)著用戶"、t/2、C/3、"、t/5、t/6。每一個節(jié)點分別對應(yīng)著不同的節(jié)點密鑰。根節(jié)點對應(yīng)的組密鑰/:。用于數(shù)據(jù)的加密與解密。任意的非葉子節(jié)點v對應(yīng)的密鑰由公式Kv=/(S尺2v+1,JBK2v+2;)得到。其中,/是一個混合函數(shù)(MixingFunction),Bi^+,、S^^+2是節(jié)點v的左、右子節(jié)點對應(yīng)的盲鑰(BlindedKey)。任意節(jié)點z'的盲鑰由公式5義,=)得到,其中,g是單向函數(shù)(One-wayFunction)。也就是&=/&(《2,+1),g(《2v+2))。從葉子節(jié)點到根節(jié)點路徑上的節(jié)點(根節(jié)點除外)稱為關(guān)鍵路徑節(jié)點,每個用戶節(jié)點保存它自己的密鑰和它的兄弟節(jié)點的盲鑰以及它的關(guān)鍵路徑節(jié)點的兄弟節(jié)點的盲鑰。圖1中,用戶"保存的密鑰有(尤7、5〖8、5《4、5K2),通過計算就能得到(&、《、《。)。對每個非葉子節(jié)點v,定義一個責(zé)任節(jié)點集合及M"它是以v的兄弟節(jié)點為根節(jié)點的子樹的葉子節(jié)點的集合。圖1中,={t/4,"5,t/6},WM5={t/5,C/6}。責(zé)任節(jié)點集合iM,的作用就在于當(dāng)密鑰更新發(fā)生時,節(jié)點v必須將自身的盲鑰發(fā)送給責(zé)任節(jié)點集合中的用戶。如圖1所示,當(dāng)密鑰更新發(fā)生時,節(jié)點1的盲鑰^&將被發(fā)送給節(jié)點1的責(zé)任節(jié)點集合中的所有用戶^/4、f/5、"6,而B^被發(fā)送給^、〃6。為了減輕用戶頻繁加入或退出引起的密鑰頻繁更新,已有的方案大都采用批量密鑰更新的方式,即新加入的節(jié)點先不直接加入到組播系統(tǒng)中去,而是先自行構(gòu)建一棵子密鑰樹,然后子密鑰樹再和原密鑰樹合并。這里的子密鑰樹是指要新加入的那一部分節(jié)點在密鑰更新過程開始前,先自行組織形成的一棵密鑰樹,子密鑰樹也是一棵單向函數(shù)邏輯密鑰樹。批量密鑰更新的過程分為兩個階段子密鑰樹形成階段、子密鑰樹與原密鑰樹合并階段。具體步驟為子密鑰樹形成階段,包括以下步驟1)對要加入組播系統(tǒng)的用戶節(jié)點,如果不存在子密鑰樹,則創(chuàng)建一棵該用戶節(jié)點的子密鑰樹;如果已經(jīng)存在子密鑰樹,則將該用戶節(jié)點加入到該子密鑰樹中最淺的節(jié)點處(最淺的節(jié)點是指到根節(jié)點距離最短的葉子節(jié)點);2)對要離開的用戶節(jié)點,將它標記到離開用戶節(jié)點集合;子密鑰樹與原密鑰樹合并階段,包括以下步驟-.3)若離開用戶節(jié)點集合中沒有要離開的節(jié)點,且子密鑰樹與原密鑰樹的高度差不超過2,'則直接增加新的根節(jié)點,子密鑰樹和原密鑰樹分別作為該根節(jié)點的左、右子樹,形成新的密鑰樹;若子密鑰樹與原密鑰樹的高度差大于2,則將子密鑰樹直接插入到原密鑰樹最淺的節(jié)點處,形成新的密鑰樹;4)如果離開用戶節(jié)點集合中有要離開的節(jié)點,則先將子密鑰樹插入到原密鑰樹最淺的節(jié)點處,然后,將要離開的節(jié)點從原密鑰樹中移除,形成新的密鑰樹;5)選擇以離開節(jié)點的兄弟節(jié)點作為根節(jié)點的子樹的最左葉子節(jié)點為觸發(fā)節(jié)點,發(fā)起新的密鑰樹的密鑰更新,(具體更新方法如上所述);批量密鑰更新方式能有效緩解頻繁更新帶來的消耗,但當(dāng)多用戶同時加入和退出時,新形成的密鑰樹很有可能失去平衡而導(dǎo)致用戶節(jié)點保存的密鑰數(shù)大大增加。這里所說的平衡是指,在一棵密鑰樹中,每個節(jié)點的左子樹和右子樹的高度最多差1(上下游的兩個節(jié)點的高度為1,只有一個節(jié)點的樹的高度定義為-1)。一種密鑰更新后密鑰樹失去平衡的情況如圖2所示。圖2中的密鑰樹經(jīng)過用戶的加入和離開更新后(右邊的樹),節(jié)點1的左子樹的高度為-1,右子樹的高度為2,高度差為3,因此失去了平衡。這就導(dǎo)致了組播系統(tǒng)中的一些用戶節(jié)點保存的密鑰數(shù)大大增加,使得系統(tǒng)的存儲開銷增大了。
發(fā)明內(nèi)容本發(fā)明提出了一種基于AVL樹的分布式密鑰更新方法。該方法基于AVL樹的平衡特性和旋轉(zhuǎn)操作,能在維持單向函數(shù)邏輯密鑰樹的分布式性能的基礎(chǔ)上,有效解決單向函數(shù)樹失去平衡的問題,從而減少系統(tǒng)的存儲開銷。本發(fā)明提出的一種基于AVL樹的分布式組密鑰更新方法,不僅包括子密鑰樹形成階段、子密鑰樹合并階段;其特征在于,還包括AVL旋轉(zhuǎn)階段。所述子密鑰樹形成階段,包括以下步驟1)對要加入組播系統(tǒng)的用戶節(jié)點,如果不存在子密鑰樹,則創(chuàng)建一棵該用戶節(jié)點的子密鑰樹;如果己經(jīng)存在子密鑰樹,則將該用戶節(jié)點加入到該子密鑰樹中最淺的節(jié)點處(最淺的節(jié)點是指到根節(jié)點距離最短的葉子節(jié)點);2)對要離開的用戶節(jié)點,將它標記到離開用戶節(jié)點集合;所述子密鑰樹與原密鑰樹合并階段,包括以下步驟3)若離開用戶節(jié)點集合中沒有要離開的節(jié)點,且子密鑰樹與原密鑰樹的高度差不超過2,則直接增加新的根節(jié)點,子密鑰樹和原密鑰樹分別作為該根節(jié)點的左、右子樹,形成新的密鑰樹;若子密鑰樹與原密鑰樹的高度差大于2,則將子密鑰樹直接插入到原密鑰樹最淺的節(jié)點處,形成新的密鑰樹;4)如果離開用戶節(jié)點集合中有要離開的節(jié)點,則先將子密鑰樹插入到原密鑰樹最淺的節(jié)點處,然后,將要離開的節(jié)點從原密鑰樹中移除,形成新的密鑰樹;5)選擇以離開節(jié)點的兄弟節(jié)點作為根節(jié)點的子樹的最左葉子節(jié)點為觸發(fā)節(jié)點,由該節(jié)點發(fā)起新的密鑰樹的密鑰更新;所述AVL旋轉(zhuǎn)階段包括以下步驟6)如果新形成的密鑰樹失去平衡,則對新的密鑰樹進行AVL旋轉(zhuǎn),直到它重新恢復(fù)平衡為止;7)選擇該新密鑰樹的所有的葉子節(jié)點全為新加入節(jié)點的子樹的最左葉子節(jié)點作為觸發(fā)節(jié)點;8)由5)和7)中的觸發(fā)節(jié)點開始發(fā)起整個密鑰樹的密鑰更新過程。本發(fā)明的特點及效果本發(fā)明提出的基于AVL樹的分布式組密鑰管理方案,在充分利用單向函數(shù)邏輯密鑰樹和AVL旋轉(zhuǎn)樹的基礎(chǔ)上,有效解決了密鑰的生成、存儲和更新問題,使得每個用戶在協(xié)商產(chǎn)生密鑰的機制下,存儲密鑰數(shù)最少,更新的資源消耗最小。圖1為一棵典型的單向函數(shù)邏輯密鑰樹;圖2為用戶同時加入和退出后,單向函數(shù)邏輯密鑰樹失去平衡的一種情況;圖3為本發(fā)明方法的子密鑰樹形成階段的流程框圖;圖4為本發(fā)明方法的子密鑰樹與原密鑰樹合并階段的流程框圖;圖5(a)為一棵AVL樹,(b)是一棵普通的樹;圖6為AVL樹的單旋轉(zhuǎn)過程;圖7為一棵新形成的子密鑰樹;圖8為子密鑰樹插入到原密鑰樹后形成的新密鑰樹;圖9為離開用戶節(jié)點集合中的用戶離開后,形成的密鑰樹;圖10為圖9經(jīng)過調(diào)整后最終得到的新密鑰樹;圖11為圖IO的AVL旋轉(zhuǎn)過程;圖12為實施例2中第一次的旋轉(zhuǎn)過程;圖13為實施例2中第二次的旋轉(zhuǎn)過程;具體實施方式本發(fā)明提出了一種基于AVL樹的分布式密鑰管理方案。下面結(jié)合附圖及具體的實施例進行詳細說明本發(fā)明方法的流程如圖3、圖4所示,包括以下步驟子密鑰樹形成階段,如圖3所示,包括以下步驟1)對要加入組播系統(tǒng)的用戶節(jié)點,如果不存在子密鑰樹,則創(chuàng)建一棵該用戶節(jié)點的子密鑰樹;如果已經(jīng)存在子密鑰樹,則將該用戶節(jié)點加入到該子密鑰樹中最淺的節(jié)點處(最淺的節(jié)點是指到根節(jié)點距離最短的葉子節(jié)點);2)對要離開的用戶節(jié)點,將它標記到離開用戶節(jié)點集合;子密鑰樹與原密鑰樹合并階段,如圖4所示,包括以下步驟3)若離開用戶節(jié)點集合中沒有要離開的節(jié)點,且子密鑰樹與原密鑰樹的高度差不超過2,則直接增加新的根節(jié)點,子密鑰樹和原密鑰樹分別作為該根節(jié)點的左、右子樹,形成新的密鑰樹;若子密鑰樹與原密鑰樹的高度差大于2,則將子密鑰樹直接插入到原密鑰樹最淺的節(jié)點處,形成新的密鑰樹;4)如果離開用戶節(jié)點集合中有要離開的節(jié)點,則先將子密鑰樹插入到原密鑰樹最淺的節(jié)點處,然后,將要離開的節(jié)點從原密鑰樹中移除,形成新的密鑰樹;5)選擇以離開節(jié)點的兄弟節(jié)點作為根節(jié)點的子樹的最左葉子節(jié)點為觸發(fā)節(jié)點,由該節(jié)點發(fā)起新的密鑰樹的密鑰更新;AVL旋轉(zhuǎn)階段包括以下步驟-6)如果新形成的密鑰樹失去平衡,則對新的密鑰樹進行AVL旋轉(zhuǎn),直到它重新恢復(fù)平衡為止;7)選擇該新密鑰樹的所有的葉子節(jié)點全為新加入節(jié)點的子樹的最左葉子節(jié)點作為觸發(fā)節(jié)點;8)由5)和7)中的觸發(fā)節(jié)點開始發(fā)起整個密鑰樹的密鑰更新過程。本發(fā)明采用的AVL樹是帶有平衡條件的二叉樹,它的每個節(jié)點的左子樹和右子樹的高度最多差l。如圖5(a)所示,圖5(b)則不是AVL樹。當(dāng)有新節(jié)點插入時,樹的平衡可能被破壞。把需要重新平衡的節(jié)點叫做",不平衡性有四種可能的情況(1)對a的左兒子的左子樹進行一次插入;(2)對"的左兒子的右子樹進行一次插入;(3)對"的右兒子的左子樹進行一次插入;(4)對a的右兒子的右子樹進行一次插入。為了保持樹的平衡性,定義了單旋轉(zhuǎn)和雙旋轉(zhuǎn)兩種操作。單旋轉(zhuǎn)應(yīng)用于(1)(4)對應(yīng)的的情況,而雙旋轉(zhuǎn)應(yīng)用于(2)(3)對應(yīng)的情況。一個簡單的單旋轉(zhuǎn)的例子如圖6所示。節(jié)點ll插入后,節(jié)點2失去了平衡(左子樹高度為1,右子樹高度為-l),經(jīng)過旋轉(zhuǎn)后樹恢復(fù)了平衡,如圖6(b)所示。本發(fā)明方法內(nèi)容通過實施例1、2作進一步說明實施例1的更新方法如圖7到圖11所示,該實施例詳細展示了圖2中左邊的密鑰樹在更新過程中失去平衡的過程,并用本發(fā)明的方法恢復(fù)了平衡,最后完成整個密鑰樹的密鑰更新過程。本實施例的密鑰更新過程包括以下步驟1)將要新加入的用戶節(jié)點K、卩9、W。形成子密鑰樹;如圖7所示;2)將圖2中的要離開的用戶節(jié)點^/2、"、K、^/6標記到離開用戶節(jié)點集合,圖2中虛線表示的節(jié)點;3)離開用戶節(jié)點集合中有要離開的節(jié)點,因此先將子密鑰樹插入到原密鑰樹,如圖8所示,子密鑰樹插入到原密鑰樹最淺的節(jié)點3,形成新密鑰樹;4)將"2、U3、t/4、^/6從原密鑰樹中移除。如圖9、圖10所示,圖10是將圖9中只有一個兒子的節(jié)點刪掉后得到,節(jié)點根據(jù)編號規(guī)則重新進行編號;'5)選擇l7,、^作為觸發(fā)節(jié)點;6)新密鑰樹失去了平衡,對它進行一次AVL單旋轉(zhuǎn),如圖ll所示;7)選擇[/8、(/9作為觸發(fā)節(jié)點;8)觸發(fā)節(jié)點發(fā)起密鑰更新,具體過程如下;9)^/8產(chǎn)生《8并計算^:8,將s^發(fā)送給",,^將A^。發(fā)送給w,t/,產(chǎn)生新的^并計算^尺3、sa、sa:4;10)"產(chǎn)生新的^:6并且計算5《6和5/:2;11)"將^:3發(fā)送給^/8,將^:,發(fā)送給t/"c/,。,將£《4發(fā)送給[/5、"7,^/7將^:6發(fā)送給^,將B^發(fā)送給t/,、c/8、t/9、t/IQ。12)所有用戶根據(jù)新的盲鑰重新計算得到新的組密鑰尺。。為了進一步說明本發(fā)明的AVL旋轉(zhuǎn)方法,實施例2的更新方法如圖12和圖13所示,圖12(a)也是由圖2(a)中的原密鑰樹經(jīng)過f/2、f/3、"4、/6離開,"8、f/9、U,。、加入后形成,由于其子密鑰樹形成過程、子密鑰樹與原密鑰合并過程基本與實施例1中一致,這里不再敘述。該實施例重點展示了一棵不平衡的密鑰樹經(jīng)過一次雙旋轉(zhuǎn)后恢復(fù)了平衡。(一次雙旋轉(zhuǎn)實際上由兩次單旋轉(zhuǎn)形成,圖12和圖13分別表示一次單旋轉(zhuǎn))經(jīng)過雙旋轉(zhuǎn)后,密鑰樹恢復(fù)平衡,如圖13(b)所示。然后由觸發(fā)節(jié)點發(fā)起密鑰更新,具體過程如下1)"8將發(fā)送給","IQ將萬《。發(fā)送給f/5、"7,^產(chǎn)生新的《3并計算5《3、S《;2)"產(chǎn)生新的尺6并且計算5《6和5《2;3)(/,將^^發(fā)送給[/8、f/9,將S^發(fā)送給t/,。、^,、f/5、"7,{/7發(fā)送5《6給(75,發(fā)送^^給f/,。、f/,,,發(fā)送^i:。給f/,、f/8、C/9。4)所有節(jié)點重新計算組密鑰^^4。本發(fā)明方法采用單向函數(shù)協(xié)商產(chǎn)生密鑰,有效避免了單點失效;采用定期更新密鑰的方式,減少了密鑰更新的開銷;利用AVL樹的平衡特性,減少了組播系統(tǒng)中用戶保存的密鑰數(shù)和組密鑰的計算量,減少了系統(tǒng)開銷。本發(fā)明方法與其它密鑰管理方案的比較如表1所示。LKH、D-0FT、EDKAS為已有的三種流行的密鑰更新方案,O("log")表示ax"log",其中fl為常數(shù)。表l不同密鑰管理方案主要特性對比<table>tableseeoriginaldocumentpage8</column></row><table>權(quán)利要求1.一種基于AVL樹的分布式組密鑰更新方法,包括子密鑰樹形成階段、子密鑰樹合并階段;其特征在于,還包括AVL旋轉(zhuǎn)階段;所述子密鑰樹形成階段,包括以下步驟1)對要加入組播系統(tǒng)的用戶節(jié)點,如果不存在子密鑰樹,則創(chuàng)建一棵該用戶節(jié)點的子密鑰樹;如果已經(jīng)存在子密鑰樹,則將該用戶節(jié)點加入到該子密鑰樹中最淺的節(jié)點;2)對要離開的用戶節(jié)點,將它標記到離開用戶節(jié)點集合;所述子密鑰樹與原密鑰樹合并階段,包括以下步驟3)若離開用戶節(jié)點集合中沒有要離開的節(jié)點,且該子密鑰樹與原密鑰樹的高度差不超過2,則直接增加新的根節(jié)點,該子密鑰樹和原密鑰樹分別作為該根節(jié)點的左、右子樹,形成新的密鑰樹;若該子密鑰樹與原密鑰樹的高度差大于2,則將該子密鑰樹直接插入到最淺的節(jié)點處,形成新的密鑰樹;4)如果離開用戶節(jié)點集合中有要離開的節(jié)點,則先將該子密鑰樹插入到原密鑰樹最淺的節(jié)點處,然后,將要離開的節(jié)點從原密鑰樹中移除,形成新的密鑰樹;5)選擇以離開節(jié)點的兄弟節(jié)點作為根節(jié)點的子樹的最左葉子節(jié)點為觸發(fā)節(jié)點,由該節(jié)點發(fā)起新的密鑰樹的密鑰更新;所述AVL旋轉(zhuǎn)階段包括以下步驟6)如果形成的新的密鑰樹失去平衡,則對該新的密鑰樹進行AVL旋轉(zhuǎn),直到它重新恢復(fù)平衡為止;7)選擇該新密鑰樹的所有的葉子節(jié)點全為新加入節(jié)點的子樹的最左葉子節(jié)點作為觸發(fā)節(jié)點;8)由步驟5)和7)中的觸發(fā)節(jié)點開始發(fā)起整個密鑰樹的密鑰更新過程。8)由步驟5)和7)中的觸發(fā)節(jié)點開始發(fā)起整個密鑰樹的密鑰更新過程。全文摘要本發(fā)明涉及一種基于AVL樹的分布式組密鑰更新方法,屬于計算機網(wǎng)絡(luò)安全領(lǐng)域。該方法除了包括子密鑰樹形成階段、子密鑰樹合并階段兩個常規(guī)階段外,還包括AVL旋轉(zhuǎn)階段即若形成的新的密鑰樹失去平衡,則對該新的密鑰樹進行AVL旋轉(zhuǎn),直到它重新恢復(fù)平衡為止;選擇該新密鑰樹的所有的葉子節(jié)點全為新加入節(jié)點的子樹的最左葉子節(jié)點作為觸發(fā)節(jié)點;開始發(fā)起整個密鑰樹的密鑰更新過程。本發(fā)明基于AVL樹優(yōu)良的平衡性能,有效地克服了已有的完全基于單向函數(shù)樹的密鑰管理方案中密鑰樹的結(jié)構(gòu)失衡問題,減少了用戶的存儲開銷。文檔編號H04L9/08GK101257382SQ20081010288公開日2008年9月3日申請日期2008年3月28日優(yōu)先權(quán)日2008年3月28日發(fā)明者爾桂花,戴瓊海,獨鄧申請人:清華大學(xué)