话说咱们英勇的 Tor 团队设计 Tor 出来可不单单是为了帮 PC 用户们保持匿名的:听说过 deepweb 吗?只有使用 Tor 来到这里的人才能看到 deepweb 的真面目,这里面有军火商,有毒品交易,有盗版书籍和游戏,还有其他在国际互联网上找不到的惊喜等着你!所有的普通网站,访问者都知道网站的真实 IP 地址,但 deepweb 却不是这样!
为什么只有通过 Tor 才能来到 deepweb?为什么 deepweb 的服务器真实 IP 无法被访问者得知呢?
咱们还是先从用户访问网站的一般流程看起吧:首先,用户在浏览器地址栏中输入 URL,然后回车;紧接着域名解析就开始了,浏览器通过查询从 DNS 服务器得知目标网站的真实 IP 地址,然后开始发起连接……
打住!既然 deepweb 的服务器的真实 IP 地址是被隐藏的,那么有一点马上就可以被确认了:这个世界上所有的 DNS 服务器都不知道 deepweb 服务器 (又名 hiddenservice) 对应域名的真实 IP!因为只要有一台 DNS 服务器存储了真实 IP,那么 hiddenservice 就暴露啦!(小声:所以诸位也就不要想着从国际互联网直接访问 hiddenservice 啦)"如果是这样,那么用户又该怎样和 hiddenservice 建立连接呢?对了,说起来 deepweb 中网站的域名都蛮奇怪的,例如说这个 http://allyour4nert7pkh.onion/wiki/index.php?title=Main_Page;我知道。onion 是顶级域名,代表着这网站在 deepweb 中,无法从明网中直接访问;但前面那一大堆又是什么?"这要从 hiddenservice 的建立开始说了。在 deepweb 里有一个类似于 DNS 服务器的存在:数据库。客户端要想访问 deepweb 中的网站,首先要与数据库建立连接从而取得相关信息,那么又是什么样的信息呢?
要想在 deepweb 里建立自己的网站,首先要随机选择几个"介绍点"(introductionpoint),与之建立电路 (也就是说在 hiddenservice 和介绍点之间有三个中继节点作为跳板),介绍点不知道 hiddenservice 的真实 IP;然后 hiddenservice 组合起一个描述符,里面包括了公钥和各个介绍点的摘要,然后用私钥签名,最后把描述符上传到前面提到的数据库里 (准确叫法是分布式散列表)。这样网站就建立好了!对了,这个网站的域名就是:一个从公钥派生出的 16 位字符。onion(所以 deepweb 里的网站的网址看起来才那么奇怪)。网址和描述符是一一对应的。
接下来,我们好奇的客户端就上场了:客户端从某个渠道得知了某个 hiddenservice 的网址,想要去看一下。那么他该怎么做呢?
首先,他得开启 Tor,还要设置好浏览器代理,接着输入网址,回车。
然后,他通过 Tor 电路与数据库建立连接 (这里要注意一下,因为始终都不会访问明网,所以第三个跳板节点在这里就是数据库了,接下来建立连接时第三个跳板节点会变成相应的节点),开始查询 (对比是否存在和目标网站网址对应的描述符),同时随机选择一个节点作为"会合点"(rendezvouspoint)。
OK,查到了!那么,接下来就产生一个随机的一次性 rendezvouscookie 作为一次性的 secret 吧!然后用刚刚得知的公钥加密 cookie 和会合点 IP,再把密文发送给介绍点!"喂喂,那个会合点是干嘛用的?""不要急吗,等会儿就讲到了!"
介绍点接到数据之后,就传回给 hiddenservice(当然始终是通过 Tor 电路间接传递的)。hiddenservice 用私钥解密一看:哎,有用户来了啊,赶快招待!然后就急忙与会合点建立连接 (当然也是经过三次跳板中转的完整 Tor 电路),同时把之前的 cookie(也就是一次性 secret) 发送回去。
客户端接到数据,解密一看:哈哈,就是之前的那个 cookie,这就意味着我和 hiddenservice 之间已经成功建立连接了!那么,现在正式开始通信!最终在客户端和 hiddenservice 之间有六个中继节点:客户端入口节点,客户端中间节点,会合点 (原先出口节点的位置),hiddenservice 出口节点,hiddenservice 中间节点,hiddenservice 入口节点。从头到尾客户端和 hiddenservice 的通信都是被 TLS 强加密的 (尽管浏览器不这么认为,在访问 deepweb 网站的时候浏览器显示客户端和网站之间的连接是未加密的,但实际上刚好相反),Tor 电路本身的证书认证机制也防止了中间人攻击。这样说来,hiddenservice 本身再去搞一个证书支持 TLS 连接 (让浏览器认为建立了加密连接) 其实没有意义了。
"那么就此为止了吗?""当然没有,要知道 NSA 和 FBI 还有 GCHQ 们看 Tor 不爽早就不是一天两天了,下次一起看看英勇的 Tor 团队们是怎样对付各种攻击的吧!