ipsec, esp: 使用哪個密鑰生成 HMAC
簡短問題: 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 密鑰是“完整性密鑰”