twitter网友评价Shadowsocks和V2Ray翻墙协议

avatar 2019年1月7日11:40:33twitter网友评价Shadowsocks和V2Ray翻墙协议已关闭评论

文下面评价几个今天的翻墙协议。不过首先声明,今天能用的协议就是好协议;但是今天能用不等于明天能用,因此这仅限于理论讨论。@gfwrev

Shadowsocks首先开启了易用的用户态加密TCP代理的模范。但是很快就出了好几个密码工程的错误,这提醒我们没事不要重新发明密码协议,为何不用TLS呢?V2Ray的一部分也在多少重新发明密码协议。

Shadowsocks目前没有包长度混淆,要检测它并不需要机器学习,手动写一个代码都可以做到。原因是它运载的流量一大部分是TLS,而TLS握手有固定的包长度,SS又再额外添加了一些包头,形成了独特的包长分布,因此运载TLS流量的SS是极易检测的。当然,今天裸奔暂时还没什么问题。

ShadowsocksR在这基础上添加了包长度混淆。一个明显的反驳是,如果包长度的随机分布呈现一个明显的均匀分布,那一个简单的熵就可以检测出来。对此,不如直接从运载流量中提取分布,就没有内生熵特征的问题了。包长度混淆这个技术依然是合理的。
ShadowsocksRR之后试图实现若干“高级”的伪装协议。网络安全界早有结论:鹦鹉已死。模仿协议反而会暴露出更多可以检测的特征。例如SSR里面歪用TLS的技巧,和V2ray里面的http伪装,本身都暴露更大的特征。

在反主动指纹识别上,Shadowsocks也出过错,解决方法是尽量减少用户认证前透露的信息。但根本问题不在于能少透露多少信息,问题在于这几个代理工作在传输层上,但传输层上的常见实现及其特征是很少的。唯一彻底避免主动指纹识别的方法是用一个真的常见应用(例:nginx)作为前端。
TLS的确比自行发明密码协议好一些,但是TLS协议栈的被动指纹特征又非常明显,go有它的指纹特征,openssl等等特征都不同。Tor之前被查封就是因为使用了固定的特征,后来用了Firefox的特征依然被一款防火墙查封,原因是:没人用(该版本)的Firefox。这里唯一的办法是跟进主流浏览器的特征。

SS等等不使用TLS的根源来自性能架构:如果用户每一个TCP连接翻译成往外的一个连接,如果用TLS连接发起时间会很高。这反映出常见代理在架构设计上缺乏大规模生产环境的经验指导。SS/V2ray还在努力实现Fast Open的时候,Chrome已经把Fast Open的代码删除了,因为现实世界这个功能不工作。
高性能TLS的方法是连接池复用,长连接,预连接,多路复用,最终TLS握手的成本被均摊掉了。见Chrome网络栈的经验https://web.archive.org/web/20160305002536/https://insouciant.org/tech/connection-management-in-chromium/

取代TLS/HTTP/2的下一代协议QUIC看目前的进度希望在一两年内能完成标准化。Chrome早就内置了QUIC代理,但现在市面上还没有公开的QUIC代理服务器,Caddy有望,不过它暂时还不工作。至于KCP也号称是UDP上的高性能协议,但它连协议定义都没有,于是无法评价。

 

avatar