Shadowsocks

Android版本Shadowsocks应用程序的标志
Shadowsocks（简称SS）是一种基于Socks5代理方式的加密传输协议，也可以指实现这个协议的各种开发包。目前有各种版本使用Python、C、C++、C#、Go语言、Rust等程式语言开发，大部分主要实现（iOS平台的除外）采用Apache许可证、GPL、MIT许可证等多种自由软体许可协定开放原始码。Shadowsocks分为服务器端和客户端，在使用之前，需要先将服务器端程序部署到服务器上面，然后通过客户端连接并建立本地代理。
在中国大陆，本工具广泛用于突破防火长城（GFW），以浏览被封锁、屏蔽或干扰的内容。2015年8月22日，Shadowsocks原作者Clowwindy称受到了中国警方的压力，宣布停止维护此计划（项目）并移除其GitHub个人页面所存储的源代码。

**历史**
Shadowsocks最早由V2EX用户“clowwindy”2012年4月发布在该论坛。

**项目转手**
2015年8月22日，其作者Clowwindy在GitHub上称，警察在两日前要求他停止开发Shadowsocks专案并删除其所有代码。之后，作者停止维护Shadowsocks，其GitHub专案页面已被清空。消-{}-息传出后，许多中国大陆和外国开发商，以及Shadowsocks用户，在GitHub中对作者表示了致谢，对已清空原始码的项目页面加星标，因此在当时Shadowsocks反而成为了GitHub上的「热门项目（Trending）」。
此事件的插曲是，该起事件本以为是当局主动出击，但另有消-{}-息据称，原作者曾作出的「透露中国社会现状」的发言或是对其态度不满，可能遭到某些翻墙用户，向中华人民共和国政府检举，从而为后来被要求撤下专案原始码的事件埋下伏笔，而类似的因个人网路发言而被同业检举的事件在中国大陆也「时有发生」。据网民整理，原作者更斥责自己的工作成果被他人挪用，也出现被许多冒名者修改后的自主版本，拿出更强的产品只为了专卖来替自己赚钱，后来原作主张，他以为那种大家一起不谋私的理想，做好SS社群的共享主义精神，在中国连出现的迹象都没有。据他原话：
他称多数用户也是以一种自立态度，谁都可以求，而利用完做到解决问题就直接走人来的，而我维护的过程中，感觉主动帮助项目的同学并不多，匿名提问还不想充分提供信息。对比下国外的开源互助的社会体制差好远。他最后表示自己迟早要移民离开中国，在维护这些项目上，已经越来越艰难无趣，而以后也不会想再做了。
8月25日，另一个用于突破网络审查的GoAgent项目也被作者自行删除。删除后几小时之内，GitHub遭到了来自中国大陆的DDoS攻击。据报这次攻击与中华人民共和国政府有关，因为中国政府此前曾要求GitHub移除两个对抗网络审查的项目但没有被接受。
2015年8月28日，电子前哨基金会针对Shadowsocks和GoAgent被删除一事发表评论，对中华人民共和国政府针对用于突破网络封锁软件作者的打击表示“强烈谴责”。
不过Git仓库的日志显示该项目被移除以前就有大量的复刻副本，不少副本仍然有用户维护。所以尽管Shadowsocks专案页经过此次打击，也仍陆续恢复了内容，甚至本身并转交由多人维护成不同版本，各大Linux发行版的软体仓库均有各式Shadowsocks的实作的套件仍持续更新可用，目前的Shadowsocks更新基本上来自这些作者执行。

**运行原理**
Android版本Shadowsocks应用程序
Shadowsocks的运行原理与其他代理工具基本相同，使用特定的中转服务器完成数据传输。例如，用户无法直接访问Google，但代理服务器可以访问，且用户可以直接连接代理服务器，那幺用户就可以通过特定软件连接代理服务器，然后由代理服务器获取网站内容并回传给用户，从而实现代理上网的效果。服务器和客户端软件会要求提供密码和加密方式，双方一致后才能成功连接。连接到服务器后，典型情况下客户端会在本机构建一个本地Socks5代理（但也有构建成VPN、透明代理等形式）。浏览网络时，客户端通过这个Socks5（或其他形式）代理收集网络流量，然后再经混淆加密发送到服务器端，以防网络流量被识别和拦截，反之亦然。

**特点**
 Shadowsocks使用自行设计的协议进行加密通信。加密算法有AES-GCM、ChaCha20-Poly1305、2022-BLAKE3-AES-GCM等，除建立TCP连接外无需握手，每次请求只转发一个连接，无需保持「一直连线」的状态，因此在移动设备上相对较为省电。- 所有的流量都经过算法加密，允许自行选择加密算法。- Shadowsocks通过异步I/O和事件驱动程序运行，响应速度快。- 客户端覆盖多个主流操作系统和平台，包括Windows、macOS、Android、Linux和iOS系统和路由器（OpenWrt）等。

**安全性**
Clowwindy称Shadowsocks的最初只是「自用」，用来「翻墙」，而不是提供密码学意义的安全，所以Shadowsocks自行设计的加密协议对双方的身份验证仅限于Pre-shared key，亦无完全前向保密，也未曾有安全专家公开分析或评估协议及其实现。
Shadowsocks的目标不在于提供完整的通信安全机制，主要是为了协助上网用户在严苛的网络环境中突破封锁，不能替代TLS或者VPN。
AEAD加密方式（AES-GCM、Chacha20-poly1305）在SIP004提案提出并在SIP007提案实现，这些加密方式被认为可以提供密码学意义的安全（「保密性，完整性，可用性」），之前AES CFB、AES CTR、RC4、Chacha20等没有认证的加密方式仍在一部分实现中被允许存在。Shadowsocks-windows已经移除了非AEAD加密方式的支持。
Shadowsocks多次被提到协议设计问题，有被主动探测的风险：- 2015年，ShadowsocksR的原开发者breakwa11提到原协议设计导致无法验证数据包完整性而被主动探测的风险，之后Shadowsocks的后继开发者madeye引入One Time Auth（OTA）方案试图解决，但breakwa11指出还是不能避免主动探测风险，最终引入AEAD加密方式并放弃OTA方案。- 2021年2月28日，GitHub用户RPRX提出Shadowsocks AEAD加密方式设计存在严重漏洞，无法保证通信内容是可靠的，随后开发者验证了本地echo自交思路的可行性。3月1日，RPRX又提出可利用服务端防重放机制使Shadowsocks、Vmess等未知流量代理实质性失效，随后讨论区中的一个名为gfw-report的用户验证了这一思路的可行性。

**插件**
Shadowsocks在SIP003提案中支持了插件，插件让Shadowsocks的流量可以通过不同的插件进行混淆加密或其他处理。目前使用较多的插件有v2ray-plugin、simple-obfs等。

**实作**
目前Shadowsocks有多个实作支援，以自由软体形式发布的主要有- 原始shadowsocks（以Python语言编写）- shadowsocks-libev（C语言编写，目前仅修复BUG）- openwrt-shadowsocks- shadowsocks-rust（Rust语言编写，libev版本停止新功能开发之后的继任活跃开发版本）- go-shadowsocks2- gost- libQtShadowsocks - shadowsocks-qt5（客户端）- shadowsocks-android（客户端）- shadowsocks-windows（客户端）- ShadowsocksX-NG （客户端）
*ShadowsocksR（Shadowsocks的第三方分支版本）- Outline- V2Ray- Brook- Trojan- Clash
等等，还有为数甚多的免费软体及商业软体。

**ShadowsocksR**
ShadowsocksR的标志
Android版本ShadowsocksR应用程序
ShadowsocksR（简称SSR）是网名为breakwa11的用户发起的Shadowsocks分支，在Shadowsocks的基础上增加了一些资料混淆方式，称修复了部分安全问题并可以提高QoS优先级。后来贡献者Librehat也为Shadowsocks补上了一些此类特性，甚至增加了类似Tor的可插拔传输层功能。
ShadowsocksR开始时曾有过违反GPL、发放二进制时不发放源码的争议，使得原开发作者不满。不过后来ShadowsocksR项目由breakwa11转为了与Shadowsocks相同的GPL、Apache许可证、MIT许可证等多重自由软体许可协-{}-议。
2017年7月19日，ShadowsocksR作者breakwa11在Telegram频道ShadowsocksR news里转发了深圳市启用SS协议检测的消息并被大量用户转发，引发恐慌。7月24日，breakwa11发布了闭源的SS被动检测程序，引发争议。7月27日，breakwa11遭到自称“ESU.TV”（恶俗TV）的不明身份人士人身攻击，对方宣称如果不停止开发并阻止用户讨论此事件将发布更多包含个人隐私的资料，随后breakwa11表示遭到对方人肉搜索并公开个人资料的是无关人士，为了防止对方继续伤害无关人士，breakwa11将删除GitHub上的所有代码、解散相关交流群组，停止ShadowsocksR项目。但项目已被多人fork，并有人在其基础上继续发布新的版本，例如较为知名的SSRR（ShadowsocksRR）。

**识别**
2017年9月21日，一篇名为《The Random Forest based Detection of Shadowsock's Traffic》的论文在IEEE发表，该论文介绍了通过随机森林算法检测Shadowsocks流量的方法，并自称可达到85％的检测精度，虽然该论文的有效性遭到网友质疑。但是使用机器学习来识别网路流量特征的做法被认为是可行的，而且还适用于任何网路代理协定而不仅仅局限于Shadowsocks。
自2019年5月以来，中国一直在使用被动流量分析和主动探测相结合的方法来识别Shadowsocks服务器。其中，防火长城使用长度和熵来识别Shadowsocks流量。研究人员针对主动探测攻击提出了各种防御措施，Shadowsocks已经采用了抗探测设计。