












Freenet 是 Ian Clarke's 在 1999~2001 年于爱丁堡大学(University of Edinburgh)的学生项目。其是一个基于点对点的分布式信息存储和检索系统,其开源于 Github。其主要开发者也经过多次更迭。
官方的论文1可以在官方关于页面检索
严禁来说,Freenet 只是一个分布式的文件资源存储和检索系统,并不是严格意义的匿名通信工具,但是由于网站本身也是一种资源,因此可以在其内部搭建网站,并实现各种服务。与 Tor、I2P 等工具相比,其更类似于 BitTorrent 等技术。
Windows 环境下,直接下载安装包即可
在 Linux 下,原则上可以使用包管理安装。但是由于未知原因,Arch Linux 目前版本的包有问题,会安装失败,因此选择文档中的安装方式
wget 'https://github.com/freenet/fred/releases/download/build01485/new_installer_offline_1485.jar' -O new_installer_offline.jar;
java -jar new_installer_offline.jar -console
需要额外注意的只有一点,如果是纯命令行的 Linux,需要加上 -console 参数,而有图形界面的则不必加
安装完成后,进入安装目录,使用./run.sh控制 freenet 的运行
Your java executable at /bin/java seems suitable Usage: ./run.sh { console | start | stop | restart | status | dump }
六度分隔理论(Six Degrees of Separation, SDS)是一个广为人知的理论:任意两个互不相识的人,平均只需要通过 6 个人即可建立联系。
美国社会心理学专家 Stanley Milgram 曾经根据此问题进行了小世界时延,尽管实验本身由于各种外界因素被收到质疑,但是随着目前互联网技术的发展,各大平台的内部数据都可以证明该理论的正确性(任意两个维基词条的跳转次数,Facebook、MSN 的好友网络……)
而该理论在 P2P 网络中,则说明了即使每个 P2P 节点只有极少数的邻居,但是最终能将信息发送到任意一个节点
分布式哈希表(Distributed Hash Table, DHT)是一种根据哈希距离在分布式系统中检索数据的方法
要存放的数据会按照哈希距离(节点的哈希和文件哈希取异或计算距离)存放在距离其最近的节点中。每个节点会维护距离自己比较近的多个节点信息以及特定区间内的部分节点数据(K-桶)
要查询时,如果当前节点知道要查询的节点信息,则直接返回对应的节点信息;否则则会计算对应的节点在某个 K-桶 中,并将查询转发给自己认识的对应桶内的节点,由其进行进一步查询。
由于二叉树的特点,该查询效率是 O(log(n))O(log(n)) 的。
使用该方式,可以快速将查询送至距离结果较近的节点,并且由于每个节点会优先与距离自己近的节点建立连接,因此会很快得到查询结果
Freenet 中每一个文件都存在一个键用以作为资源索引符。大部分的键都是散列的,且不存在相关性
要访问Freenet的资源,可以使用 FProxy 来访问资源,类似于http://localhost:8888/[Freenet KEy]
在 Freenet 中,有下面几种键
由于哈希的特点,同一个 CHK 只会对应一个文件,即使节点的改动很小,仍然会生成不同的 CHK。
每一个 CHK 将包含下面三部分:
其格式为: CHK@file hash,decryption key,crypto settings
一个实际的例子是: CHK@SVbD9~HM5nzf3AX4yFCBc-A4dhNUF5DPJZLL5NX5Brs,bA7qLNJR7IXRKn6uS5PAySjIM6azPFvK~18kSi6bbNQ,AAEA--8
要访问该地址,只需要通过 FProxy 中访问: http://localhost:8888/CHK@SVbD9~[..]X5Brs,bA7qLN[..]Si6bbNQ,AAEA--8
符号子空间键主要用于那些可能会随着时间改变的站点,如网站可能会对内容进行增删改。
使用 SSK 可以确保用户可以使用一个固定的内容访问你的资源,同时确保只有所有者可以对其进行修改
每一个 SSK 包含五个部分:
由于无法更新 Freenet 中已插入的数据,因此在这里版本需要是确保递增的
使用 USK 可以确保这部分内容对用户透明
其格式为: SSK@public key hash,decryption key,crypto settings/user selected name-version
一个实际的例子是: SSK@GB3wuHmt[..]o-eHK35w,c63EzO7u[..]3YDduXDs,AQABAAE/mysite-4
SSK 工作方式:
签名存储在文件中,节点不存储对称密钥只存储 SSK 的公钥,作为数据的索引。这么做可以保证节点的拥有者可以验证文件是否被修改,同时只有有密钥的访问者可以解密文件本身
SSK 基本已经被 USK 替代,USK 可以理解成是支持自动检索最新版本的 SSK
实际上 USK 是一个对用户友好的 SSK 包装器,其隐藏了搜索站点最新版本的过程
一个典型的 USK 密钥格式: USK@public key hash,decryption key,crypto settings/user selected name/number/
除去少了版本号外,其与 SSK 几乎相同
USK 有两个版本:
允许在 Freenet 中保存指定的页面,不同人可以各自插入不同的文件,且拥有相同的地址
由于任何人都可以插入同名的文件从而导致将访问指定文件的流量截取,但是仍们可以更容易地记住可读的链接
KSK 可以包含对 CHK 的重定向,也可以包含文件本身
其格式: KSK@myfile.txt
容器是一个最大不超过 2MB 的压缩包
当要加载一个页面时,可以使用一个键获得该页面对应的所有文件
对于目前版本的 Freenet,连接存在两种模式:
一般而言,要确保功能正常使用,至少需要确保有 3 个节点能够持续连接,理想状况下应该有 5~7 个节点。而由于有些节点可能会下线,因此需要保证更多的节点连接才能获得预期的效果。通常而言,需要保证有十个好友后,才可以关闭不安全模式。
对于每个节点而言,只有与其直接连接的节点(好友)才是可见的,并且流量也只会被发送到这些节点。
尽管每个节点只能和自己认识的节点连接,但是由于每个人都会连接自己认识的人,根据六度分隔理论2,节点可以通过中转连接到其余任意一个节点,实现访问整个网络。
用于 IPv4 的地址数量问题,(国内)很多设备并没有公网 IP,只能通过 NAT 转发上网。由于没有中央服务器的存在,无法进行 UDP 打洞,因此要求节点应该手动设置 NAT 的端口转发。(如果不设置,只有在邻居中存在有公网 IP 或者转发端口的 NAT 才能建立连接)
无论是要上传(插入)文档还是要下载(检索)文档,都将与和自己所能联系到的,与文件哈希距离最近的节点建立连接。这个过程很类似于分布式哈希表3
也即任务为:当前节点要寻找距离指定文件哈希值最近的节点
首先,发出请求的节点,要生成一个请求,请求包含以下内容:
该请求将会采用深度优先遍历(Depth-first Search, DFS),在网络中进行遍历。由于要寻找的是距离特定哈希值最近的节点,因此将优先遍历距离该哈希最近的节点
每个节点收到请求时,会首先检查自己是否存在对应的文件,如果存在则将文件返回,否则会继续向按照距离顺序向自己认识的节点转发请求。如果节点收到请求时,跳数或深度超过限制值,则其会直接拒绝请求。
在返回文件的过程中,从请求发起节点和拥有文件所属节点所途径的所有结点都会自己保存一份文件,以加速下次请求的速度。同时在这个过程中,节点可能认识更多新的陌生节点,并将其加入自己的邻居节点
按照上述的流程,尽管在网络构建初期,其路由近似随机构建,但是随着使用次数的增加,其会按照键来对文件进行集群,借助该模式,整个网络中文档将会被划分成多个集群,从而加速检索。
在检索内容的过程中,实际上文件内容和 CHK 并不需要有特殊的关系,只需要保证所有的节点都按照同样的算法检索即可。
比如可以按照节点 ID 与 CHK 取异或,按照结果中 1 的顺序从高到底开始尝试检索
当检索到内容时,由于这条检索线路上的所有节点都会保存一份文件,相当于文件在逐渐向节点 ID 异或 1 更多的节点“移动”(资源会随着检索次数的降低而被删除)
最终,随着整个网络检索次数的增加,文件将越来越趋近于它应该在的节点,总体的检索消耗会越来越小
在两个 Freenet 节点间建立一条新的连接,将会根据谈判类型(Negotiation Type,negType)决定握手阶段的协议:
Freenet 作为一个内容分发网络(Content Distribution Network, CDN),其还拥有如下优点:
由于部分内容可能会降低匿名性,因此 Freenet 会删除或替换危险的内容(如跳转到互联网的链接、插入的图像、插入的脚本)
Hanlin D. Qian 针对最初的论文进行了如下评价4:
传统文件存储系统存在的问题:
而 Freenet 则解决了这些问题,并且提供了如下优点:
Freenet 可能存在的缺点:
而在 Freenet 官网,也将 Freenet 和 Tor 等工具进行对比,并指出了其相对的优势以及弱势
优点:
缺点:
官方论文列表 ↩︎
六度分隔理论 ↩︎
分布式哈希表 ↩︎
Paper review: Freenet: A Distributed Anonymous Information Storage and Retrieval System ↩︎
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。