WireGuard 与 AmneziaWG:两种协议的区别
HamikVPN 和其他一些服务一样,使用 AmneziaWG 协议——但它到底是什么:另一种加密算法,还是别的什么?我们从技术角度拆解:相比普通 WireGuard,究竟有什么变了,又有什么保持不变。
WireGuard:小巧的协议,却有可辨认的「笔迹」
WireGuard 之所以流行,正是因为简洁:代码库很小、采用现代密码学而不必在几十种算法之间做选择、相较更老的协议速度更快。这种简洁的另一面是单个数据包层面的可预测性。根据 AmneziaWG 技术文档,标准 WireGuard 的连接发起包(handshake init)长度恒为 148 字节,应答包(response)为 92 字节,cookie 包为 64 字节。这些固定、重复出现的大小和头部,构成了一个稳定的「指纹」——连接路径上的流量分析设备,即便无法读取加密数据的内容,也能据此识别出正在使用 WireGuard 协议这一事实。
这并不是加密本身的理论漏洞——流量内容依然受保护。这里说的是元数据:你具体在用哪种协议,从数据包的形态就能看出来,哪怕其内容不可读。而那些采用流量分析和整形的网络——从个别移动运营商到企业和酒店网络——有时会对被识别出的 VPN 流量做与普通流量不同的处理,这可能影响连接的稳定性。
AmneziaWG 改变了什么:传输层的混淆
AmneziaWG 是 WireGuard-Go 实现的一个分支,它在不触动加密内核的前提下,恰恰消除了这种可预测性。根据该项目的官方文档,负责这件事的是几组参数:
- Jc、Jmin、Jmax——在正式握手之前,会先发送 Jc 个「垃圾」包,其大小在 Jmin 到 Jmax 字节之间随机。接收方既不解析也不校验它们——在旁观者看来,这就像一段中性的 UDP 噪声,把会话开头那种特征性的时序和大小给冲淡了。
- S1–S2——伪随机前缀(0–32/64 字节),会加到每一类数据包上,使其长度由固定变为可变。
- H1–H4——可预测的 WireGuard 头部标识符,被替换为设定范围内的随机值,于是不同客户端的头部各不相同——也就无法写出一条通用规则,一次性识别所有客户端。
有个重要细节:所有这些参数都在服务器一侧设定,且必须与客户端一致,否则隧道根本建立不起来——普通 WireGuard 客户端读不懂这样的服务器,反之亦然。
保持不变的是什么:加密内核
混淆只作用于传输层——数据包的形态和时序。它既不替换、也不削弱加密本身。正如 WireGuard 协议的官方文档所述,密钥交换基于椭圆曲线 Curve25519,数据加密基于 ChaCha20 与 Poly1305 认证码的组合,哈希则基于 BLAKE2s。AmneziaWG 原封不动地继承了这同一套算法:开发者刻意不去动那段经过独立研究者验证的加密代码,只改动了头部和辅助数据包。就流量内容的保护而言,WireGuard 与 AmneziaWG 没有区别。
这在实践中意味着什么
对日常使用来说,区别归结为两点。第一,应用和服务器必须使用同一套混淆参数——但只要两端都用兼容的客户端,就无需手动配置——例如 AmneziaVPN 应用或 HamikVPN。第二,连接建立的第一阶段会因为垃圾填充包而稍微多花一点时间,但这不影响已建立隧道内部的数据传输速度。如果你要按协议来对比各家服务,值得看的不是营销名词,而是文档里写明的是哪种密码学——通用判断标准见文章如何挑选隐私连接服务。
