[ike][ipsec] child sa rekey機制的細節分析


子標題:ipsec rekey是否會導致丟包

author: classic_tong

前言

什么叫rekey。

rekey是指ipsec的通信兩端定期更換加密信道秘鑰的機制。

為了安全性考慮,隨着秘鑰使用時間的延遲,對稱秘鑰被破解的可能性會逐漸增大。所以,定期更換

對稱秘鑰,是保證ipsec安全性的必要手段。

我們知道key有兩個key,IKE sa的key和child sa(ipsec sa)的key。所以rekey也有兩個,ike rekey

和child rekey。

這里只討論child sa的rekey。

所有內容,都來自這里:https://tools.ietf.org/html/rfc7296#section-2.8

 

一 概念

rekey是指,一旦滿足rekey條件(soft條件)時,會向另一端發送一個CREATE_CHILD_SA請求消息,另一個端回復

一個CREATE_CHILD_SA響應消息。從而協商出一個新的sa的過程。

這個時候,舊的SA並沒有被刪除,一旦瞞住刪除條件(hard條件)時,舊的SA會被滿足條件的一段,通過INFORMATION條件觸發刪除。

 

rekey的觸發條件分三種,時間觸發,報數觸發,字節數觸發。其中各又被分為soft和hard兩種條件。用來分別觸發上邊的描述。

例如:設置了時間觸發為100秒。就是指child sa在協商建立之后的100秒,會啟動rekey流程。

在這個例子里,已strongswan的實現為例,hard = 100秒 + random秒。soft = hard × 90%

也就是在soft秒的時候,一端會建立新的sa。到hard秒的時候會刪掉舊的sa。

報數與字節數同理,soft永遠會先於hard條件到達。

 

這里。請注意這個時間差(hard - soft),這是rekey機制的一個潛在的條件。在這個時間段內,必須做好兩件事情,才能保證

rekey過程的平滑,也就是ESP包不丟失。

第一件事情是完成兩端的新SA的建立。

第二件事情是兩端都完成流量從舊SA到新SA的切換。

 

在ikev2中,以上觸發條件是在ipsec的兩端本地設置的。彼此不協商。誰先到底條件,誰就會發起rekey。

在ikev1中,以上條件是協商處理的。我們只討論ikev2.

 

二 流程

rekey的常規流程邏輯是不會導致丟包的,利用下圖,做詳情講解:

 

 該圖的左邊是首先發生rekey的一方,右邊是ipsec鏈接的另一方。

1. 左邊到達rekey的soft觸發條件。

2. 左邊發送新建sa的請求消息。

3. 右邊收到消息后,開始在本地創建新的SA。

4. 右邊發送新建sa的響應消息。但是這里有一個條件就是在發送這個包之前,必須保證本地的新SA已經完全就緒,並且隨時可用。

  在這之后,右邊必須仍舊使用舊的SA發送ESP消息。

5. 左邊收到響應消息后,在本地完成新SA的創建過程。

  新的SA建立好之后,右邊將切換使用新的SA給對端發送ESP消息。

6. 右邊收到的新SA發送過來的消息之后,並且解密成功。這個時候說明左邊的新SA已經就緒了。

  於是右邊將流量從舊的SA切換到新的SA上面去。

7. 右邊可以使用新的SA發送ESP消息了。

至此,新的SA已經完成了建立和切換的過程,並且不會導致丟包。

8. 左邊到達rekey的hard條件

9. 左邊發送刪除舊SA的請求。

10,右邊回應刪除舊SA的請求。

至此,rekey過程完成。

 

需要特別說明的是,又可以在rekey期間,左邊並沒有需要發給對方的ESP報文時。它會發一個假的過去,觸發對方切換SA。

或者,當右邊沒有收到任何新SA的ESP報文,但是卻收到了舊SA的刪除請求時,它也會進行SA的切換。(也就是說沒有收到圖中的5,直接收到了9)

 

總結一下,這里邊兩個關鍵的邏輯在4和6上面。

只要是正確的ipsec實現,4上面都不會有問題。所以在6的一些特殊情況下,會導致rekey期間的丟包。

比如,hard減去soft的時間過短,短到左邊的sa創建流程沒有及時完成,便觸發了右邊的流量切換。

 

三 多出來的SA

第一小節中random的作用是為了防止兩端同時rekey的出現。

例如我們一般在配置兩邊的ipsec隧道時,通常會采用相同的配置,如rekey time=3600秒。

這個時候如果沒有random時間,兩邊會同時發起rekey。

 

同時發起rekey的情況下,兩側的新建sa都會成功,這個時候會出現三個SA。

每一端都會各自獨立檢測這個場景,然后發現同時rekey的出現。然后會由發起的人來刪除nonce比較小的那個一個SA。

以此到達刪除重復sa的目的。

 

四 其他

RFC里,讀到一句話,也不知道什么情況下會出現TS和算法會和就的SA不同。

Note that, when rekeying, the new Child SA SHOULD NOT have different Traffic Selectors and algorithms than the old one.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM