洋葱路由是一种电脑网络上匿名沟通技术。洋葱路由网络中,消息一层一层的加密包装成像洋葱一样的数据包,并经由一系列被称作洋葱路由器的网络节点发送,每经过一个洋葱路由器会将数据包的最外层解密,直至目的地时将最后一层解密,目的地因而能获得原始消息。
洋葱路由(Onion routing)为一种在电脑网络上匿名沟通的技术。在洋葱路由的网络中,消息一层一层的加密包装成像洋葱一样的数据包,并经由一系列被称作洋葱路由器的网络节点发送,每经过一个洋葱路由器会将数据包的最外层解密,直至目的地时将最后一层解密,目的地因而能获得原始消息。而因为透过这一系列的加密包装,每一个网络节点(包含目的地)都只能知道上一个节点的位置,但无法知道整个发送路径以及原发送者的地址。
发明与实现
1990 年代中期,美国海军研究实验室的研究员保罗‧塞维利亚森(Paul Syverson)、麦可‧里德和大卫‧戈尔德施拉格(David Goldschlag)为了保护美国在线情报系统而开发了洋葱路由。其后国防高等研究计划署接手该项目继续开发,并在 1998 年获得海军的专利。2002 年计算机科学家罗杰‧丁高戴恩(Roger Dingledine)和尼克‧马修森(Nick Mathewson)加入了塞维利亚森的项目,并开始开发 Tor;Tor 为“洋葱路由项目”(The Onion Routing project)的头字语,该项目后来成为规模最大的洋葱路由实现并广为人知。之后美国海军研究实验室将 Tor 以自由软件授权的方式公开了源代码,丁高戴恩、马修森以及其他五位成员在 2006 年成立了名为“The Tor Project”的非营利组织,并获得包含电子前哨基金会在内的几个组织的财政资助。
数据结构
一个在洋葱路由网络中传递的数据包例子。发送者首先将数据包发送给路由器 A,解密了蓝色一层,并发现要传给 B,而数据包发送至 B 时又解密了绿色一层,同理再传给 C,而 C 在解密了红色一层后得到原始要发送的消息并将之传给目的地。
被称作洋葱路由的原因在于消息一层一层的加密包装成被称作洋葱数据包的数据结构,层数取决于到目的地中间会经过的节点数,每经过一个节点层会将数据包的最外层解密,因此任一个节点都无法同时知晓这个消息最初与最终的目的地,使发送者达到匿名的效果。
数据包的创建与发送
为了发送洋葱数据包,发送消息者会从“目录节点”(directory node)提供的列表中选取一些节点,并以这些规划出一条被称作“链”(chain)或“线路”(circuit)的发送路径,这条路径将为传输数据包所用。为了确保发送者的匿名性,任一节点都无法知道在链中自己的前一个节点是发送者还是链上的另一节点;同理,任一节点也无法知道在链中自己的下一节点是目的地还是链上另一节点。只有链上的最后一个节点知道自己是链上最终节点,该节点被称作“出口节点”(exit node)。
洋葱路由网络使用非对称加密,发送者从目录节点获得一把公开密钥,用之将要发送的消息加密并发送给链上的第一个节点,该节点又被称作入口节点(entry node);其后与之创建连接和共享密钥。创建连接后发送者就可以通过这条连接发送加密过的消息至链上的第二个节点,该消息将只有第二个节点可以解密;当第二个节点收到此消息后,便会与前一个节点也就是入口节点同样的创建连接,使发送者的加密连接延伸到它,但第二个节点并不晓得前一个节点在链中的身份。之后按照同样原理,发送者通过入口节点和第二个节点的这条加密连接将只有第三个节点能解密的消息发送给第三个节点,第三节点同样的与第二个节点创建连接;借由重复相同的步骤,发送者能产生一条越来越长的连接,但在性能上仍有限制。
当链上的连接都创建后,发送者就可以透过其发送数据并保持匿名性。当目的地回送数据时,链上的节点会透过同一条连接将数据回传,且一样对数据层层加密,但加密的顺序与发送者完全相反;原发送者收到目的地回传的数据时,将仅剩最内一层加密,此时对其解密就可拿到目的地回送的消息。
弱点
计时分析
传统互联网不被认为具有匿名性的一个理由为互联网服务供应商具有纪录和追踪各电脑间的连接能力;例如当有人访问一个特定网站时,往来的信息内容如密码等,虽然能透过像是 HTTPS 等加密连接方式保护让其他人无法得知内容,但是连接本身却仍会有纪录,包含何时创建连接,多少数据量被发送等。洋葱路由虽然能创建并隐藏两电脑之间的连接,使两者之间并无一个可分辨的直接连接,但仍会有上述的连接纪录问题。流量分析可借由搜索连接纪录的连接时间和数据传输量来试图判别潜在的一对发送者与接收者;例如当有人发送 51KB 的数据到一个未知的电脑,三秒后另一未知的电脑发送 51KB 的数据给一个特定的网站,则可以推断此人可能与该网站曾创建连接。此外还有一些原因可以让流量分析更加有效,包含节点的损坏或离开网络,以及当链已经因为定期重建而改变,但有些链上节点却仍在追踪此前创建的会话等。
大蒜路由是洋葱路由的一种变体,其结合了 I2P 网络并将多份消息加密打包在一起,使其更难被攻击者以流量分析的方式破解。
出口节点漏洞
虽然消息在洋葱路由网络中被层层加密,但是在出口节点时,该节点会把最后一层解密并将原始消息传给接收者;因此若出口节点遭到攻击或是受控制,则原始的消息将会被截取。瑞典研究员丹‧伊格史塔德(瑞典语:Dan Egersta)曾用此方式获得了超过 100 封寄给外国大使馆的电子邮件密码。出口节点漏洞的原理与未加密无线网络很类似,后者为用户将未加密的数据在无线网络上传送时可能中途被其他人截走;这两种问题都可以透过端对端加密连接如 SSL、HTTPS 等方式解决。