Shadowsocks 的没落与 AEAD 密码学的过渡历史
在代理技术发展的早期,Shadowsocks (简称 SS) 曾是轻量级翻墙的代名词。但如今,许多使用旧版 SS 配置的节点在几小时内就会遭到封锁,这背后是密码学机制无法应对现代 DPI 防火墙审查的必然结果。
1. 早期加密的致命漏洞
最初的 Shadowsocks 采用了如 AES-256-CFB 或 RC4-MD5 等非验证型加密算法。这些算法仅保证了数据的机密性(别人看不懂内容),但缺乏数据完整性验证。
这就导致了著名的主动探测攻击 (Active Probing):
审查者可以对拦截到的 SS 密文包进行随机篡改,并将其重新发送给代理服务端。由于旧版算法无法立即察觉数据被篡改,服务端会尝试解密这串乱码,最终在解密失败时返回特定的错误特征。防火墙借此“确诊”了服务器的代理身份。
2. AEAD 密码学的引入
为了修补这个漏洞,社区全面过渡到了 AEAD (Authenticated Encryption with Associated Data) 加密算法,例如 aes-256-gcm 或 chacha20-ietf-poly1305。
AEAD 的核心优势在于:
- 它不仅加密数据,还为数据生成了一把类似于哈希校验的防篡改锁。
- 只要密文被防火墙中间人稍微改动一个字节,服务端在解密的第一步就会立刻发现哈希不匹配,并直接丢弃该数据包,不再返回任何错误特征,从而使防火墙的探测“石沉大海”。
3. 为什么 SS 仍然走向没落?
尽管 AEAD 解决了主动篡改探测,但 SS 协议本身的流量并没有伪装成标准的 HTTP/TLS 流量。在当今日趋严格的流量统计学分析与指纹审查面前,“无法识别的未知加密流量”本身就成了一种特征。这也是为何现今主流的协议全面向 VLESS over TLS 或 XTLS 架构迁移的原因。