注册
指示

暗网·第4章:什么是I2P及其工作原理

  • 2023年10月24日 23:38
  • 2 分钟

暗网·第4章:什么是I2P及其工作原理

在上一篇文章中,我们讨论了Freenet 和 Tor 浏览器,以及使用它们可以在暗网上做什么。

在这篇文章中,我们将讨论什么是 I2P 网络、它如何运作、处理哪些任务。

在本系列的其他文章中:

• 暗网·第一章:什么是暗网以及为何要使用它 

• 暗网·第二章:洋葱网站如何工作 

• 暗网·第三章:什么是 Freenet

• 暗网·第四章:什么是 I2P及其工作原理 ← 您在这里

• 暗网·第五章:如何通过 Tor、I2P 和 Freenet 进入暗网


什么是I2P

I2P也是一个匿名点对点网络,在常规互联网之上运行。它是去中心化的,所以没有 DNS 服务器,取而代之的是自动更新的“地址簿”。地址的角色由加密密钥充当,且不由真实电脑生成。网络的每个用户都有自己的密钥,无法被跟踪。

如欲详细了解点对点网络,欢迎阅读文章“暗网·第一章:什么是暗网以及为何要使用它”。

I2P网络于 2003 年诞生,是一个开源项目。现在它也是一个完全开放的项目,得到全世界爱好者的开发和支持。

所有中间节点都是骗子 ——I2P正是基于这种观念被创建的。 因此,I2P中的所有隧道都是单向的:入站流量沿着一个节点链传输,而出站流量沿着另一节点链传输。 此外,I2P 中的所有信息都经过加密并叠加在彼此的隧道上。 因此,窃取特定请求非常困难。

I2P如何工作

在 I2P 中,所有请求都在发送方加密,并使用 NTCP2 和 SSU 算法在接收方解密。 这种加密方式类似于TCP 和 UDP,它们对传输到路由器的所有信息进行加密。

因此,任何人,包括中间节点,都无法拦截请求。中间节点不知道在它之后请求会面临什么:被处理,抑或被继续传递下去。

I2P 包括: 

• 具有I2P 地址和常规IP 的路由器。其实这些都是中转节点,彼此一样,毫无差别。

• 端点——真实位置未知的服务器或客户端。

• 隧道——请求经过的路径,其中包含多个路由器。

路由器、传输节点是服务器链路的一部分,用于形成隧道以传输请求。同时,没有人知道是什么请求以及通过哪个隧道发送的请求。另外还有一个特点:用户自己确定请求的目的地、隧道的长度及其数量。

可以把隧道想象成一辆普通的卡车,正经过几个检查站。卡车没有在任何检查站停留,所以没人知道卡车去哪,里面装着什么。同时,车可以被所有人看到,但只有检查人员才能让它停下。


I2P请求路径:图中的空心圆表示分散在世界各地的路由器。 绿色 – 出站隧道,红色 – 入站隧道。至于二者的区别,我们接下来会讲。

端点更复杂。端点本质上是类似于常规网络的“服务器”。也就是说,请求就像到路由器那一样到它那里。但没人知道网络的端点到底是哪个节点。也没人知道传输了什么样的数据、传输到了哪里。只有目标端点才知道是什么数据。因此,端点是无法被找出来的。

为便于理解,我们先引入两个概念——租约集(LeaseSet)和泛洪算法(floodfill)(Floodfill或Routerinfo)。

租约集是 I2P 中的信息集合,其中包含有关输入隧道、加密密钥和最终地址的数据。 

泛洪算法是一个路由器,充当指南,存储租约集并知道用户正在寻找的位置。如果不知道,它会将请求重定向到另一个服务器。

I2P 中的每个用户都可以成为泛洪算法。为此,只需在软件设置中打勾。具体设置我们以后会讲。 

当用户在 I2P 中搜索内容时,它会从随机泛洪算法中请求特定的租约集。

如果泛洪算法不知道请求的地址,它会将请求转向其他三个泛洪算法的地址。而这三个地址反过来也会检查自己数据库中的租约集。 依此类推,直到找到所需地址。


用户对泛洪算法发起请求的图示。实际上,一切要复杂得多,很重要的部分我们还没来得及谈,接下来我们会讲。 

所需泛洪算法会根据目标地址和今日日期进行选择。从这些信息中,可以导出 SHA256哈希 - 获得与常规地址那么长的数据。

哈希是对数据执行数学或逻辑运算的函数。大量的信息会被转换成相对较短的字符串,并作为数据标识符。 例如,如果两张图片相差哪怕只有一个像素,它们的哈希值也将不同。

然后系统在路由器的本地路由库中查找泛洪算法,并选择对“目标地址+日期”块使用异或运算时给出最小数字的文件。

其实这是一个访问泛洪算法的函数,它能帮助我们找到想要的地址。但地址是随机生成的,因此泛洪算法会给我们提供三个相邻地址,供我们搜索所需地址。选择带有日期的泛洪算法则用来对请求进行随机化处理。因此,每个对新地址的请求都将通过一个新的泛洪算法,并且它们每天都会更改。

一个活跃的网络节点在其数据库中平均有 5000 个活跃的路由器,并接受数百甚至数千个绝对随机的传输连接。

端点传递大量信息,因为每个端点通常包含三个输入隧道。 隧道可多可少,取决于发送方的设置。

发送方也可以不使用隧道直接访问节点。 需要指出,尽管节点不知道它是在不经过隧道直接被访问的,也不知道整个链路的长度,但发送方的匿名性仍然会打折扣,因为如果没有隧道,拦截请求虽然依旧很困难,但却是有可能的。

此外,每个传输节点都会定期询问一个随机的泛洪算法,继而从它那里接收三个新传输节点。 网络就是这样壮大并发现新泛洪算法的。 每个活跃的I2P 节点在其数据库中平均有 5000 个活动路由器,并接受数百甚至数千个完全随机的传输连接。

因此,大量的传输流量通过路由器,从而产生“白噪声”。 所以在大量信息中计算特定信息几乎是不可能的。

标识符作为 I2P 中的端点地址,依靠签名公钥生成。 哈希值能够计算一个特定长度的唯一字符串,并在末尾添加“.b32.i2p”伪域——这就是通常的内网地址的获取方式。

此外,内网地址会与常规可读域进行绑定。

隧道通过所选路由器列表形成路径,受到多级加密保护,路径中的每台路由器只能对其中的一级信息进行解密。解密后的信息包含下一个路由器的IP和下一级加密信息,这些信息将去往下一个路由器。 

隧道信息单向流动,每条隧道都有起点和终点。如需接收反馈消息,另需一条隧道。

每个隧道存在 10 分钟。为确保连接不中断,接收方和发送方均需提前创建新隧道并交换他们的租约集。

隧道工作方式如下:首先,建立一个出站隧道,它由几个节点组成。 每个节点解密一段包含指令的信息。 它们告知信息接下来被发送到哪个节点。

在出站隧道的端点,节点解密部分信息,表明链路已完成。

由于所有链路都是单向的,所以入站隧道的路径会告知最后一个节点。信息从而被返回给用户。


入站和出站隧道如何在 I2P 中工作

由于隧道类型不同(入站或出站隧道),最后一个节点或被称为Endpoint,或被称为Gateway。Endpoint表示终端节点,Gateway表示网关。终端节点的任务是将信息的各个部分收集到一个更大的数据包中,并通过网关将其发送给需要的用户。


终端节点在一个数据块中收集信息,而网关则将其发送给终端用户

例如,博格丹将数据发送给易卜拉欣。为进行数据传输,博格丹使用四个节点构建了一个出站隧道。易卜拉欣则使用五个节点构建入站节点。当博格丹发送信息时,信息首先通过出站隧道的四个节点到达终端节点,然后从那里经过网关出口并通过易卜拉欣的五个入站节点。    

如果易卜拉欣决定回应,那么将建立一条新路径。而节点数量将取决于博格丹和易卜拉欣的想法。

I2P 网络本身使用大蒜路由。

大蒜路由的工作原理

大蒜路由是大约 20 年前开发的,是一种构建隧道进行信息传输的方法,它会将多条消息加密并组合成一个请求。

大蒜路由被称为高级洋葱路由,Tor 网络也在使用它。当需要通过传输节点发送加密消息并向传输节点隐藏内容时,就使用大蒜路由。 

两种路由方法之间的主要区别在于,在大蒜路由中,可以同时在不同的丁香中加密多条消息,而在洋葱中只加密一条。


想要详细了解洋葱加密如何运转,请阅读文章“什么是 Tor 网络及其工作原理”。

当使用大蒜路由器传输消息时,消息会在与每个节点交互时进行加密和解密。 同时,在创建路径阶段,为每个节点提供下次跳转的路由指令。

在请求本身通过期间,消息通过隧道传输,并且仅对其端点可用。

I2P 中的大蒜是由几瓣丁香组成的信息块。其中一部分是用户所需的消息,另一部分是中转消息。

例如,当一个用户想要向另一个人发送信息时,信息会变成丁香,被添加到来自其他网络成员的其他信息块中——形成大蒜。大蒜经过特殊算法加密后传输到不同的网络节点。


大蒜加密如何处理来自Amy的请求的图示


具有所需信息的电脑传输大蒜请求的图示

每个大蒜都包含每个丁香创建者需要的信息:

• 创建者路由器上的隧道号 —— 4 字节的随机信息。

• 下一个路由器的地址及路由器上的隧道号。

• 对称加密密钥和初始化矢量加密密钥。初始化向量是添加到加密密钥并提高其安全性的随机或伪随机字符序列。

• 节点在链中的角色:中转节点或终端节点。

每个丁香都由它本身所包含的信息的第一个字节来标识——这是其地址散列的一部分。当接收方找到想要的丁香时,会通过加密密钥来对内容进行解密。来自其他丁香的信息则无法被解密,因为该信息是为其他接收方准备的,受其他密钥保护。

当 4 名参与者参与隧道建设时,大蒜将由 4 瓣丁香形成。 在其他情况下,大蒜由 8 个部分和 8 个参与者组成 - 系统无法容纳更多人建设隧道。如果大蒜中留有空的丁香,它们会被随机信息填满。


总结:请求和网络如何交互

首先,用户创建请求并为其形成隧道。请求通过入站隧道经过几个中转节点到达终端节点→从随机泛洪算法请求租约集。

中转节点用于确保终端节点的位置不被任何人跟踪。

跟随请求到达终端节点的还有入站隧道的数据。这些数据是为了确保请求及响应可以返回给用户。

当请求到达服务器时,它会生成响应并将其发送给用户。由于 I2P 中的隧道是单向的,因此服务器通过自己的出站隧道发送响应。接收方的地址就是最初向服务器发出请求的入站隧道。

这是它的通用图示


看起来很难很混乱,让我们一步一步讲。


第一步:服务器在泛洪算法上发布自己的租约集。为此,需通过出站隧道发送租约集。 

第二步:用户连接到这个服务器。为此,用户需要通过他的出站隧道向泛洪算法发送请求。 

第三步:泛洪算法通过用户的入站隧道向此人的电脑发送响应。


描述已自动生成" src="https://lh7-us.googleusercontent.com/256YGkZLPfwRl3UDonMlkUHCXPtVxbp0SRXN3y2wliD1PNRCYjKMn7lJcRzNO4gwZwcK5LuX2__jarNK_oZM_j8nOmAM-fkgSgE3UlIvN6U_VKCogkl07t8V17f7AXxDpIbiKFhCKhqw_2xmfwo9ug" width="554" height="206" style="margin-left:0px;margin-top:0px;">

第四步:用户向服务器发送请求。请求先是通过用户的出站隧道进入用户的入站隧道。 


第五步:服务器响应用户。它通过服务器的出站隧道发送响应,然后进入用户的入站隧道并最终到达用户的电脑。之后,用户便可打开所需资源。


I2P 通过哪些客户端工作

I2P 网络是基于两种技术——Java 和 C++ ——建立的。最初,该项目是用 Java 创建的,命名为 I2P,2013 年,一位绰号为 Original 的爱好者用 C++ 创建了一个 I2P 客户端,并将其命名为 I2Pd。 它比之前的版本要好得多。原因如下:

I2Pd 在架构上优于 Java 版本。因为I2P 包含大量密码学,很难通过 Java 实现,会发生严重滞涩。有尝试过解决这个问题:在 Java 路由器中添加了用 C 语言编写的库,但每次调用这些库都是一个很大的开销。 

而在C++中,所有的密码学都内置在网络中并在本地工作——无需加载网络。 

除了网络快速运转外,I2Pd 中的路由器对系统资源的消耗也更少。因为C++程序直接与系统交互。而在Java 版本中,一切都在虚拟机中运行,虚拟机充当操作系统和软件之间的夹层。

I2Pd还有一个优点,就是速度快。在常规的 I2P 连接中,会经过几个 Java 路由器,所以处理请求的时间更长,互联网速度也无法超过几万比特。在C++中,请求的处理速度更快,因此连接速度最高可达一兆。


I2P与Tor的区别

两种网络之间的主要区别之一是 Tor 是客户端网络,而 I2P 是服务器网络。Tor 的任务是隐藏发出请求的客户端IP 地址。I2P的任务是隐藏用户向其发出请求的服务器。但也有其他差别:  

1. I2P 中的隧道是单向的,而Tor 中隧道则是双向的。也就是说,在 I2P 中,流量通过一个隧道到达接收方,然后通过另一个隧道返回到发送方。

2. Tor使用洋葱加密,而I2P使用大蒜加密。两种类型的加密都是可靠的,但在洋葱加密中,流量是分层保护的,而在大蒜加密中,还会为每个接收方的流量进行分块保护。也就是说,大蒜加密的最终保护级别更高。

3. 在 I2P 中,任何网络参与者都不知道谁是发送方,谁是接收方。并且 Tor 有一个中间节点,它知道文件来自哪里以及需要发送到哪里。

4. 如果 Tor 在您的国家被禁止,那么就无法顺利连接它。它将无法找到构建网络的入站节点并明确将消息发送给谁。

而在I2P中,哪怕有泛洪算法被禁止,自己也可以另设一个,从而得到网络入口节点列表。第二次使用时您无需指定任何内容,因为此前已获取了网络的输入节点,软件将使用它们。可见I2P 中的容错能力高于 Tor。

5. Tor不仅适合进入暗网,也适合使用普通互联网。例如,通过 Tor可以访问常规社交网络或使用流媒体服务。I2P 仅用于在其网络上进行消息传递,尽管 I2Pd 几乎具有常规互联网的所有功能。 

6. I2P最初是一个由爱好者开发的开源项目。他们的目标是创建一个匿名且安全的互联网。而Tor网络最初是由政府发明的,现在它可以识别特定用户。

例如,在 2016 年,美国修订了第 41 条规则。这使 FBI 有权使用单一授权在世界任何地方大规模入侵任意数量的计算机。如此一来,执法部门有权侵入节点并查出您的机密信息。这件事发生在2016年。那时,联邦调查局入侵了 120 个国家的8000 台计算机。

事实证明,I2P 比 Tor 更好,因为该网络最初的构建宗旨是怀疑所有人,不相信任何人。每个人的行为都被隐藏。而使用 Tor,恰恰相反,可以对用户进行去匿名化处理,已经发生过这样的案例。