Tor隐藏服务如何仅基于信任地址进行身份验证?

信息安全 验证
2021-09-01 07:44:27

虽然对如何使用 Tor 创建隐藏服务很着迷,但有一些关于地址冲突问题的细节我似乎无法理解。

引用Tor wiki 上的隐藏服务名称(我的重点):

SHA1 的输出长度为 160 位。为了使处理 URL 更方便,我们只使用哈希的前半部分,所以剩下 80 位。利用生日攻击,熵可以减少到 40 位。这就是为什么可以用适度的手段发现碰撞的原因。这对 Tor 来说不是问题,因为攻击者所能做的就是创建两个匹配相同 .onion 名称的不同公钥。他将无法冒充已经存在的隐藏服务

因此,如果我只信任隐藏服务的地址,它怎么不能被冒充呢?

  • 如果两个服务都使用自己的公钥宣布了自己,并且两者都散列到相同的地址,那么当我尝试访问该地址时,我如何知道哪个服务是我想要的?

  • 就此而言,目的地是如何决定的?我的洋葱代理会告诉我这个地址有 2 个服务,出示每个公钥并让我选择吗?

  • 如果我的服务由于某种原因出现故障而另一个宣布自己,再次将其公钥散列到同一地址,我怎么知道该服务不是我打算访问的服务?如果我以前访问过它,我的洋葱代理会警告我密钥已更改吗?如果我从未参观过它会怎样?

在我看来,为了对服务进行身份验证,仅信任其地址是不够的,我需要在 Tor 网络中查找服务之前单独获取并信任其公钥。我的这个结论不正确吗?

1个回答

在尝试模拟现有服务时,能够生成一对具有相同 .onion 地址的密钥并没有帮助。模拟需要使用现有地址生成密钥,这是原像攻击,而不是碰撞攻击,因此完整的 80 位地址长度提供了安全性。

目前,80 位的安全性被认为是足够的,尽管勉强如此。