Cointime

扫码下载App
iOS & Android

一文讲透 Tor :看 Tor 究竟是如何帮助用户隐藏身份,保护隐私的

个人专家

作者:Autumn Skerritt. 编译:Cointime.com QDD

什么是Tor?

“洋葱路由协议”(Tor)是美国海军研究实验室为保护美国情报通信而开发的。具有讽刺意味的是,即使是美国海军打击的那些组织也广泛使用Tor。

你可能知道Tor作为在线非法活动的发源地,一个你可以购买任何毒品的地方,以及一切非法活动的场所。然而,Tor远比媒体宣传的要大得多。根据国王学院的说法,Tor的很大一部分是合法的。

当你通常访问一个网站时,你的计算机会与该网站的服务器建立直接的TCP连接。任何监控你互联网活动的人都可以读取TCP数据包。他们可以得知你正在访问哪个网站以及你的IP地址,还有你连接的端口。

如果你使用HTTPS,那么没有人会知道消息的内容。但是,有时候对手只需要知道你正在连接的是哪个网站。

使用Tor,你的计算机永远不会直接与服务器通信。Tor通过三个Tor节点创建一条扭曲的路径,并通过该电路发送数据。

Tor的核心原理是洋葱路由,这是一种在公共网络上进行匿名和安全通信的技术。在洋葱路由中,消息被封装在多层加密中。

“洋葱有层次” - 史莱克

通过Tor传输的消息也是如此。Tor中的每一层都是加密层,你在Tor消息中添加了多层加密,而不仅仅是一层加密。

这就是为什么它被称为洋葱路由协议,因为它在每个阶段都添加了加密层。

结果生成的洋葱(完全封装的消息)随后通过网络中的一系列计算机(称为洋葱路由器)传输,每个计算机都会剥离一层“洋葱”。这一系列计算机被称为路径。每一层都包含下一个目的地 - 包裹必须传递到的下一个路由器。当最后一层被解密时,你将得到明文(非加密消息)。

原始作者的身份保持匿名,因为网络中的每个节点只知道路径中的前一个节点和后一个节点(除了第一个节点知道发件人是谁,但不知道最终目的地)。

这导致了一些攻击,大型组织利用广泛资源运行服务器,试图成为网络中的第一个和最后一个节点。如果组织的服务器是第一个节点,它就知道谁发送了消息。如果组织的服务器是最后一个节点,它就知道最终目的地和消息内容。

现在我们对Tor有了一个基本概述,让我们开始探索Tor的每个部分是如何工作的。如果您感到困惑,不要担心,每个Tor的部分将通过详细的图示进行解释。

概述

洋葱路由是一种分布式覆盖网络,旨在为诸如网页浏览、安全外壳和即时通讯等基于TCP的应用程序提供匿名化。

客户端选择通过网络的路径,并构建一个电路,其中路径上的每个洋葱路由器都知道其前任和后继节点,但对电路中的其他节点一无所知。路径和电路是同义词。

原始作者(最左边的问号)保持匿名,除非你是节点路径中的第一个节点,因为你知道谁向你发送了数据包。

在数据到达路径中的最后一个节点之前,没有人知道发送的是什么数据。倒数第二个节点不知道数据的内容,只有最后一个节点知道数据的内容。

这导致了一些攻击,大型组织利用丰富的资源创建Tor服务器,旨在成为路径中的第一个和最后一个洋葱路由器。如果组织能够做到这一点,它们就知道谁发送了数据以及发送了什么数据,有效地破坏了Tor的匿名性。

哦不!现在大型组织知道你在看Netflix

在没有物理接近组织服务器的情况下,很难做到这一点,我们稍后会详细探讨这个问题。

在本文中,我将使用Netflix作为一个正常的服务(Bob),而亚马逊Prime Video则作为对手(Eve)。在现实世界中,这种情况极不可能发生。我不打算猜测哪些组织可能想攻击Tor,所以我使用了两个不太可能的例子,以避免涉及政治方面的问题。

每个数据包都以固定大小的单元在网络中流动。这些单元的大小必须相同,以确保通过Tor网络传输的数据看起来没有异常。

每个路由器都会使用对称密钥解密这些单元,并将其继续传递到路径上的下一个节点。现在让我们深入了解Tor本身。

Tor本身

人多力量大

Tor需要很多用户来实现匿名化,如果Tor很难使用,新用户不会那么快采用它。因为新用户不会采用它,Tor的匿名性就会减弱。根据这种推理,很容易看出可用性不仅是Tor的设计选择,也是为了提高Tor的安全性而必需的安全要求。

如果Tor不易用或设计不良,不会有很多人使用它。如果没有很多人使用它,那么它的匿名性就会降低。

Tor不得不做出一些设计选择,这些选择可能不会提高安全性,但会提高可用性,希望可用性的提高也能提高安全性。

Tor不是完全去中心化的点对点系统,就像许多人所认为的那样。如果它完全是点对点的,那么它将不会很实用。Tor需要一组目录服务器来管理和维护网络的状态。

Tor不安全防止端到端的攻击。端到端攻击是指一个实体控制了路径中的第一个和最后一个节点,如前面所述。这是网络安全专家尚未解决的一个问题,因此Tor对此问题没有解决方案。

Tor不隐藏发送者的身份。

2013年,在哈佛大学的期末考试期间,一名学生试图通过发送虚假炸弹威胁来推迟考试。该学生使用了Tor和Guerrilla Mail(一种允许人们创建一次性电子邮件地址的服务)向学校官员发送了炸弹威胁。

尽管该学生采取了预防措施以确保不被抓获,但他还是被抓住了。

Guerrilla Mail在发送的电子邮件中附带了一个源IP地址头,接收者可以知道原始电子邮件的来源。通过Tor,学生预期IP地址会被混淆,但当局知道它来自一个Tor出口节点(Tor在目录服务中保留了所有节点的列表),所以当局简单地寻找在发送电子邮件时使用Tor的人(在大学中)。

Tor不是一个匿名化服务,但它是一个可以加密从A到B的所有流量的服务(只要没有进行端到端的攻击)。Tor也非常慢,所以将其用于Netflix并不是一个好的使用案例。

Tor和VPN之间的区别

当您使用VPN时,VPN会将您的所有互联网流量转发到正确的目的地。在这个过程中,VPN会加密您的流量。您的互联网服务提供商只能看到从您的计算机发送到VPN的加密流量。

他们无法查看数据包的内容。除了VPN之外,他们不知道您正在与谁通信。

VPN在隐私方面与Tor不同。VPN保护您免受互联网服务提供商或本地对手(监控您笔记本电脑的WiFi的人)的侵扰。但是,它们无法保护您免受自身的侵害。

VPN是中间人。它知道您是谁,知道您正在与谁通信。根据流量的不同,VPN还会解密您的数据包。这意味着他们知道一切。使用VPN时,您必须信任它。而对于Tor,您不需要太多信任。

在Tor中,一个恶意节点是可以容忍的。如果我们的图中的其中一个节点是对手,它们只会知道我们的IP地址或数据包。Tor保护你免受Tor的伤害。而VPN则要求你信任它们。

Tor保护你免受Tor网络的伤害。一个恶意节点是可以容忍的。他们不希望你信任整个网络。

除了你以外,没有人应该知道起始和目的地的IP地址,也不应该知道消息的内容。

现在我们对Tor是什么有了很好的了解,让我们探索洋葱路由。

洋葱路由

给定上面的网络,我们将模拟Tor的工作原理。您的计算机位于最左边,您正在发送一个观看Netflix上《怪奇物语》的请求(因为Tor还用于其他什么)。这条节点路径称为电路。稍后我们将详细介绍如何创建电路以及加密的工作原理。但现在,我们只是试图概括Tor的工作方式。

我们从消息开始(尚未发送)。我们需要对消息进行N次加密(其中N是路径中的节点数量)。我们使用AES进行加密,它是一种对称密钥加密系统。密钥是通过Diffie-Hellman协议达成的共识。不用担心,我们稍后会详细讨论这些内容。路径中有4个节点(不包括您的计算机和Netflix),因此我们对消息进行4次加密。

我们的数据包(洋葱)有4层。蓝色、紫色、橙色和青色。每种颜色代表一层加密。

我们将洋葱发送到路径中的第一个节点。该节点然后移除第一层加密。

路径中的每个节点都知道解密其层的密钥(通过Diffie-Hellman协议)。节点1使用共享的对称密钥(您们两个都同意的密钥)移除蓝色层。

节点1知道您发送了消息,但消息仍然经过3层加密,它不知道消息的内容。

随着消息向下传递,越来越多的层被剥离。下一个节点不知道是谁发送了数据包。它只知道节点1将数据包发送给它,并将其发送到节点3。

现在,节点3剥离一层。

最后一个节点知道消息内容和目的地,但不知道是谁发送的。它只知道节点3将消息发送给它,但不知道路径中的其他节点。这里的一个关键属性是一旦一个节点解密了一层,它无法知道还有多少层需要解密。层可能只剩下1层或2层,也可能有多达200层的加密。

现在,亚马逊没有办法知道您在观看Netflix!Netflix发送回《怪奇物语》的一部分。

让我们看看反向的工作原理。

现在,节点4添加了它的加密层。它不知道最初是谁发出的请求,它只知道节点3将请求发送给它,所以它将响应消息发送回节点3。

接下来的几个节点也是如此。

现在,响应数据包完全加密。

现在数据包完全加密,唯一仍然知道消息内容的是节点4。唯一知道谁发送消息的是节点1。现在,我们有了完全加密的响应后,我们可以使用所有对称密钥进行解密。

您可能会想:“我见过比这还要慢的蜗牛”,您是对的。该协议的设计并不追求速度,但同时也需要考虑速度。

算法可以更慢,但更安全(使用完全的公钥加密而不是对称密钥加密),但系统的可用性也很重要。所以是的,它很慢。不,它没有慢到无法接受的程度。但这是一个权衡的过程。

通常使用AES进行加密,密钥是通过Diffie-Hellman协议共享的。

Tor创建的路径称为电路。让我们探索Tor如何选择电路中要使用的节点。

如何创建电路?

当每个机器想要创建电路时,它首先选择出口节点,然后选择电路中的其他节点。Tor电路始终由3个节点组成。增加电路的长度并不会提供更好的匿名性。如果攻击者控制了网络中的第一个和最后一个节点,无论电路中有多少个节点,您的安全性都无法得到保证。

当Tor选择出口节点时,它遵循以下原则:

1. 客户端的torrc(Tor的配置文件)中是否有关于不选择哪些出口节点的设置?

2. Tor只选择允许您退出Tor网络的出口中继节点。某些出口节点只允许网页流量(HTTP/S端口80),这对于发送电子邮件(SMTP端口25)是无用的。

3. 出口节点必须具备足够的容量来支持您。Tor试图选择具有足够可用资源的出口节点。

电路中的所有路径遵循以下规则:

1. 我们不会为同一路径两次选择相同的路由器。

如果您两次选择相同的节点,该节点必定是入口节点(您进入的节点)或出口节点,它们都处于危险位置。它既可能是入口节点又可能是出口节点的概率为2/3,这更加危险。我们要避免入口/出口攻击。

这是不允许的。节点的颜色发生变化以显示它是相同的。

2. 我们不会选择与路径中其他节点属于相同家族的路由器。(如果两个路由器在其描述符的“家族”条目中互相列出,那么它们属于同一个家族。)

运营商如果运行多个Tor节点,可以选择将它们标记为“家族”。这意味着这些节点都有相同的父节点(网络的运营商)。这是针对入口/出口攻击的又一防御措施,尽管运营商可以选择不声明家族。如果他们想成为一个入口节点(后面会讨论),建议声明家族,但不是必需的。

这是不允许的。

3. 我们不会选择给定/16子网中的多个路由器。

子网定义了网络。IP地址由8个二进制位组成。以谷歌的IP地址为例,它的二进制表示如下:

01000000.11101001.10101001.01101010

前16位(/16子网)为01000000.11101001,这意味着Tor不会选择以这个IP地址的相同16位开头的节点。这是对抗入口/出口攻击的一种措施。

这是不允许的。

如果子网听起来让人困惑,我编写了以下Python代码来帮助解释:

ip addresses are in binary, not the usual base 10 subnets are usually powers of 2, this is 2^4.

IP = "01000000.11101001.10101001.01101010"

subnet = 16

this will store the subnet address once we find it

subnet_ip = []

IP_list = list(IP)

counter = 0

for i in IP_list:

we want to end the loop when we reach the subnet number

if counter >= subnet:

break

the ip address segments each oclet of bits with full stops

we don't want to count a fullstop as a number

but we want to include it in the final subnet

if i == ".":

subnet_ip.append(".")

continue

else:

# else it is a number so we append and increment counter

subnet_ip.append(i)

counter = counter + 1

print("子网是" + ''.join(subnet_ip))

4. 我们不会选择任何非运行或非有效的路由器,除非我们已被配置为这样做。默认情况下,我们被配置为在“中间”和“会合”位置允许非有效的路由器。

非运行表示该节点当前处于离线状态。您不希望选择不在线的节点。非有效表示该节点的torrc中的某些配置有误。您不希望接受奇怪的配置,以防它们试图进行黑客攻击或破坏。

5. 第一个节点必须是入口节点。

入口节点是特权节点,因为它可以看到用户的真实IP地址。成为入口节点是“昂贵”的(需要保持高可用性几周并具备良好的带宽)。

这对于像Netflix这样有99.9%可用性和高带宽的大型公司来说是可能的。目前,Tor配置为每次选择一个入口节点并在12周内保持不变,因此您每年选择4个新的入口节点。

这意味着如果您使用Tor观看Amazon Prime Video一次,Netflix很可能不会成为您的入口节点。当然,Netflix创建的入口节点越多,这种可能性就越大。不过,如果Netflix知道您连接到Tor网络观看Amazon Prime Video,那么他们将不得不等待4周才能确认他们的怀疑,除非他们攻击入口节点并接管它。

对于大型组织来说,成为入口节点相对容易。成为出口节点稍微困难一些,但仍然可能。我们必须假设大型组织具备无限的计算能力才能做到这一点。解决方案是使攻击变得非常昂贵且成功率低。

Tor服务中用户越多,对大型组织来说就越难攻击。如果Netflix控制网络中50%的节点:

您选择Netflix作为入口节点的几率为50%。

如果突然增加了50个普通用户节点,那么这就是 $\frac{50}{150}$,减少了Netflix拥有入口节点(从而减少潜在攻击)的概率,并使攻击变得更加昂贵。

Tor的威胁模型中,人数众多是力量所在。

入口节点固定

当Tor客户端首次启动时,它选择一组小而随机的入口节点。在接下来的几个月中,它确保每个电路都使用这些预选节点之一作为其入口节点。

来自Tor文档的官方提案如下所述:

入口节点固定非常重要,因为Tor的威胁模型假设只需要一个漏洞的电路就可以破坏您的匿名性,因此Tor尽量降低构建一个或多个易受攻击的电路的概率。

Tor入口节点可能会受到DOS攻击,或者攻击者可能在您连接时拥有大多数互联网上的入口节点,以便攻击您。通过入口节点固定,Tor试图使这种情况变得更加困难。

如果攻击者找出了您的入口节点并将其关闭,迫使您连接到他们的入口节点。或者,您连接到由对手控制的入口节点。Tor已经实施了算法来尝试检测这种情况。在此处列出。

什么是目录节点?

Tor网络的状态由一组9个受信任的服务器(截至2019年)跟踪和发布,这些服务器称为目录节点。每个目录节点由不同的组织控制。

每个节点都是一个独立的组织,因为它提供冗余性并分发信任。Tor网络的完整性依赖于目录节点的诚实和正确性。因此,使网络具备韧性并分布信任至关重要。

目录节点维护当前运行的中继(Tor网络中公开列出的节点)列表。每小时,目录节点一起发布一个共识。共识是由每个目录节点编译和投票的单个文档。它确保所有客户端对组成Tor的中继节点拥有相同的信息。

当Tor用户(客户端或节点)想要了解网络的当前状态时,它会向目录节点请求。正如我们后面将看到的,目录节点对于Tor的所有部分都至关重要,尤其是对于隐藏服务。

中继节点将目录节点的状态保持更新。它们向目录节点发送通知,以便在它们上线或更新时进行通知。每当目录节点收到通知时,它会更新对Tor网络当前状态的个人意见。然后,所有目录节点都使用这些意见形成对网络的共识。

让我们现在看看当目录服务在形成共识时发生争议时会发生什么。

Tor目录系统的第一个版本对冲突解决采取了简单的方法。每个目录节点根据其个人视角给出网络的状态。每个客户端相信其最近与之交谈的目录节点。在这里,目录节点之间没有共识。

在Tor中,这是一场灾难。没有任何机制确保目录节点的真实性。如果攻击者接管了一个目录节点,他们将能够对网络状态进行虚假宣布。

如果客户端向这个由攻击者控制的目录请求网络状态,它将返回一个列表。此列表仅包含攻击者控制的节点。然后,客户端将连接到这些攻击者节点。

Tor目录系统的第二个版本使这种攻击变得更加困难。客户端不再询问单个目录节点的意见,而是询问每个目录节点,并将它们的意见合并成共识。但是,根据客户端上次与每个目录节点交谈的时间,客户端可能对网络形成不同的视图。这导致了统计信息泄漏的问题,虽然没有Tor 1.0那么严重。此外,每个客户端都必须与每个目录节点进行通信,这需要时间并且是昂贵的。

目录系统的第三个和当前版本将计算共识的责任从客户端转移到目录节点。

什么是桥接节点?

我不确定你之前是否注意到,但我在目录服务中区分了节点和非节点。

如果一个压制性的国家想要封锁Tor,它会使用目录节点。目录节点保持最新的Tor中继节点列表,并对任何人公开提供下载。

该国家可以向目录节点查询活跃的Tor中继节点列表,并对这些节点的所有流量进行审查。

Tor会及时更新可能被封锁(审查)的国家的列表,如果你感兴趣的话。

Tor通过隐藏用户使用Tor的事实来帮助用户规避审查。它通过一个称为桥接节点(Bridge Node)的代理来实现。Tor用户将其流量发送到桥接节点,然后由桥接节点将流量转发到用户选择的卫星节点(Guard Nodes)。

完整的桥接节点列表从未公开,这使得国家难以完全封锁Tor。你可以在这里查看一些桥接节点。如果这不起作用,Tor建议:

另一种获取桥接节点的方法是发送电子邮件到[email protected]。请注意,你必须使用以下电子邮件提供商之一的地址发送电子邮件:Riseup或Gmail。

还有另一种封锁Tor的方法。审查国家可以使用深度包检查(DPI)来分析每个数据包的形状、大小和特征。使用DPI,国家可以识别Tor流量,即使它们连接到未知的IP地址或经过加密。

为了规避这种情况,Tor开发人员制作了可插拔传输(Pluggable Transports,简称PT)。它们在客户端和桥接节点之间转换Tor流量流。用Tor文档的话来说:

Check this out:YouTube

这样,监视客户端和桥接节点之间流量的审查者将看到看起来无害的转换后的流量,而不是实际的Tor流量。外部程序可以使用可插拔传输API与Tor客户端和Tor桥接节点进行通信,以便更容易地构建互操作性程序。

Tor隐藏服务

听说过那些关于“暗网上有一些网站,在Tor上访问它们,你会看到人们做一些恶心的事情,贩卖非法物品或更糟糕的情况:观看《宿醉3》”的传闻吗?

当人们谈论这些网站时,他们在谈论Tor隐藏服务。

这些服务是服务器,就像任何普通的计算机服务器一样。

但在Tor隐藏服务中,用户和服务器可以在不互相知道对方身份的情况下进行通信。

设备(问号)知道它想要访问Netflix,但它不知道关于服务器的任何信息,服务器也不知道有哪个设备要求访问它。这相当令人困惑,但不用担心,我将通过酷炫的图表来解释这一切。

当一个服务器在Tor上设置为隐藏服务时,服务器向一些选定的洋葱路由器发送消息,询问它们是否愿意成为服务器的介绍点。服务器完全可以自行决定选择哪些节点作为介绍点,尽管通常它们会请求3个路由器作为介绍点。

介绍点知道它们将引导人们访问该服务器。

然后,服务器将创建一个称为隐藏服务描述符(hidden service descriptor)的东西,其中包含每个介绍点的公钥和IP地址。然后,它将此隐藏服务描述符发送到分布式哈希表(Distributed Hash Table,DHT),这意味着每个洋葱路由器(不仅仅是介绍点)将保存隐藏服务信息的一部分。

如果你尝试查找一个隐藏服务,负责该服务的介绍点将向你提供完整的隐藏服务描述符,即隐藏服务介绍点的地址。

这个哈希表的键是洋葱地址,洋葱地址是从服务器的公钥派生出来的。

这个想法是洋葱地址不会在整个Tor网络中公开,而是通过其他方式获得,比如朋友告诉你或者在互联网上寻找(以.onion结尾的地址)。

分布式哈希表的编程方式意味着绝大多数节点不会知道给定密钥的描述符是什么。

因此,除非它们明确想要找到它,否则几乎每个洋葱路由器对隐藏服务了解甚少。

假设有人给了你洋葱地址。你从哈希表请求描述符,并获得服务的介绍点。

如果你想访问一个洋葱地址,首先你会从哈希表请求描述符,描述符中会有4或5个介绍节点的IP地址。你随机选择一个,比如选择了第一个。

你会请求该介绍点向你介绍服务器,而不是直接与服务器建立连接。你在网络中随机选择一个从一组洋葱路由器中的介绍点作为会合点。

接下来,你会建立到会合点的路线,并向会合点发送一条消息,询问它是否可以使用刚才使用的介绍点介绍你与服务器的连接。然后,你向会合点发送一个一次性密码(在本例中,假设为“Labrador”)。

会合点与介绍点建立一个路线,并将“Labrador”一词和它的IP地址发送给介绍点。

介绍点将消息发送给服务器,服务器可以选择接受或不采取任何行动。

如果服务器接受了消息,它将建立与会合点的路线。

服务器向会合点发送一条消息。会合点查看来自你的计算机和服务器的两条消息。它说:“嗯,我收到了一条来自这台计算机的消息,它说它想要与这个服务建立连接,而且我还收到了一条来自服务的消息,询问是否可以连接到一台计算机,因此它们一定是想要相互交流。”

然后,会合点将作为电路上的另一个跳点,并将它们连接起来。

简而言之,隐藏服务的工作原理如下,参考以下内容:

1. 隐藏服务计算出它的密钥对(私钥和公钥,非对称加密)。

2. 然后,隐藏服务选择一些中继节点作为它的介绍点。

3. 它通过Tor电路将自己的公钥告诉这些介绍点。

4. 然后,隐藏服务创建一个隐藏服务描述符,其中包含它的公钥和它的介绍点是谁。

5. 隐藏服务使用私钥对隐藏服务描述符进行签名。

6. 然后,它将隐藏服务描述符上传到分布式哈希表(DHT)中。

7. 客户端通过另外的方式学习到隐藏服务的.onion地址(例如,公共网站)(一个$hash.onion是一个由服务的公钥生成的16个字符的名称)。

8. 在获取到.onion地址之后,客户端连接到DHT并请求对应的$hash。

9. 如果存在,客户端将了解到隐藏服务的公钥和它的介绍点。

10. 客户端随机选择一个中继节点,建立与其的电路,向其发送一次性密钥。选择的中继节点充当会合点。

11. 客户端创建一个介绍消息,其中包含会合点的地址和一次性密钥,然后使用隐藏服务的公钥对消息进行加密。

12. 客户端通过Tor电路将其消息发送到其中一个介绍点,要求将其转发给隐藏服务。

13. 隐藏服务使用私钥解密介绍消息,了解到会合点和一次性密钥的信息。

14. 隐藏服务创建一个会合消息,其中包含一次性密钥,并通过电路将其发送到会合点。

15. 会合点告诉客户端连接已建立。

16. 客户端和隐藏服务通过这个会合点进行交流。所有流量都经过端到端加密,会合点只是将流量来回中继。请注意,客户端和隐藏服务都会建立到会合点的电路;每个电路需要3个跳点,总共需要6个跳点。

Tor上的攻击

Tor保护用户免受分析攻击。攻击者想要知道Alice正在与谁交流。然而,Tor不能防止确认攻击。在这些攻击中,攻击者的目标是回答问题“Alice是否正在与Bob交流?”

确认攻击非常困难,需要大量的准备和资源。攻击者需要能够跟踪电路的两个端点。攻击者可以直接跟踪每个设备的互联网连接,也可以跟踪卫星节点和出口节点。

如果Alice发送了这样的一个数据包:

当Bob接收到这个数据包时,攻击者可以看到数据包是相同的——尽管攻击者无法看到数据包的内容,因为它是加密的。Bob是否会在Alice发送数据包的同时接收到相同时间的数据包?它们的大小是否相同?如果是,就可以合理地推断Alice和Bob正在互相交流。

Tor将数据包分成可观察的块,是为了尽量防止这种情况发生。Tor正在努力填充所有数据包,使这种攻击更加困难。

他们还在讨论添加数据包顺序的随机化。但目前这样做的成本太高。Tor浏览器确实增加了一些额外的防御措施,例如重新排序数据包。

如果Alice发送的数据包是A、B、C,而Bob接收的顺序是B、A、C,那么很难检测到它们是相同的。这并不是百分之百可靠,但确实更加困难。

一种攻击方式是攻击者尝试控制电路的两个端点,这被称为Sybil攻击。以Flora Rheta Schreiber的书《Sybil》中的主要人物命名。我们之前讨论过一些情况,其中攻击者控制了卫星节点和出口节点。

Sybil攻击并非只是理论存在。在2014年,卡内基梅隆大学的研究人员似乎成功地对真实的Tor网络进行了Sybil攻击。

当Lizard Squad(一个黑客组织)试图进行Sybil攻击时,检测系统发出了警报。Tor内置了对这类事件的监控,并正在开发更复杂的监控方法来应对Sybil攻击。

在2007年,瑞典安全顾问Dan Egerstad通过成为一个出口节点拦截了通过Tor发送的用户名和密码。当时,这些用户名和密码没有经过TLS或SSL加密。

有趣的是,Dan Egerstad对Tor节点发表了如下看法:

如果你真的研究一下这些Tor节点的托管位置和规模,你会发现一些节点每个月的托管费用达数千美元,因为它们使用大量带宽,是重型服务器等。谁会支付这些费用并且保持匿名呢?

Tor通常不会隐藏你使用Tor的事实。许多网站(如BBC的iPlayer或维基百科的编辑)在使用已知的Tor节点时会阻止你访问。

在Tor下,一些应用程序会泄漏你的真实IP地址,其中包括BitTorrent。

Jansen等人描述了一种攻击方法,他们通过发动分布式拒绝服务(DDOS)攻击来瘫痪出口节点。通过降低网络的质量(删除出口节点),攻击者增加了获取出口节点的机会。

如果Tor用户在Tor上访问一个网站两次,第一次使用Tor,第二次不使用,那么他们可能会被跟踪。你移动鼠标的方式是独一无二的。Tor项目中有一个关于JavaScript时间测量漏洞报告,展示了如何在网站上(即使在Tor上)监视鼠标位置。一旦你确定某个人的指纹两次,你就知道他们是同一个人。

值得注意的是,Tor浏览器提供了3个安全级别(位于设置中)。最高安全级别禁用JavaScript,某些图像(因为它们可以用来跟踪你),以及某些字体。教训是,如果你想要高安全性的Tor使用体验,请使用高安全级别的版本。

现在,所有这些攻击听起来很酷。但大多数Tor用户被抓到并不是因为这些攻击,而是因为他们自己的操作安全性问题。

以Silk Road暗网市场的创始人Dredd pirate Roberts为例。他在社交媒体上发布了相关信息,导致自己被抓。

大多数Tor用户(如果他们从事非法活动)之所以被抓,是因为他们的操作安全性不佳,通常不是因为Tor存在安全问题。

值得重申的是我们之前看到的这个故事。

在2013年,哈佛大学期末考试期间,一名学生试图通过发送假炸弹威胁来延迟考试。该学生使用Tor和Guerrilla Mail(一种允许人们创建一次性电子邮件地址的服务)向学校官员发送了炸弹威胁。

尽管这名学生采取了预防措施以确保不被抓到,但他最终还是被抓住了。

Guerrilla Mail在发送给接收者的电子邮件中发送了一个原始IP地址标头,因此它知道原始电子邮件的来源。学生使用Tor时,他预期IP地址会被混淆,但当局知道它来自一个Tor出口节点(Tor在目录服务中保留了所有节点的列表),因此当局查找了在发送电子邮件时正在使用Tor的人(大学内部)的情况。

如果这个人去了咖啡馆或其他地方,他可能不会有事。

在DEFCON 22上有一个精彩的演讲,讲述了如何追踪Tor用户。这些故事中没有一个是由于Tor的原因,而是因为操作安全性不佳。

结论

Tor是一个充满了多年来不断改进的算法的迷人协议。我已经开始欣赏Tor,并希望你也能欣赏。以下是我们讨论过的内容:

1. Tor是什么

2. Tor不是什么

3. 针对Tor网络的攻击

4. 洋葱路由

5. 如何建立电路

6. 如何选择电路中的节点

7. 隐藏服务的工作原理

如果你想了解更多信息,请查阅关于Tor的论文《Tor:第二代洋葱路由器》。

评论

所有评论

推荐阅读

  • Ellipsis Labs获得Haun Ventures的2000万美元投资,加速推出Atlas——一个专注于可验证金融的第二层区块链。该团队目前运营着基于Solana的去中心化交易所Phoenix。Ellipses在4月份完成了2000万美元的A轮融资,由Paradigm领投。

    Ellipsis Labs从Haun Ventures获得2000万美元的投资,以加速推出Atlas,这是一个专注于可验证金融的第二层区块链。该团队目前经营着基于Solana的去中心化交易所Phoenix。Ellipses在4月份完成了2000万美元的A轮融资,由Paradigm领投。

  • 区块链太阳能公司Glow完成3000万美元融资

    区块链太阳能公司 Glow 完成 3000 万美元融资,本轮融资由 Framework Ventures 和 Union Square Ventures 领投,其他具体信息暂未透露。据报道,Glow 运营着一个由美国和印度的太阳能农场组成的去中心化物理基础设施网络(DePIN)。为了鼓励其网络上的农场使用清洁能源,创始人设计了一个基于补贴和代币激励的经济模式。

  • SOL跌破170美元

    行情显示,SOL跌破170美元,现报169.96美元,24小时跌幅达到3.6%,行情波动较大,请做好风险控制。

  • 比特币项目Citrea通过零知识技术筹集了1400万美元的A轮融资

    比特币项目Citrea在由Peter Thiel的Founders Fund领导的A轮融资中筹集了1400万美元。该项目旨在通过使用零知识(ZK)技术将比特币区块链转化为智能合约场所,使比特币成为可编程资产。Citrea表示,增加比特币的实用性至关重要。Citrea是一个比特币项目,致力于通过使用零知识技术扩展原始加密货币的实用性,并表示已筹集了1400万美元的A轮融资。

  • 比特币项目 Citrea 筹集 1400 万美元 A 轮融资

    比特币Rollup项目Citrea表示已在 A 轮融资中筹集了 1400 万美元,该项投资由 Peter Thiel 的创始人基金牵头,天使投资者 Erik Voorhees 和 Balaji Srinivasan 也参与其中。 Citrea 于 2 月份在 Galaxy 领投的一轮融资中筹集了 270 万美元的种子资金,该公司使用 BitVM 计算范式,旨在允许在比特币上使用以太坊式的智能合约。

  • 以太坊扩容基础设施 Spire Labs 筹集 700 万美元种子资金

    以太坊扩容基础设施开发商 Spire Labs 在种子轮融资中筹集了 700 万美元,Maven 11 Capital 和 Anagram 共同领投了此轮融资,a16z Crypto Startup Accelerator、Digital Currency Group、Bankless Ventures、Volt Capital、Finality Capital 等公司也参与其中。天使投资者也参与了此轮融资,包括 Celestia Labs 的 Nick White 和 Jacob Arluck、AltLayer 的 Amrit Kumar 和 Anthony Sassano。

  • 比特币项目Citrea通过零知识技术筹集了1400万美元的A轮融资

    比特币卷轴Citrea获得了由彼得·蒂尔的创始人基金领导的1400万美元A轮融资。该项目旨在通过使用零知识(ZK)技术将比特币区块链转化为智能合约场所,使比特币成为可编程资产。Citrea表示,增加比特币的实用性非常重要。Citrea是一个比特币项目,致力于通过使用零知识技术扩展原始加密货币的实用性,并宣布获得了1400万美元的A轮融资。

  • BTC跌破71000美元

    行情显示,BTC跌破71000美元,现报70990美元,24小时跌幅达到1.32%,行情波动较大,请做好风险控制。

  • SUI跌破2美元

    行情显示,SUI跌破2美元,现报1.99美元,24小时跌幅达到1%,行情波动较大,请做好风险控制。

  • BNB跌破580美元

    行情显示,BNB跌破580美元,现报579.3美元,24小时跌幅达到3.14%,行情波动较大,请做好风险控制。