技术深度解析

不是更好的握手。
而是完全没有握手。

握手延迟
0 RTT
协议指纹
丢包容忍度
23%
其他协议优化握手
Phantom 消除握手
其他协议隐藏指纹
Phantom 没有指纹可隐藏
其他协议重传丢包
Phantom 即时恢复

代理协议的演进历程

从简单加密到完全隐身。每一代协议都解决了问题,但也带来了新的问题。

2012 Shadowsocks 加密代理 ✓ 简单 ✗ 可检测 2016 VMess 混淆协议 ✓ 功能丰富 ✗ 10万+行代码 2020 Trojan TLS 伪装 ✓ 类似HTTPS ✗ TLS指纹 2023 Hysteria 2 QUIC 高速 ✓ 快速, FEC ✗ QUIC指纹 2024 Phantom 0-RTT + FEC + 隐蔽 ✓ 无握手 ✓ 无指纹 ✓ 丢包恢复
2012

Shadowsocks

加密

简单
可被检测
2016

VMess

混淆

功能丰富
复杂,10万+行代码
2020

Trojan

TLS 伪装

看起来像 HTTPS
TLS 指纹
2023

Hysteria 2

QUIC 加速

快速,有 FEC
QUIC 指纹
2024

Phantom

0-RTT + FEC + 隐身

无握手
无指纹
丢包恢复
杀手级特性

核心技术

四项创新技术,让 Phantom 与所有其他协议从根本上不同。

Phantom 协议流程 客户端 phantom-core + GUI 应用 SOCKS5 :1080 服务端 phantom-server + TLS (可选) UDP :54321 首个数据包 用户ID + 加密数据 ← 直接携带数据! 响应 FEC 编码数据 TSKD 密钥派生 PSK + 时间窗口 → 会话密钥 通过 HKDF-SHA256 无需密钥交换! 时间: T 时间: T 0-RTT ⚡ 加密请求 加密响应 时间同步

TSKD:时间同步密钥派生

客户端和服务端使用共享密钥和当前时间,独立派生出相同的会话密钥。无需密钥交换。

完美前向保密(基于时间)
密钥每 30 秒自动轮换
无密钥交换 = 无暴露
被动观察者只能看到随机数据
时钟偏移容忍
±1 时间窗口容忍网络延迟
TSKD 算法
// 双方共享的预共享密钥 (PSK)
PSK = "base64-encoded-32-bytes"

// 当前时间窗口(30秒间隔)
TimeWindow = floor(UnixTimestamp / 30)

// 使用 HKDF 派生会话密钥
Salt = BigEndian(TimeWindow)
SessionKey = HKDF-SHA256(
    PSK,
    Salt,
    "phantom-session-key"
)

// 派生用户 ID 用于快速过滤
UserID = HKDF-SHA256(
    PSK,
    nil,
    "phantom-user-id"
)[:4]  // 前 4 字节

// 结果:双方拥有相同的密钥
// 无需任何通信!

握手延迟对比 (RTT)

OpenVPN
4 RTT
WireGuard
2 RTT
Trojan
2 RTT
VMess
1 RTT
Hysteria 2
1-2 RTT
Phantom
0 RTT ⚡

真正的 0-RTT:首包即数据

其他协议声称"快速握手"。Phantom 没有握手。第一个数据包就已经承载了你的真实数据。

传统协议:
客户端[握手请求]服务端
客户端[握手响应+密钥]服务端
客户端[数据]服务端
⚠️ 前两个数据包暴露了连接意图
Phantom 协议:
客户端[加密数据]服务端
✓ 完成。无协商。无暴露。

静默丢弃:隐身的艺术

当审查者探测你的服务器时,大多数协议会响应——从而暴露自己。Phantom 的响应是什么都没有

探测 → Trojan ← TLS 警报 (暴露)
探测 → Hysteria ← QUIC 版本协商 (暴露)
探测 → VMess ← 连接重置 (暴露)
探测 → Phantom ← [无响应] ✓ 隐身
静默丢弃实现
func HandlePacket(data []byte) {
    // 第 1 步:检查用户 ID(前 4 字节)
    userID := data[:4]
    if !ValidateUserID(userID) {
        return  // 静默丢弃。无响应。
    }

    // 第 2 步:验证时间戳
    timestamp := data[4:6]
    if !ValidateTimestamp(timestamp) {
        return  // 静默丢弃。无响应。
    }

    // 第 3 步:尝试解密
    plaintext, err := Decrypt(data)
    if err != nil {
        return  // 静默丢弃。无响应。
    }

    // 第 4 步:检查重放
    if IsReplay(data) {
        return  // 静默丢弃。无响应。
    }

    // 只有有效数据包才能到达这里
    ProcessValidPacket(plaintext)
}
Reed-Solomon FEC (10+3 配置) ① 发送: 10 个数据分片 + 3 个校验分片 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 P1 P2 P3 数据分片 校验 丢失 23%! ② 接收: 3 个数据包丢失 (23% 丢包率) D1 D3 D4 D6 D7 D8 D9 D10 P1 P3 恢复! ③ 恢复: 100% 数据还原 ✓ D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 无需重传! 即时恢复

Reed-Solomon FEC:无需重传

传统 TCP 等待超时,然后重传。Phantom 使用前向纠错从冗余数据中即时恢复丢失的数据包。

23%
最大可恢复丢包率
30%
带宽开销
对比说明
TCP:丢包 → 等待 200ms+ → 重传 → 再次等待
Phantom FEC:丢包 → 从校验数据恢复 → 立即继续

全维度对比分析

Phantom 与所有主流代理协议在各项关键指标上的表现对比。

能力雷达图

Phantom 在隐蔽性和简洁性方面表现卓越,同时保持了具有竞争力的性能。

Phantom
Hysteria 2
Trojan
VMess
特性 Phantom Hysteria 2 Trojan VMess Shadowsocks
握手延迟 0 RTT ⚡ 1-2 RTT 2 RTT 1 RTT 1 RTT
协议指纹 QUIC TLS 自定义 可检测
主动探测抗性
丢包恢复 FEC (23%) FEC + BBR TCP 重传 TCP 重传 TCP 重传
代码规模 ~9K 行 ~15K 行 ~5K 行 ~100K+ 行 ~3K 行
加密算法 ChaCha20-Poly1305 TLS 1.3 TLS 1.3 AES-128-GCM ChaCha20-Poly1305
密钥交换 PSK + TSKD ECDHE ECDHE 自定义 HKDF
传输层 UDP/TCP+TLS QUIC TCP+TLS TCP/WebSocket TCP
需要证书 可选
10x
比 V2Ray 更小

最小攻击面,完全可审计

0ms
握手开销

首包即承载真实数据

100%
探测抗性

对无效数据包无任何响应

Phantom 对比竞争协议

深入技术分析,揭示 Phantom 在其他协议失败之处为何能够成功。

Phantom vs Hysteria 2

最常被问及

Hysteria 2 的优势

Brutal 拥塞控制
在恶劣网络环境下激进利用带宽
QUIC 标准
经 Google 大规模验证的成熟协议
原生多路复用
单连接承载多个数据流

但问题在于

QUIC 指纹
GFW 正在积极学习识别 QUIC 流量特征
初始包暴露
QUIC 握手过程可见且可识别
代码库庞大
完整的 QUIC 协议栈审计难度大

Phantom 的解决方案

无协议指纹
数据包与随机噪声无法区分
无初始包
没有握手过程,就没有暴露
约 9K 行代码
一天内可完成完整审计
FEC 替代 Brutal
通过冗余恢复数据包,而非激进抢占带宽
寿命预测
Hysteria 2:GFW 正在研究 QUIC 指纹。1-2 年?
Phantom:无固定特征。需要 ML/AI 才能检测。

Phantom vs Trojan

Trojan 的设计理念
"伪装成 HTTPS"

模仿合法的 TLS 流量,混入正常的网页流量中。

Phantom 的设计理念
"不伪装成任何东西"

不模仿任何协议。与随机噪声无法区分。

对比维度 Trojan Phantom
TLS 握手 必需(暴露)
有效证书 必需 可选(TCP 模式)
端口限制 443(模仿 HTTPS) 任意端口
JA3 指纹 可检测 无 TLS = 无 JA3
需要 SNI
丢包处理 TCP 重传 FEC 恢复

Phantom vs Shadowsocks 精神继承者

Shadowsocks 开创了 PSK 方案。Phantom 继承其设计理念的同时,解决了其固有的弱点。

共同的 DNA

预共享密钥(PSK)认证
ChaCha20-Poly1305 加密
简洁作为设计目标

Phantom 的进化

固定头部 → 无固定结构
明文盐值 → 时间隐式同步(TSKD)
无 FEC → Reed-Solomon FEC
大重放窗口 → 时间窗口 + 布隆过滤器

Phantom vs WireGuard 不同品类

WireGuard = VPN 协议
  • • 全隧道(所有流量)
  • • 内核级实现
  • • 非为抗审查设计
  • • 固定端口模式 → 易被封锁
  • • 握手数据包可被识别
在中国的状态:大部分被封锁
Phantom = 隐身代理
  • • 应用层代理
  • • 用户态实现
  • • 为抗审查而生
  • • 无固定特征
  • • 无可识别的握手
状态:专为规避检测而设计

技术深度解析

为想要深入了解 Phantom 底层工作原理的读者准备。

数据包结构对比

Phantom 数据包结构 明文 (6 字节) 用户ID 4 字节 时间戳 2 字节 ChaCha20-Poly1305 加密 随机数 12 字节 类型 1B 会话 4B 序号 4B 确认 4B 载荷 可变 认证标签 16B ❌ VMess (可检测特征) AuthID 16B 长度 CmdKey 16B 载荷 MAC ← 固定16字节前缀! ✓ Phantom (随机字节) 7a 3f 91 c2 8b 44 e7 1d f3 9a 2c b8 5e 71 a9 03 ... ← 与随机噪声无法区分

抗重放机制

第 1 层
时间窗口

会话密钥每 30 秒更换一次。旧数据包将无法解密。

第 2 层
随机 Nonce

每个数据包使用 12 字节随机 Nonce。碰撞概率:2^-96。

第 3 层
布隆过滤器

服务端记录已见 Nonce。O(1) 时间复杂度检测重复。

攻击者重放 T=100 时刻的数据包
→ 当前时间 T=150(50 秒后)
→ 时间窗口已变:100/30=3 → 150/30=5
→ 会话密钥不同
解密失败。数据包被静默丢弃。

GFW 检测方法 vs Phantom

GFW 检测方法 vs Phantom 检测方法 对其他协议的影响 对 Phantom 的影响 协议指纹识别 SS/VMess 被封锁 - 固定字节特征 无特征 - 仅随机字节 主动探测 响应差异暴露协议类型 静默丢弃 - 完全无响应 TLS 指纹识别 (JA3) Trojan/VLESS 可通过 TLS 特征检测 UDP 模式无 TLS QUIC 检测 Hysteria 2 可通过 QUIC 头部识别 非 QUIC 协议 时序分析 握手模式暴露连接特征 无握手可分析 机器学习 有训练数据可供分类 理论上可行 (成本极高)
诚实的评估

没有任何协议是 100% 不可检测的。先进的 ML/AI 理论上可以对任何流量进行分类。Phantom 的目标是最大化检测成本,最小化检测可靠性。

2 分钟快速开始

一条命令部署服务端。零配置客户端。

1

部署服务端

bash
curl -fsSL https://get.phantom.dev | bash -s -- \
    --domain vpn.example.com \
    --cf-token "YOUR_CLOUDFLARE_TOKEN" \
    --cf-zone-id "YOUR_ZONE_ID"
自动配置:DNS • SSL 证书 • Systemd 服务 • 防火墙 • 分享链接
2

导入到客户端

复制服务端输出的分享链接:

phantom://eyJhZGRyZXNzIjoiMjAzLjAuMTEzLjUwIiwicG9ydCI6NDQzLCJwc2siOiJLN3hNOXBRMi4uLiJ9#MyServer

粘贴到 Phantom GUI → 选择服务器 → 连接。完成!

下载 Phantom

免费。开源。MIT 许可证。

Windows

Windows 10/11

下载 x64 ARM64

Linux

AppImage

下载 x64 ARM64
服务端二进制文件(手动安装)
最新版本:v1.0.0查看所有版本 →

技术常见问题

Phantom 允许 ±1 个时间窗口的容忍度(±30 秒)。服务端会尝试使用前一个、当前和下一个时间窗口进行解密。对于大多数启用了 NTP 的系统,这已经足够了。如果你的系统时钟严重偏差,需要先修复 NTP 同步。
如果 PSK 被泄露,在服务端使用 phantom-server regenerate-psk 重新生成,并将新的分享链接分发给用户。由于基于时间的密钥派生,过去的会话无法被追溯解密,但在更换 PSK 之前,未来的会话将面临风险。
QUIC 具有可识别的指纹(Initial 数据包、版本协商)。Phantom 优先考虑不可检测性而非原始吞吐量。我们的 FEC 方案在没有 QUIC 检测面的情况下实现了类似的丢包恢复能力。对于大多数用户来说,性能差异可以忽略不计。
默认的 10+3 配置下,FEC 增加 30% 的开销(每 10 个数据分片对应 3 个校验分片)。这是用带宽换取最高 23% 丢包率的即时恢复能力。你可以在配置中调整 fec_data_shardsfec_parity_shards 来调整这个比例,或者在带宽受限的场景下完全禁用 FEC。
UDP 模式(默认):更低延迟,受益于 FEC,适合大多数用户。
TCP 模式:当 UDP 被封锁或被严重限速时使用。流量会被包装在 TLS 中,看起来像 HTTPS。延迟更高,但通用性更强。
Phantom 是 100% 开源的,采用 MIT 许可证。约 9K 行的代码库设计为一天内即可完成完整审计。我们欢迎安全审查,并设有漏洞赏金计划。目前还没有正式的第三方审计,但小巧的攻击面使得社区审查变得切实可行。
已复制!