V2Ray 的认证和加密方式简介

804 views
Skip to first unread message

Gary12

unread,
Oct 1, 2015, 9:05:16 AM10/1/15
to 翻墙论坛

V2Ray 默认使用自有的 VMess 协议。目前协议已趋于稳定,1.0 版本发布前,如没有重大缺陷,将不会再改。

VMess 协议包含两种数据格式,分别针对 TCP 和 UDP 的数据特点而设计。其中 TCP 的数据包在请求数据中加入了约 80 字节的头部,响应数据加入了 4 字节的头部;而 UDP 数据包则统一加入了约 40 字节的头部。TCP 的非对称设计主要是因为多数 TCP 数据包是 HTTP 通讯,而 HTTP 通讯的请求数据大小通常远小于响应数据,于是在请求数据中多加入一些额外的信息,不会对性能产生太大的影响。

认证方式

VMess 强制要求用户 ID 为一个 16 字节长的随机值,可由机器随机生成。在 VMess 的 TCP 请求数据包和 UDP 数据包中,起始的 16 字节均为认证信息。这个认证信息基于(用户 ID + 时间)生成,每一个认证信息在 1 分钟内有效(时间可以调节),类似当下流行的两步验证的验证码。在实际应用中,V2Ray 会在当前时间的前后 30 秒内随机选择一个时间点,用于生成认证信息,这样使得每一个数据包的头部都不相同。

这样做的好处是:

  • 一定程度上抵御流量重放攻击,攻击者必须不间断地截获有效的认证信息;
  • 高效的身份验证,服务器端不需要解密数据即可判断用户的有效性,可以抵御更高流量的 DoS 攻击;

坏处是:

  • 要求客户端和服务器的时间同步(误差在一分钟内),尽管有很多原因能导致机器时间不准,但我不认为这将会是一个严重的问题;

加密方式

VMess 主要使用两种加密/散列方式:AES-128-CFB 和 HMAC(MD5),在这两种方式被证明有缺陷之前,将不会引入更加复杂的加密方式。对于移动设备/路由器等计算资源薄弱的设备,将来会考虑引入轻量级的加密方式(如 chacha20)。目前高端的 CPU (Intel i5/i7,ARMv8-A 等)都已支持 AES-NI,轻量级加密方式的必要性还有待研究。

TCP 和 UDP 数据的认证信息使用 HMAC(MD5) 散列,不可被逆转。

TCP 请求的指令部分使用固定的 Key 和随机 IV 加密,数据部分使用随机 Key 和随机 IV 加密,TCP 响应也使用随机 Key 和随机 IV 加密;UDP 数据均采用固定的 Key 和随机 IV 加密。

具体的实现细节请参考 VMess 协议

数据包特征

基于散列和 IV 带来的随机性,VMess 数据包的内容可以被认为是完全随机的。至于数据包的长度,V2Ray 会把 VMess 的头部和客户端发来的首个数据包合并为一个数据包,以减小数据包的可识别性,实际效果还在研究中



Sufeng Cao

unread,
Oct 1, 2015, 6:11:22 PM10/1/15
to 翻墙论坛
关键是这个东西不支持win32位系统,gary能够弄个x86-32位系统的不?

在 2015年10月1日星期四 UTC+8下午9:05:16,Gary12写道:

2333

unread,
Oct 1, 2015, 8:49:32 PM10/1/15
to 翻墙论坛
小白路过

Gary12

unread,
Oct 1, 2015, 11:37:17 PM10/1/15
to 翻墙论坛

https://github.com/v2ray/v2ray-core/releases/download/v0.6.1/v2ray-windows-32.zip

在 2015年10月2日星期五 UTC+8上午6:11:22,Sufeng Cao写道:

Sufeng Cao

unread,
Oct 2, 2015, 5:50:58 AM10/2/15
to 翻墙论坛

多谢gary。

在 2015年10月2日星期五 UTC+8上午11:37:17,Gary12写道:

Sufeng Cao

unread,
Oct 2, 2015, 6:06:40 PM10/2/15
to 翻墙论坛
gary你好,为什么这个win32位的程序俺还是不能启动捏?点击程序只是一闪就没有了,进程里面也没有v2ray进程,难道还需要安装别的东西v2ray才能运行吗?


在 2015年10月2日星期五 UTC+8上午11:37:17,Gary12写道:

FQeveryday

unread,
Oct 2, 2015, 8:00:50 PM10/2/15
to 翻墙论坛
去问作者
https://github.com/v2ray/v2ray-core/issues

在 2015年10月3日星期六 UTC+8上午6:06:40,Sufeng Cao写道:

Gary12

unread,
Oct 2, 2015, 8:47:52 PM10/2/15
to 翻墙论坛



在 2015年10月3日星期六 UTC+8上午6:06:40,Sufeng Cao写道:
gary你好,为什么这个win32位的程序俺还是不能启动捏?点击程序只是一闪就没有了,进程里面也没有v2ray进程,难道还需要安装别的东西v2ray才能运行吗?
Reply all
Reply to author
Forward
0 new messages