Brook, Shadowsocks, V2ray 协议层面的区别

29 May, 2020

本次分享的目的让大家从本质上了解这三个软件的区别

cloud@txthinking.com
https://github.com/txthinking
https://www.txthinking.com

基础知识: TCP/UDP, 数据, 协议

  • 目前这三款软件, 本质上都是基于[TCP 或 UDP]来传输[数据]
  • 为了方便介绍, 可以理解[TCP 或 UDP]为一个水管, 掌管这个水管的人自然可以看到你传输的[数据]
  • 如果对[数据]进行设计一下, 比如 1 代表什么, 2 代表什么, 就是所谓的[协议]
  • 如果对[数据]加密后再传输, 即使掌管者可以看到[数据], 也是看到的加密后的[数据]

举例子: 用于网站的 HTTP 协议

当你要向 HTTP Server 发起请求时, 大概的传输的内容是这样的:

GET / HTTP/1.1
Host: ...
...

掌管者看到你传输的数据, 便知道你正在访问一个网站

举例子: 查询域名 IP 的 DNS 协议

当你要向 DNS Server 发起请求时, 大概的传输内容的 16 进制是这样的:

0001010000010000000000000a74787468696e6b696e6703636f6d0000010001

掌管者看到你传输的数据, 便知道你正在查询一个域名的 IP. 因为这块数据每段都有其特定含义

什么叫有特征和无特征

  • 有特征: 通过分析传输的数据, 能够发现数据是什么协议, 比如 HTTP,DNS,OpenVPN 等
  • 无特征: 通过分析传输的数据, 无法发现数据是什么协议, 数据没有特定含义, 没有规律可循

没有万能, 因为水管掌管者不是你

  • 有特征, 并不一定被封, 比如掌管者通过特征发现你的协议, 但是允许你的协议通过, 也可能特征太假而被封
  • 无特征, 并不一定不被封, 尽管互联网上跑着很多自定义协议的应用, 但也有可能掌管者心情不好, 不让我知道你的协议, 我就封你

伪装, 混淆

  • 任何伪装, 混淆都是有特征的, 比如伪装 HTTP 协议, 你再怎么伪装毕竟都会和正常网站有一定区别
  • 如果伪装和混淆实现的很烂, 只会更精准的被封, 这里就不展开了

分析 Brook, Shadowsocks, V2ray 协议

  • 这里不讨论具体实现细节, 比如密钥的 Hash, IV 等
  • 这里不讨论混淆, 伪装
  • 这里仅站在水管的视角来分析

Shadowsocks 协议

预设一个密钥, 然后用此密钥结合加密算法对数据进行加密,

Shadowsocks 有很多加密算法, 这里选择一个加密算法, 称其为 X,
传输的数据大概如下:

| IV | [X算法加密]加密数据 |
或
| [X算法加密]数据包长度 | [X算法加密]数据包 |  ...

部分加密算法已经可以被概率性检测, 参见下面这个库:
https://github.com/madeye/sssniff

V2ray 协议

预设一个 UUID, 也可以理解为密钥, 然后用此密钥结合加密算法对数据进行加密,
传输的数据大概如下:

| [Hash]认证信息 | [AES-128-CFB算法加密]指令部分 | [XOR加密]数据包长度 | [X算法加密]数据包 |  ...

数据包的加密算法 X 可以是: AES-128-CFB, AES-128-GCM, ChaCha20-Poly1305

Brook 协议

预设一个密钥, 然后用此密钥结合 AES-256-GCM 加密算法对数据进行加密,
传输的数据大概如下:

| [AES-256-GCM算法加密]数据包长度 | [AES-256-GCM算法加密]数据包 |  ...

Brook 的加密算法固定为目前主流相对较强的 AES-256-GCM

比较

  • Shadowsocks 有多种加密算法, 加密后的数据设计也很简单
  • V2ray 支持三种加密算法, 且对协议多做了一些设计
  • Brook 固定使用目前主流相对较强的 AES-256-GCM 加密算法, 相对纯粹, 加密后的数据设计也很简单

无特征的本质:

  • 传输的数据特定含义尽量少
  • 加密后的数据足够随机

总结

  1. 我们介绍了[TCP/UDP], [数据], [协议]的概念
  2. 举例了 HTTP 协议和 DNS 协议
  3. 介绍了什么是有特征以及无特征
  4. 简单介绍了 Brook, Shadowsocks, V2ray 协议的区别
  5. 介绍了满足无特征的本质

这里只简单介绍了三款软件的主流协议对数据的处理, 并未展开其他功能, Brook 的其他功能会在后期逐一介绍

(提示: Youtube 频道有此幻灯片更详细的视频介绍)

相关资源