注册
指示

暗网·第三章:什么是 Freenet

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

暗网·第三章:什么是 Freenet

使用常规浏览器发送请求是无法进入暗网的。要想进入暗网,就需要建立一个特殊网络并写出正确的网站名称——否则无法获取内容。

在本文中,我们将告诉您通过哪些网络可以进入暗网以及可以访问哪些资源。

在之前的文章中:

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

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

• 暗网·第三章:什么是 Freenet  ← 您在这里

• 暗网·第四章:什么是 I2P,它如何工作? 

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


什么是Freenet 

Freenet是一个去中心化的匿名点对点网络,在常规互联网之上运行。Freenet里没有我们习以为常的服务器,网站也无人托管。网络里的每个人都是一台存储了部分信息的服务器。

在“暗网·第一章:什么是暗网以及为何要使用它”一文中我们详细讲述了有关点对点网络的工作原理。

Freenet实际上是一个大型数据仓库,用户可以将他们的信息上传到其中,然后其他有权访问 Freenet 的人也可以使用这些信息。

有服务器的传统网络和P2P网络的区别


与其他点对点网络不同,Freenet 用户无法控制他们数据仓库中的内容。相反,文件的去留取决于它们的受欢迎程度。 这使得 Freenet 无惧审查。没有“删除文件”这一操作。

Freenet网络于 2000 年推出,用于在全世界,包括中国和近东地区,传播经过审查的信息。 

Freenet如何运作

每个网络节点都是一个本地信息仓库,用户不仅可以从中接收数据进行读写,还会接收一个动态路由表。该表包含其他节点的地址和存储于节点中的密钥。我们稍后会对其进行讲解,现在先说说工作原理。

按照创建者的理论,大多数系统参与者都应该运行自己的专属节点,以保护自己和其他用户免于意外使用外部恶意节点,并整体提高网络可用的存储容量。

为此,需要提供自己电脑的通道容量和部分硬盘驱动供系统运行及存储信息。

其工作原理如下:对密钥的请求通过代理链从一个节点传输到另一个节点,其中每个节点自己决定接下来将请求发送给哪个节点。

密钥类型不同,路由也会有所不同。 此外,每个文件的路由都会随着时间的推移发生改变,以便网络成员可以更快地下载文件。路由的调整受路由算法和网络工作机制的影响。

路由描述如下:当用户连接到网络时,会从种子节点(其本质是节点存储库)加载各个节点的地址。 之后,用户在网络上创建请求并将其发送到各个节点以搜索信息。

而且,节点之间的连接是加密的,并且从一个节点到另一个节点的连接要经过其他数个节点。 这能够保障请求发送者和请求本身的匿名性。

而节点之间的交互可以比作分布式哈希表,需要它来搜索某些用户数据。

哈希表是一种特殊的数据结构,用于存储键值对。其本质就是一个表格。 需要从中获取数据时,将某个特定值代入输入函数中,接下来就会收到所需信息的地址。

哈希表示例



还有另一种获取节点地址的方法——连接到你认识的人的网络。 要想连接到熟人的网络,他们每个人都必须亲自说出他们的节点 ID。 当所有人都交换ID并相互连接时,就形成了一个网络,它被称为freenet暗网。 其实可以通过这种方式在几个人之间建立自己的 VPN。

当用户向网络发送带有密钥的请求时,它会被转送给一系列随机节点,直到找到具有所需信息的节点。

搜索信息的流程大致如下:首先,请求转到一个节点。 如果该节点没有所需信息,它会将请求重定向到哈希表中距离自己最近的另一个节点。 依此类推,直到在其中一个网络节点上找到信息。

找到信息后,节点会从其他节点沿着链路将信息发送给用户。在这种情况下,出发节点不知道信息的最终接收者是谁。传输节点也不知道在它们之前链路中有多少个节点,更不知道下一个节点是哪个:是最终节点,或者依旧是传输节点。 这样可保持用户和请求的匿名性。

文件分布的特点是网络上的节点越多,每个节点在其磁盘上提供的空间越多,网络上的文件就越多,它们存储在那里的时间也就越长。

在这种情况下,节点最终将具有专业化特征。 Freenet 算法的工作方式是这样的:节点知道该携带哪些密钥转到哪个节点。

并且,例如,如果一个节点没有文件,它也知道该去哪个节点查找信息并向它发送请求。查询结果带着文件反馈回来时,信息将通过第一个节点传递,且第一个节点会将文件保存到自己那。

简言之,该节点收集某种类型的文件,或者更确切地说,是密钥格式的文件。这增加了节点未来处理类似请求时能更快找到文件的可能性。


Freenet 请求的工作方式大体如上


在上述图示中我们省略了一些参数。 其中之一 - 请求首先会转到几个随机节点以搜索所需文件。而这些随机节点反过来又从它们自己的分布式哈希表向其他节点发送请求。 当找到具有所需文件的节点后,它会沿着节点链路向用户发送信息。接下来我们详细讲一讲。

我们处于“开始”节点,需要来自“数据”节点的信息。而且,“开始”节点不知道哪些节点携带着必要信息,也不知道该如何找到它们。于是,“开始”节点联系最近的节点 A 并询问它是否具有所需的信息。

节点 A 没有所需信息,但它可以去问其他节点。于是,它向随机节点发送请求。我们假设它叫节点 B。也就是说,节点 A问节点 B 是否有所需信息。

节点 B 回答说他没有此信息,也不知道哪些节点有所需信息。于是,节点 A 转到下一个节点C,并询问它是否有所需信息。

节点 C 说它没有所需信息,但知道有两个节点可能有信息,于是将请求重定向给它们。

第一个请求转到节点 D,但 D 没有所需信息,于是它将请求重定向到可能有该信息的另一个节点。 在图示中,节点 D 向节点 A 发送请求,而正是节点 A最初请求帮助查找信息。于是,节点A回复节点D说它自己正在寻找这个信息。

为了防止节点 A → C → D 的循环,每个节点都存有一份名单,这份名单里是它发送过请求的所有其他节点。 当一个节点想要向另一个节点发送请求时,它会先检查列表,确认之前是否联系过某个节点。

节点 D 回复节点 C,它没有其他熟悉的节点了,所以无处寻找信息。于是节点 C 向它已知的另一个名叫“数据”的节点发送请求。“数据”节点给了节点 C 所需信息,而C则将其返回给节点 A,然后节点 A 返回给“开始”节点。最终,所需信息被找到,并顺着路径逆序发送到请求节点。

如果请求成功,该节点会将请求连同信息一并返回给前一个节点,并把文件存储在自己的数据存储库中。此外,它还会在自己的路由表中创建新条目,将数据源与请求的密钥相关联。

这个路由表可以让节点在以后将类似请求首先发送给那些很可能存有所需信息的节点。

为防止节点无休止地传递下去,网络中的每个请求转向下个节点的次数都受限制。节点传递的次数由用户在发送请求时设置。

如果在一定的传递次数内找不到所需节点,则不执行请求。

此外,每个节点都分配了一个标识号,以确保每次传递都是从一个节点到另一个新节点。 并且每个请求都会获得一个伪唯一标识符,以便节点可以提前拒绝处理该请求。这是为了让节点不去处理它们已经见过但没有答案的请求。它们会立即将请求转到另一个节点链。

Freenet 网络上文件如何分发

文件在上传过程中会被分成碎片并随机加密存储在网络中的许多其他计算机上。 此外,被拆分的文件的每个部分都会被复制到多台计算机上。

因此,如果其中一台带有部分文件的计算机掉线或从网络中消失,用户可从另一台计算机接收它。

这就是文件在网络上的分布方式:每个节点都存储部分信息



当另一个人想要下载文件时,文件的各个部分会被检测到并重新组合。 这就像 种子(Torrent)文件:网络随机连接到有所需文件各个部分的人并下载文件。但有一点不同:在 Freenet 上多个节点同时寻找所需文件。会形成链路:请求节点→中转节点→携带信息节点。

当所需信息被找到后,信息会沿着同一条链路返回并存储在它经过的节点上。

文件越受欢迎,就有越多人将其部分内容存储在自己的电脑里,文件下载速度就越快。 如果没人对该文件感兴趣,那么随着时间的推移文件将从节点消失,被更重要的文件所取代。而隐藏文件是不能被任何人所看到的,除非有人再次将它完整地上传到网络上。

Freenet 中使用哪些密钥

Freenet网络使用加密密钥,而非常见的 URL。事实上,为了加载站点或其他信息,必须在请求中指定密钥。此类密钥由文件哈希码或 DSA 密钥构成。

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

DSA 是一种加密算法,使用私钥和公钥创建电子签名,以确认电子文档的署名权。 在这种情况下,私钥的任务是创建签名,公钥则负责验证收到的签名。

例如,在 Freenet网络中DSA密钥与网站创建者及网站本身所绑定。因此,没有DSA密钥的话,其他任何人将无法更改网站架构。

在本文中我们就不赘述DSA 密钥的运行原理了,因为这是一个庞大且困难的话题。

此外,没有密钥的话,您无法更改或删除文件。 Freenet中一共有四种类型的密钥:

• CHK——内容哈希密钥;

• SSK——标识子空间索引密钥;

• USK——更新密钥;

• KSK - 关键字签名密钥。

CHK - 适用于具有静态内容文件的密钥,例如 .mp3 或 PDF 文档。它们是文件内容哈希密钥。

例如,典型的 CHK 如下所示:

CHK@SVbD9~[..]X5Brs,bA7qLN[..]Si6bbNQ,AAEA--8

SSK – 适用于会随着时间进行更新的网站,例如,发布新闻稿的新闻网站。 它的作用是保障其他人在没有 SSK 密钥的情况下不能对您的站点进行更改。  

典型的 SSK 密钥如下所示:

SSK@GB3wuHmt[..]o-eHK35w,c63EzO7u[..]3YDduXDs,AQABAAE/mysite-4

USK – 用于隐藏网站的历史版本并仅显示当前版本。其工作原理如下:当您访问一个网站时,USK 会访问该站点的版本列表,查找并加载网页最新版本。

USK示例:

USK@GB3wuHmt[..]o-eHK35w,c63EzO7u[..]3YDduXDs,AQABAAE/mysite/5/

KSK - 帮助保存 Freenet 网络上的页面。 KSK 地址如下所示:

KSK@myFile.txt

Freenet的安全性

Freenet 网络的安全性通过多种方法保障:

1. 将文件分割成几份并在节点上加密。如此一来,没有人可以从网络上完全删除该文件,因为它同时存储在多个节点上。

2. 没有任何一个节点可以看到请求路径。它只知道上一个节点和下一个转送请求的节点。

3. 使用哈希表和私钥,没有它们就无法发送请求和接收请求结果。因此,黑客无法假装他们的节点包含必要的信息从而将流量引向自己。假节点根本无法通过私钥和哈希表的检验。

4.隐藏文件的真实来源。 有时,具有某些信息的随机节点称自己为真正的信息源,因此很难准确确定文件最初是在哪个网络节点上传的。

Freenet有一个安全漏洞 - 假种子节点。因为您永远无法确定您连接的节点并非恶意节点。也没有办法来检查节点的可靠性。

此外,几乎无法看到存储在 Freenet 上的内容,因为每个文件都是隐藏的,并且可以在不同的计算机之间拆分成多个部分存储。

还有一个问题 – 匿名性的丧失。经常处理相同请求的节点会被存储在用户的哈希表中。如此一来,处理下一个请求时速度会更快,用户电脑也能快速保存所需信息。

也正因为如此,如果政府或黑客进入您的电脑并发出某种请求时,发现信息会快速存储在您的电脑上,他们就会明白您反复查看了该下载文件。


讲解Freenet时用到的相关信息来源

• Freenet官方网站。

• Freenet 研究资料:Freenet: A Distributed Anonymous InFormation Storage and Retrieval System(Freenet: 分布式匿名信息存储和检索系统)。

• 一篇关于Freenet 运行原理的文章。