IPSec協議:IPsec將IP數據包的內容先加密再傳輸,即便中途被截獲,由於缺乏解密數據包所必要的密鑰,攻擊者也無法獲取里面的內容。
傳輸模式和隧道模式:IPsec對數據進行加密的方式有兩種:傳輸模式和隧道模式。傳輸模式只是對IP協議的數據部分(payload)進行了加密,而隧道模式則是對整個IP數據包進行加密,就好像整個IP數據包在一個安全的隧道里傳輸一樣
ESP:Encapsulating Security Payloads,封裝安全載荷協議,IPsec所支持的兩類協議中的一種。該協議能夠在數據的傳輸過程中對數據進行完整性度量,來源認證以及加密,也可以防止回放攻擊。另一種協議是AH(Authentication
Headers)認證頭協議
SA:SecurityAssociations,安全關聯。SA是IPsec的重要概念,可以理解為被IPsec保護的某個連接的唯一標示。SA是單向的,即在一次安全的通信中,通信的兩個方向(發送和接收)各需要創建一個SA。一個SA會包含很多的信息,而所有的SA都被存放在一個數據庫中,稱為SAD。
SD: Security Associations Database,安全關聯數據庫。每一個SA在SAD中都會有一個與之對應的條目
。一個SAD條目包含的內容有:順序號計數器,順序號溢出計數器,防回放窗口,SA有效期,AH協議中所使用的算法以及密鑰,ESP協議用於認證以及完整性度量的算法,ESP協議用於加密數據的算法以及密鑰,IPsec運行的模式以及兩個通信設備間的傳送數據包大小的最大上限。
通常一個SA可以由目的地址,IPsec所采用的協議(AH或ESP)和SPI來唯一確定。
SPI: Security Parameter Index,安全參數索引。用於將收到的IPsec數據包與其對應的SA
進行關聯。
IPsec AH和ESP協議下報文封裝后的結構:(注意:省略了mac部分)
IPsec ESP報文(傳輸模式)
裝包過程:
1、在原IP報⽂文(包含IP、IP
Datagram三部分)的末尾添加尾部(ESP Trailer)信息,
! 尾部包含三部分。由所選加密算法可能是塊加密,那 么當最后⼀一塊⻓長度不夠時就需要進⾏行填充(padding),附上填充⻓長
度(Pad length)⽅方便解包時順利找出⽤用來填充的那⼀一段數據。⽽而Next header則⽤用來標明被加密的數據報⽂文的類型,例如TCP
2、將IP Datagram部分以及第1步得到的ESP
Trailer作為整體進⾏行加密,具體的加密算法與密鑰由SA給出。
3、在第2步得到的加密數據添加ESP
Header。ESP Header由兩部分組成:SPI和 序號(Sequence
number)。ESP Header位於IP之后。
4、將ESP Header和第2步得到的加密數據做⼀一個摘要,得到⼀一個完整性度量值(ESPMessage
Authentication Code),並添加到ESP報⽂文的尾部。這樣就得到了⼀一個完整的ESP數據報⽂文。
拆包過程:
1、接收⽅方收到數據報⽂文后,對除IP和ESP
Message Authentication Code的部分計算摘要與ESP MAC進⾏行⽐比較,驗證數據的完整性。假如⽐比對不同,可以斷定所收到的報⽂文已經經過篡改了。
2、查看ESP Header,通過⾥里⾯面的SPI得到數據報⽂文所對應的SA;檢查序列號,保證數據不是回放攻擊。
3、根據SA所提供的加密算法與密鑰,解密被加密算法加密過的部分(IP
Datagram、ESPTrailer)。
4、根據ESP Trailer⾥里的填充⻓長度信息,可以找出填充字段的字段,刪去后就能得到完整地IP
Datagram
IPsec ESP報文(隧道模式)
裝包過程:
1. 在原IP報文末尾添加尾部(ESP trailer)信息。如上圖所示,尾部包含三部分。由所選加密算法可能是塊加密,那么當最后一塊長度不夠時就需要進行填充(padding),附上填充長度(Pad
length)方便解包時順利找出用來填充的那一段數據。而Next header則用來標明被加密的數據報文的類型,例如TCP。
2. 將原IP報文以及第1步得到的ESP尾部作為一個整體進行加密。具體的加密算法與密鑰由SA給出。
3. 為第2步得到的加密數據添加ESP頭部。如上圖所示,ESP頭由兩部分組成,SPI和序號(Sequence
number)。加密數據與ESP頭合稱為“enchilada”。
4. 附加完整性度量結果(ICV,Integrity check
value)。對第三步得到的“enchilada”做摘要,得到一個完整性度量值,並附在ESP報文
的尾部。
5. 加上新的IP頭。新構造的IP頭附在ESP報文的前面組成一個新的IP報文。注意這個新的IP頭的目的地址跟源地址可以不一樣。協議類型為50,說明它里面裝的是一個IPsec報文。
拆包過程:
1. 接收方收到數據報文后,發現協議類型是50,故知道這是一個IPsec包。首先查看ESP頭,通過里面的SPI決定數據報文所對應的SA。
2. 計算“enchilada”部分的摘要,與附在末尾的ICV做對比,如果一樣的話說明數據是完整的。否則可以斷定所收到的報文已經不是原來的報文了。
3.檢查Seq里的順序號,保證數據是“新鮮”的。
4.根據SA所提供的加密算法和密鑰,解密被加密過的數據,即“enchilada”。得到原IP報文與ESP尾部(trailer)。
5. 根據ESP尾部里的填充長度信息,我們可以找出填充字段的長度,刪去后就得到原來的IP報文。
6. 最后根據得到的原IP包的目的地址來進行轉發。