Article · 代理协议:VLESS、Trojan 与 Shadowsocks · 协议原理

Shadowsocks 原理与 AEAD 加密:为什么至今仍被广泛使用

Shadowsocks 用预共享密钥对目标地址和数据做对称加密,AEAD 加密在保密之外增加了完整性校验,2022 版规范又加入时间戳与重放防护。结构简单、开销小、原生支持 UDP、客户端覆盖广,是它至今仍被广泛使用的主要原因。

发布 最近更新 品牌资料整理日期 搜索意图 信息

Shadowsocks 能沿用至今,靠的是“简单”

Shadowsocks 是一种对称加密代理:客户端和服务器事先共享同一个密钥和加密方式,客户端把目标地址和数据加密后发出,服务器解密后代为访问。它至今仍被广泛使用,主要因为四点:结构简单、性能开销小、原生支持 UDP 转发、几乎所有主流客户端都支持。AEAD 加密弥补了早期版本缺少完整性校验的问题,2022 版规范又补上了重放防护。

本文讲原理,不提供搭建教程。所属二级专题见 代理协议二级专题,与其他协议的对照见 一级专题的协议章节。

从流加密到 AEAD:为什么要换

Shadowsocks 早期使用流加密方式,例如基于 RC4 或 AES-CFB 的方案。这类方式只做一件事:把数据变得不可读。它不检查密文有没有被改动过,于是出现了两类问题:

  1. 可以被篡改。 攻击者即使不知道密钥,也可能通过修改密文中的特定位置,让服务器解出一个被改动过的目标地址。
  2. 可以被试探。 服务器对异常数据的反应(例如立即断开还是等待)可能暴露它是 Shadowsocks 服务器。

AEAD 是“带关联数据的认证加密”的缩写,常见算法有 AES-128-GCM、AES-256-GCM 和 ChaCha20-Poly1305。它在加密的同时为每段密文生成一个校验标签,解密时先验标签,任何一个字节被改动都会验证失败。这样就同时得到了机密性与完整性。目前主流客户端和服务端都已把流加密列为不推荐或直接移除。

AEAD 版本的一次 TCP 连接长什么样

以较常见的 AEAD 版本为例,连接过程如下:

顺序 内容 作用
1 随机盐值 每条连接不同,与主密钥一起派生出本次会话的子密钥
2 加密的长度块 + 标签 告诉对方下一段数据有多长
3 加密的数据块 + 标签 首个数据块内含目标地址与端口
4 重复 2、3 后续数据按块传输,每块长度有上限

几个细节值得注意:主密钥由密码派生,子密钥每条连接都不同,所以即使两条连接传输相同内容,密文也完全不同;长度本身也被加密,旁观者无法直接读出每块数据有多大;每块都带标签,篡改会被立即发现。

对 UDP,Shadowsocks 采用逐包加密:每个 UDP 包都带自己的盐值和标签,独立加密、独立校验,不需要先建立连接。这正是它原生支持 UDP 的原因,与把 UDP 装进 TCP 连接的做法相比,实时性更接近原生 UDP。

2022 版规范补上了什么

社区后来提出了 Shadowsocks 2022 规范,加密方式名称一般以“2022-”开头。主要变化有三点:

  • 密钥直接使用指定长度的随机串,不再由任意长度的密码派生,减少了弱密码带来的风险。导入时如果密钥长度不符,客户端会直接报错。
  • 请求头加入时间戳,服务器拒绝偏差过大的请求,配合盐值记录防止旧数据被重放。这意味着设备时钟需要大致准确。
  • 改进了 UDP 的会话处理,让 UDP 转发在多包场景下更可靠。

2022 版需要客户端专门支持。订阅里如果出现这类节点,而客户端较旧,就可能出现“能导入但连不上”。时间相关故障的排查属于客户端操作,见 系统时间不准导致节点连不上的原因。

“看起来什么都不像”的两面

Shadowsocks 的流量从首个字节起就是随机外观的密文,不像任何常见的应用协议。这一特点有两面:一方面,旁观者无法从内容里读出它在传什么;另一方面,“完全随机、没有任何握手特征”本身就可能成为识别线索。社区为此发展出了插件机制,把 Shadowsocks 包在其他外观之下,但插件会增加配置项,客户端也要同时支持。

正因如此,行业常见的做法之一是把 Shadowsocks 放在运营方可控的链路里使用,例如国内入口到境外落地之间的中转或专线段,而不是直接面对公网。某个机场具体怎样部署,资料通常不会写明,应以各品牌说明为准。线路分段的概念见 专线类型:IEPL、IPLC 与中转。

为什么客户端支持面最广

Shadowsocks 历史较长、规范相对稳定,几乎所有代理客户端都把它作为基础支持项。对用户来说,这意味着:

  • 换客户端时,Shadowsocks 节点几乎不会因为“协议不支持”而消失;
  • 导入出错时,常见原因集中在加密方式不匹配或密钥长度不符,排查范围较小;
  • 在移动设备上,无论 iOS 还是 Android,都比较容易找到支持它的客户端。

加密方式不匹配时为什么“无声失败”

Shadowsocks 没有协商环节:客户端不会先问服务器“你用哪种算法”,而是直接按本地设置加密后发出。如果加密方式或密钥与服务器不一致,服务器解不开首个数据块的标签,就会按设计静默丢弃或断开,不返回任何错误说明。这样做是为了不向探测者透露信息,但也让用户看到的往往只是“超时”。所以,当同一订阅里只有某个 Shadowsocks 节点失败时,加密方式与密钥是否被完整导入,是值得先确认的一项。

移动端客户端的选择属于客户端专题,见 移动端客户端:iOS 与 Android。

本站截图中的 Shadowsocks

本站 2026-08-11 批次的测速截图中,多数节点类型显示为 Shadowsocks,而品牌资料大多写的是 VLESS。这并不说明哪种协议更好,也不能据此判断线路或品牌优劣;可能的原因包括多协议节点、中转段协议不同等,均属待核实。核对方法见 测速截图显示 Shadowsocks、资料写 VLESS 的可能原因。

请遵守所在地法律法规与平台条款。本文只解释协议原理,不提供服务器部署或规避监管的方法。

常见问题

AEAD 加密和早期的流加密有什么区别?

早期流加密只负责把数据变得不可读,不检查数据是否被篡改,容易被构造请求反复试探。AEAD 在加密的同时附带校验标签,任何改动都会导致解密失败,因此同时提供机密性与完整性。

Shadowsocks 2022 版为什么对系统时间有要求?

2022 版在请求头里加入了时间戳,服务器会拒绝时间偏差过大的请求,用来防止旧数据被重放。设备时钟明显不准时,2022 版节点可能连不上,而旧版 AEAD 节点不受影响。

机场为什么常在中转或专线里使用 Shadowsocks?

这是行业常见做法之一:Shadowsocks 开销小、配置简单、原生支持 UDP,适合在入口到落地之间这类运营方可控的链路中使用。具体某个机场是否如此,需要以各品牌说明为准。

来源与更新

品牌字段来自本站品牌数据文件(整理自 2026-09-04 品牌清单,Vendor Data,官网待核实);测速截图为 2026-10-18 复核后发布的单次 Measured Data;AI 与流媒体均为 Not Tested。发布 2026-10-18,最近更新 2026-10-18。本页不承诺任何平台的收录、排名或引用。