基於openswan klips的IPsec實現分析(三)安全協議
參考rfc2402,rfc2406
轉載請註明出處:http://blog.csdn.net/rosetta
博客格式顯示有問題,只能將就了。
AH(Authentication Header)認證頭和ESP(Encapsulating Security Payload)封裝安全載荷是IPsec主要安全協議,當然IKE也是IPec安全協議,只不過 IKE用於祕鑰協商建立IKE SA和IPsec SA,而AH和ESP用於數據傳輸時對隧道內數據的保護。
AH用於認證和校驗;ESP主要用於加密、認證和檢驗,是IPsec最常用的安全協議。IPsec封裝有兩種模式:傳輸模式和隧道模式,傳輸模式主要用於主機到主機通信,隧道模式用於網絡到網絡間通信,傳輸模式不常用。ESP使用到的加密算法爲對稱加密算法,比如:AES,3DES等;校驗算法爲哈希算法,比如:MD5,SHA1等。
一、AH格式
協議頭(IPv4、IPv6、或者擴展)緊靠AH頭之前,協議號51。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 下一個頭 | 載荷長度 | 保留 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 安全參數索引(SPI) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 序列號字段 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ 認證數據(變長的) |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下一個頭(Next Header)
8位字段,其指定了認證頭後面的下一個載荷的類型。其值可參考rfc2408 3.1節
載荷長度(Payload Length)
8位字段,其長度以4字節爲單位。
保留(Reserved)
16比特字段保留給將來使用。它必須(MUST)被設置成“零”。
安全參數索引(Security Parameters Index (SPI))
SPI是一個任意的32比特值,它與目的IP地址和安全協議(ESP)結合,就唯一
地標識了這個數據報的安全關聯。
序列號(Sequence Number)
爲無符號的32比特字段,包含一個單調遞增的計數器值(序列號)。
認證數據(Authentication Data)
這是一個變長的字段,其包含這個報文的完整性校驗值(Integrity Check
Value (ICV))。這個字段的長度必須是32比特的整數倍。
二、AH數據封裝格式
傳輸模式中,AH插在IP頭之後,且在一個上層協議之前,例如TCP、UDP、ICMP
等。或者在其它任何已經插入的IPsec頭之前
應用AH之前
----------------------------
IPv4 | 原IP頭 | | |
| (所有選項)| TCP | Data |
----------------------------
應用AH之後
---------------------------------
IPv4 | 原IP頭 | | | |
| (所有選項)| AH | TCP | Data |
---------------------------------
|<--------- 認證範圍 ---------->|
除了可變的字段
AH IPV4傳輸模式
在IPv6環境中,AH被看作是一個端到端的載荷,出現在逐跳(hop-by-hop)、路由(routing)和分片擴展頭(fragmentation extension headers)之後。目的選項擴展頭(destination options extension header)既可以出現在AH頭之前,也可以在AH頭之後。下面的圖表說明了一個IPv6報文的AH傳輸模式佈局。
應用AH之前
---------------------------------------
IPv6 | | 擴展頭 | | |
| 原IP頭 |(如果存在)| TCP | Data |
---------------------------------------
應用AH之後
------------------------------------------------------------
IPv6 | | 逐跳、目的選項*、| | 目的 | | |
| 原IP頭 | 路由、分片。 | AH | 選項*| TCP | Data |
------------------------------------------------------------
|<------------ 認證範圍,除了可變的字段 ------------------>|
* = 表示如果存在,可以在AH之前,AH之後,或者前後都出現。
AH IPV6傳輸模式
隧道模式AH可以在主機或者安全網關上採用。當AH在一個安全網關上實現時必須採用隧道模式。隧道模式中,“內部”IP頭攜帶最終的源和目的地址,而“外部”IP頭可能包含不同的IP地址,例如安全網關地址。隧道模式中,AH保護整個內部IP報文,包括整個內部IP頭。相對於外部IP頭,隧道模式中AH的位置與傳輸模式中AH的位置相同。下面的圖表說 明瞭IPv4和IPv6報文的AH隧道模式的佈局。
------------------------------------------------
IPv4 | 新IP頭* | | 原IP頭* | | |
| (所有選項) | AH | (所有選項) |TCP | Data |
------------------------------------------------
|<--- 新IP頭中的認證範圍,除了可變的字段 ----->|
AH IPV4隧道模式
--------------------------------------------------------------
IPv6 | | 擴展頭* | | | 擴展頭* | | |
| 新IP頭* |(如果存在)| AH | 原IP頭* |(如果存在)|TCP|Data|
--------------------------------------------------------------
|<---------- 新IP頭中的認證範圍,除了可變的字段 ------------>|
AH IPV6隧道模式
三、ESP格式
ESP頭緊緊跟在協議頭(IPv4,IPv6,或者擴展)之後,協議號50。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
| 安全參數索引 (SPI) | ^Auth.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
| 序列號 | |erage
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ----
| 有效載荷數據* (可變的) | | ^
~ ~ | |
| | |Conf.
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
| | 填充 (0-255 bytes) | |erage*
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| | 填充長度 | 下一個頭 | v v
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ------
| 驗證數據 (可變的) 可選的 |
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*如果加密同步數據,例如初始化向量(IV),包含在有效載荷字段中,通常它本
身並不加密,雖然常常把它作爲密文的一部分。
四、ESP數據封裝格式
其封裝格式和AH類似。
傳送模式中,ESP插在IP頭之後,上層協議之前,例如TCP,UCP,ICMP等,或者在任何已經插入的IPsec頭之前。IPv4中,下面數據報圖示了IPv4分組中ESP傳送模式位置。
ESP應用前
----------------------------
IPv4 |原始IP頭 | | |
|(所有選項) | TCP | 數據 |
----------------------------
ESP應用後
-------------------------------------------------
IPv4 |原始IP頭 | ESP | | | ESP | ESP|
|(所有選項 )| 頭部| TCP | 數據 | 尾部 |驗證|
-------------------------------------------------
|<----- 已加密 ---->|
|<------ 已驗證 ----->|
ESP IPV4傳輸模式
下面數據報圖示了IPv6分組中ESP傳送模式位置。
ESP應用前
---------------------------------------
IPv6 | | 如果有 | | |
| 原始IP頭 |擴展頭 | TCP | 數據 |
---------------------------------------
ESP應用後
---------------------------------------------------------
IPv6 | 原始 |逐跳, 目的* | |目的 | | | ESP | ESP|
|IP 頭 |路由,分片 |ESP|選項*|TCP|數據|尾部 |驗證|
---------------------------------------------------------
|<---- 已加密 ---->|
|<---- 已驗證 ---->|
ESP IPV6傳輸模式
下面數據報圖示了IPv4和IPv6分組中ESP隧道模式的位置。
-----------------------------------------------------------
IPv4 | 新IP頭* | | 原始IP頭 * | | | ESP | ESP|
|(所有選項) | ESP | (所有選項) |TCP|數據|尾部 |驗證|
-----------------------------------------------------------
|<--------- 已加密 ---------->|
|<----------- 已驗證 ---------->|
ESP IPV4隧道模式
------------------------------------------------------------
IPv6 | 新 * |新 擴展 | | 原始*|原始擴展 | | | ESP | ESP|
|IP 頭 | 頭 * |ESP|IP 頭 | 頭 * |TCP|數據|尾部 |驗證|
------------------------------------------------------------
|<--------- 已加密 ----------->|
|<---------- 已驗證 ---------->|
ESP IPV6隧道模式
AH IPV4傳輸模式
在IPv6環境中,AH被看作是一個端到端的載荷,出現在逐跳(hop-by-hop)、路由(routing)和分片擴展頭(fragmentation extension headers)之後。目的選項擴展頭(destination options extension header)既可以出現在AH頭之前,也可以在AH頭之後。下面的圖表說明了一個IPv6報文的AH傳輸模式佈局。
應用AH之前
---------------------------------------
IPv6 | | 擴展頭 | | |
| 原IP頭 |(如果存在)| TCP | Data |
---------------------------------------
應用AH之後
------------------------------------------------------------
IPv6 | | 逐跳、目的選項*、| | 目的 | | |
| 原IP頭 | 路由、分片。 | AH | 選項*| TCP | Data |
------------------------------------------------------------
|<------------ 認證範圍,除了可變的字段 ------------------>|
* = 表示如果存在,可以在AH之前,AH之後,或者前後都出現。
AH IPV6傳輸模式
隧道模式AH可以在主機或者安全網關上採用。當AH在一個安全網關上實現時必須採用隧道模式。隧道模式中,“內部”IP頭攜帶最終的源和目的地址,而“外部”IP頭可能包含不同的IP地址,例如安全網關地址。隧道模式中,AH保護整個內部IP報文,包括整個內部IP頭。相對於外部IP頭,隧道模式中AH的位置與傳輸模式中AH的位置相同。下面的圖表說 明瞭IPv4和IPv6報文的AH隧道模式的佈局。
------------------------------------------------
IPv4 | 新IP頭* | | 原IP頭* | | |
| (所有選項) | AH | (所有選項) |TCP | Data |
------------------------------------------------
|<--- 新IP頭中的認證範圍,除了可變的字段 ----->|
AH IPV4隧道模式
--------------------------------------------------------------
IPv6 | | 擴展頭* | | | 擴展頭* | | |
| 新IP頭* |(如果存在)| AH | 原IP頭* |(如果存在)|TCP|Data|
--------------------------------------------------------------
|<---------- 新IP頭中的認證範圍,除了可變的字段 ------------>|
AH IPV6隧道模式
三、ESP格式
ESP頭緊緊跟在協議頭(IPv4,IPv6,或者擴展)之後,協議號50。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
| 安全參數索引 (SPI) | ^Auth.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
| 序列號 | |erage
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ----
| 有效載荷數據* (可變的) | | ^
~ ~ | |
| | |Conf.
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
| | 填充 (0-255 bytes) | |erage*
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| | 填充長度 | 下一個頭 | v v
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ------
| 驗證數據 (可變的) 可選的 |
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*如果加密同步數據,例如初始化向量(IV),包含在有效載荷字段中,通常它本
身並不加密,雖然常常把它作爲密文的一部分。
四、ESP數據封裝格式
其封裝格式和AH類似。
傳送模式中,ESP插在IP頭之後,上層協議之前,例如TCP,UCP,ICMP等,或者在任何已經插入的IPsec頭之前。IPv4中,下面數據報圖示了IPv4分組中ESP傳送模式位置。
ESP應用前
----------------------------
IPv4 |原始IP頭 | | |
|(所有選項) | TCP | 數據 |
----------------------------
ESP應用後
-------------------------------------------------
IPv4 |原始IP頭 | ESP | | | ESP | ESP|
|(所有選項 )| 頭部| TCP | 數據 | 尾部 |驗證|
-------------------------------------------------
|<----- 已加密 ---->|
|<------ 已驗證 ----->|
ESP IPV4傳輸模式
下面數據報圖示了IPv6分組中ESP傳送模式位置。
ESP應用前
---------------------------------------
IPv6 | | 如果有 | | |
| 原始IP頭 |擴展頭 | TCP | 數據 |
---------------------------------------
ESP應用後
---------------------------------------------------------
IPv6 | 原始 |逐跳, 目的* | |目的 | | | ESP | ESP|
|IP 頭 |路由,分片 |ESP|選項*|TCP|數據|尾部 |驗證|
---------------------------------------------------------
|<---- 已加密 ---->|
|<---- 已驗證 ---->|
ESP IPV6傳輸模式
下面數據報圖示了IPv4和IPv6分組中ESP隧道模式的位置。
-----------------------------------------------------------
IPv4 | 新IP頭* | | 原始IP頭 * | | | ESP | ESP|
|(所有選項) | ESP | (所有選項) |TCP|數據|尾部 |驗證|
-----------------------------------------------------------
|<--------- 已加密 ---------->|
|<----------- 已驗證 ---------->|
ESP IPV4隧道模式
------------------------------------------------------------
IPv6 | 新 * |新 擴展 | | 原始*|原始擴展 | | | ESP | ESP|
|IP 頭 | 頭 * |ESP|IP 頭 | 頭 * |TCP|數據|尾部 |驗證|
------------------------------------------------------------
|<--------- 已加密 ----------->|
|<---------- 已驗證 ---------->|
ESP IPV6隧道模式