7 分で読了 #networking #代理契約
このページの目次

プロキシプロトコルの比較

プロキシプロトコルの進化は、検閲と検閲回避の軍拡競争を反映している——ShadowsocksのAEAD暗号化がDPI(ディープ・パケット・インスペクション)で検出された後、TrojanはHTTPSを装い、VLESS+REALITYは実在するウェブサイトを装い、Hysteria2はQUIC上でTLSフィンガープリントを排除した。世代ごとに、プロキシトラフィックを通常のトラフィックと見分けにくくしている。

概要

プロキシプロトコルの進化は、検閲と検閲回避の軍拡競争を反映している。Shadowsocks(2012)はAEAD暗号化で検閲を回避したが、後にDPIで識別された。Trojan(2019)は標準的なHTTPSを装い、見分けが難しい。VLESS+REALITY(2023)は実在するウェブサイト(microsoft.com)を装い、能動探査では無効化される。Hysteria2(2024)はQUIC上でTLSフィンガープリントを排除し、現在最も検出が困難である。

プロトコルスタックの概要

伝送暗号化偽装マルチプレクス検閲回避
HTTP CONNECTTCPなしなしなし極めて低い
SOCKS5TCP/UDPなしなしなし極めて低い
ShadowsocksTCP/UDPAEAD (AES/ChaCha)任意の obfsmux (smux)低い (AEAD は識別可能)
VMessTCPAEAD任意の obfsmux中程度
TrojanTCP+TLSTLSHTTPS を装う (CDN フォールバック)mux中高 (TLS ハンドシェイクで探査可能)
VLESS+REALITYTCP+TLSTLS+XTLS Vision実在するウェブサイトを装う (microsoft.com)mux (XUDP)高い (能動探査では無効)
Hysteria2UDP (QUIC)QUIC+TLS 1.3salamander obfs (フィンガープリント対策)QUIC ネイティブ極めて高い (TLS フィンガープリントなし)

各プロトコルの設計ポイント

Shadowsocks → AEAD フィンガープリントの問題

Shadowsocks の AEAD 暗号 (AES-128-GCM) は、ハンドシェイク段階で生成される暗号文に固定パターン (salt + encrypted payload) を持つ。GFW は能動探査(Shadowsocks ハンドシェイクを送信し、特定のサイズの応答を期待する)によって識別できる。2020年以降、大量の Shadowsocks サーバーがブロックされた。

VMess → カスタムプロトコル

標準的な TLS ではなく、独自のカスタム暗号プロトコルを使用する。GFW は DPI によって VMess のトラフィック特徴(TLS ではない暗号化データストリーム)を識別する。WebSocket + CDN 中継を組み合わせることで、難読化が可能である。

Trojan → TLS 偽装

Trojan は HTTPS を模倣する:ハンドシェイク段階は標準的な TLS であり(SNI は正常なウェブサイトを指す)、GFW は「通常の HTTPS 接続」として認識する。しかし、能動探査(GFW が ClientHello を送信 → Trojan サーバーが異常な Certificate を返す)によって識別される可能性がある。

VLESS+REALITY → 完全な偽装

VLESS は UUID 検証を削除し、TLS+XTLS Vision によって暗号化とフロー制御を提供する。REALITY は TLS ハンドシェイクを実在するウェブサイト⁠(例:www.microsoft.com)へのアクセスとして偽装する:

REALITY 偽装ハンドシェイク: microsoft.com の実在する証明書を利用 REALITY サーバー: 独自の SNI と証明書を使用しない クライアントが REALITY サーバーへ TLS ClientHello を送信 SNI = "www.microsoft.com" microsoft.com の証明書を盗む および ServerHello?(リアルタイム転送?) いいえ! REALITY サーバーは microsoft.com の真正な証明書(能動登録取得)を保持 GFW の能動探査: REALITY の IP に接続 microsoft.com の標準的な TLS 応答を確認 microsoft.com への直接接続と区別できない → 能動探査は無効

Hysteria2 → フィンガープリントのない QUIC

QUIC 自体には識別可能な TLS フィンガープリントがない(TCP+TLS の固定バイトパターンとは異なる)。Hysteria2 は salamander obfs を追加し、QUIC パケットのヘッダーを難読化することで、QUIC 標準に一致しなくなり、QUIC detector による識別を不可能にする。

参考

  • REALITY: github.com/XTLS/REALITY
  • Hysteria2: v2.hysteria.network/docs
  • mihomo: wiki.metacubex.one/config/proxies

キーワード: Shadowsocks, VMess, Trojan, VLESS, REALITY, Hysteria2, AEAD, obfs, salamander, QUIC フィンガープリント