---
title: プロキシプロトコルの比較
url: https://doc.liz6.com/ja/networking/07-proxy-protocol/03-proxy-protocol-comparison
locale: ja
area: networking
tags:
- networking
- proxy-protocol
date: 2026-06-30
modified: 2026-07-16
description: プロキシプロトコルの進化は、検閲と検閲回避の軍拡競争を反映している——ShadowsocksのAEAD暗号化がDPI（ディープ・パケット・インスペクション）で検出された後、TrojanはHTTPSを装い、VLESS+REALITYは実在するウェブサイトを装い、Hysteria2はQUIC上でTLSフィンガープリントを排除した。世代ごとに、プロキシトラフィックを通常のトラフィックと見分けにくくしている。
---

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

> プロキシプロトコルの進化は、検閲と検閲回避の軍拡競争を反映している——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 CONNECT | TCP | なし | なし | なし | 極めて低い |
| SOCKS5 | TCP/UDP | なし | なし | なし | 極めて低い |
| Shadowsocks | TCP/UDP | AEAD (AES/ChaCha) | 任意の obfs | mux (smux) | 低い (AEAD は識別可能) |
| VMess | TCP | AEAD | 任意の obfs | mux | 中程度 |
| Trojan | TCP+TLS | TLS | HTTPS を装う (CDN フォールバック) | mux | 中高 (TLS ハンドシェイクで探査可能) |
| VLESS+REALITY | TCP+TLS | TLS+XTLS Vision | 実在するウェブサイトを装う (microsoft.com) | mux (XUDP) | 高い (能動探査では無効) |
| Hysteria2 | UDP (QUIC) | QUIC+TLS 1.3 | salamander 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）へのアクセスとして偽装する：

<svg viewBox="0 0 720 360" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,'Source Han Sans CN','Microsoft YaHei',sans-serif" role="img" aria-label="REALITY 偽装ハンドシェイクフロー: microsoft.com の実在する証明書を利用して能動探査を無効化する">
  <defs><marker id="rah1" markerWidth="10" markerHeight="8" refX="8" refY="3" orient="auto"><path d="M0,0 L8,3 L0,6 Z" fill="#475569"/></marker></defs>
  <rect width="720" height="360" fill="#ffffff"/>
  <text x="360" y="28" text-anchor="middle" font-size="17" font-weight="700" fill="#1f2933">REALITY 偽装ハンドシェイク: microsoft.com の実在する証明書を利用</text>

  <rect x="210" y="46" width="300" height="40" rx="8" fill="#4f46e5"/>
  <text x="360" y="70" text-anchor="middle" font-size="12" font-weight="700" fill="#ffffff">REALITY サーバー: 独自の SNI と証明書を使用しない</text>
  <line x1="360" y1="86" x2="360" y2="102" stroke="#475569" stroke-width="1.6" marker-end="url(#rah1)"/>

  <rect x="160" y="104" width="400" height="50" rx="8" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="360" y="124" text-anchor="middle" font-size="12" font-weight="700" fill="#3730a3">クライアントが REALITY サーバーへ TLS ClientHello を送信</text>
  <text x="360" y="142" text-anchor="middle" font-size="11" fill="#4f46e5">SNI = "www.microsoft.com"</text>
  <line x1="360" y1="154" x2="360" y2="170" stroke="#475569" stroke-width="1.6" marker-end="url(#rah1)"/>

  <rect x="106" y="172" width="250" height="56" rx="8" fill="#ffedd5"/>
  <text x="231" y="192" text-anchor="middle" font-size="12" font-weight="700" fill="#9a3412">microsoft.com の証明書を盗む</text>
  <text x="231" y="209" text-anchor="middle" font-size="11" fill="#c2410c">および ServerHello?(リアルタイム転送?)</text>
  <line x1="356" y1="200" x2="386" y2="200" stroke="#475569" stroke-width="1.6" marker-end="url(#rah1)"/>
  <rect x="390" y="172" width="250" height="56" rx="8" fill="#f0fdfa" stroke="#99f6e4"/>
  <text x="515" y="192" text-anchor="middle" font-size="12" font-weight="700" fill="#115e59">いいえ! REALITY サーバーは</text>
  <text x="515" y="209" text-anchor="middle" font-size="11" fill="#0f766e">microsoft.com の真正な証明書（能動登録取得）を保持</text>

  <line x1="515" y1="228" x2="515" y2="242" stroke="#475569" stroke-width="1.6"/>
  <line x1="515" y1="242" x2="360" y2="242" stroke="#475569" stroke-width="1.6"/>
  <line x1="360" y1="242" x2="360" y2="256" stroke="#475569" stroke-width="1.6" marker-end="url(#rah1)"/>

  <rect x="140" y="258" width="440" height="50" rx="8" fill="#ccfbf1"/>
  <text x="360" y="278" text-anchor="middle" font-size="12" font-weight="700" fill="#115e59">GFW の能動探査: REALITY の IP に接続</text>
  <text x="360" y="296" text-anchor="middle" font-size="11" fill="#0f766e">microsoft.com の標準的な TLS 応答を確認</text>
  <line x1="360" y1="308" x2="360" y2="322" stroke="#475569" stroke-width="1.6" marker-end="url(#rah1)"/>

  <rect x="90" y="324" width="540" height="30" rx="7" fill="#dcfce7"/>
  <text x="360" y="344" text-anchor="middle" font-size="12" font-weight="600" fill="#166534">microsoft.com への直接接続と区別できない → 能動探査は無効</text>
</svg>

### 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 フィンガープリント*
