人狠話不多,這份IPSec的體系結構詳解請拿走~
IP安全 (IP Security)體系結構,簡稱 IPSec,是 IETF IPSec 工作組于1998年制定的一組基于密碼學的安全的開放網絡安全協議。IPSec工作在 IP 層,為 IP 層及其上層協議提供保護。
IPSec提供訪問控制、無連接的完整性、數據來源驗證、防重放保護、保密性、自動密鑰管理等安全服務。IPSec獨立于算法,并允許用戶( 或系統管理員 ) 控制所提供的安全服務粒度。比如可以在兩臺安全網關之間創建一條承載所有流量的加密隧道,也可以在穿越這些安全網關的每對主機之間的每條TCP連接間建立獨立的加密隧道。
IPSec在傳輸層之下,對應用程序和終端用戶來說是透明的。當在路由器或防火墻上安裝 IPSec時,無需更改用戶或服務器系統中的軟件設置即使在終端系統中執行 IPSec,應用程序之類的上層軟件也不會受到影響。
1. IPSec的組成
IPSec是因特網工程任務組(IETF)定義的一種協議套件,由一系列協議組成,驗證頭(AH)、封裝安全載荷(ESP)、 Internet安全關聯和密鑰管理協議 ISAKMP的 Internet IP 安全解釋域 (DOI)、ISAKMP、Internet密鑰交換( IKE)、 IP 安全文檔指南、 OAKLE密Y 鑰確定協議等,它們分別發布在RFC2401~RFC2412 的相關文檔中。圖2.3 顯示了 IPSec的體系結構、組件及各組件間的相互關系。
- AH(認證頭)和 ESP(封裝安全載荷):是IPSec體系中的主體,其中定義了 協議的載荷頭格式以及它們所能提供的服務,另外還定義了數據報的處理規則, 正是這兩個安全協議為數據報提供了網絡層的安全服務。兩個協議在處理數據報 文時都需要根據確定的數據變換算法來對數據進行轉換,以確保數據的安全,其中包括算法、密鑰大小、算法程序以及算法專用的任何信息。
- IKE(Internet密鑰交換):IKE利用 ISAKMP語言來定義密鑰交換,是對安 全服務進行協商的手段。IKE交換的最終結果是一個通過驗證的密鑰以及建立在 通信雙方同意基礎上的安全服務——亦即所謂的“IPSec安全關聯”。
- SA(安全關聯):一套專門將安全服務/ 密鑰和需要保護的通信數據聯系起 來的方案。它保證了IPSec數據報封裝及提取的正確性,同時將遠程通信實體和 要求交換密鑰的IPSec數據傳輸聯系起來。即SA解決的是如何保護通信數據、保 護什么樣的通信數據以及由誰來實行保護的問題。
- 策略:策略是一個非常重要的但又尚未成為標準的組件,它決定兩個實體之 間是否能夠通信; 如果允許通信,又采用什么樣的數據處理算法。如果策略定義不當, 可能導致雙方不能正常通信。與策略有關的問題分別是表示與實施。“表 示”負責策略的定義、存儲和獲取, “實施”強調的則是策略在實際通信中的應用。
2. IPSec 的工作原理
設計IPSec是為了給 IPv4 和IPv6 數據提供高質量的、可互操作的、基于密碼學的安全性。IPSec通過使用兩種通信安全協議來達到這些目標:認證頭(AH) 和封裝安全載荷(ESP),以及像 Internet密鑰交換(IKE)協議這樣的密鑰管理 過程和協議來達到這些目標。
IP AH協議提供數據源認證,無連接的完整性, 以及一個可選的抗重放服務。ESP協議提供數據保密性,有限的數據流保密性,數據源認證,無連接的完整性 以及抗重放服務。對于AH和ESP都有兩種操作模式:傳輸模式和隧道模式。IKE 協議用于協商 AH和ESP所使用的密碼算法,并將算法所需要的密鑰放在合適的位置。
IPSec所使用的協議被設計成與算法無關的。算法的選擇在安全策略數據庫(SPD)中指定。IPSec允許系統或網絡的用戶和管理員控制安全服務提供的粒度。通過使用安全關聯(SA), IPSec能夠區分對不同數據流提供的安全服務。
IPSec本身是一個開放的體系,隨著網絡技術的進步和新的加密、驗證算法 的出現,通過不斷加入新的安全服務和特性,IPSec就可以滿足未來對于信息安 全的需要。隨著互聯網絡技術的不斷進步,IPSec作為網絡層安全協議,也是在 不斷地改進和增加新的功能。其實在 IPSec的框架設計時就考慮過系統擴展問題。例如在 ESP和 AH的文檔中定義有協議、報頭的格式以及它們提供的服務,還定義有數據報的處理規則,但是沒有指定用來實現這些能力的具體數據處理算法。AH默認的、強制實施的加密MAC是HMA-CMD5和HMA-CSHA,在實施方案中其它的加密算法 DES- CBC、CAST- CBC以及 3DES-CBC等都可以作為加密器使用。
3. IPSec的模式
IPSec協議(包括 AH和ESP)既可以用來保護一個完整的IP 載荷, 也可以用來 保護某個 IP 載荷的上層協議。這兩個方面的保護分別由IPSec兩種不同的“模式” 來提供:傳輸模式和隧道模式。
- 傳輸模式:在傳輸模式中,IP頭與上層協議頭之間需插入一個特殊的IPSec 頭。傳輸模式保護的是IP包的有效載荷或者說保護的是上層協議(如TCP、UDP 和 ICMP),如圖 2.4所示。在通常情況下,傳輸模式只用于兩臺主機之間的安全通信。
- 隧道模式:隧道模式為整個IP 包提供保護。如圖2.5 所示,要保護的整個IP 包都需封裝到另一個IP 數據報中,同時在外部與內部IP頭之間插入一個IPSec頭。所有原始的或內部包通過這個隧道從IP 網的一端傳遞到另一端,沿途的路由器只 檢查最外面的IP報頭,不檢查內部原來的IP報頭。由于增加了一個新的IP報頭,因此,新 IP 報文的目的地址可能與原來的不一致。
在千兆網絡加密工程實現上,我們需要的是根據IPSec協議,實現一個安全 網關設備, 為了保證數據的機密性,考慮采用隧道模式的ESP封裝。 由于 IKE協議 是通過軟件實現的, 而本文著重討論 IPSec的硬件實現部分, 故本文不再介紹 IKE 協議。
4. IPSec的實現方式
IPSec可以在主機、路由器或防火墻(創建一個安全網關)中同時實施和部 署。用戶可以根據對安全服務的需要決定究竟在什么地方實施,IPSec的實現方 式可分為集成方式、BITS方式、 BITW方式三種。
- 集成方式:把 IPSec集成到 IP協議的原始實現中,這需要處理IP源代碼,適用于在主機和安全網關中實現。
- “堆棧中的塊( BITS)”方式:把 IPSec作為一個“鍥子”插在原來的 IP 協議棧和鏈路層之間。這不需要處理IP 源代碼,適用于對原有系統的升級改造。這種方法通常用在主機方式中。
- “線纜中的塊( BITW)”方式:這是本文采用實現IPSec的方式,它將 IPSec的實現在一個設備中進行,該設備直接接入路由器或主機設備。當用于支持一臺主機時,與BITS實現非常相似,但在支持路由器或防火墻時,它必須起到一臺安全網關的作用。
5. IPSec協議的處理
IPSec處理分兩類:外出處理和進入處理。
(1) 外出處理
在外出處理的過程中,數據包從傳輸層流進IP層。IP層首先取出 IP頭的有關參數, 檢索SPDB數據庫,判斷應為這個包提供那些安全服務。輸入SPDB的是傳送 報頭中的源地址和目的地址的“選擇符”。SPDB輸出的是根據“選擇符”查詢的 策略結果,有可能出現以下幾種情況:
丟棄這個包。此時包不會得以處理,只是簡單地丟掉。繞過安全服務。在這種情況下,這個IP包不作任何處理,按照一個普通的IP包發送出去。應用安全服務。在這種情況下,需要繼續進行下面的處理。
如果 SPDB的策略輸出中指明該數據包需要安全保護,那么接著就是查詢SADB 來驗證與該連接相關聯的SA是否已經建立,查詢的結果可能是下面的兩種情況之 一:如果相應的SA已存在,對SADB的查詢就會返回指向該SA的指針; 如果查詢不到相應的SA,說明該數據包所屬的安全通信連接尚未建立,就會調用IKE進行協商,將所需要的 SA建立起來。 如果所需要的SA已經存在,那么 SPDB結構中包含指向 SA或SA集束的一個指針(具體由策略決定)。如果SPDB的查詢輸出規定必須將 IPSec應用于數據包,那么在SA成功創建完成之前,數據包是不被允許傳送出去的。
對于從 SADB中查詢得到的 SA還必須進行處理,處理過程如下:
- 如果 SA的軟生存期已滿,就調用IKE建立一個新的SA。
- 如果 SA的硬生存期已滿,就將這個SA刪除。
- 如果序列號溢出,就調用IKE來協商一個新的SA。
SA處理完成后,IPSec的下一步處理是添加適當的AH或 ESP報頭,開始對數據包進行處理。其中涉及到對負載數據的加密、計算校驗等在下面的內容中會給予詳細的介紹。SA中包含所有必要的信息,并已排好順序,使IPSec報頭能夠按正確的順序加以構建。在完成IPSec的報頭構建后,將生成的數據報傳送給原始IP 層進行處理,然后進行數據報的發送。
(2) 進入處理
進入處理中,在收到IP包后,假如包內根本沒有包含IPSec報頭, 那么IPSec就會查閱SPDB,并根據為之提供的安全服務判斷該如何對這個包進行處理。因為如果特定通信要求IPSec安全保護,任何不能與 IPSec保護的那個通信的SPDB定義相匹配的進入包就應該被丟棄。它會用“選擇符” 字段來檢索 SPDB數據庫。策略 的輸出可能是以下三種情況:丟棄、繞過或應用。如果策略的輸出是丟棄,那么數據包就會被放棄; 如果是應用,但相應的SA沒有建立,包同樣會被丟棄;否則就將包傳遞給下一層作進一步的處理。
如果 IP 包中包含了 IPSec報頭,就會由 IPSec層對這個包進行處理。IPSec從 數據包中提取出SPI、源地址和目的地址組織成
IPSec完成了對策略的校驗后,會將 IPSec報頭剝離下來, 并將包傳遞到下一層。下一層要么是一個傳輸層,要么是網絡層。 假如說數據包是 IP【ES【PTCP】】,下一層就是傳輸層;假如這個包是 IP【AH【 ESP【TCP】】】,下一層仍然是 IPSec層。
6. 認證頭( AH)協議
(1) AH 的目標
IP 協議中,用來提供 IP 數據包完整性的認證機制是非常簡單的。IP 頭通過頭 部的校驗和域來保證IP 數據包的完整性。 而校驗和只是對IP 頭的每 16位計算累加 和的反碼。這樣并沒有提供多少安全性,因為 IP 頭很容易修改, 可以對修改過的 IP 頭重新計算校驗和并用它代替以前的校驗和。這樣接受端的主機就無法知道數 據包己經被修改。
設計認證頭 (AH)協議的目的是用于增加IP 數據包的安全性。AH協議提供無連 接的完整性 (connectionless integrity)、數據源認證 (dataoriginauthentication)和反重播 (anti-replay)攻擊服務。 然而,AH不提供任何 保密性服務, 也就是說它不加密所保護的數據包。AH的作用是為 IP數據流提供高 強度的密碼認證,以確保被修改過的數據包可以被檢查出來。AH使用消息認證碼 (MAC)對IP 進行認證。MAC不同于雜湊函數,因為它需要密鑰來產生消息摘要,而 雜湊函數不需要密鑰。常用的MAC是 HMAC,它與任何迭代密碼雜湊函數( 如MD5, SHA-l, Tiger等 ) 結合使用,而不用對雜湊函數進行修改。由于生成IP 數據包的 消息摘要需要密鑰,所以IPSec的通信雙方需要共享一個同樣的認證密鑰。這個密鑰就是由雙方的SA信息來提供的。
(2) AH 協議包格式
AH只用于保證收到的數據包在傳輸過程中不被修改,保證由要求發送它的當 事人將它發送出去, 以及保證它是一個新的非重播的數據包。AH用于傳送模式時, 保護的是端到端的通信。通信的終點必須是IPSec終點,所以在我們所研究的VPN 的隧道方式中不預考慮。AH協議隧道模式的包格式如圖2.6 所示:
- 下一個頭 (8bit):指示下一個負載的協議類型。
- 載荷長度 (8bit):AH的負載長度。
- 保留 (8bit):供將來使用。
- 安全參數索引SPI (32bit):它是一個 32位長的整數。它與源地址或目的 地址以及工PSEC協議 (AH或 ESP)來共同唯一標識一個數據包所屬的數據流的安全聯合 (SA) 。SPI的值 1~255被 IANA留作將來使用; 0被保留,用32于本地和具體實現。所以目前有效的SPI值從 256~2³²-1。
- 序列號 (32bit):這里包含了一個作為單調增加計數器的32位無符號整數,用于防止對數據包的重演。所謂重演指的是數據包被攻擊者截取并 重新發送。如果接收端啟動了反重演攻擊功能,它將使用滑動接收窗口 檢測重演數據包。具體的滑動窗口因不同的工PSEC實現而不同,一般具有一下功能。窗口長度最小32比特,窗口的右邊界代表一特定SA所接收 倒的驗證有效的最大序列號,序列號小于窗口左邊界的數據包將被丟棄。將序列號值位于串口之內的數據包與位于窗口內的接收到的數據包清 單進行比照,如果接收到的數據包的序列號位于窗口內并且是新的,或 者序列號大于窗口右邊界且有效,那么接收主機繼續處理認證數據的計算。
- 認證數據:這是一個變長域(必須是32bit字的整數倍)。它包含數據包的認證數據,該認證數據被稱為這個數據包的完整性校驗值(ICV) 。用于計算 ICV的可用的算法因IPSEC的實現不同而不同;然而,為了保證互操作性,AH強制所有的IPSec必須包含兩個 MAC: HMAC-MD5和HMAC-SHA-I。