讨论:为什么比特币的区块哈希算法采用双重sha256算法

一.

SHA-256(SHA-256(x))是由Ferguson和Schneier在他们的优秀著作《实用密码学》(稍后由Ferguson、Schneier和Kohno更新并重新命名为“密码学工程”)中提出的,作为一种使SHA-256免受“长度扩展”攻击的方法。他们称之为“SHA-256d”。当我们在2006年启动Tahoe-LAFS项目时,我们开始使用SHA-256d来处理所有事情,因为它的效率几乎不比SHA-256低,而且它使我们不必在使用散列函数的每个地方都要考虑长度扩展攻击是否危险。如果比特币的发明者出于类似的原因使用它,我不会感到惊讶。为什么不用SHA-256d代替SHA-256呢?
注意,SHA-3项目要求所有候选对象都具有某种防止长度扩展攻击的方法。他们中的一些人使用一种类似于SHA-256d的方法,也就是说,在发出结果之前,他们在最后对他们的状态进行额外的“终结”散列。

二.

第二次前像攻击:
hash(x) = hash(y)表示hash(hash(x)) = hash(hash(y))
所以它不能防止直接的前像攻击。比特币为一个b c构建了一个Merkle树,
就像这样:hash(hash(a)+hash(b))+hash(hash©+hash(d)))。
你可以再次看到,如果有人发现一个c’和c具有相同的SHA-256散列,他们可以替换它,最终结果仍然是相同的。
虽然这可能会提高对第一次前像攻击的抵抗力,但在任何明显的情况下,这些都是无关紧要的——攻击者通常会使用生成散列的明文。(鉴于有ECDSA操作,对地址的原图像攻击似乎有些牵强。)
我认为有一种说法是,它可以提供更好的保护,防止攻击者在只给出散列的情况下,试图查找散列到它的文本。(但在每一种现实的比特币情况下,攻击者得到的不只是散列。)

    The SHA256 hashing algorithm, like all hashes constructed using the Merkle-Damgård paradigm, is vulnerable to this attack. The length extension attack allows an attacker who knows SHA256(x) to calculate SHA256(x||y) without the knowledge of x. Although it is unclear how length extension attacks may make the Bitcoin protocol susceptible to harm, it is believed that Satoshi Nakamoto decided to play it safe and include the double hashing in his design.

    Another explanation [6] for this double hashing is that 128 rounds of SHA256 may remain safe longer if in the far future, a practical pre-image or a partial pre-image attack was found against SHA256.

你可能感兴趣的:(区块链)