WEB安全——IPsec傳輸模式下ESP報文的裝包與拆包過程

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   ar   os   使用   sp   

WEB安全概論

                                                         ——IPsec傳輸模式下ESP報文的裝包與拆包過程

一、IPsec

      (一)簡介

      互連網安全協定英語:Internet Protocol Security,縮寫為 IPsec),是透過對IP協議(互連網協議)的分組進行加密和認證來保護IP協議的網路傳輸協議族(一些相互關聯的協議的集合)。

 

      IPsec由兩大部分組成:(1)建立安全分組流的金鑰交換協議;(2)保護分組流的協議。前者為互連網金鑰交換(IKE)協議。後者包括加密分組流的封裝安全載荷協議(ESP協議)或認證頭協議(AH協議)協議,用於保證資料的機密性、來源可靠性(認證)、不需連線的完整性並提供抗重播服務。

 

      (二)設計意圖

      IPsec被設計用來提供(1)入口對入口通訊安全,在此機制下,分組通訊的安全性由單個節點提供給多台機器(甚至可以是整個區域網路);(2)端到端分組通訊安全,由作為端點的電腦完成安全操作。上述的任意一種模式都可以用來構建虛擬私人網路 (VPN),而這也是IPsec最主要的用途之一。應該注意的是,上述兩種操作模式在安全的實現方面有著很大差別。

       網際網路範圍內端到端通訊安全的發展比預料的要緩慢,其中部分原因,是因為其不夠普遍或者說不被普遍信任。公開金鑰基礎設施能夠得以形成(DNSSEC最初就是為此產生的),一部分是因為許多使用者不能充分地認清他們的需求及可用的選項,導致其作為內含物強加到賣主的產品中(這也必將得到廣泛採用);另一部分可能歸因於網路響應的退化(或說預期退化),就像兜售資訊的充斥而帶來的頻寬損失一樣。

       (三)與其他互連網協議的對比

       IPsec協議工作在OSI 模型的第三層,使其在單獨使用時適於保護基於TCP或UDP的協議(如 安全套接子層(SSL)就不能保護UDP層的通訊流)。這就意味著,與傳輸層或更高層的協議相比,IPsec協議必須處理可靠性和分區的問題,這同時也增加了它的複雜性和處理開銷。相對而言,SSL/TLS依靠更高層的TCP(OSI的第四層)來管理可靠性和分區。

 

二、ESP

      (一)ESP和傳輸模式簡介

        ESPEncapsulating Security Payloads),封裝安全載荷協議,IPsec 所支援的兩類協議中的一種。該協議能夠在資料的傳輸過程中對資料進行完整性度量,來源認證以及加密,也可防止回放攻擊。

            傳輸模式,與隧道模式同為IPsec工作的兩種方式。與隧道模式不同,當IPsec工作在傳輸模式時,新的IP頭並不會被產生,而是採用原來的IP頭,保護的也僅僅是真正傳輸的資料,而不是整個IP報文。在處理方法上,原來的IP報文會先被解開,再在資料前面加上新的ESP或AH協議頭,最後再裝回原來的IP頭,即原來的IP包被修改過再傳輸。

    (二)傳輸模式下的ESP包

              傳輸模式下,ESP包大致結構和詳細結構如下所示:

      

      (三)傳輸模式下的ESP裝包和拆包過程

        1、裝包過程:

        裝包過程,即處理外出資料包。

        對在IPv4上啟動並執行傳送模式應用來說, ESP頭緊跟在IP頭(包括IP頭可能有的任何選項)之後,插入一個外出的IP包中。IP頭的協議欄位被複製到ESP頭的“下一個頭”欄位中, ESP頭的其餘欄位則被填滿— SPI欄位分配到的是來自SADB的、用來對這個包進行處理的特定 SA 的 SPI;以數列填滿號欄位的是序列中的下一個值;填充資料會被插入,其值被分配;同時分配的還有填充長度值。隨後, IP頭的協議欄位得到的是ESP的值,或者50。除了頭插入位置不同之外, IPv6處理規則基本上類似於IPv4。 ESP頭可插在任意一個擴充頭(在路由過程中,有可能被修改)之後。

        從恰當的 SA中選擇加密器(密碼編譯演算法),對包進行加密(從載荷資料的開頭,一直到“下一個頭”欄位)。隨後,使用恰當的 SA中的驗證器,對包進行驗證(自 ESP頭開始,中間經過加密的密文,一直到 ESP尾)。隨後,將驗證器的結果插入 ESP尾的“驗證資料”欄位中。對外出資料包進行處理的最後一步是:重新計算位於 ESP前面的IP頭的校正和。

         在傳輸模式下,當要發出一個資料包時:

         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頭。這樣就可以發送了。

                2、拆包過程。

                拆包過程,即處理接受到的資料包。

                接收端在收到一個 ESP包之後,若不對這個包進行處理,就無法得知它究竟處於通道模式,還是傳送模式。根據對這個包進行處理的SA,便可知道它到底處在什麼模式下。

                如果收到的IPSec包是一個分段,必須把它保留下來,直到這個包的其他部分收完為止。

                我們不能對一個不完整的IPSec包進行處理,因為可能會導致對它施行的初次校檢失敗。

               收到 ESP包後,進行的第一件事情是:檢查處理這個包的SA是否存在,這是基本的 IPSec要求,而不是ESP專有的。如果沒有SA,這個包就會被丟棄。只有在SA存在的情況下,才可開始進行輸入處理。一旦驗證通過了一個有效SA,就可用它開始包的處理。

               首先檢查序號。如果這個包的序號是有效—也就是說,它不是一個重複(重播)的包,也不是出現在包含在S A中的序號視窗的右邊—就開始進行處理。由於E S P身分識別驗證密文而不是明文,接下來進行的便是對這個包進行身分識別驗證。利用恰當的密鑰,把這個完整的ESP包(當然除開驗證資料)傳遞到驗證器那裡(它取自SA)。如果其結果能與“驗證資料”欄位中包含的資料相符(將身分識別驗證演算法可能需要的任何分段考慮在內),就可對這個包進行身分識別驗證。接下來是解密。通過取自SA的密鑰和密碼演算法,就可對 ESP包進行解密,這個ESP包在載荷資料開始之處到下一個頭之間。判斷解密成功的一個最簡單的測試是檢驗其填充。由於填充內容具有決定意義—要麼是一個從1開始的單向遞增的數,要麼通過密碼編譯演算法來決定—對填充內容進行驗證將決定這個包是否已成功解密。

                傳送身分識別驗證和解密檢查成功之後,就可對結果資料包進行初步的有效性檢驗。如果用來處理這個資料包的SA表明在某一特定模式下—要麼是通道模式,要麼是傳送模式—只能處理ESP包,那麼還必須檢驗這個包的適用性。如果這個包與要求的模式不符,就必須把它丟棄。

                對傳送模式而言,上層協議頭與IP頭是同步的,ESP頭的下一個頭欄位被複製到IP頭的協議欄位中,並計算出一個新的IP校正和;而對通道模式而言,就拋開外部IP頭和ESP頭—我們需要的是這個解開封裝的包。這時,必須進行另一個有效性檢驗。

                如果它是一個傳送模式包,就會轉讓到一個高一級的協議層—比如TCP或 UDP—由它們對這個包進行處理。

拆包過程如下:

1. 收到資料報文後,發現協議類型是50,故知道這是一個IPsec包。首先查看ESP 頭, 通過裡面的SPI決定資料報文所對應的SA。

2. 計算“enchilada”部分的摘要,與附在末尾的ICV做對比,如果一樣的話說明資料 是完整的。否則可以斷定所收到的報文已經不是原來的報文了。

3. 檢查Seq裡的順序號,保證資料是“新鮮”的。

4. 根據SA所提供的密碼編譯演算法和密鑰,解密被加密過的資料,即“enchilada”。得到原 IP報文與ESP尾部(trailer)。

5. 根據ESP尾部裡的填充長度資訊,我們可以找出填充欄位的長度,刪去後就得到原來 的IP報文。

6. 最後轉讓到一個高一級的協議層—比如TCP或 UDP—由它們對這個包進行處理。

             (四)拓展:傳輸模式下的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包的目的地址來進行轉寄。

 

參考資料:

#傳輸模式下ESP的裝包和拆包過程#

http://blog.sina.com.cn/s/blog_64ffd1280101egtj.html

#IPSec傳輸模式/隧道模式下ESP報文的裝包與拆包過程#

http://blog.csdn.net/johnson_puning/article/details/14163751

#IPsec#

http://zh.wikipedia.org/wiki/IPsec

 

WEB安全——IPsec傳輸模式下ESP報文的裝包與拆包過程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.