双重哈希之谜

作者:CraigWright (比特币SV是原初比特币)

原文标题《 The puzzle of the double hash》,发于2019年4月30日《Medium》

译者:刘晔律师 上海市海上律师事务所

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

首先,Core币维基对双哈希问题的解释是完全错误的。


CSW | 双重哈希之谜



如果你双哈希一个值,生日攻击仍然存在。如果有两个值,哈希得到相同结果,则形成生日攻击或冲突,仍会碰撞。展示出来很简单。 假设我们有两个值 X和 Y。给定哈希函数,有一个碰撞,如下:

A ==Hash(X) == Hash(Y)。

现在,考虑到 X和Y的哈希值,比如为A,可以很容易看到双哈希或平方哈希的过程并没有帮助,因为:

Hash(A)== Hash[Hash(X)] == Hash[Hash(Y)]。

实际上,因为增加哈希操作,我们丢掉了一些信息。可以说,如果迭代一个哈希 n 次,发生冲突的可能性就会增加 n 倍。在这里我有些自由,解释时所涉及的数学并不完全准确,但有一点是真的,即每一次使用相同的哈希函数重复哈希一个函数时,就失去了这个函数的冲突安全性。事实上,如果我们观察比特币地址的创建过程,可以发现双哈希函数进一步增加了这个效应。换句话说,在哈希之哈希的场景,比单一哈希甚至是同一哈希函数的哈希(一种双重哈希)更有可能导致碰撞。

A ==Hash-a(X1) == Hash-a(Y1)

B1== Hash-a(X2)

B2== Hash-a(Y2)

如果 B1= B2,那么就是A的场景。

但是,也可能存在一些值,比如:

C ==Hash-b(B1) == Hash-b(B2)。

因此,当我们使用独立的哈希函数(例如 SHA256和RIPEMD160)时,在两个值(即两个独立的公钥)之间发生冲突的概率会增加(比使用双重哈希更多)。

因此,我必须指出,在这个领域(和许多其他领域一样),比特币,抱歉,Core币维基是错误的。比特币中的双哈希不是用来提高安全性的。在寻址中,它确实增加了一个好处,那就是,如果一个哈希函数被发现是脆弱的,另一个哈希函数的安全时间可以更长些,但正如上面的场景,冲突也可能更容易发现。所以,很不幸,这种表面上的好处并不是采用双哈希的原因。


CSW | 双重哈希之谜


Ferguson 和 Schneier (实用密码学)提出使用双哈希函数来防御 SHA-256的“长度扩展”攻击,他们将其命名为 SHA-256d。Merkle-damgrd 哈希函数(如 MD5或 SHA-256)很容易受到这种攻击。如果这是一个问题,我们可以使用 HMAC,但现实是,比特币是一个经济系统。比特币的安全性总是关于攻击成本vs防御成本的。

虽然一个特定的SHA-256(k||d)计算可能遭受一个长度扩展攻击,但是也很容易检测、监视和阻止.此种情况下, 我真不认为查找脚本是一个问题。事实上,这个问题真的无关紧要,不过我不会在这里详细说明。现在有很多更好的方法来阻止对比特币的长度延长攻击。这就是脚本的力量所在。

因此,如果它降低了安全性,我们要这么做呢?

我们有不少专利出来覆盖所有这些问题。真不幸,由于那些虚假比特币分叉的存在,不得不对人们不了解的技术申请专利。比特币中双哈希函数的一个用途是,在比特币扩容时,对个别验证函数特定化。

如果你开始思考这个问题,将会发现:

A== Hash(X),

现在:

B== Hash(A)

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

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

当问到这样的设备可以放在哪里时,事情变得有趣。中国和中亚有些地方有电力,但没有网络接入。有能力分布这些功能是有用的。

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

事实上,这只是冰山一角。在今年晚些时候,当专利开始公布时,你会看到更多。

非法内容

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

区块链是不可篡改的,但是通过双哈希,可以限制和记录对区块链记录的请求。

在这里,我提出一个假设性的问题......

如果 BTC,ETH 等等都开始存储儿童色情和其他非法内容时,只有 BSV 能够过滤,会发生什么?


分享到:


相關文章: