土法炼钢兴趣小组的算法知识备份

【IPSec】密钥派生与 Child SA

文章导航

分类入口
networksecuritycryptography
标签入口
#ikev2#skeyseed#prf-plus#child-sa#create-child-sa#traffic-selector#rekey

目录

握手篇 停在「四条消息之后 IKE SA 与首个 Child SA 参数已定」。本篇回答三个更硬的问题:密钥字节从哪来、Child SA 与 IKE SA 如何分工、rekey 时哪些对象被替换。通识层面的 Extract-Expand 见站内 KDF 篇;这里只钉 RFC 7296 的 IKEv2 用法。

一、SKEYSEED 与 prf+

IKE_SA_INIT 结束后,双方共享:

RFC 7296 §2.14:

\[ \mathrm{SKEYSEED} = \mathrm{prf}(Ni \mathbin{|}| Nr,\ g^{ir}) \]

(当使用非空的 PPK 等扩展时公式会变;本篇以核心文档为准。)

随后用 prf+(基于 PRF 的密钥扩展,生成足够长的密钥流)派生:

\[ \begin{aligned} &\{SK_d \mathbin{|}| SK_{ai} \mathbin{|}| SK_{ar} \mathbin{|}| SK_{ei} \mathbin{|}| SK_{er} \mathbin{|}| SK_{pi} \mathbin{|}| SK_{pr}\} \\ &\quad = \mathrm{prf+}(\mathrm{SKEYSEED},\ Ni \mathbin{|}| Nr \mathbin{|}| SPIi \mathbin{|}| SPIr) \end{aligned} \]

密钥 用途
\(SK_d\) 派生后续 Child SA 密钥的种子
\(SK_{ai}/SK_{ar}\) IKE 消息完整性(分方向)
\(SK_{ei}/SK_{er}\) IKE 消息加密(分方向)
\(SK_{pi}/SK_{pr}\) 生成 AUTH 载荷时使用的材料(与认证方法相关)

AEAD 套件下「加密与完整性」合并,但密钥树仍按规范展开对应长度的密钥字段。站内 KDF 篇已指出:IKEv2 的 prf+ 与后来 HKDF 的 Extract-then-Expand 同族,但是独立规范,实现必须跟 RFC 7296 而非「凭感觉套 HKDF」。

二、首个 Child SA 的密钥

IKE_AUTH 中协商的 Child SA 密钥(ESP/AH)由 \(SK_d\)、Nonces 以及(若该 Child 再次做了 KE)额外 DH 共享秘密派生,见 RFC 7296 §2.17。直觉:

工程默认:站点隧道常在 CREATE_CHILD_SA / rekey 时带 KE,以换 Child 级 PFS;具体 proposal 由管理员写进 esp_proposals(strongSwan)或对等配置。

三、流量选择器(TS)

TSi / TSr 描述 Child SA 允许保护的流量:地址范围、协议、端口范围等(RFC 7296 §3.13)。它们是策略在 IKE 语言中的投影,最终应落到 SPD/policy:

与 WireGuard AllowedIPs 对比:TS 更细(可到端口),且与身份(ID/证书)是分开的对象;AllowedIPs 直接绑在 peer 公钥上。

四、CREATE_CHILD_SA 与 rekey

初始握手之后,任一方可发起 CREATE_CHILD_SA(交换类型 36)以:

  1. 建立额外 Child SA(多选择器、多算法需求)。
  2. Rekey 现有 IKE SA 或 Child SA(带 REKEY_SA Notify 指向旧 SA)。

Rekey 的工程要点:

Linux 上 rekey 成功后,ip xfrm state 应出现新 SPI,旧 SPI 在硬超时后消失;若用户态以为成功而内核仍只有旧 state,属于 第 6–7 篇 的脱节故障。

五、与数据面的接缝

flowchart TD
  ike["IKEv2 daemon"] -->|"install"| policy["xfrm policy ~ SPD"]
  ike -->|"install"| state["xfrm state ~ SAD"]
  state -->|"SPI + keys"| esp["ESP transform"]
  policy -->|"selector match"| state

密钥树停在用户态推导完成之后,必须安装进内核(或用户态数据路径)。本系列主线是内核 xfrm:Child SA 的 SPI、算法、密钥、模式、外层隧道端点写入 state;TS 写入 policy。缺一步都会出现「swanctl 显示 INSTALLED 但抓包仍是明文」或相反。

六、本文边界

下一篇进入数据面:ESP、AH 与 NAT-T

参考资料

规范

站内

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-07-21 · network / security

【IPSec】IKEv2 握手:IKE_SA_INIT 与 IKE_AUTH

RFC 7296 用两个交换、四条消息建立 IKE SA 并捎带首个 Child SA。本文按载荷语义拆开 IKE_SA_INIT / IKE_AUTH,说明 PSK 与证书 AUTH、Cookie 抗 DoS 边界,以及和 WireGuard 1.5 RTT 确认的差异。

2026-07-21 · network / security

【IPSec】strongSwan:从 swanctl 到内核 SA

拆解 strongSwan 的 charon、VICI/swanctl 与 kernel-netlink:配置里的 connections/children/proposals 如何变成 Linux xfrm 的 policy 与 state,并与 VPN 对比文中的站点示例对齐。


By .