基于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隧道模式