Curve25519 / ChaCha20 改变了什么?

Curve25519 / ChaCha20 改变了什么?

它们在 2013–2015 达成了工程共识:
✅ 快(无硬件依赖)
✅ 常数时间
✅ 实现短小
✅ 安全边界清晰
✅ 适合内核
这意味着:
可以“写死算法”而不显得傲慢
👉 WireGuard 才敢说:“不协商是特性”
在 2008 年,这是自杀式设计。

你的洞察非常深刻,甚至可以说是精准地切中了 WireGuard 能够成功的历史窗口期

你提到的**“2008 年是自杀式设计,2015 年却成了工程共识”**,这个时间维度的对比非常精彩。这背后的确是一场密码学界和工程界的认知革命。

我们可以把你的观点拆解开来,看看 Curve25519 (X25519)ChaCha20-Poly1305 究竟是如何通过“工程层面的优越性”改变了整个行业的规则,从而为 WireGuard 铺平道路的。

1. 2008年的困境:对“标准”的迷信与硬件的诅咒

如果在 2008 年,你对大家说“我们不要协商算法,我们只用这一套”,你会被喷死,原因如下:

  • 硬件依赖的鸿沟: 当时主流是 AES。AES 在有 CPU 指令集支持(AES-NI)时很快,但在没有支持的嵌入式设备或早期移动设备上慢得令人发指。如果强制用 AES,低端设备跑不动;如果不强制,就得协商(降级到 RC4 或 3DES)。
  • 侧信道攻击的噩梦: 那个年代的 AES 和 RSA 实现非常容易受到缓存计时攻击(Cache-timing attacks)。要想写出“常数时间”的 AES 软件实现极其困难(需要查 S-box 表,这就涉及内存访问时间差异)。
  • NIST 的权威: 当时椭圆曲线(ECC)主要是 NIST P-256。但在 Snowden 爆料(2013)之前,大家不敢质疑 NIST 的参数(虽然大家都觉得 NIST 曲线实现起来坑很多,很难写对)。

结论: 在那个时代,没有一套算法能同时满足“在所有硬件上都快”且“在所有硬件上都安全”。所以必须保留“协商”机制,以便因地制宜。

2. 2013–2015 的转折点:DJB 的胜利与移动互联网爆发

Daniel J. Bernstein (DJB) 设计的 Curve25519 和 ChaCha20 在这几年迅速成为事实标准,解决了上述所有痛点:

A. 解放了 CPU(ChaCha20)

ChaCha20 是基于 ARX(Add-Rotate-Xor)设计的,只用简单的加法、旋转和异或。

  • 彻底去除了 S-box: 这意味着它不需要查表,自然免疫了基于缓存的侧信道攻击。
  • 纯软件性能爆炸: 在没有专用硬件加速的手机、路由器上,它的性能往往是纯软件 AES 的 3 倍以上。
  • 意义: WireGuard 可以自信地说:“我在几十块钱的路由器上也能跑满带宽”,而不需要依赖 Intel 的 CPU 指令集。

B. 傻瓜式的高安全性(Curve25519)

NIST P-256 的实现充满了陷阱(比如要检查点是否在曲线上,处理无穷远点等)。

  • Montgomery Ladder: Curve25519 允许使用蒙哥马利阶梯算法,这种算法天生就是常数时间的。
  • 输入宽容: 任何 32 字节的随机数都是合法的公钥。你不需要复杂的校验代码,也不可能因为输入错误导致崩溃或泄露私钥。
  • 意义: 内核开发者不需要是数学家就能正确实现它。这正是 Linus 敢把它合入内核的前提。

3. “不协商”为何从傲慢变成了特性?

在旧时代(IPSec/OpenVPN/TLS 1.2),“加密敏捷性”(Crypto Agility) 被视为一种美德:

“万一 AES 被破解了,我们还可以协商切换到 Camellia。”

但到了 2015 年,工程界发现这个理念带来的危害远大于收益:

  1. 降级攻击: 攻击者不仅不破解 AES,反而欺骗双方降级到不安全的算法(如 Logjam, FREAK 攻击)。
  2. 代码膨胀: 为了支持协商,OpenSSL 变成了无底洞般的“屎山”。

WireGuard 的“版本化”哲学(Versioning):
WireGuard 采纳了 Signal 协议的思路——如果算法坏了,我们不协商,我们升级协议版本(v2.0)。

这在 2015 年之后成为可能,正是因为 Curve25519 + ChaCha20 + Poly1305 这套组合拳表现出了极强的鲁棒性和普适性。它们在 Google (HTTPS), Cloudflare, OpenSSH 中的大规模验证,让 WireGuard 有底气说:

“这套组合就是当前人类已知的最优解(State of the Art),只要你用它,你在任何设备上既安全又快。既然如此,为什么要协商?”

总结

你说得非常对。WireGuard 实际上是享受到了一波“密码学基建红利”

如果没有 ChaCha20 的软硬件解耦特性,没有 Curve25519 的常数时间与实现安全性,WireGuard 这种“极简内核代码”的理想根本无法落地。它必须像 IPSec 一样去写复杂的协商逻辑来适配不同的硬件环境。

算法本身的工程属性进步,才让协议设计的极简主义成为可能。