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