1

IPsec

从IP层加密所有流量

加密的层次

IPsec层次

结构

IPsec结构

  • AH【Authentication Header】:数据源认证和数据完整性保护和防报文重放功能,它能保护通信免受篡改,但不能防止窃听,适合用于传输非机密数据
  • ESP【封装安全负载】:提供加密、数据源认证、数据完整性校验和防报文重放功能
  • IKE【Internet 密钥交换】:IKE为IPsec提供了自动协商交换密钥、建立SA的服务,能够简化IPsec的使用和管理,大大简化IPsec的配置和维护工作。
  • IPsec可以由AHESP这两种方式实现,AH和ESP又都支持传输模式隧道模式

工作流程

SA(security association):是两个通信实体经协商建立起来地一种协议,它们决定了用来保护数据包安全地IPsec协议,转码方式,密钥,以及密钥地有效存在时间等等

IKE(isakmp)SA:协商对IKE数据流进行加密以及对对等体进行验证地算法(对密钥地加密和peer地认证)对等体之间只能存在一个

第一阶段:建立ISAKMP SA协商的是以下信息

1、对等体之间采用何种方式做认证,是预共享密钥还是数字证书

2、双方使用哪种加密算法(DES、3DES)

3、双方使用哪种HMAC方式,是MD5还是SHA

4、双方使用哪种Diffie-Hellman密钥组来交换密钥

5、使用哪种协商模式(主模式或主动模式)

6、协商SA的生存期

第二阶段:建立IPsec SA协商的是以下信息

1、双方使用哪种封装技术,AH还是ESP

2、双方使用哪种加密算法

3、双方使用哪种HMAC方式,是MD5还是SHA

4、使用哪种传输模式,是隧道模式还是传输模式

5、协商SA的生存期

IPsec资料 https://www.processon.com/outline/view/60768c965653bb2e1c66c905

ESP

封装安全有效载荷【Encapsulating Security Payloads】

**IPSec协议:**IPsec将IP数据包的内容先加密再传输,即便中途被截获,由于缺乏解密数据包所必要的密钥,攻击者也无法获取里面的内容。

**传输模式和隧道模式:**IPsec对数据进行加密的方式有两种:传输模式和隧道模式。传输模式只是对IP协议的数据部分(payload)进行了加密,而隧道模式则是对整个IP数据包进行加密,就好像整个IP数据包在一个安全的隧道里传输一样

传输模式

传输模式ESP

装包过程:

1、在原IP报文【包含IP、IP Datagram三部分】的末尾添加ESP尾部(ESP Trailer)信息,

  • 尾部包含三部分。由所选加密算法可能是块加密,那么当最后一块长度不够时就需要进行填充(padding),附上填充长度(Pad length)方便解包时顺利找出用来填充的那一段数据。而Next header则⽤用来标明被加密的数据报文的类型,例如TCP

2、ipDatagram和ESP尾部为整体进行加密,具体的加密算法与密钥由SA给出。

3、在第2步得到的加密数据添加ESP Header

  • ESP Header由两部分组成:SPI和序号(Sequence number)。ESP Header位于IP之后。

4、将ESP Header和第2步得到的加密数据做一个摘要,得到一个消息认证码 MAC(ESP Message Authentication Code),并添加到ESP报文的尾部。这样就得到了一个完整的ESP数据报文

拆包过程:

1、接收方收到数据报⽂文后,对除IP和ESP Message Authentication Code的部分计算摘要与ESP MAC进⾏行⽐比较,验证数据的完整性。假如比对不同,可以断定所收到的报⽂文已经经过篡改了。

2、查看ESP Header,通过里面的SPI得到数据报文所对应的SA;检查序列号,保证数据不是回放攻击。

3、根据SA所提供的加密算法与密钥,解密被加密算法加密过的部分(IP Datagram、ESPTrailer)。

4、根据ESP Trailer里的填充长度信息,可以找出填充字段的字段,删去后就能得到完整地IP Datagram

传输模式缺点是,无法避免对数据包的通信量分析

隧道模式

隧道模式将整个IP包加密,包括原ip头部。因为用ESP将原IP头部也加密了【IP头部里面有目的ip地址和源ip地址】,所以需要新的ip头部来包含目的ip地址等信息。

隧道模式很有效的防止通信量分析

隧道模式的ESP

装包过程:

  1. 在原IP报文末尾添加ESP尾部(ESP trailer)信息。如上图所示,尾部包含三部分。由所选加密算法可能是块加密,那么当最后一块长度不够时就需要进行填充(padding),附上填充长度(Pad length)方便解包时顺利找出用来填充的那一段数据。而Next header则用来标明被加密的数据报文的类型,例如TCP。

  2. 原IP报文以及第1步得到的ESP尾部作为一个整体进行加密。具体的加密算法与密钥由SA给出。

  3. 为第2步得到的加密数据添加ESP头部。如上图所示,ESP头由两部分组成,SPI和序号(Sequence number)。加密数据与ESP头合称为“enchilada”。

  4. 附加完整性度量结果(ICV,Integrity check value)。对第三步得到的“enchilada”做摘要,得到一个完整性度量值,并附在ESP报文

的尾部。

  1. 加上新的IP头。新构造的IP头附在ESP报文的前面组成一个新的IP报文。注意这个新的IP头的目的地址跟源地址可以不一样。协议类型为50,说明它里面装的是一个IPsec报文。

拆包过程:

  1. 接收方收到数据报文后,发现协议类型是50,故知道这是一个IPsec包。首先查看ESP头,通过里面的SPI决定数据报文所对应的SA。

  2. 计算“enchilada”部分的摘要,与附在末尾的ICV做对比,如果一样的话说明数据是完整的。否则可以断定所收到的报文已经不是原来的报文了。

  3. 检查Seq里的顺序号,保证数据是“新鲜”的。

  4. 根据SA所提供的加密算法和密钥,解密被加密过的数据,即“enchilada”。得到原IP报文与ESP尾部(trailer)。

  5. 根据ESP尾部里的填充长度信息,我们可以找出填充字段的长度,删去后就得到原来的IP报文。

  6. 最后根据得到的原IP包的目的地址来进行转发。

资料

IPSec 传输模式下 ESP 报文的装包与拆包过程 https://www.csdn.net/tags/NtjaIgzsNDI2MTMtYmxvZwO0O0OO0O0O.html

IPSec传输模式/隧道模式下ESP报文的装包与拆包过程 https://blog.csdn.net/johnson_puning/article/details/14163751