IPsec概念及工作原理

什么是IPsec?

IPsec(Internet Protocol Security)是一种网络层安全协议,用于保护网络通信的完整性、机密性和真实性。它是一套由多个协议和算法组成的框架,可以在IP层上对数据包进行加密和认证,是构建VPN的一种核心技术。

1725329131814

IPsec工作模式

传输模式(Transport Mode)

  • 加密范围:只加密数据包的有效载荷部分。
  • IP头:保留原始的IP头,不加密。
  • 适用场景:端到端通信,如两台主机之间的直接通信。
  • 配置:相对简单,性能开销较小。
  • IP地址:不隐藏通信双方的IP地址。

隧道模式(Tunnel Mode)

  • 加密范围:加密整个数据包,包括有效载荷和IP头。
  • IP头:创建一个新的IP头,隐藏原始的IP头。
  • 适用场景:网络到网络的通信,如VPN。
  • 配置:相对复杂,性能开销较大。
  • IP地址:可以隐藏通信双方的IP地址,提供更高级别的隐私。

通信保护协议

AH(Authentication Header)

  • 功能:提供数据完整性和认证。
  • 加密:不提供数据加密。
  • NAT支持:不支持网络地址转换(NAT),因为 AH 保护整个 IP 数据包,包括 IP 头,而 NAT 需要修改 IP 头中的地址信息。
    1725329435149

ESP(Encapsulating Security Payload)

  • 功能:提供数据完整性、认证和加密。
  • 加密:保护数据不被未授权访问和篡改。
  • NAT支持:支持网络地址转换(NAT),因为 ESP 只加密数据部分,不包括 IP 头,允许 NAT 设备修改地址信息。
    1725329442282

相关概念

SA(Security Association)

定义
SA 是 IPsec 中用于定义两个通信实体间安全通信规则的参数集合。

组成

  • 加密和认证算法:确定用于保护数据的加密和认证方法。
  • 密钥:用于数据加密和验证的密钥。
  • 生存周期:定义 SA 的有效期限和数据包数量限制。

作用
SAs 确保 IPsec 隧道内的数据传输是安全和受保护的。

IKE(Internet Key Exchange)

定义
IKE 是一种协议,用于在两个通信实体间自动协商、建立和维护 SAs。

功能

  • 密钥交换:IKE 负责生成和交换加密密钥。
  • 参数协商:IKE 协商加密、认证和其它安全参数。
  • 安全通道:IKE 确保密钥交换过程的安全性。
    1725332232301

两种SA

  • IKE SA 主要用于建立安全的通信信道,进行密钥交换以及协商 IPsec SA 的各种参数等。
  • IPsec SA 则基于 IKE SA 协商的结果,具体定义对实际 IP 数据包进行加密、认证和封装等操作的安全规则和参数,以实现数据的安全传输。

IPsec VPN 的建立

IPsec VPN 通过在网络间建立加密的通信隧道来确保数据传输的安全性。

第一阶段

IPsec VPN建立的第一阶段主要是为了建立一个安全的通道,用于后续的协商和数据传输。

主动模式

  • 特点:在主动模式下,通信双方会进行多次消息交换,以协商安全参数。这个过程相对较慢,但更加安全。
  • 步骤:
    • 发起方发送一个包含安全策略提议的消息给响应方。
    • 响应方收到消息后,选择一个合适的安全策略,并发送回应消息。
    • 双方进行密钥交换,以生成用于加密和认证的共享密钥。
    • 最后,双方进行身份验证,确保通信的双方是合法的。
      1725332902352

野蛮模式

  • 特点:野蛮模式的协商过程相对简单快速,但安全性相对较低。
  • 步骤:
    • 发起方直接发送一个包含所有安全策略提议和身份信息的消息给响应方。
    • 响应方收到消息后,选择一个合适的安全策略,并发送回应消息,其中包含身份验证信息。
    • 发起方收到回应消息后,进行身份验证,如果验证通过,则建立安全通道。
      1725332909549

密钥的产生

Diffie-Hellman(DH)算法是一种密钥交换算法,用于在不安全的通信信道上安全地生成共享密钥。以下是 DH 算法的具体流程:

  1. 初始化参数

    • 首先确定两个大素数 pg,其中 p是一个非常大的素数,g是一个小于 p的整数,且 gp的一个原根。这些参数可以公开。
  2. 双方生成私钥

    • 通信双方(通常称为 Alice 和 Bob)各自独立地生成一个随机整数作为私钥。
    • Alice 生成私钥 aa是一个随机整数且满足 1 < a < p - 1
    • Bob 生成私钥 b,同样 1 < b < p - 1
  3. 计算公钥

    • Alice 和 Bob 分别使用自己的私钥和公开的参数计算公钥。
    • Alice 计算公钥 A = g^a mod p
    • Bob 计算公钥 B = g^b mod p
  4. 交换公钥

    • Alice 将自己的公钥 A发送给 Bob。
    • Bob 将自己的公钥 B发送给 Alice。
  5. 计算共享密钥

    • Alice 收到 Bob 的公钥 B后,计算共享密钥 K = B^a mod p
    • Bob 收到 Alice 的公钥 A后,计算共享密钥 K = A^b mod p

由于指数运算的性质,双方计算得到的共享密钥是相同的,即 K = (g^b mod p)^a mod p = (g^a mod p)^b mod p

这个共享密钥可以用于后续的加密通信,只有通信双方知道这个密钥,攻击者即使截获了公开参数和公钥,也很难计算出共享密钥,因为计算离散对数是一个非常困难的问题。

第二阶段

IPsec VPN建立的第二阶段是在第一阶段建立的安全通道基础上,进一步协商具体的数据加密和认证参数,以确保实际数据传输的安全性。

  • 加密算法选择:双方协商选择一种合适的加密算法,如 AES、DES 等。
  • 认证算法选择:确定一种认证算法,如 HMAC-SHA1、HMAC-SHA256 等。
  • 封装协议:选择 IPsec 的封装协议,如 ESP(Encapsulating Security Payload)或 AH(Authentication Header)。
  • 安全关联(SA)建立:根据协商的参数,建立安全关联,用于实际的数据加密和认证。

通过以上两个阶段的协商和建立,IPsec VPN 可以在网络间建立起安全的通信隧道,确保数据传输的机密性、完整性和真实性。

IPsec 的 NAT(Network Address Translation) 穿透方法

(AH、ESP)与NAT的兼容性分析

AH(Authentication Header,认证头)协议不兼容 NAT。

AH 协议对整个 IP 数据包(包括 IP 报头)进行完整性校验和身份认证。当数据包经过 NAT 设备时,NAT 会修改 IP 报头中的源地址和端口号等信息,这将导致 AH 计算的完整性校验失败,因为 AH 验证的数据包括了原始的、未被 NAT 修改过的 IP 报头。

ESP(Encapsulating Security Payload,封装安全载荷)协议在一定程度上兼容 NAT,但也存在一些限制。

ESP 协议主要对 IP 数据包的载荷部分进行加密和可选的完整性校验。当 NAT 只修改 IP 报头中的地址和端口信息而不触及 ESP 封装的载荷部分时,ESP 可以在经过 NAT 后继续工作。然而,如果 NAT 设备对 ESP 数据包进行深度包检测或修改了 ESP 载荷部分,那么 ESP 的安全性将受到破坏。

NAT-T(NAT Traversal)

由于 AH 协议不兼容 NAT,而 ESP 协议与 NAT 的兼容性有限,为了解决 IPsec 在 NAT 环境下的通信问题,引入了 NAT-T(NAT Traversal)技术。

NAT-T 主要通过在 IPsec 数据包外再封装一个 UDP 包头的方式来实现 NAT 穿透。这样,当 IPsec 数据包经过 NAT 设备时,NAT 设备将把这个 UDP 数据包当作普通的 UDP 流量进行处理,只修改 UDP 报头和 IP 报头中的地址信息,而不会影响到内部的 IPsec 数据包。从而使得 IPsec 可以在 NAT 环境下正常通信。

IPsec 与 NAT-T 的工作流程

从通信两端支持 NAT-T 的设备角度来看,IPsec 和 NAT-T 的具体工作流程如下:

一、初始化阶段

  1. 通信双方的设备确定需要建立 IPsec 连接,并检测到它们处于 NAT 环境中。此时,设备会启用 NAT-T 功能。

二、IKE 协商阶段

  1. 发起方设备向响应方设备发送 IKE(Internet Key Exchange)请求,该请求中包含了支持 NAT-T 的标识。
  2. 响应方设备收到请求后,如果也支持 NAT-T,则回应一个包含支持 NAT-T 标识的 IKE 响应。
  3. 双方设备开始进行 IKE 协商,确定加密算法、认证方法、Diffie-Hellman 组等安全参数。在这个过程中,由于双方都知道要使用 NAT-T,所以会对协商的消息进行特殊处理,以适应 NAT-T 的封装格式。

三、NAT-T 封装阶段

  1. 一旦 IKE 协商成功,双方设备开始建立 IPsec SA(Security Association)。在这个阶段,IPsec 数据包会被封装在一个 UDP 数据包中,这个 UDP 数据包的目的端口通常是 4500。
  2. 封装后的数据包可以在经过 NAT 设备时被正确处理,因为 NAT 设备会把这个 UDP 数据包当作普通的 UDP 流量,只修改 IP 报头和 UDP 报头中的地址和端口信息,而不会影响到内部的 IPsec 数据包。

四、数据传输阶段

  1. 通信双方可以开始通过 IPsec 隧道传输数据。发送方设备将数据进行 IPsec 加密和封装后,再用 UDP 进行封装,然后发送出去。
  2. 数据包经过 NAT 设备时,NAT 设备进行地址和端口转换。
  3. 接收方设备收到数据包后,先去除 UDP 封装,然后进行 IPsec 解密和验证,得到原始数据。

五、连接维护阶段

  1. 通信双方的设备会定期发送 IKE 保活消息,以确保 IPsec 连接的有效性。如果在一定时间内没有收到对方的回应,设备会尝试重新建立连接。
  2. 如果 NAT 设备的地址或端口发生变化,双方设备会通过 IKE 协商来更新 IPsec 连接的参数,以适应 NAT 的变化。

总之,当通信两端的设备支持 NAT-T 时,它们可以通过特殊的封装和协商过程,在 NAT 环境下建立安全的 IPsec 连接,实现数据的加密传输。


IPsec概念及工作原理
https://xinhaojin.github.io/2024/09/03/IPsec概念及工作原理/
作者
xinhaojin
发布于
2024年9月3日
许可协议