| 原作者 | Clowwindy |
|---|---|
| 首次发布 | python 2012年4月20日,13年前(2012-04-20)[1] |
| 当前版本 | |
| 源代码库 | |
| 操作系统 | 类Unix系统 |
| 类型 | 通信协议 自由软件 突破网络审查 商标 |
| 许可协议 |
|
| 网站 | shadowsocks |

Shadowsocks(简称SS)是一種基於Socks5代理方式的加密傳輸协议,也可以指实现這個协议的各種开发包。目前有各种版本使用Python、C、C++、C#、Go语言、Rust等程式語言开发,除iOS平台外,大部分採用Apache许可证、GPL、MIT許可證等多種自由軟體許可協定開放原始碼。Shadowsocks分为服务器端和客户端,在使用之前,需要先将服务器端程序部署到服务器上面,然后通过客户端连接并建立本地代理。
在中国大陆,本工具广泛用于突破防火长城(GFW),以浏览被封锁、屏蔽或干扰的内容。2015年8月22日,Shadowsocks原作者Clowwindy稱受到了中国警方的压力,宣布停止维护此计划(项目)并移除其GitHub个人页面所存储的源代码[6]。
Shadowsocks最早由V2EX用户“clowwindy”2012年4月发布在该论坛[1]。
2015年8月22日,其作者Clowwindy在GitHub上稱,警察在兩日前要求他停止開發Shadowsocks專案並刪除其所有代碼。[7]之後,作者停止維護Shadowsocks,其GitHub專案頁面已被清空。[8][9]消息传出后,许多中国大陸和外国开发商,以及Shadowsocks用户,在GitHub中对作者表示了致谢,对已清空原始碼的项目頁面加星标,因此在当时Shadowsocks反而成为了GitHub上的「热门项目(Trending)」。[10]
8月25日,另一个用于突破网络审查的GoAgent项目也被作者自行删除。删除后几小时之内,GitHub遭到了来自中国大陸的DDoS攻击。據報这次攻击与中華人民共和国政府有关,因為中国政府此前曾要求GitHub移除兩個对抗網絡審查的項目但沒有被接受。[11]
2015年8月28日,电子前哨基金会针对Shadowsocks和GoAgent被删除一事发表评论,对中華人民共和国政府针对用于突破网络封锁软件作者的打击表示“强烈谴责”。[6]
不過Git倉庫的日誌顯示該項目被移除以前就有大量的復刻副本,不少副本仍然有用戶維護。所以儘管Shadowsocks專案頁經過此次打擊,也仍陸續恢復了內容,甚至本身並转交由多人維護成不同版本,各大Linux发行版的軟體倉庫均有各式Shadowsocks的實作的套件仍持續更新可用,目前的Shadowsocks更新基本上來自這些作者執行。
此事件的插曲是,該起事件雖有可能是當局主動出擊,但据称原作者在被警察關切前,曾作出一段「透露中國社會現狀」[12]的發言,可能遭到某些翻牆用戶與開發者對其態度不滿,向中華人民共和國政府舉報[註 1],從而為後來被要求撤下專案原始碼的事件埋下伏筆,而類似的利益衝突互害導致全體陷入共業等故事,在中國大陸也「時有發生」。[13]

Shadowsocks的运行原理与其他代理工具基本相同,使用特定的中转服务器完成数据传输。用户无法直接访问受封禁的网站,但代理服务器可以访问,且用户可以直接连接代理服务器,那么用户就可以通过特定软件连接代理服务器,然后由代理服务器获取网站内容并回传给用户,从而实现代理上网的效果。服务器和客户端软件会要求提供密码和加密方式,双方一致后才能成功连接。连接到服务器后,典型情况下客户端会在本机构建一个本地Socks5代理(或构建成VPN、透明代理等形式)。浏览网络时,客户端通过这个Socks5代理(或其他形式)收集网络流量,然后再经Shadowsocks混淆加密发送到服务端,以防网络流量被识别和拦截,服务端解密数据包,向目标网站发送请求,并以同样的方式加密网站返回的数据,最后将加密数据转交回服务端。
Clowwindy称Shadowsocks的最初只是「自用」,用来「翻墙」[1],而不是提供密码学意义的安全,所以Shadowsocks自行设计的加密协议对双方的身份验证仅限于预共享密钥,亦无完全前向保密,也未曾有安全专家公开分析或评估协议及其实现。
一个用 Python 写的 socks 加密代理。加密方法很简单,不过欺骗 GFW 足够了。
Shadowsocks的目标不在于提供完整的通信安全机制,主要是为了协助上网用户在严苛的网络环境中突破封锁,不能替代TLS或者VPN。
AEAD加密方式(AES-GCM、Chacha20-poly1305)在SIP004[16]提案提出并在SIP007提案[17]实现,这些加密方式被认为可以提供密码学意义的安全(「保密性,完整性,可用性」)[18],之前AES CFB、AES CTR、RC4、Chacha20等没有认证的加密方式仍在一部分实现中被允许存在[18]。Shadowsocks-windows已经移除了非AEAD加密方式的支持。
Shadowsocks多次被提到协议设计问题,有被主动探测的风险:
Shadowsocks在SIP003提案[19]中支持了插件,插件让Shadowsocks的流量可以通过不同的插件进行混淆加密或其他处理。目前使用较多的插件有v2ray-plugin、simple-obfs等。
目前Shadowsocks有多個實作支援,以自由軟體形式發佈的主要有
除此之外,還有许多的商業軟體。


ShadowsocksR(简称SSR)是网名为breakwa11的用户發起的Shadowsocks分支,在Shadowsocks的基础上增加了一些資料混淆方式,称修复了部分安全问题并可以提高QoS优先级。[27]后来貢獻者Librehat也为Shadowsocks补上了一些此类特性,甚至增加了类似Tor的可插拔传输层功能。[28]
ShadowsocksR開始時曾有过违反GPL、发放二进制时不发放源码的争议,使得原開發作者不滿。不过后来ShadowsocksR项目由breakwa11转为了與Shadowsocks相同的GPL、Apache許可證、MIT許可證等多重自由軟體許可协议。
2017年7月19日,ShadowsocksR作者breakwa11在Telegram频道ShadowsocksR news裡转发了深圳市启用SS协议检测的消息并被大量用户转发,引发恐慌。7月24日,breakwa11发布了闭源的SS被动检测程序,引发争议[29]。7月27日,breakwa11遭到自称“ESU.TV”(恶俗TV)的不明身份人士人身攻击,对方宣称如果不停止开发并阻止用户讨论此事件将发布更多包含个人隐私的资料[30],随后breakwa11表示遭到对方人肉搜索并公开个人资料的是无关人士,为了防止对方继续伤害无关人士,breakwa11将删除GitHub上的所有代码、解散相关交流群组,停止ShadowsocksR项目。但项目已被多人fork,并有人在其基础上继续发布新的版本,例如较为知名的SSRR(ShadowsocksRR)。
2017年9月21日,一篇名为《The Random Forest based Detection of Shadowsock's Traffic》的论文在IEEE发表,该论文介绍了通过随机森林算法检测Shadowsocks流量的方法,并自称可达到85%的检测精度[31],雖然該論文的有效性遭到网友质疑[來源請求]。但是使用机器学习來識別網路流量特徵的做法被认为是可行的,而且還適用於任何網路代理協定而不僅僅侷限於Shadowsocks。[32]
自2019年5月以来,中国一直在使用被动流量分析和主动探测相结合的方法来识别Shadowsocks服务器。其中,防火长城使用长度和熵来识别Shadowsocks流量。研究人员针对主动探测攻击提出了各种防御措施,Shadowsocks已经采用了抗探测设计。[20]
Two days ago the police came to me and wanted me to stop working on this. Today they asked me to delete all the code from GitHub. I have no choice but to obey.
|date=中的日期值 (帮助)稱多數用戶誰都可以求,而利用完做到解決問題就直接走人,而维护的过程中,感覺主动幫助項目的同学并不多,匿名提問還不想充分提供信息。对比下国外的開源互助的社會體制差好远,最後表示自己遲早要移民離開中國。最适合这个民族的其实是一群小白围着大大转,大大通过小白的夸奖获得自我满足,然后小白的吃喝拉撒都包给大大解决的模式。通过这个项目我感觉我已经彻底认识到这个民族的前面为什么会有一堵墙了。没有墙哪来的大大。所以到处都是什么附件回帖可见,等级多少用户组可见,一个论坛一个大大,供小白跪舔,不需要政府造墙,网民也会自发造墙。这尼玛连做个翻墙软件都要造墙,真是令人叹为观止。这是一个造了几千年墙的保守的农耕民族,缺乏对别人的基本尊重,不愿意分享,喜欢遮遮掩掩,喜欢小圈子抱团,大概这些传统是改不掉了吧。