虽然对如何使用 Tor 创建隐藏服务很着迷,但有一些关于地址冲突问题的细节我似乎无法理解。
引用Tor wiki 上的隐藏服务名称(我的重点):
SHA1 的输出长度为 160 位。为了使处理 URL 更方便,我们只使用哈希的前半部分,所以剩下 80 位。利用生日攻击,熵可以减少到 40 位。这就是为什么可以用适度的手段发现碰撞的原因。这对 Tor 来说不是问题,因为攻击者所能做的就是创建两个匹配相同 .onion 名称的不同公钥。他将无法冒充已经存在的隐藏服务。
因此,如果我只信任隐藏服务的地址,它怎么不能被冒充呢?
如果两个服务都使用自己的公钥宣布了自己,并且两者都散列到相同的地址,那么当我尝试访问该地址时,我如何知道哪个服务是我想要的?
就此而言,目的地是如何决定的?我的洋葱代理会告诉我这个地址有 2 个服务,出示每个公钥并让我选择吗?
如果我的服务由于某种原因出现故障而另一个宣布自己,再次将其公钥散列到同一地址,我怎么知道该服务不是我打算访问的服务?如果我以前访问过它,我的洋葱代理会警告我密钥已更改吗?如果我从未参观过它会怎样?
在我看来,为了对服务进行身份验证,仅信任其地址是不够的,我需要在 Tor 网络中查找服务之前单独获取并信任其公钥。我的这个结论不正确吗?