【问题标题】:how to parse a v3 onion domain如何解析 v3 洋葱域
【发布时间】:2022-01-15 21:33:33
【问题描述】:

我正在尝试找出如何识别或以编程方式从 v3 洋葱域中提取值 public keychecksumversion .最好在php中。

此处概述了 v3 洋葱域的规范: https://github.com/torproject/torspec/blob/main/rend-spec-v3.txt

对第 4.3.6 节特别感兴趣

   The onion address of a hidden service includes its identity public key, a
   version field and a basic checksum. All this information is then base32
   encoded as shown below:

     onion_address = base32(PUBKEY | CHECKSUM | VERSION) + ".onion"
     CHECKSUM = H(".onion checksum" | PUBKEY | VERSION)[:2]

     where:
       - PUBKEY is the 32 bytes ed25519 master pubkey of the hidden service.
       - VERSION is a one byte version field (default value '\x03')
       - ".onion checksum" is a constant string
       - CHECKSUM is truncated to two bytes before inserting it in onion address

  Here are a few example addresses:

       pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion
       sp3k262uwy4r2k3ycr5awluarykdpag6a7y33jxop4cs2lu5uz5sseqd.onion
       xa4r2iadxm55fbnqgwwi5mymqdcofiu3w6rpbtqn7b2dyn7mgwj64jyd.onion

如果我们以第一个域为例:pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion

如果我们去掉 .onion 后缀,应该留下 base32 编码的字符串 pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd

我假设公钥是 base32 解码字符串的前 32 个字节?我在这里做了base32解码https://dencode.com/en/string?v=pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd&oe=UTF-8

不确定到目前为止我是否走在正确的轨道上,但我该如何从中识别校验和和版本组件?

下面的 php 似乎与 base32 在线解码器不匹配

    $onionUrl = "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion";

    //remove suffix
    $domain = str_replace(".onion", "", $onionUrl);

    //base32 decode
    $decoded = Base32::decode($domain);
    echo $decoded."<br>";

【问题讨论】:

  • 您似乎走在了正确的轨道上。前 32 个字节是公钥,最后一个字节是版本,然后是校验和
  • 我有点困惑,因为它说最后一个字节(版本)默认值是'\x03',但我不知道如何从最后一个字节推导出它。
  • 一旦 base32 解码,最后一个字节就是一个类似 utf8 符号的正方形 - 是否需要以某种方式转换以导出版本?

标签: php tor


【解决方案1】:

我想通了。其中$lastByte 是base32 解码字符串的最后一个字节或字符。使用bin2hex($lastByte)unpack("H*", $lastByte) 都返回值03,这与默认版本为3 的文档一致。

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 2014-10-15
    • 1970-01-01
    • 2011-10-09
    • 2014-12-22
    • 2017-11-23
    • 1970-01-01
    • 2016-12-28
    • 2015-03-17
    相关资源
    最近更新 更多