Ipsec

ipsec, esp: 使用哪個密鑰生成 HMAC

  • April 13, 2019

簡短問題: IPSEC/ESP 中 ICV 計算和加密的密鑰是否相同?或者 SA 中是否存在兩個密鑰?

長問題: 在建立新的 IPSEC-ESP 連接之前,使用 IKEv2 啟動新會話。這還涉及 DH 密鑰協議。此密鑰然後儲存在 IKE-SA 中。

建立會話後,ESP 使用 IKE-SA 中的密鑰進行消息加密/解密。有效載荷加密後,通過 HMAC 計算計算 ICV。但是這個 HMAC 也需要一個密鑰。我已經搜尋了幾個小時而沒有成功。

它是用於加密的同一密鑰,是根據加密密鑰計算出來的,還是在 SA 中儲存了兩個密鑰?

我無法在 rfc4303 (ESP)、rfc2104 (HMAC) 或 rfc7296 (IKEv2) 中找到答案。

並且那裡沒有多少關於 IPsec 的書籍。

ICV 計算和加密的密鑰在 IPSEC/ESP 中是否相同?或者 SA 中是否存在兩個密鑰?

不,鑰匙不一樣。是的,SA 中確實存在兩個密鑰(至少,對於具有單獨加密和完整性轉換的 SA - 並非全部都如此)。

您確實從同一個秘密同時派生了加密和 HMAC 密鑰,但它們並不相同(那將是壞密鑰 hygene)。相反,它們是從相同的秘密派生的(您還為 SA 生成密鑰,同時保護在相反方向流動的流量)。

也就是說,IKE 生成一個看起來很隨機的長字元串(它稱為 KEYMAT);如果加密密鑰是n位,而完整性(ICV)密鑰是m位(並且沒有使用 AH),則至少生成 2n+2m 位的 KEYMAT,然後:

  • 前 n 位用作發起者到響應者的加密密鑰(即用於保護從發起者到響應者的流量)
  • 接下來的 m 位用作發起者到響應者的完整性密鑰
  • 接下來的 n 位用作響應者到發起者的加密密鑰
  • 接下來的 m 位用作響應者到發起者的完整性密鑰

要查看標準的文本,請參閱 RFC7296 的第 2.17 節:

在任何情況下,必須使用以下規則從擴展的 KEYMAT 中獲取每個子 SA 的密鑰材料:

將數據從發起者傳送到響應者的 SA 的所有密鑰都在 SA 從響應者到發起者之前獲取。

如果協商了多個 IPsec 協議,則每個子 SA 的密鑰材料按照協議標頭出現在封裝數據包中的順序獲取。

如果 IPsec 協議需要多個密鑰,則需要在協議規範中描述從 SA 的密鑰材料中獲取它們的順序。對於 ESP 和 AH,

$$ IPSECARCH $$ 定義順序,即:加密密鑰(如果有)必須取自第一位,完整性密鑰(如果有)必須取自其餘位。

HMAC 密鑰是“完整性密鑰”

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