转载互联网,作者不详,有删改。
我一直是大名鼎鼎的 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 绝对不仅仅是个三重代理!