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已經採用了抗探測設計。

**參考資料**

**註解**

**外部鏈接 ==