三毛机场测评

Shadowsocks 是什么?SS 加密方式与现在还能不能用

拾沙 · 首发于  · 更新于

30 秒结论:Shadowsocks(简称 SS)是一种轻量的加密代理协议,客户端和服务器用同一个密码派生密钥,把流量加密成看似随机的数据。现在应该使用 AEAD 加密方式,例如 chacha20-ietf-poly1305、aes-256-gcm 或 aes-128-gcm,或者更新的 2022 版加密方式;老式的流加密方式缺少完整性校验,应该避免。SS 速度快、兼容性好,但它的流量没有可伪装的外形,在审查严格的时期更容易被识别,很多机场会同时提供其他协议。

Shadowsocks 是很多人接触的第一个代理协议,也是机场订阅里历史最长的协议之一。直到今天,不少机场的专线和中转节点仍在使用它。这篇文章讲清 Shadowsocks 的原理、加密方式该怎么看,以及它现在还适不适合日常使用。

Shadowsocks 的工作原理

Shadowsocks 的思路非常简单:客户端和服务器事先约定一个密码和一种加密方式,用密码派生出密钥。客户端把要访问的目标地址和数据一起加密后发给服务器,服务器解密后替你去访问目标网站,再把结果加密送回来。

和 Trojan 伪装成 HTTPS 的做法不同,Shadowsocks 不模仿任何已知协议的外形。加密后的数据看起来就是一串随机字节,没有明显的握手特征。

这种设计让 Shadowsocks 的实现非常轻量。协议几乎没有多余的结构,所以速度快、延迟低,在路由器、旧手机这类性能有限的设备上也能流畅运行。早年它被大量个人和机场采用,围绕它形成了丰富的客户端生态,也衍生出了 SSR 等分支。后来出现的很多新协议,都在不同程度上借鉴了它「简单、轻量」的思路。

加密方式:为什么要用 AEAD

Shadowsocks 先后出现过两类加密方式。

老式的流加密

早期的 Shadowsocks 使用流加密方式,例如 rc4-md5、aes-256-cfb 等。它们只负责加密,不校验数据有没有被篡改,存在被主动探测利用的风险。现在已经不应该再使用。

AEAD 加密

官方文档解释,AEAD 的意思是「带关联数据的认证加密」,同时提供机密性、完整性和真实性,在现代硬件上性能也很好,并且明确建议用户尽可能使用 AEAD 方式。文档推荐了三种:

chacha20-ietf-poly1305:官方要求所有合规实现都必须支持。在没有 AES 硬件加速的设备上,比如部分手机,速度更好。

aes-256-gcm 和 aes-128-gcm:在有 AES 硬件加速的设备上性能很好,大多数电脑和较新的手机都属于这类。

2022 版加密方式

Shadowsocks 2022 是一份更新的规范,在 AEAD 的基础上进一步改进了对重放攻击和主动探测的防御。它的加密方式名称以 2022-blake3 开头,例如 2022-blake3-aes-128-gcm。使用这种方式时,密码必须是符合长度要求的随机密钥,不能随便写一个字符串。机场提供的 SS 2022 节点,订阅里会自动填好正确的密钥。

Shadowsocks 的优缺点

优点:协议简单、速度快、资源占用低;几乎所有客户端都支持,包括老旧设备上的客户端;配置参数少,出错的概率低。

缺点:流量没有可伪装的外形,「看起来完全随机」本身也可能成为一种特征,在审查严格的时期更容易被识别和干扰;单个 SS 端口暴露在公网上时,被探测的风险比伪装类协议高。

机场为什么还在用 SS

很多机场会把 SS 用在中转节点和 专线节点 上。这类节点的国内入口到境外出口之间走的是中转服务器或专线,协议特征带来的风险相对较小,而 SS 速度快、开销低的优势就体现出来了。

另一方面,直连到境外的 SS 节点在敏感时期可能更不稳定。如果你发现某段时间 SS 直连节点频繁断开,可以换成同地区的 Trojan、VLESS 或 Hysteria2 节点对比一下。

怎么判断 SS 节点适不适合你

不需要研究协议细节,只要做一个简单的对比就能知道。

第一步,在机场的节点列表里,找同一个地区同时提供 SS 和其他协议的节点,比如香港的 SS 节点和香港的 Trojan 节点。

第二步,分别在白天和晚高峰各用一段时间,看延迟是否稳定、有没有频繁断开、打开网页和视频的速度如何。

第三步,如果 SS 节点和其他协议差不多,优先用 SS,它的资源占用更低,手机上也更省电;如果 SS 节点明显更容易断开,说明在你的网络环境下它的特征更容易被干扰,就换成伪装类协议的节点。

这个对比最好在同一条线路上进行。不同线路之间的差别,往往比协议之间的差别更大:同样是 SS,专线节点可能比直连的 Trojan 节点稳定得多。

加密方式会影响速度吗

会有一点影响,但在现代设备上通常感觉不到。有 AES 硬件加速的电脑和新手机,用 aes-128-gcm 或 aes-256-gcm 时 CPU 占用很低;没有硬件加速的老手机、路由器,用 chacha20-ietf-poly1305 会更流畅。如果你在路由器上跑代理,发现网速被路由器 CPU 卡住,这一点就值得注意了。不过机场订阅里的加密方式由服务端决定,用户不能单方面修改,否则会连接失败。

SS 节点导入时的常见问题

提示加密方式不支持:多半是机场用了 2022 版加密方式,而你的客户端太旧。更新客户端即可,具体可选的软件见 代理软件 栏目。

节点显示但连不上:检查是否手动改过密码或加密方式,二者必须和服务端完全一致。最稳妥的做法是删除节点,重新更新订阅。

带插件的节点:部分 SS 节点会搭配 obfs、v2ray-plugin 等插件做额外混淆,需要客户端支持对应插件。看到节点参数里有 plugin 字段时,确认你的客户端支持它。

最后提醒一句:SS 节点同样可能设置倍率,选节点前看一眼 机场倍率 的说明。

常见问题

SS 和 SSR 是一回事吗?

不是。SSR(ShadowsocksR)是早年从 Shadowsocks 分出来的一个分支,增加了协议混淆等功能,但早已停止维护。现在机场的 SS 节点一般指标准 Shadowsocks,客户端也以支持标准 SS 为主。

加密方式选哪个?

机场订阅里已经指定好了,不需要你选。如果自己配置,优先用 AEAD 方式:手机等没有 AES 硬件加速的设备选 chacha20-ietf-poly1305,电脑可以选 aes-256-gcm 或 aes-128-gcm。服务端支持时,也可以用 2022 版加密方式。

为什么有的客户端提示加密方式不支持?

通常是机场用了 2022 版加密方式(名字以 2022-blake3 开头),而客户端版本太旧。更新到最新版,或者换用支持 SS 2022 的客户端即可。

Shadowsocks 安全吗?

使用 AEAD 或 2022 版加密方式时,流量的机密性和完整性都有保障。需要注意的是,它防的是网络中间的窥探,机场作为服务端仍然能看到你访问了哪些网站。

机场为什么还在用 SS?

因为它速度快、资源占用低、几乎所有客户端都支持。很多机场会把 SS 用在中转或专线节点上,因为国内入口到境外出口这一段走专线,协议特征带来的风险相对较小。

参考资料

本文的结论以下列官方文档、规范或资料为准: