Tor建立连接线路的过程

上次写的关于Tor连接的文章被toruser狠狠的批评了一顿,刚训了shurarai,现在遭报应了吧。那篇文章只是我的猜测,没有仔细的去看Tor文档进行验证。今天仔细的看了下Tor的文档,对Tor的原理了解了不少。

上次的分析有很多明显的错误,首先3个节点的选择是由本机定的,让各个服务器来定那就太可怕了。而toruser所说的信封,其实就是加密和解密的意思。拆信封就是解密,加信封就是加密。X知道与ABC 3个服务器连接需要的3个密码,而ABC只知道自己和X连接的密码,所以信息的传递是安全的。

节选http://tor.eff.org/overview中的一段:

To create a private network pathway with Tor, the user's software or client incrementally builds a circuit of encrypted connections through servers on the network. The circuit is extended one hop at a time, and each server along the way knows only which server gave it data and which server it is giving data to. No individual server ever knows the complete path that a data packet has taken. The client negotiates a separate set of encryption keys for each hop along the circuit to ensure that each hop can't trace these connections as they pass through.

翻译一下:Tor要建立一个秘密的网络通道,客户端会逐次增加地通过各个服务器建立一条加密连接。这条线路每次只增加一环,并且线路上的每个服务器只知道数据是谁给的以及数据要传给谁。没有哪个服务器知道整条线路的状况。客户端会和线路上的每一个服务器商定一个单独的密码以确保数据通过某服务器时,该服务器无法知道整个线路的状况。

又读了下Tor文档中的这一段,大概知道了Tor建立连接线路的方法。

首先,节点之间的链接用的是TLS加密连接。每个Tor网络上的server我们称作onion router(OR),每个OR会和其他所有OR建立TLS连接。我们运行了Tor客户端的机器叫onion proxy(OP)。

假设线路是这样的:X-A-B-Y,X为Tor客户端OP,AB为OR,Y为要访问的web服务器。

首先,X随机在OR列表中选择两个节点A和B。X先和A建立TLS加密连接,然后发送建立连接的命令Create,并生成一个circle ID:CAB和根据Diffie-Hellman密钥交换协议生成的g^x1,把这两个数据和命令一起发出去。A返回Created命令,并返回根据Diffie-Hellman密钥交换协议生成的g^y1,以及密钥K1的一个hash。于是X和A都知道了密钥K1,以后就用这个密钥通过AES加密协议互相传递信息。

然后,X通过已经和A建立的通道告诉A,要求A连接B,并附带g^x2。A收到后发送Create命令到B,附带circle ID:CBC和来自X的g^x2。B返回Created,以及g^y2和密钥K2的hash。A再通过和X的AES加密通道传给X。于是X和B都知道了密钥K2,以后就用这个密钥通过AES加密协议传递信息。又由于Diffie-Hellman密钥交换协议的安全性,A虽然知道g^x2和g^y2,但是计算不出密钥K2。

最后的传递过程就是,X把信息先用K2加密,再用K1加密,传给A;A用K1解密后传给B;B用K2解密后取得URL;B连接Y后得到数据然后用K2加密,传给A;A用K1加密传给X;X用K1解密再用K2解密得到数据。当然具体的过程还分为先发命令要求B连接Y,再发命令要求B从Y上GET某个页面,我就不再细说了。每一个节点只知道数据从哪里来和要发到哪里去,其他的一概不知。A知道是X连接自己的,但是不知道X是OP还是OR,也不知道目标URL,只知道要把解密出来的数据发给B;B知道A发来请求要求连接Y,但是不知道A是OP还是OR,以及是谁请求A连接的。

这真的是一个很完美的方案,某些人对Tor安全性的担心完全是多余的。我在使用Tor的过程中见过好多设在国内的OR,有广州的有北京的。我想,如果要严打也是那些OR先被严打吧,毕竟OR列表在服务器上很容易读到。至于B可能截取密码的问题,如果X直接走因特网连接Y的话,一样要经过很多路由器,安全问题反而更大。所以最好是选择https连接验证密码的网站,比如gmail。一般通过Tor看新闻则不会有什么问题。象BBC的新闻可以直接用Bloglines订阅,Google不能访问可以用www.google.cn,Tor也就只是用来看一些新闻站和wiki,不过编辑英文wiki的问题则没法解决,伤脑筋啊。

Update:这篇文章收到一个TrackBack,好像是一个繁体中文的Blog。文章里讲到Tor存在的一个安全问题:

A malicious entry node (the first Tor server in your path) can route traffic through your Tor client as though you're a server. It can only route traffic to other Tor servers though --- it can't induce any "exit" connections.

大概的意思是:一个恶意的节点(必须是你的连接线路上的第一个OR)可能发送访问请求给你的Tor客户端,就好像你是一个OR一样。不是太理解,不过文章说Tor 0.1.1.23已经修复了这个bug,Tor 0.1.1.23是2006年7月30日发布的,很多人应该都用上新版了吧,估计影响不大。Tor 0.1.1.23更新日志里有一条记录:"Entry guards could crash clients by sending unexpected input."也许这一条说的就是这个事吧。

本文共有 18 条评论Tor建立连接线路的过程


  1. 1 del

    我试试效果!~

  2. 2 toruser

    编辑英文的WIKI可以用TOR和其他的代理串联搞定。
    比如用SOCKSCAP+IE里的代理,LINUX下不太熟,不过应该也有相应的解决方案了

  3. 3 toruser

    非常感谢你的热心宣传,希望你能带更多人利用TOR访问网络上的信息:)

  4. 4 yskin

    用Tor和其他代理串联?恐怕不行吧。SOCKSCAP IE?不理解...

    SocksCap32,让不支持代理的软件也能使用代理,这个软件没怎么用过,也不太知道原理,好像一般的软件都支持代理。如果把他和IE连起来,再在IE里设置了代理,那么IE就会连接自己的代理,然后透过这个代理再连接SocksCap32里设置的代理吗?看起来好像挺复杂的耶。

    英文wiki应该是通过HTTP头判断用户是否用了代理。现在搞破坏的人多,不许走代理的人编辑也是没办法。我的英文菜,也没想着去英文wiki编辑文章,只是有时在上面逛的时候看人家的文章格式不错,想点编辑看看具体的代码是怎么写的,然后显示用代理登陆的不许编辑,很郁闷。

    Tor串联其他代理,如果其他代理在Tor之前应该没有,只有放在Tor后面。那么这个代理应该不在HTTP头里标明这是通过代理访问的才可以。好像代理也是分等级的,有什么高级透明代理什么的,如果能找到一个,直接通过它访问wiki应该能解决,毕竟wiki又不是关键词屏蔽嘛。

    去年10月接触Tor,平时也用不着,不常去国外看新闻也不常编辑wiki。不过仗着自己对网络知识稍懂一下,起码知道GFW是怎么回事,所以在混迹过的论坛比如Maxthon论坛和Firefox论坛里,如果有人问起Tor的事还是会热心去解答一下,起码我还算懂得Privoxy是干什么用的以及sock4a有什么特殊。本来还想写一大篇关于Tor的文章,现在觉得还是再多研究一下,起码把Tor的文档看完再写吧,嘻。

    呃,这位toruser,看你的口气,难道你是Tor开发组的?Blog地址和IM交出来,这下可抓住个高手了。

  5. 5 Dre.J

    人工TrackBack:http://dre-j.blogspot.com/2006/08/tor_25.html

    没抢到沙发,明天继续…………

  6. 6 哥特骑士

    wiki的安全链接也不能访问么?

  7. 7 yskin

    https://secure.wikimedia.org/wikipedia/en/wiki/Main_Page
    不行的,能浏览但是不能编辑,试一试就知道了。

  8. 8 wuyuhaili

    你好!总算找到tor的高手了!
    前几天我的tor还可以用,今天不知道什么原因连接不上了,我反复卸载重装并且试了几个不同的版本都是不行。运行tor后,提示: I learned some more directory but not enough to build a circuit 不知道什么意思,为什么前几天可以呢?有人说可能是地震造成的。但是,昨天还可以用的。请指教,不胜感激!!!!!!!!!!!

  9. 9 yskin

    怕是因为以前你的Tor比较快,现在由于地震的原因,出国线路比较拥堵,所以你的Tor建立连接的时间比较长些,所以你不适应了,哈哈。

    "I learned some more directory but not enough to build a circuit."这句是经常出现的,是Tor提示连接还未建立成功。

    P.S. 我好久没有用Tor了,这段时间受地震影响,我找了一个澳大利亚代理就解决了。你有什么特殊的需要吗?看BBC?

  10. 10 wuyuhaili

    谢谢!真是高手,一语中的,受益非浅!
    我是用来上网查文献用的。现在能用了,正如你说的,昨天晚上我一直开着tor,今天早晨一看已经连上了,只是速度不如从前快了。
    再次致谢!!!!!!!!

  11. 11 wuyuhaili

    多谢了!还有就是为什么我把ie的连接改成127.0.0.1 8118后,我的greatnews总是连不上,换成不用代理就回复正常了呢?

  12. 12 yskin

    Tor开了一个晚上才连上?GOD!5分钟连不上我就恼火了。给个代理你falsario.com,过GFW还是没啥问题地。反正你上网查资料,又不是发文章,也没有啥秘密,就算被截了也不怕。

    我不知道GreatNew连接网络时是否使用IE的代理设置,不过在GreatNew里打开的浏览器页面肯定是内嵌的IE啦。

  13. 13 wuyuhaili

    谢谢!
    这么晚还在线上?

  14. 14 surfbebo

    www.aplusproxy.com 我还是喜欢这里的在线代理,浏览网页足够

  15. 15 担忧

    某些人对Tor安全性的担心完全是多余的------安全性的担忧或许是多于的,但是可靠性呢?如果ZF封锁了目录服务器,tor还能用吗?

  16. 16 lr

    看网页还是在线代理好些 http://proxy.zookey.cn 我老在用它

  17. 17 请教

    请问如何让tor把代理IP的位置固定在一个地区呢??急呀,会的朋请解答

  1. 1 一個地方
    Trackback2006-8-31 4:45 下午

请留下您的评论: