一、????? ESP簡介
? ? ? ?ESP,封裝安全載荷協議(Encapsulating SecurityPayloads),是一種Ipsec協議,用于對IP協議在傳輸過程中進行數據完整性度量、來源認證、加密以及防回放攻擊。可以單獨使用,也可以和AH一起使用。在ESP頭部之前的IPV4、IPV6或者拓展頭部,應該在Protocol(IPV4)或者Next Header(IPV6、拓展頭部)部分中包含50,表示引入了ESP協議。
?
二、????? ESP傳輸模式數據包結構
ESP的數據包結構如下:
ESP頭部:
(1) 安全參數索引SPI(32位):用來確定唯一的安全聯盟
(2) 序列號SequenceNumber(32位):用于保護接收端免受重復操作攻擊
ESP尾部:
(1) 填充Padding:字段長范圍為0-255,用于將明文擴充到需要加密的長度,同時隱藏載荷數據的真實長度。
(2) 填充長度PadLength(8位):表示填充的字節數
(3) 下一頭部NextHeader (8位):標志下一頭部的類型(被加密的數據類型)。
ESP驗證尾部:
(1)???鑒別數據Integrity Check Value-ICV(變長):在ESP數據包其他字段基礎上計算出的完整性校驗值。
?
? ? ? ?對數據的完整性驗證需要計算SPI、序列號、載荷數據以及ESP尾部。
? ? ? ?對數據的保密性驗證需要計算載荷數據以及ESP尾部。
?
三、????? ESP傳輸模式裝拆包流程
? ? ? ESP有兩種模式:隧道模式和傳輸模式。隧道模式將發送的整個數據報文作為一個數據整體來處理,在整段數據前加上新的IP進行傳輸,不修改原報文。
對于傳輸模式而言,需要拆解報文,對原報文的數據部分進行處理,加上ESP頭部后,再裝上原報文的IP部分。
? ? ? 對IPV4報文的處理過程示意圖如下:
?
? ? ?對IPV6報文的處理過程示意圖如下:
裝包過程(以IPV4協議為例):
1、? 將原IP報文的IP頭和數據報文部分分離,在數據報文部分的尾部添加ESP尾部。ESP尾部包含:選擇的加密算法需要對明文進行填充的數據Padding、填充長度Padding Length、下一頭部Next Header標注被加密的數據報文類型。
????
2、? 對第一步得到的整體信息(原數據報文和ESP尾部)進行加密。具體的加密算法以及密鑰由SA給出。
3、對第二步得到的已經加密的信息添加ESP頭部(SPI和序列號),組裝成Enchilada。
4、對第三步得到的Enchilada做摘要,得到完整性度量結果(ICV),附加在Enchilada尾部
5、在第四步得到的數據前加上原IP頭,將原IP頭中的Protocol中的值改成50,代表ESP
更清晰的轉換對比圖如下(以IPV4\TCP為例):
拆包過程:
1、數據接收方收到數據后,看到協議類型為50,知道這是一個ESP協議,查看ESP頭,通過SPI決定數據對應的SA.
2、計算Enchilada部分的ICV,與數據包尾部的ESP ICV進行比較,確定數據的完整性。
3、檢查Seq序列號,決定是否需要該數據信息。
4、根據SA提供的加密算法和密鑰,解密被加密的Enchilada數據,得到原數據報文和ESP尾部
5、根據ESP尾部的填充長度信息,找出填充字段的長度,刪去后得到原數據報文。
6、根據原IP頭的目的地址進行轉發。