TOR的原理(3)——deepweb的秘密
话说咱们英勇的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团队们是怎样对付各种攻击的吧!
共有 0 条评论