当最后需要源和目标时,Tor 如何保持匿名?

信息安全 加密 匿名
2021-08-31 16:12:24

我有一个关于 Tor 和离开 Tor 出口节点的完全解密数据包的匿名状态的问题。我的高级理解是,在数据包穿越 Tor 网络之前,Tor 客户端选择 3 个 Tor 中继节点让数据包通过,并用出口节点的公钥加密数据包,然后用中间节点的公钥加密加密数据包公钥,然后使用入口节点的公钥再次执行此操作。每个节点在数据包到达时解密数据包。

这是我不明白这个过程如何实现匿名的部分。在 Tor 出口节点完全解密数据包后,该数据包将是一个普通数据包,因此它应该具有源地址和目标地址。因此,任何在数据包离开 Tor 出口节点后嗅探数据包的人都会知道源地址和目标地址是什么,对吧?

关于洋葱路由过程,我一定有一些不明白的地方,我希望有人能帮助我理解数据包在离开出口节点后是如何匿名的。毕竟既然它已经被完全解密,它的源和地址字段可以像任何其他数据包一样被嗅探吗?

2个回答

诀窍在于封装的是数据包的有效负载,而不是整个 TCP 数据包。因此,当数据包在未加密的情况下离开 Tor 出口节点时,它会与 Tor 出口节点的返回地址一起发送。所以服务会知道一个数据包来自一个 tor 出口节点并且是匿名的,但除非数据包有效负载本身有信息可以识别您(例如登录信息、会话 cookie 或在有效负载中包含您的 IP 的某些协议),端点/服务不知道发起者的 IP。

此外,tor 出口节点跟踪会话,因此它可以将数据包返回给您,但它仅跟踪从 tor 中间节点到正在访问的服务/网站的会话。因此,出口节点将能够看到正在访问的服务/网站,但不知道发起者。

反过来,中间节点只跟踪入口节点和出口节点之间的会话。所以它既不知道始发者也不知道目的地。

入口节点知道始发者的 IP 地址,但不知道目的地。

之所以有三个节点而不是两个节点,是为了防止有人入侵入口或出口节点,使其无法嗅探进出另一个节点的流量,并合理推测哪些发起者流量与哪些目的地流量相关基于数据包大小和时间。对于三个节点,入口节点不知道使用哪个出口节点,反之亦然。

Tor 如何保护匿名性

之所以会发生匿名,是因为 Tor 出口节点知道最终数据包及其目的地,但它不知道数据包的来源。类似地,入口节点知道数据包的来源,但它不知道数据包的内容或目的地。结果(理论上),没有一个节点拥有数据包的完整细节。

为了进一步澄清,出口节点不知道数据包的来源:只知道中间节点的位置。它接收来自目标服务器的响应,对其进行加密,然后将其返回给中间节点。中间节点知道入口节点和出口节点的位置,但不知道任何内容。同样,它对从出口节点接收到的加密数据进行加密,再次加密,然后将其传递给入口节点。入口节点再次对其进行加密,然后将其返回给原始客户端,后者将解密所有层。

作为这个过程的结果,没有一个节点有足够的数据来将请求连接到任何终端客户端。但是,如果与“常规”互联网上的服务器通信,则流量确实必须通过标准 HTTP 从出口节点传输到目标服务器。因此,例如,如果您在使用 TOR 作为代理的同时通过 HTTP 请求文档,则出口节点和目标服务器之间的中间人将能够嗅探您的请求和服务器的响应 - 这是不可能的将该请求连接到您的机器。

但这并不完美

请注意,这不是一个万无一失的系统,并且可以在 Tor 网络上进行去匿名化。“最简单”的方法就是让 Tor 网络充满恶意节点。如果您在网络上有足够多的节点,而您控制的节点偶然被选为单个请求的入口和出口节点,那么很有可能将这些点连接起来并找出有关请求的所有数据,从而有效地去匿名化Tor 用户。像这样的攻击似乎已被执法部门用来抓捕现实生活中的罪犯请注意,这有点投机,因为显然 FBI 不喜欢透露他们如何(偶尔)设法对 Tor 流量进行去匿名化的全部细节。