彭春燕,杜秀娟
青海師范大學 計算機學院,西寧810008
近些年,隨著水聲傳感器網絡逐步成為研究熱點問題,安全威脅在水聲傳感器網絡中日益凸顯。在水下采用水聲進行通信,水聲信道具有高誤碼、長時延和窄帶寬的特點。水下節點通常部署比較稀疏,大多數節點可以被動隨水流或其他水下活動而移動,一些節點更容易發生硬件故障或因能量耗盡而消亡,網絡拓撲通常更容易發生動態變化。另外,當水下通信涉及到商業應用、科學研究和軍事通信等領域時,數據以及節點身份等敏感信息容易遭受非法訪問,水聲信道的開放共享性還使得水下通信更容易被竊聽和干擾,需要研究人員進一步開發新的安全路由協議[1-4]。
2015 年,Zuba 等人主要針對水聲網絡中的拒絕服務攻擊和對策進行了研究,利用加密機制,內隱認知(I-ACKS),地理限制和隨機原理來實現其數據包自適應的分組傳送[5]。2017年,Du等人提出了一種水聲網絡安全路由設計方案[6],無需在線可信第三方的短簽名算法,在認證路由設置過程中使用了源節點與目的節點對,解決了密鑰托管問題,實現了水下環境中安全匿名通信。同年,Bharamagoudra等人[7]將代理的思想應用于水聲傳感器網絡的安全路由協議中,所提出的方案包括安全、路由、水下網關和AUV 四個代理模塊,通過四個代理的協同工作有效抵制蟲洞攻擊。Dini 等人第一次為保護UASNs的完整性和機密性提供了一個由安全路由協議和一組加密原語(SRCP)組成的安全套件,被稱為安全的泛洪協議(SeFLOOD),作者采用128位組密鑰和數字簽名機制利用橢圓曲線ECC-180 實現了對消息的加密保護[8]。Yan等人提出了一個用于水聲傳感器網絡的標準地理路由協議,稱為基于節點深度信息的路由協議,簡稱為DBR(Depth-Based Routing protocol)[9]。Zuba等人曾分析了在一個標準的DBR協議中由于所面臨的一些安全漏洞而導致的一些極為嚴重的安全問題[10]。因此,在標準的路由協議中通過設置一些安全機制用來加強安全通信協議是非常有必要的。本文使用節點的深度信息在源路由的基礎上增加了匿名安全路由通信部分從而實現了安全、實用、有效的水聲匿名安全路由協議,文中所提出的通信安全框架可以提供身份保密、位置隱私和路由的匿名性,并保證了源節點和Sink節點之間端到端的機密性和完整性,其匿名算法主要結合了節點深度信息和雙線性對的理論,理論上分析僅僅引入了有限的通信、計算開銷以及較少的存儲消耗,更適合用于資源有限的水聲傳感器網絡中。
水聲傳感器網絡的DBR路由協議利用多Sink節點的網絡結構,只需要節點的深度信息進行通信,屬于地理位置的路由協議,它主要是采用貪婪路由根據所有節點的位置信息來轉發數據包,當中間節點接收到數據包時,總是試圖將數據包轉發到距離目的Sink節點最近的鄰居節點。DBR 路由協議只關注每個節點的深度信息,使得惡意攻擊者很容易偽造深度信息而冒充合法節點來轉發數據包,該協議的通信體系結構如圖1所示。

圖1 DBR的網絡架構
本文所提出的安全協議采用基于節點深度信息的路由轉發協議的原因主要是:(1)它不需要全維位置信息。(2)支持水下動態網絡。(3)利用多個Sink 節點接收數據,路由算法簡單易行,不會引入額外計算存儲開銷。匿名安全路由協議的實現主要分為以下兩個階段:一個是路由發現階段,另一個是路由恢復階段。在路由發現階段,發送節點需要根據自己節點的深度、包含在數據包中前一個節點的深度和系統所設置的深度閾值來決定是否轉發數據,如果符合條件,將數據分組傳送到下一跳,否則就丟棄該數據包,以此類推下一跳節點繼續進行判斷轉發,直到到達水面Sink節點。在路由恢復階段,水面Sink節點將恢復數據包按照剛才的路徑返回源節點,當恢復數據包的路徑不止一條時,源節點會將用時最短最先到達的一條路徑作為最佳路徑,該過程如圖2所示。

圖2 路由發現和恢復階段
考慮到水聲傳感器網絡中節點能量和計算資源非常有限,加密算法不能太過復雜。因此,在選取加密算法時應盡可能選取復雜度較低的算法,盡可能地降低算法所增加的計算和存儲開銷,因此在設計中采用了雙線性對的理論。
雙線性映射可以由Weil 配對或橢圓曲線Tate 配對構建[11-12]。假設G1和G2階為q 的兩個群。G1是一個加法群,G2是一個乘法群,設p 代表群G1的生成元,離散對數群G1和群G2是一個NP 困難問題,一個映射e從群G1到群G2:G1×G1→G2為雙線性映射,如果滿足以下性質:
(1)雙線性:對于所有整數a,b,?P,Q,R ∈G1,e(P,Q+R)= e(P,Q)e(P,R),e(P+Q,R)= e(P,R)e(Q,R),e(aP,bQ)=e(P,Q)ab。
(2)非退化性:?P,Q ∈G1,e(P,Q)≠1。
(3)可計算性:?P,Q ∈G1,可以在有效的多項式時間內完成計算。
先介紹在新方案中用到的幾種符號。表1 總結了所用到的符號及其對應的含義。

表1 符號說明
假設每個節點具有相同的傳輸范圍,并且每個節點事先已經獲得唯一的ID 值。此外,所有Sink 目的節點都具有相同的ID值。
首先,自主水下航行器或水面基站Sink節點在水聲傳感器網絡中均可以進行密鑰分發從而充當私鑰產生中心(Private Key Generator,PKG),并且Galindo和Roman 等人已經提出了水聲傳感器網絡中有效的非交互式密鑰協議[13],同樣,此方案也可以作為本文密鑰協商方案。PKG 生成系統參數p,G1,G2,e:G1×G1→G2和一個哈希函數:H(·):{0,1}→G1。
PKG 生成一對系統公鑰和私鑰(Spub,Spri),Spub=Sprip,然后每個節點確認自己的節點身份信息IDi,并計算其公鑰Pi=H(IDi),私鑰Si=SpriPi。
所提出的安全協議分為路由發現、路由恢復和數據傳輸三個階段。
(1)路由發現
在發送數據包之前需要在源節點N0生成路由發現數據包,并將其廣播到下一跳節點,使得通信節點之間預先建立至少一條路由。
①源節點N0先隨機選擇一個隨機數Rand ,然后計算Kij=H(e(Si,Pj)),求出X=H(IDi)⊕H(e(Spub,Pj))。
②源節點N0通過計算M0=[Rreq_seq||RandPi||Hop||X||EKij(H(IDj))]生成路由發現數據包。這里的Rreq_seq是該路由發現包的唯一標識。 RandPi用于檢測該節點是否已在請求階段已經處理過該數據包。Hop 表示數據包傳輸過程中允許的最大跳數,主要用來限制數據包在傳輸過程中的生命周期。X 用于源節點N0的身份信息IDi的加密,EKij(H(IDj))表示用公鑰Kij加密下一跳節點Nj的身份信息IDj。
③當中間節點接收到路由發現數據包時,節點先檢查表達式hop-->0 是否成立,當判斷hop--的值大于0 時,可以接收數據包并進行下一步驗證;否則說明hop 值已經到達極限將立刻丟棄該數據包。在下一時刻,中間節點將檢查路由緩沖表中Rreq_seq是否存在該路由項。如果Rreq_seq存在,說明該數據包已經在此節點收到并進行了轉發,立即丟棄該數據包;否則,節點將會把結果RandPi存儲在其緩沖區中。然后用公式(1)來計算H(e(p,Sj))并驗證是否正確:

源節點的身份信息IDi可以由公式(2)計算得出:

所以,可由公式(3)進行驗證Kji=Kij是否成立:

然后可以用EKij(H(IDj))解密目的節點的身份信息IDj,并繼續向其他中間節點轉發M0,然后將此路由項Rreq_seq添加節點IDj的緩存中。
(2)路由恢復
①目的節點Nn選擇一個隨機數Rrec_seq作為路由數據恢復包的唯一標識ID,并用公式(4)來計算當前此次通信的會話密鑰SKji:

②會話密鑰生成以后目的節點Nn開始構建路由恢復包。路由恢復包M1可以用公式(5)計算得出,轉發過程中,目的節點Nn根據節點的深度信息值選擇轉發節點。

這里,Rrec_seq是路由恢復包的唯一標識ID,RandPn表示Sink節點Nn正在發送路由恢復包。
③當中間節點接收到路由恢復包時,如果是源節點,由公式(6)計算得出的會話密鑰與目的節點共享的會話密鑰是相同的;如果不相同,說明該節點是中間路由轉發節點。

如果它是轉發節點,當接收到路由恢復包時,它可以根據深度閾值dth繼續廣播到其他相鄰節點,直到找到源節點為止。當找到源節點,若SKij=SKji,并且SKji等于公式(4)中計算出來的SKji,那么就表示此時可以在這兩個節點之間傳輸數據。
(3)安全數據傳輸
當經過路由發現階段和路由恢復階段之后,在源節點N0和目的節點Nn之間就可以開始數據的安全傳輸。
①假設源節點N0向目的節點Nn要發送消息M ,先在本地路由表中查找根據Rrec_seq找到下一跳節點。在公開密鑰Pi和會話密鑰SKij確定之后,源節點N0可以根據公式(7)生成加密數據包并根據節點的深度信息在其允許的范圍內進行傳送到下一跳路由節點:

這里,Rdata_seq是數據包的唯一標識,ESKij(M)表示用源節點和目的節點之間的會話密鑰的加密結果。
②當節點接收到該包時,首先檢查RandPi節點是否在路由表中,然后使用M′=DSKij(ESKij(M))解密M′和計算RandPi,如果計算得出的RandPi等于在緩沖區中的RandPi,則它是目的節點,會話密鑰SKij可用于解密C 從而獲取數據M 。如果是中間節點,則路由數據包將繼續按照路由條目找到通信中的下一跳節點即可。
如果一個節點泄漏了通信的此次會話密鑰SKij,但可以保證之前用該會話密鑰進行的通信是安全的;另外,當以前從源節點Ni到節點Nj通信會話密鑰SKij被泄漏了,以后所使用的會話密鑰SKij′ 仍然安全。當數據包經歷了路由發現過程和路由恢復過程后,在源節點N0和目的Sink 節點Nn之間會建立不止一條路由,并為此次通信建立會話密鑰。從公式(6)可以看出,會話密鑰取決于隨機數rand、公鑰Pi和傳感器節點的私鑰Si。因為分解問題被認為是一個數學問題,即使攻擊者可以同時獲得randP0和randPn,也無法計算會話密鑰。計算SKij=SKji是基于兩個通信節點的私鑰和公鑰,在每個節點上這些值是不相同的,因此,該路由協議能夠保證通信的安全性。
假設在通信過程中,有攻擊節點進行竊聽時,截獲了路由發現數據包M0=[Rreq_seq||RandPi||Hop||H(IDi)⊕H(e(Spub,Pj))||EKij(H(IDj))]時,由于不知道目的節點Nj的私鑰與源節點和目的節點共享的密鑰Kji,因而不能進行解密得到RandPi,也不能通過公式(6)得到此次的會話密鑰,所以本方案也能有效抵抗敵手的竊聽攻擊。
在陸地無線傳感器網絡中有多種輕量級匿名路由協議,如Zhu 等人提出了一種移動Ad Hoc 網絡匿名路由通信方案,稱為ASR[14]。Seys 和Preneel 提出了一個名為ARM 匿名通信方案[15],它需要預共享會話密鑰列表,因而這個方案需要更多的存儲空間。Lu 等人提出了一種稱為SAR的匿名路由協議[16],它可以從源節點向目的節點提供匿名通信,并提供了身份驗證的密鑰交換協議,由于計算的復雜性,這些現有的匿名機制不能很好地適合用于水聲環境中。
如果采用大量的公鑰計算,雖然保障了安全性,但會使加密算法消耗更高的能量和更多的計算時間。本文所提出的協議與其他匿名路由協議如ASR、ARM、SAR 相比,只執行了一次哈希操作,具有最低的計算復雜度,是一種較為高效節能的水下路由安全匿名協議。圖3是與ASR、ARM和SAR總能耗的開銷比較,由于考慮到水下環境通信特點,所設計的算法更加節能、更具時效性,協議的設計也盡可能減少了公開密鑰操作的成本,且能耗最小。

圖3 各協議能量消耗比較
本文所提出的協議SDBR 與其他匿名路由協議如ASR、ARM、SAR 相比,用Th代表哈希操作所用的時間,Tasym定義為私鑰加密時間,Tsym代表的是公共密鑰加密的時間,雙線性對的運算時間用Te表示,指數的運行時間用Texp表示,在表2中列出了所有不同協議的計算復雜度。從表2的結果可以看出SDBR在計算復雜度上有一定的優勢。

表2 復雜度比較
實驗采用NS2仿真平臺,利用其水聲傳感器網絡的仿真實驗的擴展包Aqua-Sim-1.0對算法的時延、能耗等方面做出評估。在NS2仿真實驗中,傳感器節點隨機布置于長寬高為5 000 m 的3-D 區域中,先后進行了5 個點、9 個點、19 個點、25 個點、28 個點的不同數量節點的測試。每個包的大小設置為50 Byte,平均每3 s發一個包,帶寬為5 Kb/s,節點的最大傳輸范圍R 均為1 500 m,傳輸節點之間的數據流采用TCP/CBR 傳輸發生器產生,MAC層協議采用Slotted FAMA[17],這些參數的選擇是基于UWM1000[18]真實水下Modem設備的參數設置,發送功耗為2 W,接收功率是0.75 W,閑置功率設置為0.01 W。每次實驗時長為240 s,當節點數從5 增加到30 時,測試了深度閾值設置為0、20、40 m 時的總能耗、平均端到端的時延和數據包的交付率。在仿真中,Sink節點數量和DBR仿真中相等都是5個,從圖4中可以觀察到當深度閾值設置越大時,參與轉發數據包的節點越少,總能耗會稍微降低;然而從圖5 中也發現相同參數設置下,由于參與轉發數據包的有效節點的減少,數據交付率也隨之下降。

圖4 能耗比較

圖5 數據包交付率比較
從圖6 中可以看出,隨著深度閾值的增加,端到端時延會有少量的下降,這是因為深度閾值的增加使得選擇合適節點的范圍縮小,相互干擾更少,更容易找到符合條件的下一跳節點,平均時延略微降低。從圖5中還可以看出,隨著節點數量的增加,當深度閾值設置為20 m時,平均時延基本維持在2 s左右。

圖6 平均時延比較
本文基于水聲傳感器網絡節點的深度信息利用雙線性對提出了一種安全的新型匿名路由協議,實現了節點身份信息、節點位置和路由信息的保密,并能滿足匿名路由的安全要求,防止敵手對敏感信息的竊取。本文所采用的是對稱密鑰機制,降低了系統的計算復雜度和帶寬消耗。
仿真結果表明,與其他輕量級的匿名路由協議比較該協議所需能耗更小,計算復雜度更低,因而更適合水聲傳感器網絡的安全通信。