Skip to content

Latest commit

 

History

History
34 lines (17 loc) · 3.51 KB

double-hash.md

File metadata and controls

34 lines (17 loc) · 3.51 KB

双重哈希

比特币有一个长期的未解之谜:为什么要用双重哈希(double hash)?

生日攻击

Core 对此的解释是这是为了消除生日攻击,但不幸的是,这种说法是错误的。

生日攻击是一种密码学攻击手段,所利用的是概率论中生日問題的数学原理。简而言之,大多数人之所以会认为 23 人中有 2 人生日相同的概率应该远远小于 50%,但事实并非如此。这种攻击手段可用于滥用两个或多个集团之间的通信。如果你双哈希一个值,生日攻击仍然存在,而且实际上,因为增加哈希操作,我们丢掉了一些信息。可以说,如果迭代一个哈希 n 次,发生冲突的可能性就会增加 n 倍。换句话说,在哈希之哈希的场景,比单一哈希甚至是同一哈希函数的哈希(一种双重哈希)更有可能导致碰撞。

比特币中的双哈希不是用来提高安全性的。在寻址中,它确实增加了一个好处,那就是,如果一个哈希函数被发现是脆弱的,另一个哈希函数的安全时间可以更长些,但正如上面的场景,冲突也可能更容易发现。所以,很不幸,这种表面上的好处并不是采用双哈希的原因。

专业化

如果双重哈希它降低了安全性,那么我们要这么做呢? 比特币中双哈希函数的一个用途是,在比特币扩容时,对个别验证函数进行专业化。

如果你开始思考这个问题,将会发现问题从 A== Hash(X) 变成了 B== Hash(A)

我们将对交易 X 的哈希值 A 进行哈希后得到的值 B 发送给矿工,但不允许他们在没有个别交易的情况下广播一个区块。 在默克尔树结构中,可以做到分离一个交易,而发送和解决整个区块。这样做将允许我们构建一个 ASIC 挖矿设备,它不将数据存入区块。矿工现在是一个分布式函数。

这样,工作量证明和验证可以交给专门化的实体。ASIC设备可以在发现有效块时将费用支付给验证设备,但是系统可以做到不让他们相互欺骗但可以相互交流。事实上,他们甚至可以与不同的矿工和矿池达成协议,而不必担心出现问题:如果一方作弊,双方失败。

当问到这样的设备可以放在哪里时,事情变得有趣。中国和中亚有些地方有电力,但这些地方的网络连接并不好。在这种情况下,能够把任务拆分并派发给不同的实体来计算是很有用的。

通过默克尔树,我们可以允许一个验证节点作为中国以外的分布式系统发送简单的但易于验证的哈希函数,这些哈希函数满足矿工检查,而无需验证所有的交易部分。换句话说,如果区块传播在某些地区是个问题,对于 BSV 中的大规模比特币矿工也不是问题。

屏蔽非法内容

此外,使用双哈希函数还可以创建一个系统,允许在遵守法律之下进行分布和验证。分布式函数可以发送到专门系统,在本地管辖范围内发挥作用。这样,我们有一个不可篡改的数据存储,可以通过已验证哈希进行过滤,并允许在某些司法区域随后删除非法内容。也就是说,比特币中的双哈希创造了一种可以选择性地传播内容的方法。

区块链是不可篡改的,这一点并没有改变,但是通过双重哈希,可以根据各国法律进行限制和记录对区块链记录的请求。

这也是比特币能够符合监管(而不是主动迎合监管)的一个体现。