转载互联网,作者不详,有删改。
我一直是大名鼎鼎的TOR(TheOnionRouter,洋葱路由)的用户之一,也写了一堆关于TOR的科普,但一直都没有具体的分析过TOR的原理,只是一直在说只有TOR和I2P才是真正的匿名软件。鉴于I2P的用户体验实在是很糟糕(那速度简直不是人能忍受的),TOR可以说是安全发言的唯一选择了。
我知道,很多翻墙者都只注重一个速度,其他几乎不考虑。我也可以理解,像youtube上的高清视频这种流媒体对于网络带宽的要求是很高的,而TOR根本就满足不了这种要求(这是由TOR的原理所决定的)。但除此之外,TOR完全能够满足诸位的日常需要。对于前置代理+TOR的情况,速度主要由前置代理决定,前置代理本身连接速度不慢的话,TOR速度也不会慢!
如果你上网干了坏事,只有TOR可以保护你,否则你会死得很难看。哇咔咔。
关于高清视频,也有解决方案:要么装上两个浏览器,一个走TOR环路,一个随便找个速度快的一重代理,发言时用走TOR环路的浏览器,看视频时用另一个浏览器,说实在的这一点也不麻烦啊;要么借助privoxy的帮助,对于不同网站设置不同代理。我想这下应该没有理由拒绝TOR了!在分析TOR原理之前,先搞清楚一个概念:匿名。
究竟怎样才叫匿名呢?
有人说,我注册账号时取了假名字,其他人不知道这个账号是我的,我也没有透露任何能关联到我的真实身份的信息,我是匿名的。
错!这可不叫匿名,这叫做假名,对于假名用户,技术上很容易就能进行追踪。不过假名其实是匿名的基础,假名是匿名的社会工程学部分,还有技术部分呢!
有人说,我挂着代理,隐藏了自己的真实IP,这就是匿名。
错!绝大部分翻墙者都是挂着一重代理,有一些甚至只是改了hosts,完全没有匿名性。一重代理只能说是一定程度上提升了匿名性而已。
那么怎样才叫技术上的匿名呢?
先构建一个模型(大部分翻墙者都符合这个模型):来到这里要从本地PC开始,经过交换机(平时很多人说的"家庭路由器"真正的名字叫交换机,真正的路由器不是个人能买得起的,网关(如果是局域网),N个路由器,GFW,代理服务器,然后又是N个路由器,最终到达google服务器。如果是改hosts来的,那么就没有代理服务器这一步了。
这其中只要数据是被强加密的,那些交换机路由器网关以及GFW就都不是问题。当然,在代理服务器之前的交换机网关路由器以及GFW是知道你的真实IP的(交换机还知道你的真实MAC地址呢),但在强加密的情况下,他们不知道你干了些什么("不知道你具体干了什么"不等于"不知道你在翻墙",ISP和GFW想要知道你在翻墙不是一件难事);
代理服务器负责处理数据包,对于诸位而言,他是服务器;对于google服务器而言,他是客户端。又当服务器又当客户端,这就是代理服务器的特别之处。代理服务器之后的路由器以及最终的google服务器看到的都是代理服务器的IP了,用户的真实IP就被隐藏起来了,所以说"有一定的匿名性。"但问题在于代理服务器知道你的真实IP和你干了些什么(HTTP),所以一旦代理服务器出事,后果不堪设想,而一个合格的匿名系统绝对不能完全依赖于某一环节的安全性,不然这一环节出问题就意味着匿名的失效,没有人敢用这么脆弱的系统保护自己的!而且说实在的流量分析也不是什么新的领域,还有随着云计算的发展而越来越有效的数据挖掘(关联分析),一重代理完全无法应对这两者(事实上单纯的TOR也无法应对数据挖掘,所 以才有了TORbrowser,而且仅仅使用TOR是无法规避很多风险的,这点TOR官网上也有说明。
说到这里,有人又会这么想了:一重代理做不到匿名,那么自己想办法组合二重代理甚至更多重代理不是可以解决问题了吗?要知道TOR不就是个三重代理吗?喂喂,事情没有这么简单好吧?首先,自己想办法组合的多重代理未必真的是多重代理:这话听起来很奇怪,但是请想象一下,假设代理服务器P1和P2组合成了代理链条,然后P1知道了你的真实IP和你干了什么(HTTP)或者你去了哪里(HTTPS),P2也有可能知道你的真实IP的(这取决于代理服务器的设置,有些代理服务器在和其他代理服务器通信时是不会装成客户端的),那么实际上不是还是一重代理吗?
其次,就算P2不知道你的真实IP,它还是会知道你干了什么的,假设有个攻击者控制了P2,那么他就会进行逆向追踪以找出你的真实身份,然后就不用我说了:脆弱的P1保护不了你的!如果是P1被黑了那么情况就更糟糕了!
那么我们就应该可以想到一些关键点了:
首先,对于一个匿名系统,它的各个环节除了必要的信息之外,其他什么都不该知道,这样当某一环节被攻破时,用户匿名失效的可能性最小;
其次,应该让用户通信时跨越适当数量的跳板(hop,或者叫中继节点),而且最好是不同国家的hop,这样流量分析就难以进行,逆向追踪的难度也大大增加了,这些hop也只是知道他们正常工作必须知道的信息而已,除此之外什么也不知道!例如有三个hop:h1,h2,h3.用户首先连到h1,然后h1连接到h2,h2连接到h3,h3最终连接到目标网站服务器上。在这一过程中,h1知道用户的真实IP,h2知道它从h1接收用户数据以及要把数据送到h3,h3知道用户想干什么(HTTP)或者用户要去哪里(HTTPS),除此之外这些hop不应该知道其他任何有关用户的信息,这样的话即使三个hop中有一个是攻击者的蜜罐,用户身份也不会暴露(不过如果三个hop都是蜜罐,用户的身份还是会暴露的,但当三个hop分别位于三个不同的国家时,这种可能性很小)还有就是"藏叶于林"了,如果前面提到的三个hop是某人专用的,那么一旦某个hop被攻破(尤其是h1或h3),那么那人被逆向追踪的可能性非常大;但如果有很多人同时使用那三个hop,那么老大哥想要找出其中某个具体用户就很困难了。同样道理,每次连接建立时都应该随机选择hop,这样老大哥都不知道该如何进行有效的监视(TOR的策略是每10分钟就重新随机选择三个hop「9」,每次启动TOR时也是随机选择hop的)
最后就是中间人攻击的问题了。为了防止老大哥进行中间人攻击破坏用户匿名,TOR有着自己的一套基于数字证书的身份认证机制,每个hop都有一个自签发的数字证书,TOR客户端在连接建立时会进行严格的身份认证。
补充说明:这套证书系统是TOR独有的,跟操作系统和浏览器的证书系统完全没有关联,进行中间人攻击也无法影响到TOR,但TOR出口节点到目标网站服务器这段路还是需要防备中间人攻击的。
大家应该能看出来了:TOR对抗的是某一国家的老大哥而不是全球性的老大哥(幸好现在也根本没有全球性的老大哥,不过说实在的NSA有这个趋势),而且TOR用户越多,TOR的匿名程度就越高。
相对于TOR之前的匿名系统,TOR有三点最为特别:
1,一个TOR环路可以被很多人同时使用,说的具体一点,hop与hop之间的每个TLS连接都包括了很多不同用户的TCP数据流;
2,TOR客户端随机选择了入口节点,入口节点随机选择了中间节点,中间节点又随机选择了出口节点。对,是由精心设计过的算法保证随机选择的,没有规律可循(不过后来发现这算法造成了很搞笑的情景:某一条环路上的三个hop有很多用户,都塞车了,但另一条环路上的三个hop用户数少得可怜,所以后来又基于hop的用户数对算法进行了改进「12」)3,TOR拥有独立于操作系统和浏览器的严格的基于数字证书的身份认证机制。这一点很重要,如果TOR的身份认证机制和特定的操作系统或浏览器有了关联,那就意味着用户将不得不为了使用TOR而更换浏览器或操作系统。
TOR是面向普通人的低延迟匿名系统,这就对TOR提出了便携性和易用性的额外要求,TOR必须在保证高匿名的基础上做到用户友好和适合交互应用。再加上前面所说的一大堆匿名系统的要求和TOR的特性,不难得出这样的结论:TOR绝对不仅仅是个三重代理!