原創文章,拒絕轉載
裝包過程
總體流程圖
過程描述
- 在原IP報文中找到TCP報文部分,在其后添加相應的ESP trailer信息。
- ESP trailer 包含三部分:Padding,Pad length 和 Next header。Padding 即使用塊加密時,最后一個數據塊長度不足時所做的填充。Pad length 指填充的長度,方便拆包時找到用來填充的數據段。Next header 標明被封裝的原報文的協議類型,例如 6 = TCP。
- 將原 TCP 報文和第1步得到的 ESP trailer 作為一個整體進行加密封裝。具體的加密算法和密鑰由SA給出。
- 為第2步得到的密文添加 ESP 頭。ESP 頭由 SPI (Security Parameter Index) 和 Seq # 兩部分組成。密文和 ESP頭合起來稱為"enchilada",構成認證部分。
- 附加完整性度量結果(ICV)。對第3步生成的"enchilada"認證部分做摘要(ESP Authentication Data),得到一個32位整數倍的 ICV,附在"enchilada"之后。ICV 生成算法和驗證密鑰由 SA 給出。
- 將原始的 IP 報文頭中的協議號改為50(代表 ESP),然后將 IP 報文頭加到第4步的結果之前構成 IPsec 報文。
裝包前后示意圖
拆包過程
過程描述
- 接收方收到 IP 報文后,發現協議類型是50,標明這是一個 ESP 包。首先查看 ESP 頭,通過安全參數索引號 SPI 決定數據報文所對應的 SA,獲得對應的模式(隧道或傳輸模式)以及安全規范。
- 根據 SA 指定的摘要算法和驗證密鑰計算"enchilada"的摘要值,與附在 IP 報文最后的 ICV 進行對比,二者相同則數據完整性未被破壞。
- 檢查 ESP 頭中的 Seq # 里的序列號,保證數據是新的,避免重放攻擊。
- 根據 SA 所指定的加密算法和密鑰,解密密文段,得到原來的 TCP 報文和 ESP trailer。
- 根據 ESP trailer 的填充長度信息,找出填充字段的長度,刪除填充字段得到原來的 TCP 報文。
- 根據 TCP 報文頭信息將報文交付給傳輸層。