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

WireGuard 深度系列:从设计哲学到内核实现

文章导航

分类入口
networksecurity
标签入口
#wireguard#vpn#noise-protocol#cryptokey-routing#curve25519#chacha20-poly1305#kernel#ndss

目录

IPSec/IKEv2 把密钥协商、变换层与策略库拆成多层;OpenVPN 把整套 TLS 状态机放进用户态。WireGuard 的回答是另一条路:故意打破「正确分层」,用一张 cryptokey routing 表、一套固定密码学原语、一个约数千行的内核虚拟网卡,把「认证加密隧道」做成看起来无状态的 wg0

本系列按哲学 → 协议 → 代码 → 使用 → 深度争论组织。已有单篇 WireGuard 内部实现VPN 工程对比 会被交叉引用,而不是重复粘贴。

与 network/89 的分工

维度 network/89 内部实现 本系列
定位 网络工程 单篇深挖:一张长文读完 cryptokey routing + 握手 + 数据路径 五篇路线图:哲学 → 协议 → 内核 → 运维 → 形式化/后量子
源码 主线内核路径与 timer/cookie,不分 Linux 小版本 03 内核篇 锚定 Linux 6.6 行号;04 运维篇 有 netns 实测
争论 局限节略述 PQ;形式化一笔带过 05 深度篇 收束 Dowling–Paterson、netdev agility、PSK 权宜与开放问题
选型 指向 75 VPN 对比 01/05 与 75、IPSec 系列 对照

读法:只要「把隧道机制讲清楚」→ 89 足够;要「证明卡在哪、后量子怎么演进」→ 01 → 02 → 05(可跳过 03/04)。

系列状态:正文 5 篇 + 索引(2026-07-19)。 源码锚定 Linux 6.6 LTS drivers/net/wireguard/;工具实测 wireguard-tools v1.0.20260223、内核 6.6.87.2-microsoft-standard-WSL2

适合谁看

这个领域最值得关注的 5 个问题

1. WireGuard「简单」到底拒绝了什么?代价是什么?

回答在:01(哲学)、05(深度)

NDSS 2017 论文明确承认:IPSec 的分层在学术上更「正确」,WireGuard 从 layering violation 出发,再用工程与密码学手段补洞。简单不是少写功能,而是系统性拒绝证书体系、cipher suite negotiation、SPD/SAD 分离。

2. Noise IKpsk2 如何在 1.5 RTT 内同时完成认证、前向保密与身份隐藏?

回答在:02(协议)、已有 内部实现文

四次 Curve25519 DH(es/ss/ee/se)各贡献不同属性;响应方必须等发起方第一条 transport 才能安全发数据——这是协议安全边界,不是实现疏忽。

3. 内核里路由、加密、保序如何拆到多核又不乱序?

回答在:03(代码)、已有内部实现文

发送路径用 AllowedIPs trie 选 peer;加解密进 parallel worker;per-peer 串行保证 UDP 外层可乱序、内层会话有序。

4. 生产里 AllowedIPs、路由表、NAT、漫游哪个最容易配错?

回答在:04(运维)

cryptokey routing 与宿主机 FIB 是两套表。能握手但 ping 不通、能解密但回不了包,几乎都落在这两张表与 endpoint 学习不同步。

5. 「无算法协商」在后量子与形式化证明面前站不站得住?

回答在:05(深度)

Dowling & Paterson(ACNS 2018)指出:第一条 transport 作为 key confirmation,使标准 session-key indistinguishability 证明难以模块化;PSK 是量子威胁的权宜之计,不是 PQ 终局。

篇目依赖关系与推荐阅读路径

flowchart TD
  A["01 Design Philosophy"] --> B["02 Protocol: Noise IKpsk2"]
  B --> C["03 Kernel Code Path"]
  A --> D["04 Ops Practice"]
  B --> D
  C --> E["05 Deep Tradeoffs"]
  B --> E
  D --> E
  X["network/89 Internals"] -.-> C
  Y["network/75 VPN Compare"] -.-> A

只想理解「为什么是 WireGuard」→ 3 篇

01 → 02 → 05(可选补读 VPN 对比

要落地部署与排障 → 3 篇

01 → 04 → VPN 对比 选型节

要读内核源码 → 3 篇

02 → 03 → 内部实现

完整路线 → 全部 5 篇 + 两篇网络工程交叉文

01 → 02 → 03 → 04 → 05,并对照 75 / 89

目录

第一部分:立场与协议

  1. 系列索引(本文)
  2. 设计哲学:故意的分层破坏与密码学观点
    • 看点:NDSS 2017 对 IPSec「正确分层」的批评、cryptokey routing 作为安全隧道基本原理、OpenSSH 式带外密钥分发、「沉默是美德」、无算法协商的显式立场。
  3. 协议原理:Noise IKpsk2、四次 DH 与 Cookie
    • 看点:官方 protocol 页与论文对齐的握手消息布局、1.5 RTT key confirmation、MAC1/MAC2 cookie 相对 DTLS/IKEv2 的改进、定时器与 rekey 常量。

第二部分:实现与使用

  1. 内核代码路径:从 wg_xmit 到加解密 worker
    • 看点:Linux 6.6 源码行号、AllowedIPs trie、messages.h 常量、netlink 配置面、与第 89 篇的分工。
  2. 使用与运维:netns 实测、AllowedIPs 与故障模式
    • 看点:本机 netns 双端 ping 实测、wg/wg-quick 工作流、漫游与 keepalive、MTU、不适用场景。

第三部分:争论与边界

  1. 深度探讨:形式化证明、密码敏捷性与后量子
    • 看点:Dowling–Paterson 证明障碍与 Donenfeld 回应、netdev 上的 agility 争论、PSK 的威胁模型、与 ZTNA/零信任数据面的关系、开放问题。

每篇一句话价值

价值点
01 讲清 WireGuard 不是「简化版 IPSec」,而是另一套安全隧道公理。
02 把 IKpsk2 四次 DH 与 1.5 RTT 钉到可核对的消息字段。
03 用 Linux 6.6 路径把协议映射到具体函数与队列。
04 用真实 netns 实验把配置错误变成可复现现象。
05 把「简单」放进证明、敏捷性与量子威胁的争议里检验。

与已有文章的关系

系列收束:形式化、敏捷性与后量子

Dowling–Paterson(ACNS 2018 / ePrint 2018/080) 是计算模型侧的关键锚点:原样 WireGuard 的 1.5 RTT confirmation 使经典 session-key indistinguishability 难以模块化证明——这是 证明边界 争论,不是「被证不安全」。05 深度篇 全文展开;89 内部实现 只在生态节与开放问题节互链。

密码敏捷性:WireGuard 拒绝 cipher suite negotiation,换取 严格版本化演进(netdev 2018-08 线程);与「运行时套件协商」的 tension 见 05 第三节。

后量子边界:PSK 是 NDSS §V-B 威胁模型下的权宜之计,不是 PQ 终局;主线仍是 X25519。开放问题:混合 KEM 体量、cookie 再设计、IoT 长期不更新设备与「全员升级」假设的冲突——均在 05 第七节列出。

开放问题(系列级)

  1. 计算证明能否在不扭曲 UDP confirmation 工程的前提下模块化覆盖 原样 WireGuard?(05 §2、§7)
  2. PQ 握手形态进入主线规范前,工业部署应如何声明「录制密文」风险?(05 §4;站内 PQC 总览
  3. 大规模 peer + AllowedIPs 编排与形式化协议假设的间隙。(04 故障模式 + 05 §5)

参考主来源(系列共用)

核心论文

规范与源码

站内交叉

同主题继续阅读

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

2026-06-20 · network

【网络工程】WireGuard 内部实现:Cryptokey Routing、Noise IK 握手与内核数据路径

WireGuard 用不到 4000 行内核代码替代了 IPSec/IKE 数十万行的协议栈——这不是少写功能,而是用固定密码学原语、固定握手模式和 cryptokey routing 这三个设计决定,换掉了证书体系、协商机和 SPD/SAD 分离。本文钻进源码和协议握手过程,逐层拆解 cryptokey routing 的双向执行、Noise IKpsk2 的 1.5 RTT 握手(含四次 ECDH 的安全属性贡献)、内核多核队列架构、timer 状态机、cookie DoS 防御和三密钥对轮换。


By .