Tor 是一个强大的开源网络,可以实现匿名和不可追踪(或难以追踪)的互联网浏览。它之所以能够实现这一点,是因为用户运行 Tor 节点,这些节点充当两个原本直接路径之间的有意绕道。例如,如果您身处新西兰并访问 python.nz,您的流量可能不会直接路由到运行 python.nz 的数据中心隔壁,而是可能路由到匹兹堡,然后是柏林,再到瓦努阿图,最后才到达 python.nz。Tor 网络建立在自愿加入的参与者节点之上,具有不断变化的结构。只有在这个动态的网络空间中,才可能存在一个令人兴奋的、短暂的顶级域名标识符:.onion 地址。
如果您拥有或正在创建网站,您可以生成一个个性化的 .onion 站点,以保护您和访问者的匿名性。
什么是 onion 地址?
由于 Tor 是动态的,并且有意以不可预测的方式重新路由流量,因此 onion 地址使得信息提供者(您)和访问信息的人(您的流量)都难以被彼此、中间网络主机或外部人员追踪。通常,onion 地址看起来不吸引人,名称由 16 个字符组成,例如 8zd335ae47dp89pd.onion。这种地址不易记忆,并且在被欺骗时难以识别,但一些以 Shallot(fork 为 eschalot)告终的项目提供了“个性化” onion 地址来解决这些问题。
自行创建个性化 onion URL 是可能的,但计算成本很高。要获得您想要的精确的 16 个字符,单台计算机可能需要数十亿年的时间才能实现。
这是一个粗略的示例(由 Shallot 提供),说明在 1.5GHz 处理器上生成特定长度的字符需要多长时间
字符数 | 时间 |
---|---|
1 | 少于 1 秒 |
2 | 少于 1 秒 |
3 | 少于 1 秒 |
4 | 2 秒 |
5 | 1 分钟 |
6 | 30 分钟 |
7 | 1 天 |
8 | 25 天 |
9 | 2.5 年 |
10 | 40 年 |
11 | 640 年 |
12 | 1 万年 |
13 | 16 万年 |
14 | 260 万年 |
我喜欢这个表格从 25 天跳到 2.5 年。如果您想生成 56 个字符,则需要 1078 年。
具有 16 个字符的 onion 地址称为版本 2 onion 地址,而具有 56 个字符的地址是版本 3 onion 地址。如果您正在使用 Tor 浏览器,您可以查看这个 v2 地址 或这个 v3 地址。
v3 地址比 v2 有几个优势
- 更好的加密(v3 用 SHA3/ed25519/curve25519 替换了 SHA1/DH/RSA1024)
- 改进的目录协议,向目录服务器泄露的信息更少
- 改进的目录协议,针对定向攻击的暴露面更小
- 更好的 onion 地址安全性,防止冒充
然而,v3 的缺点(据称)是您可能需要进行营销努力,才能让网民在浏览器中输入马拉松式的 URL。
您可以在 Tor 文档中 了解更多关于 v3 的信息。
为什么您可能需要 onion 地址
.onion 域名具有一些关键优势。其主要特点是只能通过 Tor 浏览器访问。许多人甚至不知道 Tor 的存在,因此您不应期望您的 .onion 站点有大量的流量。但是,Tor 浏览器提供了许多在更流行的浏览器中无法获得的匿名层。如果您想确保您和访问者都接近完全匿名,那么 onion 地址就是为此而构建的。
使用 Tor,您无需在 ICANN 注册即可创建自己的域名。您无需从 Whois 搜索中隐藏您的详细信息,并且您的 ICANN 帐户不会容易受到恶意接管的影响。您完全掌控您的隐私和域名。
Onion 地址也是绕过政府或政权施加的审查限制的有效方法。如果您的网站可能被视为对政治阶层利益的威胁,那么它的隐私性可以帮助您受到保护。维基解密 (Wikileaks) 等网站是最好的例子。
生成个性化 URL 所需的工具
要配置个性化 onion 地址,您需要生成一个新的私钥来匹配自定义主机名。
您可以用于生成 .onion 地址的两个应用程序是用于 v2 地址的 eschalot 和用于 v3 地址的 mkp224o。
Eschalot 是一个 Tor 隐藏服务名称生成器。它允许您使用暴力破解方法生成(部分)自定义的个性化 .onion 地址。Eschalot 以源代码形式在 BSD 许可证下分发,应该可以在任何 Unix 或 Linux 系统上编译。
mkp224o 是一个用于 ed25519 .onion 服务的个性化地址生成器,可在 GitHub 上获得,并采用 CC0 1.0 Universal 许可证。它生成个性化的 56 字符 onion 地址。
以下是这些应用程序工作原理的简单解释。(这假设您熟悉 Git。)
Eschalot
Eschalot 需要 OpenSSL 0.9.7 或更高版本的库以及源文件头。使用以下命令确认您的版本
$ openssl version
OpenSSL 1.1.1c FIPS 28 May 2019
您还需要 Make 实用程序(BSD 或 GNU Make 均可)和一个 C 编译器(GCC、PCC 或 LLVM/Clang)。
将 eschalot 仓库克隆到您的系统,然后编译
$ git clone https://github.com/ReclaimYourPrivacy/eschalot.git
$ cd eschalot-1.2.0
$ make
如果您不使用 GCC,则必须设置 CC 环境变量。例如,要改用 PCC
$ make clean
$ env CC=pcc make
使用 eschalot
要查看 Echalot 的帮助页面,请在终端中键入 ./eschalot
$ ./eschalot
Version: 1.2.0
usage:
eschalot [-c] [-v] [-t count] ([-n] [-l min-max] -f filename) | (-r regex) | (-p prefix)
-v : verbose mode - print extra information to STDERR
-c : continue searching after the hash is found
-t count : number of threads to spawn default is one)
-l min-max : look for prefixes that are from 'min' to 'max' characters long
-n : Allow digits to be part of the prefix (affects wordlist mode only)
-f filename: name of the text file with a list of prefixes
-p prefix : single prefix to look for (1-16 characters long)
-r regex : search for a POSIX-style regular expression
Examples:
eschalot -cvt4 -l8-12 -f wordlist.txt >> results.txt
eschalot -v -r '^test|^exam'
eschalot -ct5 -p test
base32 alphabet allows letters [a-z] and digits [2-7]
Regex pattern examples:
xxx must contain 'xxx'
^foo must begin with 'foo'
bar$ must end with 'bar'
b[aoeiu]r must have a vowel between 'b' and 'r'
'^ab|^cd' must begin with 'ab' or 'cd'
[a-z]{16} must contain letters only, no digits
^dusk.*dawn$ must begin with 'dusk' and end with 'dawn'
[a-z2-7]{16} any name - will succeed after one iteration
您可以使用 eschalot 生成以 -p 为前缀(代表 privacy,即隐私)的地址。假设您的系统具有多个 CPU 核心,请使用多线程 (-t) 来加快 URL 生成速度。要获得详细输出,请使用 -v 选项。将您的计算结果写入名为 newonion.txt 的文件
./eschalot -v -t4 -p privacy >> newonion.txt
脚本将执行直到找到合适的匹配项
$ ./eschalot -v -t4 -p privacy >> newonion.txt
Verbose, single result, no digits, 4 threads, prefixes 7-7 characters long.
Thread #1 started.
Thread #2 started.
Thread #3 started.
Thread #4 started.
Running, collecting performance data...
Found a key for privacy (7) - privacyzofgsihx2.onion
要访问 eschalot 生成的公钥和私钥,请在 eschalot 文件夹中找到 newonion.txt。
mkp224o
mkp224o 需要 C99 兼容的编译器、Libsodium、GNU Make、GNU Autoconf 和类 Unix 平台。它已在 Linux 和 OpenBSD 上进行过测试。
要开始使用,请将 mkp224o 仓库克隆到您的系统上,生成所需的 Autotools 基础设施,配置并编译
$ git clone https://github.com/cathugger/mkp224o.git
$ cd mkp224o
$ ./autogen.sh
$ ./configure
$ make
使用 mkp224o
键入 ./mkp224o -h 以查看帮助
$ ./mkp224o -h
Usage: ./mkp224o filter [filter...] [options]
./mkp224o -f filterfile [options]
Options:
-h - print help to stdout and quit
-f - specify filter file which contains filters separated by newlines
-D - deduplicate filters
-q - do not print diagnostic output to stderr
-x - do not print onion names
-v - print more diagnostic data
-o filename - output onion names to specified file (append)
-O filename - output onion names to specified file (overwrite)
-F - include directory names in onion names output
-d dirname - output directory
-t numthreads - specify number of threads to utilise (default - CPU core count or 1)
-j numthreads - same as -t
-n numkeys - specify number of keys (default - 0 - unlimited)
-N numwords - specify number of words per key (default - 1)
-z - use faster key generation method; this is now default
-Z - use slower key generation method
-B - use batching key generation method (>10x faster than -z, experimental)
-s - print statistics each 10 seconds
-S t - print statistics every specified ammount of seconds
-T - do not reset statistics counters when printing
-y - output generated keys in YAML format instead of dumping them to filesystem
-Y [filename [host.onion]] - parse YAML encoded input and extract key(s) to filesystem
mkp224o 工作时需要一个或多个过滤器。执行时,mkp224o 会创建一个目录,其中包含每个已发现服务的密钥和公钥,以及主机名。默认情况下,root 是当前目录,但可以使用 -d 开关覆盖它。
使用 -t numthreads 选项定义您要在处理期间使用的线程数,并使用 -v 查看详细输出。使用 fast 过滤器,并通过设置 -n 选项生成四个密钥
$ ./mkp224o filter fast -t 4 -v -n 4 -d ~/Extracts
set workdir: /home/areahints/Extracts/
sorting filters... done.
filters:
fast
filter
in total, 2 filters
using 4 threads
fastrcl5totos3vekjbqcmgpnias5qytxnaj7gpxtxhubdcnfrkapqad.onion
fastz7zvpzic6dp6pvwpmrlc43b45usm2itkn4bssrklcjj5ax74kaad.onion
fastqfj44b66mqffbdfsl46tg3c3xcccbg5lfuhr73k7odfmw44uhdqd.onion
fast4xwqdhuphvglwic5dfcxoysz2kvblluinr4ubak5pluunduy7qqd.onion
waiting for threads to finish... done.
在使用 -d 设置的目录路径中,mkp224o 会创建一个文件夹,其中包含它生成的 v3 地址名称,在其中您可以看到您的主机名、密钥和公钥文件。
使用 -s 开关启用打印统计信息,这在基准测试机器上不同的 ed25519 实现时可能很有用。此外,请阅读 mkp224o 中的 OPTIMISATION.txt 文件,以获取与性能相关的提示。
关于安全性的注意事项
如果您想知道 v2 生成密钥的安全性,Shallot 提供了一个有趣的观点
有时有人声称 Shallot 生成的私钥不如 Tor 生成的私钥安全。这是错误的。尽管 Shallot 生成的密钥对具有异常大的公共指数 e,但它执行了 PKCS #1 v2.1(直接在 sane_key 中)指定的所有健全性检查,然后执行了 Tor 在生成 RSA 密钥对时执行的所有健全性检查(通过调用 OpenSSL 函数 RSA_check_key)。
“Zooko 三角”(在 Stiegler 的宠物名系统 中讨论过)认为名称不能同时是全局的、安全的和易于记忆的。这意味着虽然 .onion 名称是唯一的且安全的,但它们的缺点是对于人类来说可能没有意义。
想象一下,攻击者创建了一个 .onion 名称,该名称看起来与另一个 onion 服务的 .onion 名称相似,并替换了 onion wiki 上的超链接。一个人需要多长时间才能识别出来?
onion 地址系统存在权衡,但个性化地址可能是它们之间合理的平衡。
评论已关闭。