IPSec 传输模式下 ESP 报文的装包与拆包过程

IPSec 传输模式下 ESP 报文的装包与拆包过程

一.什么是IPSec

IPSec提供的是网络层的加密方案,IPsec 在网络层将每个 IP 分组的内容先加密再传输。

IPsec 对数据进行加密的方式有两种:传输模式和隧道模式

  • 传输模式只是对 IP 协议报文的有效数据载荷 (payload) 进行了加
    密,因此需要对原始 IP 报文进行拆装。
  • 隧道模式则是对整个 IP 报文进行加密,就好像整个 IP 报文封装
    在一个安全的隧道里传输一样,保持了原始 IP 报文的完整性。

这里主要讲述传输模式下,ESP报文的装包与拆包过程

二.什么是ESP

ESP (Encapsulating Security Payloads) 封装安全载荷协议能够在数据的传输过程中对数据进行完整性度量和来源认证,可以选择加密,也可以选择防止回放保护。

ESP 服务依据建立的 SA (Security Association, 安全关联),对可选项目有所限制:

  • 完整性检查和认证一起进行;
  • 仅当与完整性检查和认证一起时才能选择防止回放保护;
  • 防止回放保护只能由接收方选择

传输模式下 ESP 不对整个原始 IP 报文加密,而只加密其中不包括 IP 头的有效载荷部分

三.什么是SA

**SA (Security Associations 安全关联)**是 IPsec 的重要概念。

  • SA可以理解为被 IPsec 保护的某个连接的唯一标示。SA 是单向的,即在一次安全的通信中,通信的两个方向 (发送和接收) 各需要创建一个 SA。

  • 一个 SA 所包含的内容是维护一次安全通信所需要的数据参数。
    通常,一个 SA 可以由目的地址、IPsec 所采用的协议 (AH或ESP)
    和 SPI 来唯一确定。

  • 所有的 SA 都被存放在一个数据库中,称为 SAD。

  • SA 的建立和维护通过密钥交换协议 IKE 实现。

四.IPSec 传输模式下 ESP 报文的装包与拆包过程

下图是传输模式下的ESP数据包

IPSec 传输模式下 ESP 报文的装包与拆包过程_第1张图片

我们可以看到,与隧道模式不同,IPSec在传输模式下采用原来的IP头,而不是产生新的IP头,所保护的也只是真正传输的数据,而不是整个IP报文。

其次,我们可以看到新增的内容包括ESP头,ESP尾,ESP MAC这三部分

他们分别的作用为:

  • ESP尾:包含三部分:Padding,Pad length 和 Next header。Padding 即使用块加密时,当最后一个数据块长度不足时所做的填充。Pad length 指填充的长度,方便拆包时找到用来填充的数据段。Next header 标明被封装的数据报文的协议类型,如TCP。
  • ESP头:包含两部分:SPI和Seq。SPI占32位,用于将 AH 数据报文与相应的 SA 做映射。Seq占32位,存放了一个递增的计数值,用于抵抗重放攻击。该字段是强制要求使用的,无论是否启用了反重放攻击的功能。当 SA 建立时置为0。
  • ESP MAC:一个32位整数倍的完整性度量值 (MAC),附在 ESP 报文的尾部。这是对于"Enchilada"部分做认证所产生的,用来进行完整性度量结果。

在了解上述基本的知识后,对于装包与拆包过程的理解也水到渠成。

a.装包过程

  1. 在原IP报文尾部添加ESP尾。ESP尾的作用是指明填充块以及填充长度。
  2. 将原IP报文以及第一步得到的ESP尾一起来做加密算法。具体的加密算法与密钥是由SA给出的。
  3. 将第二步所得到的密文添加ESP头。ESP头的作用是用作认证,用于抵抗重放攻击。
  4. 将第三部得到的结果附加上完整性度量结果。即对其做摘要,将ICV附在 ESP 报文的尾部。用于进行完整性度量结果。
  5. 将原始的IP报文头部的协议号改为50,50代表ESP协议。然后将该IP头添加到第四步的结果中形成IPSec报文。

上述5步就能完成IPSec在传输模式下对于ESP报文的装包。

b.拆包过程

  1. 接受方收到数据包首先发现协议的类型为50,由此得知这是IPSec数据包。接着查看ESP头,通过里面的SPI,通过 SPI 决定数据报文所对应的 SA.
  2. 计算“Enchilada"部分的摘要,然后用计算结果与末尾的ESP MAC来进行对比,如果一样,则完成完整性验证,表明所收到的报文是完整的。
  3. 检查ESP头中的Seq字段,检查是否已经收到过该序列号,以此避免重放攻击。
  4. 根据SA中指定的加密算法与密钥来解密"Enchilada",得到原来IP报文和ESP尾。
  5. 根据ESP尾部的填充长度字段,来删除填充字段,这样就得到原来的IP报文。
  6. 最后根据原来IP报文的目的地址来进行转发

你可能感兴趣的:(Web-Security)