Sunday, May 21, 2017

协议auth_chain_a是啥

最近SSR弄了一个新协议auth_chain_a,很多人还不知道这个是什么鬼,这里我来简单介绍一下。

介绍分为两部分,给普通用户的介绍,及给开发者的介绍。多数人只要关注第一部分的介绍就好了。

首先,是给普通用户的介绍,因为这个协议和auth_aes128_md5(auth_aes128_sha1被代表了)有点像,我们就直接用这个协议做对比。不同点有:

1 统计客户端数量是实时的。这意味着如果服务端限制为只能1个客户端使用,那么你只要把A客户端关闭,B客户端就可以立即连上,而auth_aes128_md5协议需要等待3分钟。

2 UDP部分也带了长度混淆。避免了经常使用UDP查询DNS时,数据包大小高度集中的问题。但缺点是导致UDP转发效率降低。

3 协议自身就会在数据部分做RC4加密。不同用户不同的连接使用的加密密钥都不一样,所以可以安全地使用none不需要额外的加密。 而在auth_aes128_md5里面,使用单端口多用户时都是使用公共的加密方式,会导致如果有人要刻意捕捉数据,那么是可以用公共的密钥解密的(但之后还依然需要去猜测每个数据包里有效数据的起始位置,因为偏移量是用用户自己的KEY加密的,所以即使不加密很多人用auth_aes128_md5也是用得好好的)。而在auth_chain_a协议里,为什么叫做chain呢,因为后一块数据的处理是依赖它上一块的哈希信息,每块数据里的中间是加密过的有效数据,两边是混淆数据,其长度基于上一块数据的哈希信息的计算。于是尽管使用的加密算法是RC4,但安全性也比RC4本身要高(因为最终会依赖于破解AES-128以及MD5来确定有效数据的位置)。具体见第二部分。

其它优点:这个设计用于预防恶意客户端。例如如果在auth_aes128_md5协议下,如果有人刻意修改客户端实现,让混淆用的随机长度固定为一个常数,这样会导致很容易被统计分析,而部分不明真相的用户使用了修改过的客户端,这给这些用户带来了风险。而在auth_chain_a下,这个长度是协议算法决定的,没法修改。另外一点就是这个协议的实现为低延时设计,使用TCP时往往会得到比其它协议有稍低的延迟,基于TCP的游戏下表现理论上会稍好。但大流量下载时CPU占用可能会比其它协议稍高。

但这个协议的缺点也明显,主要是两点,第一是不能自己改加密方式,不过这点亦可算作优点吧,避免选择困难,乖乖用none就好了。第二是UDP效率问题,不过如果只是查询DNS那肯定没有问题的。要是打游戏或者P2P之类的,有可能会遇到速度瓶颈,遇到的话你就切换为auth_aes128_md5甚至origin玩吧(但要是说速度远远不及其它协议那是不可能的),因为这个协议主要在TCP上花了功夫,UDP的问题还没解决好,而且我也说过这个是实验性的协议。

面向普通用户的介绍就到这里。接下来是面向开发者的介绍,说明文档:
https://github.com/breakwa11/shadowsocks-rss/blob/master/doc/auth_chain_a.md

好了,面向开发者的介绍就说明到这里了(滑稽),有什么疑问就留言吧。

作者 twitter @breakwa11

Saturday, May 6, 2017

那些让人吐血的提问

1. SSR不能用了
(这让我不知道到底说客户端还是服务端,如果是客户端到底是windows/linux/mac/android哪个,如果是android那具体是哪个android版本,是哪个手机型号?是原版还是国内厂商的各种魔改?以及哪个版本客户端,是SSR原版还是其它修改版,版本号是什么?你的Log呢?你的配置呢?就算以上通通不算,那到底不能用是什么个意思?你客户端不小心自己删了所以不能用?还是你不小心删了节点或者关了节点或者你节点本身挂了不能用?还是客户端打开了闪退?还是说连不上?还是说连上了却打不开任何页面?连不上的话又是什么表现,是一直超时还是DNS解析失败还是一发数据就会断开还是指速度特别慢?所以你问问题要是没有把以上内容说清楚我懒得理你,我懒得这样追问你十几个问题去搞清楚你到底遇到了什么)

2. SSR运行不了
(难道和上一个有差别么。我建议你如果你的电脑出了问题,打电话找维修的时候,和他说“我的电脑不能用啦”“请问你的是台式机还是笔记本,是按了电源没反应还是开机进不了系统”“这个我不清楚,反正就是不能用啦,能不能修?”坚持只说不能用,其它信息什么都不要说,那不用几分钟,保证对面的维修人员就想顺着电话线过来揍你。而万一他真上门维修发现你的问题是电源线松了的话,为了弥补他的心灵上的创伤及时间的损失,他会说你的电源线有问题(具体什么问题关你啥事,都跟你学的),反正要更换一条好的,不然使用中可能随时突然没电了,然后推荐一条垃圾线,卖个50大洋。最后用户骂这人是奸商,而维修的骂用户是213)

3. SSR上不了网/SSR连不上
(难道和上一个有差别么,有,是其真子集)

4. SSR速度好慢
(很好,这个让我完全不懂怎么回答了,如果速度慢要非要由SSR背锅的话。你为什么不先想想你加了多少钱?)

5. SSR有后门
(那你直接不用就好了)

6. 360(或其它杀软)说有病毒
(挺好的,不要用就是了)

7. SSR开源了没有
(你猜)

8. 我的SSR被封了,上不了网
(和第3个有区别么?确实有区别,就是多了个自己的猜测。不过很可能他会坚信他的猜测的,而不会去查查是不是他的服务端改过密码或什么东西。这类猜测对患有被迫害妄想症的人有奇效)

9. SSR支持AEAD吗
(SSR正在走向加密方式设置为none的方向,所以你猜呢)

10. SSR在哪里下载
(右转Google,不过现在即使左转百度也能搜索到吧)

11. SSR不是很稳定,网络时快时慢,求改进
(我觉得说这句话的人也需要改进改进)

12. 粉色好难看
(摊手,你把自己变弯不就好了)

13. SSR比SS安全性更高吗
(SSR不关注安全性,而且离开具体配置来比较就是耍流氓)

14. 我用SSR访问Google运营商会不会知道我访问了Google
(我觉得直连更好,反正都知道了的话)

15. 我用SSR运营商会不会知道我的服务器的地址呢
(建议你拉私人海底光缆,这样运营商就不知道你的地址了)

16. 怎么安装SSR
(那你知道WIKI在哪里吗,知道Google吗)

(待,持续+1s)