Trojan

亮点

  • 以真实的 TLS 握手开始;后续所有字节都是 TLS 应用数据。
  • 认证方式是对预共享密码进行 SHA-224 哈希并做十六进制编码。
  • 请求帧复用 SOCKS5 风格的地址字段,用于 CONNECT 和 UDP ASSOCIATE。
  • 无效或未知流量可以转发到回落端点,使其看起来像正常的 HTTPS。

流程

  1. 客户端与服务器完成标准 TLS 握手(SNI/ALPN 按配置)。
  2. 客户端发送 hex(SHA224(password)) + CRLF + Trojan Request + CRLF(+ 可选负载)。
  3. 服务器校验密码与请求,然后连接到目标。
  4. 对 TCP,数据双向转发;对 UDP,数据包会被封装并通过 TLS 流隧道传输。

报文格式

  • 精确的帧格式与字段定义见 报文格式
  • 首个 TLS 记录可在请求之后携带负载,以减少数据包数量。

流量处理

优势

  • 使用标准 TLS 栈和证书,继承成熟的 TLS 安全性与 ALPN 支持。
  • 当由合法的 HTTPS 端点提供服务时,难以进行指纹识别。
  • 握手完成后,协议开销很小。

限制

  • 共享密码模式意味着撤销粒度较粗,除非使用按用户分配的密码。
  • 需要有效的 TLS 证书并进行运维续期。
  • 必须配置回落行为,使探测与真实 HTTPS 无法区分。

参考资料

  • https://trojan-gfw.github.io/trojan/protocol