解析Tor V3 Onion域:提取公钥、校验和与版本信息

本教程详细介绍了如何通过编程方式解析tor v3 onion域名,以提取其核心组成部分:公钥、校验和以及版本号。文章将深入讲解base32解码过程和字节级的数据提取方法,并提供实用的php代码示例,指导您如何从给定的.onion地址中识别这些关键元素。

理解Tor V3 Onion地址结构

Tor V3 onion地址是隐藏服务在Tor网络中的标识符。与V2地址相比,V3地址更长、更安全,并包含了服务的身份公钥、一个版本字段和一个基本校验和。这些信息经过base32编码后形成我们常见的.onion地址。

根据Tor的隐藏服务协议规范(rend-spec-v3.txt),一个V3 onion地址的结构可以概括为:

onion_address = base32(PUBKEY | CHECKSUM | VERSION) + ".onion"

其中:

  • PUBKEY:是隐藏服务的32字节Ed25519主公钥。
  • VERSION:是一个单字节的版本字段,默认值为\x03(即十进制的3)。
  • CHECKSUM:是一个2字节的校验和,通过对常量字符串、公钥和版本字段进行SHA3-256哈希计算后截取前两个字节得到。其计算公式为:CHECKSUM = H(".onion checksum" | PUBKEY | VERSION)[:2]。这里的H代表SHA3-256哈希函数。

这意味着,在移除.onion后缀并进行base32解码后,我们将得到一个35字节的二进制字符串,其内部结构为:

  • 前32字节是公钥(PUBKEY)。
  • 接下来的2字节是校验和(CHECKSUM)。
  • 最后1字节是版本号(VERSION)。

准备工作:Base32解码库

由于PHP标准库中不直接提供Base32解码功能,我们需要引入一个第三方库。本教程将以一个常见的Base32库为例(例如,通过Composer安装的base32-php/base32)。

首先,确保您的项目已安装了Base32解码库。如果您使用Composer,可以通过以下命令安装:

composer require base32-php/base32

然后,在您的PHP脚本中引入自动加载器:

require_once 'vendor/autoload.php';
use Base32\Base32;

逐步解析V3 Onion地址

我们将以示例地址 pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion 进行解析。

1. 预处理:移除.onion后缀

首先,从完整的onion地址中移除.onion后缀,只保留base32编码的部分。

2. Base32解码

接下来,使用Base32库对提取出的字符串进行解码。解码后的结果应该是一个35字节的二进制字符串。

c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5c4e3f2d1c0b9a8e7b6d5