先来看看最新出来的国安法以及VOA对此的报道:
7月7日,联合国人权事务高级专员扎伊德·拉阿德·侯赛因在日内瓦对中国7月1日通过的新《国家安全法》表示了担忧。他说,这部法律“太宽泛、太模糊“。
他说:“这部法律用异常宽泛的范围及模糊的词汇和定义,引起了很多担忧。结果就是,它给中国政府留了更大的余地,以便更加严苛的控制中国公民的权利和自由,甚至加强对民间社会的已经很紧的控制。”
他是在一篇发表在联合国人权事务高级专员办公室网站上的文章中说的。
中国的新《国安法》涵盖了环境、国防、财政、信息技术、文化、思想意识体系、教育和宗教等方面的问题。联合国人权事务高级专员办公室网站的文章说, 该法把国家安全定义的极度宽泛。而国家安全法律必须有足够精确度,使个人可以预知他们行为的后果,并有保障机制防止当局的武断或歧视性执法。侯赛因说,这 部法律应当清晰和仔细地界定什么构成对国家安全的威胁,并标明以合比例的方式应对这类威胁的恰当机制。”《国安法》规定,公民发现危害国家安全的行为,应当直接或者通过所在组织及时向国家安全机关或者公安机关报告。
而联合国人权事务高级专员办公室的文章说,该法规没有对危害国家安全的行为进行定义,使政府有宽泛的斟酌权,为滥用权力留下了余地。
侯赛因说:“越来越多的政府用国家安全考量来限制言论自由及和平集会的权利,并将其作为打击人权卫士、噤声批评的工具。我对此感到遗憾。安全和人权互相并不冲突。相反,他们互相补充促进。尊重人权和公众参与是保障法治和国家安全的关键。”
See?如果没有一种可以良好保持自己安全的方法,剩下的所有操作只会使自己陷入麻烦(也帮助不了别人)
本篇文章主要将讲的是TOR的基本使用,永远记住一个原则——如果你没法保证物理安全,操作系统安全,其他软件安全,那么TOR并不能保证你的安全。
首先来讲讲TOR的原理,TOR的全称The Onion Router,即洋葱路由,就是像洋葱一样在我们现有的物理网络上构建一个表层网络,并进行随机跳跃。图示如下:
首先是没有用TOR,你的计算机直接连接到你要的服务器(比如CyberThink),此时,如果没有SSL的话,服务器知道你的来路IP,ISP知道你去了哪儿,网络数据包传输过程中谁都能看到你做了些什么,加了SSL也只能避免后者
。
如果用了TOR,情况是如下所示:
出于经济考虑(或称,处于速度考虑),TOR每十分钟会自动换一条线路,这样你访问什么网站的时候就不会因为COOKIE而需要反复登陆了,十分钟一换也减少了流量分析的可能。
剩下的原理,由“不重复发明轮子”定理,直接转载Ghost AssAssIN 的Google+
TOR的具体工作机制可远远没有官网上介绍的简单:
当用户启动TOR后,TOR客户端就会在本机PC上运行一个onion proxy[3],同时开始监听本机的9150端口(Tor Browser里的Tor监听端口),所有经过这一端口的流量都会在经过onion proxy的处理之后进入TOR电路中。关 于端口有必要做一下说明:对于服务器,只要服务器开机,端口就一直存在;但对于本机,只有相应的应用程序试图与远程服务器通过特定端口通信时,端口才会出 现,一旦通信结束端口就会立即消失。也就是说,这个9150端口只有在某一应用程序(例如被设置过的浏览器,例如Tor)试图通过它与远程主机通信时才会 出现,并不是个物理存在。
不过这会儿还不能传输用户数据呢,在本机上运行onion proxy只是第一步而已,然后当然是与存有全球中继节点信息的目录服务器取得联系了。
一 开始这一步是明文HTTP通信,有着增加流量指纹的风险,后来Tor开发者进行了改进,让Tor客户端第一步先与入口节点通信(当然第一次连接是做不到 的,以后的连接都可以这么做了)再与目录服务器通信更新节点信息,全过程都是TLS[4]的,这样做不仅保证了安全,还避免了单独与目录服务器建立一次性 的TLS连接,提高了效率(因为建立TLS连接是很消耗资源的,生成随机参数进行密钥交换强加密传输数据都是要进行大量运算的,如果只是为了短暂的一次性 连接,那么就有些太浪费了):当完成更新中继节点信息之后,客户端不必切断连接,而是可以直接把原来的TLS连接“拔出来”再继续组成电路(意思是原来的 TLS连接的参数还可以继续使用,而不用又重新计算生成)[3]得到中继节点信息之后,电路构造过程就正式开始了!
对了,诸位猜一下,Tor电路会是怎样的呢?会怎样进行构造呢?
“既然是个三重代理……要么是这样一个过程:onion proxy先将数据加密传送到入口节点,然后入口节点又加密传送到中间节点,中间节点又加密传输到出口节点,在HTTP的情况下这三个节点都能看到明文(一般的代理就是这样的)?”
我说,你不觉得这样非常不安全吗?要是其中有哪一个节点被攻破或者是蜜罐,那么你可就呵呵了!还有就是如果不进行特别设置的话,后面两个代理也是知道用户数据流的真实来源的(真实IP),也就是说安全性还是相当于一重代理!
那么,Tor究竟是怎么做的呢?
“哪 个节点都不可信,像洋葱一样”这就是Tor环路的核心思想所在:和普通的TCP流不同(Tor工作在TCP流之上),Tor协议把通信数据打包为了一个个 特殊的cell:一开始建立Tor电路时,本机上的onion proxy向入口节点发送create cell进行TLS handshake,这一过程的身份认证过程是基于数字证书的:Tor有着自己的一套数字证书系统,每一个洋葱路由(就是节点)都有一个用于签发证书的身 份密钥和用于解密用户的电路建立请求以及协商出一个用于后续通信的(使用时间)短暂的密钥。当节点之间进行通信时,这个特制的TLS协议还会建立短期连接 密钥,而且这一密钥会周期性的独立发生变化以最大限度降低密钥泄露带来的风险[3]
那么接下来又会发生什么呢?
Tor电路默认由客户端和三个节点组成,那么我们就来看看在这种情况下Tor电路究竟是怎样建立的吧:
首先是客户端(onion proxy)发送create cell与入口节点完成handshake,然后客户端向入口节点发送TLS加密数据relay cell……
“里面是用户数据吧!发送到入口节点之后,入口节点就进行解密,然后再重新打包并与中间节点建立连接……”
“当 然不是了!这样的话,入口节点什么都知道了,哪里还有安全性呢?Tor是这么做的:客户端最先发过去的relay cell 1是入口节点与中间节点建立TLS连接时所需要的参数,接着发过去的relay cell 2是中间节点与出口节点建立TLS连接时所需要的参数,接下来是只有目标网站和对应端口信息的relay cell 3,在返回表明已成功建立环路的relay cell 4之后才会真正开始发送包含用户信息的relay cell 5。
这一过程中 relay cell 1被一重加密,到了入口节点之后就被解密,再用来与中间节点完成握手;relay cell 2被两重加密,到了入口节点时第一重加密解除,到了中间节点时第二重加密解除,中间节点可以看到明文,用来与出口节点完成握手;relay cell 3被三重加密,只有出口节点能看到明文,被用来与目标网站建立连接。同样relay cell 5也是三重加密的,只有出口节点能看到明文(HTTP)。[3]”
“就像洋葱一样”,对,用户数据就像洋葱一样,被层层包裹着,只 有到了终点包裹才会解开。在这一过程中,只有入口节点知道用户的真实IP地址,出口节点知道用户的目的地和传输内容(HTTP),Tor电路的cell里 没有其他任何关于用户真实身份的信息(这里不考虑cookie和flash插件等应用层协议和程序带来的隐私问题(这些也不是Tor本身能够左右 的,Tor使用的是在传输层之上应用层之下的SOCKS代理,无法操纵修改上层协议,但这也使得Tor能成为很多软件的代理,不被应用层协议们所左右), 只针对于传输过程而言)
“似乎有哪里不对呢:如果说这几重加密都是预设的参数,那么一是做不到完全随机了(一定要人为去划分入口节点中间节点出口节点才能做到事先内置相应的解密密钥),二是一旦密钥泄露后果就会相当严重的。但如果不是预设参数而是每次连接时都随机协商,那么又该怎么做呢?”
“你 说得没错,Tor电路中的节点们并没有预设参数,而是采取了“半握手”的方法:在diffie-hellman算法[5]的帮助之下,onion proxy和中间节点通过入口节点的中介交换了参数,然后就能各自算出私钥用于后续通信而不用担心有人监听,入口节点虽然知道这两个参数,但也根本没办法 算出私钥来,这是diffie-hellman算法设计时所保证的”。同理也可以与出口节点安全通信,客户端最里面一层的加密只有出口节点能够解开,入口 节点和中间节点都看不到只有出口节点才能看到的内容。
那么,Tor在建立电路时又是怎么选择节点的呢?
借助算法随机选择,没错,但“一次性随机选择三个节点”?错了!
Tor客户端先随机选择一个入口节点,然后入口节点再随机选择一个中间节点,中间节点又随机选择一个出口节点,这样来最大限度实现随机建立电路。而 且Tor还有一个更特别的地方:很多用户的流量可以被整合到一个TLS连接里同时传输!看起来就像一个用户一样![3]这样一来,匿名程度更高了,但很多 时候又会带来一件麻烦事:很多用户的来自同一个IP的大量流量都同时指向同一个网站(例如google),看上去非常像是DoS(拒绝服务)攻击,此时就 会触发网站的防御机制,网站会要求用户输入验证码,非常烦人。