Ipsec

在 IKE (v1) 的第 2 階段如何確定/協商 SPI?

  • August 11, 2017

雖然我知道 SPI(連同目標 IP 和協議)用於唯一標識對等方上的傳入 SA,但在我的一生中,我無法理解特定 SPI 值是如何由雙方確定和商定的IKE 階段 2 消息交換期間的對等點,用於在每個對等點上建立的傳入和傳出 SA。我遇到過以下來源:

SPI 是一個 32 位數字,由發起者選擇,用於唯一標識作為此協商結果在其安全關聯數據庫中生成的傳出 IPSec SA 。**響應者在看到 SPI 後,確保它與正在使用的 SPI 之一不同,並開始將其用於 傳入的 IPSec SA。它還為其傳出(和發起者的傳入)SA 提出一個 SPI,發起者在檢查後同意。

上述方案似乎更像是一次試錯而不是談判。從邏輯上講,我希望響應者為其傳入 SA 選擇目前未使用的 SPI 值,並將其發送給發起者以記錄在其 SAD 中並在它發送的所有未來 AH/ESP 有效負載中對其進行編碼通過這個 SA 發送給響應者。我的問題如下:

  1. 上面的描述實際上是如何發生的嗎?
  2. 如果是,如果從發起方接收 SPI 的響應方發現 SPI 值已在使用中,會發生什麼情況?

上面的描述實際上是如何發生的嗎?

不; 它像你懷疑的那樣工作。每一方選擇SPI用於傳入SA;即對方如何標記用這個SA加密的加密包;在初始快速模式消息中,發起者指定將用於發送到發起者的加密數據包的 SPI,在響應數據包中,響應者指定將用於發送到響應者的加密數據包的 SPI。這是專門完成的,以便在任何一種情況下,解密器都可以選擇便於查找的 SPI 值;例如,它可能會選擇將“解密表”中的索引放置到低 16 位中,比如說(是的,有一些實現可以這樣做)。

如果是,如果從發起方接收 SPI 的響應方發現 SPI 值已在使用中,會發生什麼情況?

雖然(如上所述)這個問題背後的假設是錯誤的,但這裡有一個重要的答案,所以我會回答這個問題。

如上所述,發起者首先選擇它的 SPI(即,它的傳入數據包的 SPI),然後響應者選擇它的 SPI。

由於 IKEv1 派生密鑰的方式,如果響應方選擇與發起方相同的 SPI,則兩個 SA 的密鑰(方向相反)將相同;根據協商的轉換,這可能是災難性的。我不相信有任何要求,但我知道至少有一種實現,作為響應者,總是選擇與發起者不同的 SPI,作為發起者,如果它看到響應者選擇了相同的 SPI,則自動關閉連接沒有加密任何東西。

引用自:https://crypto.stackexchange.com/questions/50203