原創:VPN專題-2-IPSec VPN基礎理論知識詳解(第二部分)

第一部分我們講述了IPSec VPN的工作模式,提到了IPSEC報文的AH和ESP封裝方式,下面我們通過協議層面詳細學習一下這兩種封裝方式:

1、 ESP封裝

ESP(Encapsulation Security Payload)叫做加密安全負載,協議號為50。

知識擴展:常用協議號,ICMP為1,TCP為6,UDP為17,GRE為47,ESP為50,AH為51。

ESP的包結構:

如下圖所示,ESP在原始數據包中添加了三個部分,一個部分為ESP頭部,一部分為ESP尾部,還有一個ESP校驗位。

原創:VPN專題-2-IPSec VPN基礎理論知識詳解(第二部分)

下圖為ESP縱向報文格式圖:

原創:VPN專題-2-IPSec VPN基礎理論知識詳解(第二部分)


下面進行每部分的詳細分析:

1.1 ESP頭部報文分析

ESP頭部包含兩個字段,SPI和序列號,長度各為32位

1.1.1 SPI安全參數索引


原創:VPN專題-2-IPSec VPN基礎理論知識詳解(第二部分)

SPI是個32位長度的字段,是一個安全關聯(SA)的ID。

首先解釋一下什麼是安全關聯SA,如下圖所示,路由器R1與路由器R2和R3建立的IPSec VPN,在配置IPSec VPN時會讓用戶輸入使用的哪種加密協議的哪種算法?哪種校驗方式?工作模式,密鑰交換方式,密鑰有效期等參數。這些參數建立了一組記錄,記錄了每兩臺路由器之間使用的協商參數,這個記錄就是一個SA,SA存放在路由器的SADB裡,也就是安全關聯數據庫,如下圖,R1分別與R2和R3建立了IPSec VPN,也就會產生兩組SA存放在SADB裡,如何區分哪個SA是和R2協商的?哪個是和R3協商的?這就需要一個標識來區分,這個標識就是SPI。SPI是由雙方加密點的IP地址計算出來的,當路由器收到一個加密報文後,通過源目IP地址就可計算出後面的數據可以使用哪個SPI的記錄來解密。

原創:VPN專題-2-IPSec VPN基礎理論知識詳解(第二部分)


1.1.2 序列號

序列號的作用與TCP中的序列號相似,由於IPSec的ESP封裝方式將IP報文頭部後的所有數據都進行的加密,TCP報文頭部也在其中,所以需要在ESP封裝的IPSec報文頭部中加入一個與TCP序列號類似的序列號字段,用來防止數據的重放。

知識擴展:數據防重放攻擊防禦一般有兩種方式:基於序列號方式和基於時間的方式。

基於序列號的方式是每發送一個字節的加密數據包序列號就會增加1,例如發送的第一個數據包中的序列號為10,數據內容大小為109字節。第二個發送的數據包序列號就為119。如果接收端收到不是為119序列號的數據報文則丟棄。

基於時間的防重放是接收端收到一個個數據報文後設置一個時間節點,在這個時間節點範圍中再次收到的數據即為可信數據,如果落到時間節點以外的就丟棄。

如果數據報文頭部部分已經加密,不能解密,則可以通過記錄加密後的數據,如果重複收到相同的加密數據到達一定的閾值,則定義為重放攻擊。

注:ESP報文頭部會在序列號字段後後隨機添加8字節的IV變量,之前我們在VPN專題-1-加密學理論知識(第一部分)講述過IV變量是用於做DES或3DES中的加密塊鏈接。

在介紹ESP報文尾部前,先提一下在ESP報文首部與ESP報文尾部之間的數據部分,可能會在數據部分中加入墊片字段,這是因為使用ESP使用的是DES、3DES等數據塊加密算法,加密的數據是以數據塊的方式存在(在之前的VPN專題-1-加密學理論知識(第一部分)中DES加密部分講述過),例如使用的是DES,56位的加密算法,每64位(8字節)的數據作為一個數據塊進行加密,所以如果發送的數據不能被8整除,則需要對數據部分通過墊片數據進行增加,以整除8,將所有數據進行加密。根據使用算法的不同,加密所使用的數據塊大小也不相同。墊片字段報文一般為0-255字節範圍。

1.2 ESP尾部報文分析


ESP尾部包含兩個字段,墊片長度和NEXT Hander。

墊片長度字段為8位用來記錄數據部分進行了多少長度的墊片數據。

NEXT Hander下一個報文頭字段,用來表述有效負載中的數據類型,例如ESP在隧道模式下使用,則該值為4。字段長度也為8位。

1.3 ESP校驗位

ESP校驗是對加密後的數據報文進行散列函數運算得到散列值。

如下圖所示,將ESP頭至ESP尾部所有數據進行HMAC的MD5、SHA等散列函數計算後的散列值存放於數據報文最後的校驗和位處。正常的MD5散列值為128位,SHA-1的散列值為160位,但該字段為12字節,96比特位,所以ESP強制實現HMAC-MD5-96和HMAC-SHA-1-96,即不管使用哪種散列函數算法,都只取散列值的前96位放入該字段(因為散列值會有雪崩效應,一旦數據被篡改,前96位也一定不相同)。

原創:VPN專題-2-IPSec VPN基礎理論知識詳解(第二部分)

2、 AH封裝

AH認證頭部協議,協議號51。AH校驗是對添加IPSec報文AH封裝(此時無AH校驗和)後的數據報文進行散列函數運算得到散列值。並將散列值重新封裝到AH報文內部。

現在IPSec基本使用ESP進行封裝,不使用AH進行封裝。第一個原因在於不對數據進行加密。第二個原因在於AH封裝無論在傳輸模式還是隧道模式均校驗原始IP頭部報文,導致的直接後果就是無法穿越NAT。現在IPv4網絡IP地址已經枯竭,所以網絡中基本無法離開NAT。

原創:VPN專題-2-IPSec VPN基礎理論知識詳解(第二部分)

AH頭部報文分析:

如下圖,AH報文相對於ESP報文少了用於加密的IV變量以及墊片字段及墊片長度字段,SPI、序列號等字段與ESP功能基本相同。

原創:VPN專題-2-IPSec VPN基礎理論知識詳解(第二部分)


知識擴展:AH校驗傳輸模式"IP頭部"的部分字段以及所有數據校驗部分,校驗隧道模式"新IP頭部"的部分字段及剩下的所有數據。

其中IP頭部不進行校驗的字段如下圖灰色部分:

原創:VPN專題-2-IPSec VPN基礎理論知識詳解(第二部分)


此文章為IPSec VPN基礎理論知識的第二部分IPSec 的ESP和AH封裝,下一部分將通過對IPSEC的兩個數據庫的介紹來解釋IPSec VPN的建立過程。

以上內容均為本人對所掌握知識的總結歸納所創作的原創文章,希望能給大家的學習過程帶來幫助,如有技術理解錯誤希望能夠及時得到大家的指正,大家共同學習,共同進步。


分享到:


相關文章: