IPsec协议的ESP报文的装包与拆包过程

一、IPsec简介

  1. 了解网络层相关知识应该就知道IP协议是不可靠的网络层协议,因此存在很多安全隐患。因此对IP协议进行安全加强的迫切需要催生了IPsec,IPsec在网络层将IP报文进行处理之后再传输,增强了IP报文的安全性。准确来说,IPsec不是一个单独的协议,而是一组协议。

  2. IPSec是IPv6的组成部分,也是IPv4的可选扩展协议,能保证IP报文的数据保密性(加密)、数据完整性度量(防止数据被改动)以及防止数据回放攻击(即接收到多个相同报文)。

  3. IPsec包括传输模式(Transport Mode)和隧道模式(Tunnel Mode)两种模式,区别在下文提到。

  4. IPsec包含了三个最重要的协议:认证头AH(Authentication Header),封装安全载荷ESP(Encapsulating Security Payload),密钥交换协议IKE(Internet Key Exchange),本文主要介绍ESP报文的装包和拆包过程。

二、ESP协议

  1. ESP (Encapsulating Security Payloads) 协议能够在数据的传输过程中对数据进行完整性度量和来源认证,可以选择加密,也可以选择防止回放保护。
  2. ESP 服务依据建立的 SA (Security Association, 安全关联),对可选 项目有所限制:
    • 完整性检查和认证一起进行;
    • 仅当与完整性检查和认证一起时才能选择防止回放保护;
    • 防止回放保护只能由接收方选择。
  3. ESP 的加密服务是可选的,但如果启用加密,则也就同时选择了完整性检查和认证。因为如果仅使用加密,入侵者可能发动密码分析攻击。
  4. ESP 可以单独使用,也可以和 AH 结合使用。

三、SA、SAD、SPI

  1. SA:Security Associations,安全关联,包含很多信息,比如加密算法,密钥,认证算法、认证密钥等。

  2. SAD: Security Associations Database,安全关联数据库。每一个SA在SAD中都会有一个与之对应的条目,通俗来讲就是SA的集合。

  3. SPI:Security Parameter Index,安全参数索引,相等于SA的标志符。

四、传输模式ESP报文的装包和拆包

1. 传输模式

IPsec协议的ESP报文的装包与拆包过程_第1张图片

  • 传输模式下 IPsec 保护的仅仅是原始 IP 报文的数据内容部分 (即 IP 报文的有效载荷,数据段),而不是整个IP报文。在这个过程中原报文结构被修改。
  • 在处理方法上,原 IP 报文被拆解,在其有效载荷前面加上新的 ESP 或 AH 协议头(此处指ESP),再装回原来的 IP 地址,形成 IPsec 报文。

2. 装包

  • 将IP数据包分为IP头部信息以及数据段两部分,在数据段末尾加上ESP trailer信息,该信息包括三部分,因为加密算法可能是块加密,所以长度不足时需padding填充,再加上padding Length填充的长度,最后还有Next header来标明封装的报文类型,如tcp、udp或icmp等。
  • 将第一步得到的数据段+ESP trailer进行加密,加密算法和密钥由SA给出。
  • 在数据段前添加ESP header,包括SPI以及Seq两部分,SPI用来查找对应SA,Seq是对包进行编号,防止多次接收,注意到被封装的原报文的协议类型(tcp、udp)受到保护,由加密的 ESP trailer 的 Next header 声明,而不出现在未加密的 ESP header 中。
  • 将ESP header+2中加密数据进行认证,得到32位整数倍的完整性度量值(MAC),加在加密后的2后面,认证算法和认证密钥由SA给出。
  • 原IP头部信息还是放在头部,即是一个装包后的ESP报文。

3. 拆包

  • 接收方接收到该报文,检查IP头部信息,发现这是一个IPsec的ESP包,查看ESP header,找到SPI,进而获取到对应的SA。
  • 查看ESP header中的Seq,确定该包是第一次收到,防止数据回放攻击。
  • 根据SA获得的认证信息,重新对除IP头部信息外的数据进行认证,再与末尾的MAC进行对比,验证数据完整性。
  • 根据SA得到的加密信息,解密被加密的信息,得到原数据段以及ESP trailer。
  • 根据ESP trailer的填充信息,删去填充得数据得到原来的数据段。

五、隧道模式ESP报文的装包和拆包

1. 隧道模式

IPsec协议的ESP报文的装包与拆包过程_第2张图片

  • 隧道模式下 IPsec 将要发送的原始 IP 报文作为数据内容,在这段整个IP报文前面加上 ESP 或 AH 协议头(此处指ESP),再加上新的 IP头,形成 IPsec 报文进行传输。

  • 原始 IP 报文的传输就像在一个安全的隧道中进行一样。在整个传输过程中,原报文保持原有的完整结构,内容没有被修改。

2. 装包

  • 直接在IP报文末尾加上ESP trailer信息,该信息包括三部分,因为加密算法可能是块加密,所以长度不足时需padding填充,再加上padding Length填充的长度,最后还有Next header来标明封装的报文类型,如因为是对整个IP报文进行处理,所以此处IP=4。
  • 将原 IP 报文以及第1步得到的 ESP trailer 作为一个整体进行加密封装。具体的加密算法与密钥由 SA 给出。
  • 为第2步得到的加密数据添加 ESP header。ESP header由 SPI 和Seq 两部分组成。加密数据与 ESP header 合称为 “Enchilada”,构成认证部分。注意到被封装的原报文的协议类型(IP数据包)受到保护,由加密的 ESP trailer 的 Next header 声明,而不出现在未加密的 ESP header 中。
  • 将上一步得到的加密数据进行认证,得到32位整数倍的完整性度量值(MAC),加在加密后报文的后面,认证算法和认证密钥由SA给出。
  • 加上新的 IP header 构成 IPsec 报文。新构造的 IP header 附在ESP 报文的前面组成一个新的 IP 报文。注意这个新的 IP header的 IP 地址由路由器和安全网关解释,可以和原报文 (由主机创建的 IP 地址) 不同。协议类型为50,说明它封装的是一个 ESP报文。

3. 拆包

  • 接收方接收到该报文,检查IP头部信息,发现协议类型为50,这是一个IPsec的ESP包,查看ESP header,找到SPI,进而获取到对应的SA。
  • 查看ESP header中的Seq,确定该包是第一次收到,防止数据回放攻击。
  • 计算 “enchilada” 部分的摘要,与附在末尾的 ICV (MAC)做对比,验证数据完整性。
  • 根据SA得到的加密信息,解密被加密的信息,得到原数据段以及ESP trailer。
  • 根据ESP trailer的填充信息,删去填充得数据得到原来的IP报文。

你可能感兴趣的:(IPsec协议的ESP报文的装包与拆包过程)