單元 18 Shadowsocks 與 VMess:加密代理的責任
學習目標與問題
先讀代理、密碼學與可靠傳輸。你應能區分代理請求、加密記錄及外層承載,說明 AEAD 不自動提供前向保密和重放防護,並比較版本相容性。使用者常寫的「shadow socket」通常指 Shadowsocks,正文採其正式名稱。
18.1 Shadowsocks 的核心路徑
本地代理收到應用的目的位址與資料,向 Shadowsocks 伺服器送受保護的請求;伺服器解出目的地,再開 TCP 或 UDP 出口。目的網站不需要支援 Shadowsocks。應用 TCP 在本地入口終止,資料經代理通道轉送;UDP 則以指定格式封裝及轉送。
SIP004/SIP007 的 AEAD 模式(常稱 2017)使用 salt 推導每方向會話子金鑰,再以 AEAD 保護 chunk。TCP 的長度與內容都有自己的保護結構;UDP 通常以資料報方式保護。這些是協定記錄,不等於 Socket recv、TCP 段或 IP 封包邊界。SIP022 的 2022 版修改金鑰與訊息結構,不能只換名稱卻假設兩端互通。
18.2 金鑰、版本與重放
| 項目 | AEAD 2017 基礎模型 | AEAD 2022(SIP022) |
|---|---|---|
| 共同祕密 | 可由密碼或 key 得到主祕密 | 規範要求合適長度高熵 PSK |
| 每會話材料 | salt 與衍生子金鑰 | 依新版格式的 session/salt/packet 狀態 |
| 重放 | 早期基礎 AEAD 格式未強制完整重放保護;需另查實作的 salt/狀態過濾 | 明確要求重放防護機制 |
| 時間檢查 | 基礎 AEAD 格式與實作另查 | TCP/UDP header 的 timestamp 需符合規範時間窗 |
| 前向保密 | 不因 AEAD 自動取得 | PSK 設計本身不提供 PFS |
| 相容性 | 選定 cipher 與版本皆需相容 | 不是 2017 封包的通用替代名稱 |
SIP022 的 TCP/UDP header 含時間戳;偏差超過規範的 30 秒須視為重放,TCP salt 另有 60 秒保存要求。範例 method 可見 2022-blake3-aes-128-gcm,不能只比對名稱中的 AEAD。
不要由「salt 每次隨機」推導 PFS:若舊錄製流量中的非祕密 salt 與日後取得的長期 PSK 足以重建金鑰,舊會話仍可能被解密。PFS 需要分析整個 key establishment。弱人類密碼也不因使用 AEAD 而自動變成高熵祕密。
本課不提供自行實作 cipher 的實驗。比較安全性時,記錄 ciphers、key 來源、是否外加 TLS、重放快取及版本,再畫保護邊界。外掛(plugin)是額外的承載/流量機制,不能當成所有 Shadowsocks 的固有特性。
18.3 VMess 與 AEAD
VMess 是 V2Ray 生態中的代理協定,不是 V2Ray 軟體的同義詞。請求包括認證與目的資訊,資料可有自身保護;VMess AEAD 的單條連線驗證格式不同於舊版;伺服器是否接受兩種格式依核心版本而定。認證含時間相關條件,時鐘偏差可能令連線失敗;這不是 DNS 或 TCP 可達性的直接結論。
歷史教程的 alterId 及舊驗證選項常與現代 AEAD 模式不同。本教材把它們列為版本閱讀題,不提供無版本的「最佳 alterId 值」。V2Fly 與 Xray 的欄位及支援範圍要各自核對;「同名 VMess」不能取代實際核心版本、驗證方式和設定。
外層可能是 TCP、WebSocket 等,另有 TLS 保護。VMess 自身保護、外層 TLS 和內層 HTTPS 各有端點。外加 TLS 可改變 C↔P 的金鑰協商與可見資訊,但不能因此宣稱所有 VMess 資料原生具 PFS、所有觀察者無法辨識流量,或代理不知道目的地。
18.4 完整安全分析例題
條件:C↔P 只使用 SS2022 PSK,C↔S 另有經驗證的 HTTPS。路徑觀察者看 P 端點與密文/時間;P 知道最後目的位址,卻不能直接解開 C↔S 的 HTTP。若 P 的 PSK 日後洩漏,應分別分析外層舊錄製流量與內層 TLS:外層缺 PFS,不等於內層臨時金鑰 TLS 也同時失去 PFS。
這個例子顯示「雙層加密」只描述層數,不提供對所有威脅的統一答案。加入額外加密也會增加 key 管理、CPU、記錄開銷與相容性要求,是否值得需配合威脅及實測。
實驗、習題與檢核
L14 填版本及 key 表;L11 設計 CPU 和 goodput 受控比較。沒有部署真實 SS/VMess 時,提交概念表,不能稱已測加密安全或協定互通。
- 為何 salt 與 nonce 不等於 PFS?
- 2017 與 2022 有哪些必須分開核對的欄位?
- VMess/SS2022 時鐘錯誤與 TLS 憑證錯誤各在哪一層?
- 代理外層長期祕密洩漏是否必然揭露內層 HTTPS 內容?
檢核:能分開協定版本、cipher、認證、transport 與 TLS。來源:Shadowsocks AEAD、SIP022、V2Fly VMess 設定、VMess AEAD 設計。讀取日期 2026-10-03;未在本教材執行第三方核心。