基于openswan klips的IPsec实现分析(三)安全协议

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



 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IPSEC协议是一个复杂的协议实现整个协议栈需要大量的代码和技术知识。下面是一个简单的示例,演示如何使用C语言编写IPSEC隧道模式。 1. 选择IPSEC实现库。 C语言编写IPSEC协议需要使用IPSEC实现库。常用的IPSEC实现库包括StrongSwanOpenSwan、Libreswan等。您可以选择其中一个实现库,或者自己编写一个IPSEC实现库。 2. 编写IPSEC协议模块。 IPSEC协议模块是整个IPSEC协议栈的核心。IPSEC协议模块负责实现IPSEC转换、密钥管理、隧道模式、传输模式等功能。您需要编写IPSEC协议模块的代码,并将其编译为动态库或静态库。 3. 编写IPSEC隧道模式代码。 IPSEC隧道模式是IPSEC协议的一种实现方式。在IPSEC隧道模式下,IP数据包被封装在IPSEC头中,并通过IP网络传输。您需要编写IPSEC隧道模式的代码,以实现IP数据包的封装和解封装等功能。 4. 编写IPSEC密钥管理代码。 IPSEC隧道模式需要使用密钥来保护数据包的机密性和完整性。您需要编写IPSEC密钥管理的代码,以实现密钥生成、密钥交换和密钥更新等功能。常用的密钥管理协议包括IKEv1、IKEv2等。 5. 编写IPSEC路由代码。 IPSEC隧道模式需要使用路由表来确定IP数据包的转发路径。您需要编写IPSEC路由的代码,以实现路由表的维护和IP数据包的转发。 6. 编写IPSEC测试代码。 最后,您需要编写IPSEC测试的代码,以测试IPSEC协议的正确性和性能。常用的IPSEC测试工具包括StrongSwan Test Suite、IKEv2 Test Suite等。 总的来说,编写IPSEC整套协议需要具备深厚的网络编程和密码学知识,以及丰富的编程经验。如果您没有足够的经验和知识,建议参考已有的IPSEC实现库,或者寻求专业的技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值