專利名稱:6LoWPAN網絡密鑰建立方法
技術領域:
本發明涉及計算機網絡領域,尤其涉及一種6LoWPAN網絡密鑰建立方法。
背景技術:
隨著物聯網的興起,結合了 IPv6和無線傳感器網絡(WSN)的6LoWPAN技術得到很大的發展。6LoWPAN網絡由三種節點組成邊緣路由器、內部路由器和普通節點。通過RPL路由協議,所有路由器構造成一個以邊緣路由器為根節點的有向無環圖(DAG)。每個路由器都有一個Rank值(一般為正整數),且在DAG中,子節點的Rank值一般比父節點的Rank 值大。通過鄰居協議,每個普通節點都會選擇一個默認路由器,兩者類似于DAG中的父子關系,普通節點也可以看作是DAG的一部分。普通節點向網絡中的遠端節點發送信息時,通過默認路由器進行轉發。密鑰建立作為保障上述節點之間安全通信的一個基本方法,提供了通信的機密性、完整性和認證等安全服務。在傳統的WSN中,盡管已經對密鑰建立進行了很多的研究,但是由于傳感器網絡結構和通信機制的多樣性,使得相應的密鑰建立方法與具體的網絡結構和通信機制相關, 不具有通用性,不適合直接應用于6LoWPAN中。BLoffPAN從網絡結構、路由協議、鄰居協議等都有相關標準(主要由IETF制定),所以6LoWPAN網絡中的密鑰建立方法,需要與現有的網絡結構和通信機制相結合。目前一些研究人員對6LoWPAN安全問題的研究考慮如何把互聯網中的安全機制移植到6LoWPAN網絡中,如輕量級的IPkc、SSL技術。現有輕量級IPSec和SSL的研究主要針對節點與互聯網上的設備之間實現安全通信,并沒有涉及到6LoWPAN網絡內部節點之間的安全通信。從現有的研究情況中可以看出輕量級msec和SSL不太適合節點之間的密鑰建立,因為采用了公鑰算法,計算量大,比較耗時,導致通信時間相對較長。
發明內容
本發明的目的是提供一種6LoWPAN網絡密鑰建立方法,計算量小,節省通信時間。根據本發明的一個方面,提供一種6LoWPAN網絡密鑰建立方法,包括步驟1、內部路由器節點Rx接收到第一個來自路由器節點Ru的DIO消息后,向節點Ru發送消息請求得到組密鑰,該消息為Rx — Ru :k+{f(k+A ι) I IkiKGO其中,k為Rx的Rank值,也表示為Rank(Rx), K1為初始密鑰,||表示串接, {f(k+Ai) I IkiKGO表示根據aes加密算法用f(k)加密f(k+Ai) ^p K1串接后的數據;并且,f (k) =F (f (k-1) I I salt (k))其中,k > 1,salt(k)表示進行第k次Hash計算所用的加鹽值,
6F (f (k-1) I I salt (k))表示對 f (k-1) I I salt (k)進行 Hash 函數值計算;步驟2、Ru收到消息后,根據消息中的k值計算f(k)禾Pf(k+Al);步驟3、Ru使用f(k)解密{f(k+Al) I K1KGO信息,然后把解密出的f(k+Δ1)與自己計算的值進行比較,如果相等,則Ru對Rx認證通過,否則認證不通過;步驟4、如果Rx認證通過,則Ru把K1作為與Rx之間的對密鑰進行保存,并且向Rx 回應消息Ru — Rx {KGI I f (Rank (u)) | | salt (Rank (u) +1) | | Rank (u) | | IIu} K1其中,salt (Rank (U)+1)表示進行第Rank (U)+1次Hash計算所用的加鹽值;步驟5、Rx收到回應消息后,通過K1解密整個消息,得到Ru的接口標識IIu,然后和數據包源地址中的接口標識進行對比實現對Ru的認證;步驟6、如果Ru認證通過,Rx得到組密鑰Ke,并把Ru作為自己的父節點、存儲兩者之間的對密鑰K1 ;Rx得到的其它信息包括Rank(U)、f (Rank(u))和salt (Rank(u)+1)。可選的,在步驟6后還包括步驟7、Rx收到來自鄰居節點Ru和Rv的DIO消息后,用組密鑰Ke解密該消息,并按照RPL路由協議根據DIO中的Rank值重新選擇父節點;步驟8、如果Rx選擇的父節點仍然是Ru,則Rx先依據Ru的Rank (U)值,按照RPL 協議計算Rank(X),然后根據所述f (Rank(U))和salt (Rank(u)+1)計算出f (Rank(χ))和 salt(Rank(χ)+1);步驟9、如果選擇的父節點是Rv,則Rx使用多播地址發送對密鑰建立消息,消息中包含的信息為IIv+RankOO,IIv指明要建立對密鑰的父節點接口標識,Rank (χ)指明用于響應消息加密的密鑰f(Rank(x)),多播消息使用組密鑰生成消息驗證碼MAC,并用組密鑰進行加密Rx — * :MAC+{IIv| |Rank(x)}KG步驟10、鄰居節點收到對密鑰建立消息后,根據組密鑰對消息驗證碼MAC進行驗證,驗證通過后解密該消息,然后根據IIv的值判斷是否是和自己建立對密鑰;步驟11、對于Rv來說,根據IIv的值判斷Rx是與自己建立對密鑰,隨機生成對密鑰KP,然后回應消息,用f (RankOO)進行加密Rv — Rx {f (Rank (ν)) | | salt (Rank (ν) +1) | | KP} f (Rank (χ))步驟12、Rx收到響應消息后,通過f (Rank (χ))解密出其中的信息,把Rv作為自己的父節點,保存兩者之間的對密鑰KP,然后根據f (Rank(V))和salt (Rank (ν)+1)重新計算自己擁有 f (Rank (χ))和 salt (Rank (χ) +1)。可選的,計算{f(k+Ai)I IkiKGO 包括步驟1A、隨機生成一個長字節數據串作為Hash函數計算的初始數據,并確定常量整數Δ1的值;步驟1Β、根據內部路由器節點部署在樹狀結構的層次深度,估算一個Rank值k ;步驟1C、計算 f(k)禾口 f(k+A 1);和步驟1D、隨機生成一個初始密鑰K1,然后根據AES加密算法用f (k)加密f (k+ Δ 1) 和&串接后的數據,生成加密后的數據{f(k+Al) I |KI}f(k)0可選的,在步驟12后還包括
步驟13、普通節點Hy發送消息,包括RS、k和{f(k+Al) | K1I f(k)Hy — * :RS+k+ {f (k+ Δ 1) | | K1I f (k)步驟14、鄰居路由器Rn收到消息后,計算f (k)和f (k+Δ 1);步驟15、使用f(k)解密{f(k+Al) I K1I f(k)信息,然后把解密出的f (k+Δ 1)與自己計算的值進行比較,如果相等,則1 對Hy認證通過,否則認證不通過;步驟16、認證通過后,1 把K1作為兩者之間的對密鑰進行保存,然后回應路由通告消息,并使用K1對關鍵信息進行加密Rn — Hy RA+{Rank (η) | |f(Rank(n)) | | salt (Rank (η)+1) | |KG| | IInlK1 ;步驟17、Hy收到消息后,把1 作為默認路由器;通過K1解密消息,得到ΙΙη,然后和數據包中的接口標識進行對比實現對foi的認證;保存組密鑰Ke,在Rank(II)上增加一個數值計算Rank (y),然后在f (Rank (η))和salt (Rank (η) +1)的基礎上計算出f (Rank (y))和 salt (Rank (y)+l) ;KX作為與1 之間的對密鑰進行保存。可選的,在步驟17后還包括步驟18、普通節點A選擇隨機整數m,使得m > Rank (A),然后向普通節點B發送 HELLO消息和m值;A — B :HELL0+m步驟19、普通節點B收到HELLO消息后,判斷m和Rank⑶的大小;如果m彡Rank (B),則普通節點B生成兩者的會話密鑰Kab,然后向普通節點A發送密鑰消息,內容為{KAB}f(m),Kab用f(m)加密B —A:{KAB}f(m)如果m < Rank⑶,則普通節點B選擇隨機整數η使得m < η (例如差值小于10不要太大),然后向普通節點A發送HELLO消息和值η B — A :HELL0+n步驟20、普通節點A接收到消息后,如果是密鑰消息,通過計算f(m)解密出會話密鑰Kab ;如果是HELLO消息,則生成兩者的會話密鑰Kab,然后向B發送密鑰消息,內容為{KAB} f(n),KABffi f(n)加密A —B :{KAB}f(n)步驟21、普通節點B收到密鑰消息后,通過計算f (η)解密出會話密鑰。可選的,在步驟17后還包括步驟22、Hy在使用NS+AR0消息向1 進行地址注冊時,使用兩者之間的對密鑰K1 生成消息驗證碼MAC Hy — Rn NS,ARO,MAC步驟23、Rn收到注冊消息后,使用對密鑰和MAC對消息進行認證;如果認證不成功,則地址注冊失敗,Rn不會為Hy建立任何緩存項信息,從而當Hy 向網絡中發送數據包時丟棄數據包、不進行轉發;如果成功,1 會為Hy建立緩存項信息,從而當Hy向網絡中發送的數據包時由1 進行轉發。可選的,步驟2進一步包括步驟 2A、如果 Rank (u) < k,計算 f (Rank (u) +i),直到 Rank (u) +i = k ;
步驟2B、如果Rank (u) > k,則Ru通過消息把k值發送給自己的父節點Re讓其計算Hash值,所述消息包括k和Rx的接口標識IIx Ru —Re:k+IIx;步驟2C、父節點Re計算完成后回應消息給Ru,該消息經過兩者之間的對密鑰Kup 加密Re — Ru {IIx f (k) | salt (k+1)} Kup ;步驟2D、如果 Rank (u) = k,則 f (k) = f (Rank (u))。根據本發明的另一個方面,提供一種6LoWPAN中基于多次Hash的密鑰建立方法, 包括步驟1、普通節點Hy發送消息,包括RS、k和{f(k+Al) | K1I f(k)Hy — * :RS+k+ {f (k+ Δ 1) | | K1I f (k)其中,k為Hy的Rank值,也表示為Rank(Hy) ,K1為初始密鑰,||表示串接, {f(k+Ai) I IkiKGO表示根據aes加密算法用f(k)加密f(k+Ai) ^p K1串接后的數據;并且, f (k) = F(f (k-1) I I salt (k)),其中,k > 1,salt(k)表示進行第k次Hash計算所用的加鹽值, F(f(k-1) I salt (k))表示對 f (k-1) I salt (k)進行 Hash 函數值計算;步驟2、鄰居路由器1 收到消息后,計算f (k)和f (k+Δ 1);步驟3、foi使用f(k)解密{f(k+Al) I K1I f(k)信息,然后把解密出的f (k+Δ 1)與自己計算的值進行比較,如果相等,則1 對Hy認證通過,否則認證不通過;步驟4、認證通過后,1 把!^作為兩者之間的對密鑰進行保存,然后回應路由通告消息,使用K1對關鍵信息進行加密Rn — Hy RA+{Rank (η) | |f(Rank(n)) | | salt (Rank (η)+1) | |KG| | IIniK1 ;步驟5、Hy收到消息后,把1 作為默認路由器;通過K1解密消息,得到ΙΙη,然后和數據包中的接口標識進行對比實現對foi的認證;保存組密鑰Ke,在Rank(II)上增加一個數值計算Rank (y),然后在f (Rank (η))和salt (Rank (η) +1)的基礎上計算出f (Rank (y))和 salt (Rank (y)+l) ;KX作為與1 之間的對密鑰進行保存。可選的,在步驟5后還包括步驟6、普通節點A選擇隨機整數m,使得m > Rank(A),然后向普通節點B發送 HELLO消息和m值;A — B :HELL0+m 步驟7、普通節點B收到HELLO消息后,判斷m和Rank⑶的大小;如果m彡Rank⑶,則普通節點B生成兩者的會話密鑰Kab,然后向普通節點A發送密鑰消息,內容為{KAB}f(m),Kab用f(m)加密B — A {KAB} f (m)如果m < Rank⑶,則普通節點B選擇隨機整數η使得m < η (例如差值小于10不要太大),然后向普通節點A發送HELLO消息和值η B — A :HELL0+n步驟8、普通節點A接收到消息后,如果是密鑰消息,通過計算f(m)解密出會話密鑰Kab ;如果是HELLO消息,則生成兩者的會話密鑰Kab,然后向B發送密鑰消息,內容為{KAB} f(n),KABffi f(n)加密A —B :{KAB}f(n)步驟9、B收到密鑰消息后,通過計算f(n)解密出會話密鑰。可選的,在步驟5后還包括步驟10、Hy在使用NS+AR0消息向1 進行地址注冊時,使用兩者之間的對密鑰KI 生成消息驗證碼MAC Hy — Rn :NS,ARO,MAC步驟11、1 收到注冊消息后,使用對密鑰和MAC對消息進行認證;如果認證不成功,則地址注冊失敗,Rn不會為Hy建立任何緩存項信息,從而當Hy 向網絡中發送數據包時丟棄數據包、不進行轉發;如果成功,1 會為Hy建立緩存項信息,從而當Hy向網絡中發送的數據包時由1 進行轉發。與現有技術相比,本發明的優點在于(1)多次Hash的密鑰建立方法計算量小;(2)利用Hash函數計算的不可逆性,并且通過迭代的方式計算多次Hash值,保證了 Hash函數計算的安全強度;(3)內部路由器和普通節點在入網時都進行了雙向認證,可以抵御惡意節點的攻
擊ο
圖1是現有技術中6LoWPAN中通過RPL路由協議和鄰居協議構造的有向無環圖 (DAG)的示意圖;圖2是本發明一個實施例中提供的6LoWPAN中基于多次Hash的密鑰建立方法流程圖;圖3是本發明一個實施例中路由器Rx經過雙向認證后加入到網絡并得到組密鑰的過程示意圖;其中,方框的內容表示在通信之前,節點已經擁有的信息;圖4是本發明一個實施例中路由器Rx與新的父節點Rv建立組密鑰的過程示意圖;其中,方框的內容表示在通信之前,節點已經擁有的信息;圖5是本發明一個實施例中普通節點Hy經過雙向認證加入到網絡的過程示意圖; 其中,方框的內容表示在通信之前,節點已經擁有的信息;圖6是本發明一個實施例中普通節點A和B建立會話密鑰的過程示意圖;其中,方框的內容表示在通信之前,節點已經擁有的信息。
具體實施例方式為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖,對本發明進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定本發明。本文中,Hash對應的中文術語為“散列”,是指把任意長度的輸入通過散列算法變換成固定長度的輸出。6LoWPAN網絡如圖1所示,整個網絡包含一個邊緣路由器,若干(彡0)內部路由器和若干1)普通節點,邊緣路由器、內部路由器和普通節點統稱為節點,普通節點為計算終端;路由器通過RPL路由協議構造成以邊緣路由器為根節點的有向無環圖(DAG),普通節點通過鄰居協議選擇一個默認路由器連接到網絡中。其中,頂端的是邊緣路由器,灰圈表示內部路由器,白圈表示普通節點,實線表示DAG中通過認證后建立起的父子連接,虛線表示待認證建立的連接。其中,組密鑰用于網絡中所有節點間多播地址消息安全通信;對密鑰在路由結構有向無環圖中具有父子關系節點之間建立,用于安全傳送路由信息以及普通節點和路由器之間的通信認證,對密鑰可以只用于單跳安全通信;會話密鑰用于任意兩個普通節點之間進行安全通信,數據可以通過單跳或者多跳轉發。一般情況下,節點間發送組播消息時用組密鑰加密,路由器之間發送消息時使用對密鑰,而普通節點之間通信使用會話密鑰。發明人經過研究發現,在6LoWPAN網絡中的RPL路由協議和鄰居協議的通信機制基礎上,可以基于多次Hash計算建立組密鑰、對密鑰和會話密鑰。基于上述分析,本發明一個實施例中,提供一種6LoWPAN中基于多次Hash的密鑰建立方法。如圖2所示,該方法包括Sl 1、節點初始化;S12、內部路由器加入網絡并獲得組密鑰;S13、內部路由器與父節點建立對密鑰;S14、普通節點加入網絡;和S15、普通節點之間建立會話密鑰。上述步驟中,如果網絡中只包含邊緣路由器和普通節點,則普通節點直接和邊緣路由器建立連接,步驟S12和S13可以省略;如果還包括路由器節點,則需要在進行完S12 和S13之后,再進行S14和S15步驟。下面將詳細描述每一個步驟的內容。步驟Sll (節點初始化)對于路由器節點和普通節點,根據每個節點的大概部署位置,估算一個Rank值k; k值可以根據節點部署在樹狀結構的層次深度計算,每個節點估算的k可以都不相同,k可以不連續,如值為9,15等。隨機生成一個初始密,K1,然后計算f(k+Al),將f(k+Al)和1^串接,兩者串接后根據AES算法用f(k)加密(后續加密如無說明也采用AES算法),生成加密后的數據{f(k+Al) I |KI}f(k)其中,Δ 1為常量整數,且Δ 1 > 1,I I表示串接,{f(k+Δ 1) I |KI}f(k)表示用f(k) 加密{f(k+Al) IIK1I ;f(k)為k次Hash計算的值,計算方式為f(k) =F (f (k-1) I I salt (k)) (1)其中,k > 1,salt(k)表示進行第k次Hash計算所用的加鹽值, F(f(k-1) I salt (k))表示對f (k-1) I salt (k)進行Hash函數值計算,Hash函數可以采用 MD5或SHA-I算法。公式(1)的含義為在第k-Ι次Hash計算值f (k_l)的基礎上通過一次F (χ)函數計算,就可以得到f(k)。公式(1)是一個迭代公式,先計算出先前的Hash值才能夠計算出
11后續的值。在公式中引入參數salt (k),可以增強安全性,防止攻擊者只知道f(k-l)后就計算出第k次及后續所有的Hash值。對于salt (k)的選擇,可以選擇一個固定的值,每次計算都使用該值。但這種方式安全性不是最高,如果攻擊者獲得了這個固定的值,仍可以計算后續的Hash值。根據本發明的一個實施例,salt(k)的值采用動態變化的值,為/89(A-2),表示取 f (k-2)中的第8和9兩個字節,這樣實際的計算公式為如下f(k)^F(f(k-l)\\f,\k-2)), k>2 (2)動態變化的salt(k)值不限定于上述方式產生的值,其它方式比如選取f(k_2)或 f (k-3)的第1和第4個字節亦可。在實際計算時,對于f(l),隨機選擇一個長字節數據串(例如長度至少16字節), 用Hash函數計算值,對于f (2)的計算,salt (2)取0值,即f (2) =F(f(l) | 00),對于后續的f(k),采用公式⑴或(2)計算即可。根據本發明的一個實施例,Sll可以包括如下步驟SllU隨機生成一個長字節數據串作為Hash函數計算的初始數據,并確定常量整數Δ 1的值(例如選擇大于1且小于10的數);S112、隨機生成一個組密鑰Ke(例如長度為16字節),為邊緣路由器設定Rank 值為Rank(E)(例如,至少是大于2的整數),按照上述公式(1)計算出f (Rank(E))和 salt (Rank (E)+1)的值例如/89(徹《^(五)-1),并且將 Kg、f (Rank (E))和//(i^iCE) -1)寫入到邊緣路由器中;S113、根據內部路由器和普通節點部署在樹狀結構的層次深度,估算一個Rank值 k,按照上述公式(1)計算出f(k)和f(k+Al);Sl 14、隨機生成一個初始密鑰K1 (例如長度為16字節),然后根據AES加密算法用 f (k)加密f (k+ Δ 1)和K1串接后的數據,生成加密后的數據{f (k+ Δ 1) I IK1I f (k),并且將k、 K1和{f(k+Ai) I IkiKQO寫入到內部路由器和普通節點中。步驟S12(內部路由器加入網絡并獲得組密鑰)一般情況下,從邊緣路由器開始,每個路由器節點逐層加入到網絡。每個已經入網的路由器定時的發送用組密鑰加密和認證的多播地址DIO消息,新入網節點通過DIO消息選擇父節點入網。初始狀態時因為沒有任何節點加入網絡,新入網節點就選擇邊緣路由器作為父節點。邊緣路由器對與它一跳遠的節點入網認證過程與下面說明的一般情況是相同的。下面以節點Rx來說明。已入網路由器Ru和Rv (見圖1)定時發送DIO消息,兩者擁有的相關信息分別為 (Rank (u)、f (Rank (u))、fs9 (Rank(u) - 1))和(Rank (ν)、f (Rank (ν))、// (Rank(v) -1))。步驟S12的通信過程如圖3所示,具體包括如下步驟S121、路由器節點Rx接收到第一個來自Ru的DIO消息后,由于沒有組密鑰,不能解密得到DIO消息中的具體信息,所以,Rx向Ru發送RequeSt_Gr0up_Key消息(包括k和 {f (k+ Δ 1) I IK1I f (k)),請求得到組密鑰Rx — Ru :k+{f(k+A 1) I IkiKGOS122、Ru收到消息后,根據消息中的k值和自己的Rank(U)值計算出f(k)。具體計算過程如下
12
(1)如果 Rank(u) < k,計算 f (Rank (u)+i),直到 Rank (u)+i = k ;(2)如果Rank (u) > k,則Ru通過Requestjijfash消息把k值發送給自己的父節點Re讓其計算Hash值,所述消息包括k和Rx的接口標識IIx Ru —Re:k+IIx父節點Re收到消息后,也根據此計算過程計算第k次Hash值f (k)。計算完成后回應Response_K_Hash消息給Ru,發送的消息經過兩者之間的對密鑰Kup (該對密鑰已經在 Ru加入網絡時,在Ru與其父節點Re之間建立完成)加密Re — Ru {IIx f (k) | salt (k+1)} Kup其中,salt (k+1)表示進行第k+1次Hash計算所用的salt值,例如值為。(3)如果 Rank (u) = k,則 f (k) = f (Rank (u))。經過上述計算過程,Ru得到f (k)和f (k+Δ 1)值。接著使用f(k)解密{f(k+Al) I K1KGO信息,然后把解密出的f (k+Δ 1)與自己計算的值進行比較,如果相等,則Ru對Rx認證通過,否則認證不通過。這里進行相等判斷主要是為了防止惡意節點進入到網絡中。惡意節點不是用戶部署的節點,而是攻擊者部署到網絡中的節點,便于攻擊網絡。攻擊者由于不知道f (k+Δ 1)的計算值,所以在這種情況下會出現f (k+Δ 1)不等的情況。如果認證通過,則Ru把!^作為與Rx之間的對密鑰進行保存,并且向Rx回應 Response_Group_Key 消息Ru — Rx {KG |f (Rank (u)) | | salt (Rank (u)+1) | Rank (u) | IIujK1其中,salt (Rank (u)+1)表示進行第Rank (U)+1次Hash計算所用的salt值,例如可以為//(ito^(w)-l) ,Response_Group_Key 消息為Ru ^ Rx {K0 (I f(Rank(u)) || fs9(Rank(u)-\) || Rank[u) || IIu}K1S123、Rx收到回應消息后,通過K1解密整個消息,得到IIu,然后和數據包源地址中的接口標識進行對比實現對Ru的認證。認證通過后,Rx得到組密鑰Ke,并把Ru暫時作為自己的父節點存儲兩者之間的對密鑰K1, Rx得到的其它信息包括Rank(U)、f (Rank(U)) 和/8>_)-1)。S124、Rx等待接收新的DIO消息,以選擇更優的父節點。步驟S13(路由器與父節點建立對密鑰)Rx得到組密鑰后,對鄰居節點后續發送的用組密鑰加密的DIO消息,能夠進行處理,并且選擇更優的父節點。父節點選定后,通過消息與其建立對密鑰。步驟S13整個通信過程如圖4所示,具體包括如下步驟S131、Rx收到由Ru和Rv發出的新的DIO消息后,用組密鑰解密該消息,根據DIO 中的Rank值重新選擇父節點(選擇方法根據RPL路由協議)。如果選擇的父節點仍然是Ru,則Rx先依據Ru的Rank (u)值,按照RPL協議中的計算方法得到Rank(X),而且由于父子關系有Rank(U) < Rank(X),然后根據先前保存的 f (Rank(u))和//CRo^(M)-I)利用公式(2)計算出 f (Rank(χ))和。如果選擇的父節點是Rv,則使用多播地址發送對密鑰建立消息RequeSt_ Pairwise_Key,消息中包含的信息為IIV+Rank(X),IIv指明要建立對密鑰的父節點接口標識,Rank (χ)指明用于響應消息加密的密鑰f (Rank(X)),多播消息使用組密鑰生成消息驗
13證碼MAC,并用組密鑰進行加密Rx — * :MAC+{IIv| |Rank(x)}KGS132、鄰居節點收到對密鑰建立消息后,根據組密鑰對消息驗證碼MAC進行驗證, 驗證通過后解密該消息,然后根據IIv的值判斷是否是和自己建立對密鑰。對于Ru來說,不是和自己建立對密鑰,刪除先前已經與Rx建立的對密鑰。對于Rv來說,與自己建立對密鑰,隨機生成對密鑰KP,然后回應Response Pairwise_Key 消息,用 f (Rank(χ))進行加密Rv — Rx {f(Rank(v)) || // (Rank(v) — 1) || Ip } f(Rank(x))S133、Rx收到響應消息后,通過f (Rank(χ))解密出其中的信息,把Rv作為自己的父節點,保存兩者之間的對密鑰ΚΡ。最后Rx根據f (Rank(ν))利用公式( 重新計算自己擁有 f (Rank (χ))和//(Rank(x) -1)。S134、Rx繼續接收其它節點發送的DIO消息,如果發現比Rv更優(計算方法由RPL 路由協議規定),則把它作為新的父節點通過上述過程與其建立對密鑰;如果不比Rv更優, 則仍然保留Rv作為自己的父節點。步驟S14(普通節點加入網絡)普通節點加入網絡使用6LoWPAN鄰居協議,節點通過發送RS (路由請求)消息來查找默認路由器,通過發送消息進行雙向認證后加入到網絡中,圖5顯示了其通信過程。在 BLoffPAN網絡中,普通節點本身不計算Rank值,但可以在默認路由器的Rank值上增加一個常值作為普通節點的Rank值,具體計算方法如下,[ΠΝ]8表示取普通節點N的接口標識的最后一個字節Rank (N) = Rank (R)+ [IIN]8mod 128其中,N表示普通節點,R表示默認路由器,RankO表示上述節點擁有的Rank值。步驟S14整個通信過程如圖5所示,具體包括如下步驟S141、普通節點Hy啟動后發送消息(包括RS、k和{f(k+Al) | K1I f(k))Hy — * :RS+k+ {f (k+ Δ 1) | | Kj f (k)S142、鄰居路由器1 收到消息后,根據S122中的計算過程得到f(k)和f(k+Al), 然后對Hy認證,方法和對路由器的認證一樣。認證通過后,1 把K1作為兩者之間的對密鑰進行保存,然后回應RA(路由通告)消息,使用了 K1對關鍵信息進行加密Rn^ Hy RA + {Rank(n) 11 f(Rank(n)) 11 /89 (Rank(n) -1) 11 Ig 11 IIn}KIS143、Hy收到消息后,把1 作為默認路由器。通過K1解密消息,得到ΙΙη,然后和數據包中的接口標識進行對比實現對1 的認證。認證通過后,Hy使用公式( 計算出 Rank(y)值,然后在f (Rank(η))和/89(徹從(《)-1)的基礎上計算出自己的f(Rank(y)),保存組密鑰Ke,K1作為與1 之間的對密鑰進行保存。S144、Hy在使用NS+AR0 (鄰居請求+地址注冊選項)消息向1 進行地址注冊時, 使用兩者之間的對密鑰KI生成消息驗證碼(MAC)Hy — Rn NS,ARO,MACS145、Rn收到注冊消息后,使用對密鑰和MAC對消息進行認證。如果認證不成功,則地址注冊失敗,Rn不會為Hy建立任何緩存項信息。當Hy向網絡中發送數據包時,如果1 中沒有Hy的緩存項信息,則丟棄數據包,不進行轉發。通過這種方式可以防止攻擊者向網絡中發送大量無用信息,以消耗節點的資源。如果成功,1 會為Hy建立緩存項信息,這樣Hy向網絡中發送的數據包時,1 才會進行轉發。制聚S15 (少嚇立射舌·)例如,普通節點A和B之間要建立會話密鑰,通過兩個節點的直接通信來完成。A 和B在入網后擁有的信息分別為(Rank (A),f (Rank (A)),/89 (Rank(A) -1))和(Rank⑶, f (Rank (B)),fl (Rank(B) -1))。步驟S15的工作是在A和B之間協商出一個都能計算出的f(k)值,從而用f(k) 加密以保證會話密鑰的安全。如圖6所示,步驟S15具體包括S151、A選擇隨機整數m,使得m > Rank (A)(例如差值小于10,差值越大計算量越大),然后向B發送HELLO消息和m值A —B:HELL0+mS152、B收到HELLO消息后,判斷n^PRank(B)的大小。如果m彡Rank(B),則B生成兩者的會話密鑰Kab,然后向A發送密鑰消息,內容為 {‘^⑷,‘用^!!!)加密B —A:{KAB}f(m)如果m < Rank⑶,則B選擇隨機整數η使得m < η (例如差值小于10不要太大), 然后向A發送HELLO消息和值η B —A:HELL0+nS153、A收到消息后,如果是密鑰消息,通過計算f(m)解密出會話密鑰。如果是 HELLO消息,則生成兩者的會話密鑰Kab,然后向B發送密鑰消息,內容為{KAB}f(n),Kab用 f(n)加密A —B :{KAB}f(n)S154、B收到密鑰消息后,通過計算f (η)解密出會話密鑰。上述建立密鑰的方法使用Hash算法,計算量小,節點入網時進行雙向認證不需要第三方認證中心的參與,通信量少,而且可抵御惡意節點攻擊。各種密鑰直接是兩點之間安全通信進行建立,不需要第三方節點進行密鑰分發,多種密鑰的建立保證了不同類型通信的安全。基于上述特點,該方法能夠適用于6LoWPAN這種節點資源受限的環境,而且還能滿足6LoWPAN網絡的移動特性。上述建立密鑰的方法可以用于6LoWPAN中多播地址消息安全通信,單跳和多跳的安全通信。上述方法的優點在于(1)利用了 Hash函數計算的不可逆性,并且通過迭代的方式計算多次Hash值,保證了 Hash函數計算的安全強度;每個節點的Hash計算次數都不同, 根據其Rank值動態確定的,即進行Rank次Hash計算;(2)路由器和普通節點在入網時都進行了雙向認證,可以抵御惡意節點的攻擊;C3)各個路由器之間建立起對密鑰后,路由信息就可以在網絡中安全的傳送,保證了網絡的路由安全;路由器和普通節點在進行組播通信時,通過組密鑰可以實現對組播消息的加密和認證;兩個普通節點要進行通信時,通過會話密鑰來保障信息的安全;(4)普通節點要向網絡中發送消息時,默認路由器使用兩者之間的對密鑰認證后,才會把數據包轉發出去,這樣就可以防止攻擊者向網絡發送大量無用的信息;(5)此外,該方法還適用于節點移動的場景。
應該注意到并理解,在不脫離后附的權利要求所要求的本發明的精神和范圍的情況下,能夠對上述詳細描述的本發明做出各種修改和改進。因此,要求保護的技術方案的范圍不受所給出的任何特定示范教導的限制。
權利要求
1.一種6LoWPAN網絡密鑰建立方法,包括步驟1、內部路由器節點Rx接收到第一個來自路由器節點Ru的DIO消息后,向節點Ru 發送消息請求得到組密鑰,該消息為 Rx — Ru :k+ {f (k+ Δ 1) | | K1I f (k)其中,k為Rx的Rank值,也表示為Rank(Rx),K1為初始密鑰,| |表示串接, {f(k+AD I IkiKGO表示根據aes加密算法用f(k)加密f(k+Ai) ^p K1串接后的數據;并且,f (k) = F(f (k-1) I I salt (k))其中,k> 1,salt(k)表示進行第k次Hash計算所用的加鹽值,F(f (k-1) |salt(k)) 表示對f (k-1) I I salt (k)進行Hash函數值計算;步驟2、Ru收到消息后,根據消息中的k值計算f(k)和f(k+Al); 步驟3、Ru使用f(k)解密{f(k+Al) I K1I f(k)信息,然后把解密出的f(k+Δ1)與自己計算的值進行比較,如果相等,則Ru對Rx認證通過,否則認證不通過;步驟4、如果Rx認證通過,則Ru把K1作為與Rx之間的對密鑰進行保存,并且向Rx回應消息Ru — Rx {KGI If(Rank(u))| |salt(Rank(u)+1)| |Rank(u)| |IIu}K1 其中,salt (Rank (U)+1)表示進行第Rank (U)+1次Hash計算所用的加鹽值; 步驟5、Rx收到回應消息后,通過K1解密整個消息,得到Ru的接口標識IIu,然后和數據包源地址中的接口標識進行對比實現對Ru的認證;步驟6、如果Ru認證通過,Rx得到組密鑰Ke,并把Ru作為自己的父節點、存儲兩者之間的對密鑰K1 ;Rx得到的其它信息包括Rank (u)、f (Rank (u))和salt (Rank (u) +1)。
2.根據權利要求1所述的密鑰建立方法,在步驟6后還包括步驟7、Rx收到來自鄰居節點Ru和Rv的DIO消息后,用組密鑰Ke解密該消息,并按照 RPL路由協議根據DIO中的Rank值重新選擇父節點;步驟8、如果Rx選擇的父節點仍然是Ru,則Rx先依據Ru的Rank(U)值,按照RPL協議計算 Rank (χ),然后根據所述 f (Rank (u))和 salt (Rank (u) +1)計算出 f (Rank (χ))和 salt(Rank(χ)+1);步驟9、如果選擇的父節點是Rv,則Rx使用多播地址發送對密鑰建立消息,消息中包含的信息為IIv+RankOO,IIv指明要建立對密鑰的父節點接口標識,Rank (χ)指明用于響應消息加密的密鑰f(Rank(X)),多播消息使用組密鑰生成消息驗證碼MAC,并用組密鑰進行加密Rx — * :MAC+{IIv I Rank(χ)}Kg步驟10、鄰居節點收到對密鑰建立消息后,根據組密鑰對消息驗證碼MAC進行驗證,驗證通過后解密該消息,然后根據IIv的值判斷是否是和自己建立對密鑰;步驟11、對于Rv來說,根據IIv的值判斷Rx是與自己建立對密鑰,隨機生成對密鑰KP, 然后回應消息,用f (RankOO)進行加密Rv — Rx {f (Rank (ν)) | | salt (Rank (ν) +1) | | KP} f (Rank (χ))步驟12、Rx收到響應消息后,通過f (Rank (χ))解密出其中的信息,把Rv作為自己的父節點,保存兩者之間的對密鑰KP,然后根據f (Rank(V))和salt (Rank (ν)+1)重新計算自己擁有 f (Rank (χ))和 salt (Rank (χ) +1)。
3.根據權利要求1所述的密鑰建立方法,其中,計算{f(k+Al)I IKJfQO包括 步驟1A、隨機生成一個長字節數據串作為Hash函數計算的初始數據,并確定常量整數Δ 1的值;步驟1Β、根據內部路由器節點部署在樹狀結構的層次深度,估算一個Rank值k; 步驟1C、計算f (k)和f (k+Δ 1);和步驟1D、隨機生成一個初始密鑰K1,然后根據AES加密算法用f(k)加密f(k+Al)和 K1串接后的數據,生成加密后的數據{f(k+Al) I |KI}f(k)0
4.根據權利要求2所述的密鑰建立方法,在步驟12后還包括 步驟13、普通節點Hy發送消息,包括RS、k和{f(k+Al) | |KI}f(k) Hy — * :RS+k+ {f (k+ Δ 1) | | K1I f (k)步驟14、鄰居路由器1 收到消息后,計算f(k)和f(k+A 1);步驟15、使用f(k)解密{f(k+Al) I K1KGO信息,然后把解密出的f (k+Δ 1)與自己計算的值進行比較,如果相等,則1 對Hy認證通過,否則認證不通過;步驟16、認證通過后,Iir^EK1作為兩者之間的對密鑰進行保存,然后回應路由通告消息,并使用K1對關鍵信息進行加密Rn —Hy :RA+{Rank (η) | f (Rank (η)) | | salt (Rank (η)+1) | Kg IInjK1 ; 步驟17、Hy收到消息后,把1 作為默認路由器;通過K1解密消息,得到ΙΙη,然后和數據包中的接口標識進行對比實現對1 的認證;保存組密鑰Ke,在Rank(Ii)上增加一個數值計算Rank(y),然后在f (Rank(η))和salt (Rank(η)+1)的基礎上計算出f(Rank(y))和 salt (Rank (y)+l) ;KX作為與1 之間的對密鑰進行保存。
5.根據權利要求4所述的密鑰建立方法,在步驟17后還包括步驟18、普通節點A選擇隨機整數m,使得m > Rank (A),然后向普通節點B發送HELLO 消息和m值;A — B :HELL0+m步驟19、普通節點B收到HELLO消息后,判斷m和Rank(B)的大小; 如果m ^ Rank (B),則普通節點B生成兩者的會話密鑰Kab,然后向普通節點A發送密鑰消息,內容為{KAB}f(m),Kab用f(m)加密 B —A:{KAB}f(m)如果m < Rank (B),則普通節點B選擇隨機整數η使得m < η (例如差值小于10不要太大),然后向普通節點A發送HELLO消息和值η B — A :HELL0+n步驟20、普通節點A接收到消息后,如果是密鑰消息,通過計算f(m)解密出會話密鑰 Kab ;如果是HELLO消息,則生成兩者的會話密鑰Kab,然后向B發送密鑰消息,內容為{KAB} f(n),KABffi f(n)加密 A-B :{KAB}f(n)步驟21、普通節點B收到密鑰消息后,通過計算f (η)解密出會話密鑰。
6.根據權利要求4所述的密鑰建立方法,在步驟17后還包括步驟22、Hy在使用NS+AR0消息向1 進行地址注冊時,使用兩者之間的對密鑰K1生成消息驗證碼MAC Hy — Rn :NS,ARO, MAC步驟23、Rn收到注冊消息后,使用對密鑰和MAC對消息進行認證; 如果認證不成功,則地址注冊失敗,1 不會為Hy建立任何緩存項信息,從而當Hy向網絡中發送數據包時丟棄數據包、不進行轉發;如果成功,1 會為Hy建立緩存項信息,從而當Hy向網絡中發送的數據包時由1 進行轉發。
7.根據權利要求1所述的密鑰建立方法,步驟2進一步包括步驟 2A、如果 Rank (u) < k,計算 f (Rank (u) +i),直到 Rank (u) +i = k ; 步驟2B、如果Rank(U) > k,則Ru通過消息把k值發送給自己的父節點Re讓其計算 Hash值,所述消息包括k和Rx的接口標識IIx Ru — Re :k+IIx ;步驟2C、父節點Re計算完成后回應消息給Ru,該消息經過兩者之間的對密鑰Kup加密Re — Ru :{IIx f (k) | salt (k+1)} Kup ;步驟 2D、如果 Rank(u) = k,則 f(k) = f(Rank(u))。
8.一種6LoWPAN中基于多次Hash的密鑰建立方法,包括步驟1、普通節點Hy發送消息,包括RS、k和{f(k+Al) | |KI}f(k) Hy — * :RS+k+ {f (k+ Δ 1) | | K1I f (k)其中,k為Hy的Rank值,也表示為Rank(Hy),K1為初始密鑰,| |表示串接, {f(k+AD I IkiKGO表示根據aes加密算法用f(k)加密f(k+Ai) ^p K1串接后的數據;并且,f(k) = F(f(k-1) I I salt (k)),其中,k> 1,salt(k)表示進行第k次Hash計算所用的加鹽值,F(f(k-l) |salt(k)) 表示對f (k-1) I I salt (k)進行Hash函數值計算;步驟2、鄰居路由器1 收到消息后,計算f(k)和f(k+A 1);步驟3、Rn使用f(k)解密{f(k+Al) I K1KGO信息,然后把解密出的f(k+Al)與自己計算的值進行比較,如果相等,則1 對Hy認證通過,否則認證不通過;步驟4、認證通過后,Rn把K1作為兩者之間的對密鑰進行保存,然后回應路由通告消息,使用K1對關鍵信息進行加密Rn —Hy :RA+{Rank (η) | f (Rank (η)) | | salt (Rank (η)+1) | Kg IInjK1 ; 步驟5、Hy收到消息后,把1 作為默認路由器;通過K1解密消息,得到ΙΙη,然后和數據包中的接口標識進行對比實現對1 的認證;保存組密鑰Ke,在Rank(Ii)上增加一個數值計算Rank(y),然后在f (Rank(η))和salt (Rank(η)+1)的基礎上計算出f(Rank(y))和 salt (Rank (y)+l) ;KX作為與1 之間的對密鑰進行保存。
9.根據權利要求8所述的密鑰建立方法,在步驟5后還包括步驟6、普通節點A選擇隨機整數m,使得m > Rank (A),然后向普通節點B發送HELLO 消息和m值;A — B :HELL0+m步驟7、普通節點B收到HELLO消息后,判斷m和Rank (B)的大小;如果m ^ Rank (B),則普通節點B生成兩者的會話密鑰Kab,然后向普通節點A發送密鑰消息,內容為{KAB}f(m),Kab用f(m)加密 B —A:{KAB}f(m)如果m < Rank (B),則普通節點B選擇隨機整數η使得m < η (例如差值小于10不要太大),然后向普通節點A發送HELLO消息和值η B — A :HELL0+n步驟8、普通節點A接收到消息后,如果是密鑰消息,通過計算f(m)解密出會話密鑰 Kab ;如果是HELLO消息,則生成兩者的會話密鑰Kab,然后向B發送密鑰消息,內容為{KAB} f(n),KABffi f(n)加密 A-B :{KAB}f(n)步驟9、B收到密鑰消息后,通過計算f (η)解密出會話密鑰。
10.根據權利要求8所述的密鑰建立方法,在步驟5后還包括 步驟10、Hy在使用NS+AR0消息向1 進行地址注冊時,使用兩者之間的對密鑰K1生成消息驗證碼MAC Hy — Rn :NS,ARO, MAC步驟11、1 收到注冊消息后,使用對密鑰和MAC對消息進行認證; 如果認證不成功,則地址注冊失敗,1 不會為Hy建立任何緩存項信息,從而當Hy向網絡中發送數據包時丟棄數據包、不進行轉發;如果成功,1 會為Hy建立緩存項信息,從而當Hy向網絡中發送的數據包時由1 進行轉發。
全文摘要
本發明提供一種6LoWPAN網絡密鑰建立方法,包括步驟1、內部路由器節點Rx接收到第一個來自路由器節點Ru的DIO消息后,向節點Ru發送消息請求得到組密鑰;步驟2、Ru收到消息后,根據消息中的k值計算f(k)和f(k+Δ1);步驟3、Ru使用f(k)解密{f(k+Δ1)||KI}f(k)信息,然后把解密出的f(k+Δ1)與自己計算的值進行比較,如果相等,則Ru對Rx認證通過,否則認證不通過;步驟4、如果Rx認證通過,則Ru把KI作為與Rx之間的對密鑰進行保存,并且向Rx回應消息;步驟5、Rx收到回應消息后,通過KI解密整個消息,得到Ru的接口標識IIu,然后和數據包源地址中的接口標識進行對比實現對Ru的認證;步驟6、如果Ru認證通過,Rx得到組密鑰KG,并把Ru作為自己的父節點、存儲兩者之間的對密鑰KI。上述利用多次Hash的密鑰建立方法計算量小。
文檔編號H04W12/04GK102448062SQ20121000352
公開日2012年5月9日 申請日期2012年1月6日 優先權日2012年1月6日
發明者劉欽明, 史紅周, 楊德興 申請人:中國科學院計算技術研究所