Post

IPSec重协商和抗重放

rekey anti-replay

IPSec重协商和抗重放

Rekey

​IKEv1

Quick Mode(IPSec SA Rekey)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Initiator → Responder:
  HDR* (ISAKMP Header, SPI=旧IKE SA SPI)
  SA (新IPSec SA提案: ESP-AES256+SHA384, PFS Group19)
  Nonce
  KE (ECDH_Y if PFS enabled)
  Notify(REKEY_SA) → 携带旧IPSec SA的SPI

Responder → Initiator:
  HDR* (Same SPI)
  SA (接受提案)
  Nonce
  KE (ECDH_Y if PFS enabled)

Initiator → Responder:
  HDR*, Hash (验证完整性和身份)
  • Phase 1(IKE SA)​​:在 ​​Main Mode/Aggressive Mode​​ 的 SA Payload → Proposal Payload → Transform Payload 中定义:
  • Phase 2(IPSec SA)​​:在 ​​Quick Mode​​ 的 SA Payload 中以同样方式携带。
    1
    2
    3
    4
    5
    
    ISAKMP Payload: SA (DOI=IPsec, Situation=IDENTITY_PROTECT)
    Proposal Payload: Protocol=ISAKMP (Phase1)/ESP (Phase2)
      Transform Payload:  
        Attribute: Lifetime_Seconds (Type=0x8001), Value=28800
        Attribute: Lifetime_Kilobytes (Type=0x8002), Value=4096000
    

​IKEv2

CREATE_CHILD_SA(统一Rekey)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Initiator → Responder:
  IKE Header (SPI=iSPI, rSPI)
  CREATE_CHILD_SA Request:
    SA (新SA提案: IKE或Child SA参数)
    Nonce
    KE (若需新DH交换)
    Notify(REKEY_SA) → 旧SA的SPI
    TSi/TSr (若为Child SA)

Responder → Initiator:
  IKE Header (Same SPIs)
  CREATE_CHILD_SA Response:
    SA (接受提案)
    Nonce
    KE (若请求中有KE)
    TSi/TSr (若为Child SA)
  • ​IKE_SA_INIT / IKE_AUTH​​:在建立初始SA的 SA Payload 中携带初始生存时间
  • CREATE_CHILD_SA​​:在重协商的 SA Payload → Proposal Payload → Transform Payload 中携带
    1
    2
    3
    4
    5
    6
    
    IKEv2 Payload: SA (Protocol=IKEv2 or ESP/AH)
    Proposal #1: Protocol=ESP, SPI=...
      Transform: ENCR (AES_GCM_256)
      Transform: INTEG (NONE)
      Transform: SA_LIFE_TYPE: Seconds=86400       // 时间生存时间
      Transform: SA_LIFE_TYPE: Bytes=4294967296     // 流量生存时间 (4GB)
    

协商规则

  1. 发起方提案​​:
    在SA建立或重协商时,发起方在SA提案中携带​​期望的生存时间值​​(包含时间和流量阈值)。
    ​​本地配置优先​​:值通常取自VPN设备的本地策略(如 set security-association lifetime seconds 3600)。
  2. ​响应方决策​​:
    ​​接受提案​​:若响应方支持该值,则返回相同数值。
    ​​修正提案​​:若响应方策略要求更短时间(如最大生存时间限制),则返回​​更小的值​​:
    ​拒绝提案​​:若完全不接受(如算法不匹配),则响应 NO_PROPOSAL_CHOSEN。
  3. 生效原则​​:
    ​​以协商后的较小值为准​​,确保两端使用一致的生存时间。
    ​​双因子触发​​:时间和流量任一阈值触发即启动重协商(两者是OR关系)。

抗重放

启用机制

在IPSec中,​​是否启用抗重放机制是由接收方单方面决定的,无需双方协商​​,但发送方会通过协议字段​​显式声明自身是否支持抗重放功能​​。

IKEv1

发送方:

1
2
3
4
ISAKMP Payload: SA (Phase 2)
  Proposal: ESP
    Transform: ENCR_AES_CBC
    Attribute: ANTI_REPLAY(0x8004)=1          // 声明支持抗重放

​​接收方​​:

  • 若接收方策略要求抗重放,但发送方声明不支持(值=0),则接收方​​拒绝SA建立​​(返回 ATTRIBUTES_NOT_SUPPORTED)。
  • 若发送方声明支持(值=1),接收方根据本地策略选择开启或关闭窗口机制。

IKEv2

发送方:

1
2
3
IKEv2 Payload: SA (Protocol=ESP)
  Proposal #1: ENCR_AES_GCM_16, PRF_HMAC_SHA2_512
    Transform Attribute: ANTI_REPLAY(0x8004)=1      // 声明支持抗重放

​​接收方​​:

  • 若接收方要求抗重放但发送方声明不支持(值=0),接收方​​拒绝SA建立​​(返回 TS_UNACCEPTABLE)。
  • 若发送方声明支持(值=1),接收方独立决定是否启用窗口。

Work

Packet

1
2
3
IPSec ESP Header:
  SPI: 0x12345678   // 标识所属SA
  Sequence: 2894723 // 当前包的序列号

Anti-Replay Window Size

本地配置的接收方参数,无需协商。
| ​窗口大小 | 优点 | 缺点 | 适用场景 |
| :——————————|—————-| :————— | —— |
| 小(32) | 内存占用少,速度快 | 高延迟网络易误判乱序包为重放 | 低延迟局域网 |
| 中(64) | 平衡性能与容错 | 仍需避免极端网络抖动 | 企业广域网 |
| 大(512+) | 容忍严重乱序,防丢包 | 高内存/CPU开销 | 卫星链路、移动网络 |

This post is licensed under CC BY 4.0 by the author.