nonce是区块链和加密货币(如比特币)的工作证明(PoW)挖掘算法的核心部分。矿工互相竞争以找到产生散列的随机数,该散列的值小于或等于网络难度所设定的值。如果矿工发现这样的nonce,称为金色nonce,那么他们就有权将该块添加到区块链并获得区块奖励。

随机数是一个随机的,一次性的整数。矿工每秒测试并丢弃数百万个随机数。他们希望产生一个符合目标的哈希值,从而获得块奖励。这是在最基本的PoW挖掘过程中发生的事情,尽管还有更多。在这里,我们将在整个采矿过程中探索nonce的整个目的。

带有Nonce的构建块

nonce是一个32位数字。它与其他关键数据一起保留在块头中,例如难度目标和时间戳。当矿工构建块时,他们随机选择一个随机数并将其输入到块头中,从而创建一个新的块头哈希。

哈希是一个256位的数字,必须从大量的零开始,即具有非常小的值。如果它没有足够数量的零,则矿工丢弃散列并尝试新的随机数。重复该过程,直到矿工发现产生小于或等于难度设定值的散列的随机数。

32位大小的nonce意味着有40亿种可能的组合。虽然从技术上来说,由于所谓的额外nonce,它要高得多。这是一个更长的nonce的额外空间,这意味着你可以有数百亿的组合。nonce是矿工改变的唯一参数,其他参数保持静态。如果矿工找到了金色的随机数,他们会将该块添加到区块链中并获得区块奖励。目前,没有办法加快找到正确的随机数的过程。这意味着矿工们只是在反复试验中运作,直到找到一个金色的随机数。在工作证明中,这个过程构成了工作。

与采矿难度的关系

正如我们所说,矿工正试图找到一个产生低于网络难度所设值的散列的随机数。比特币协议设定了这种挖掘难度。随着难度的增加,散列的目标值也会降低。这意味着在哈希数的开头必须有更多的零。找到较低哈希值的概率降低,因此矿工必须测试更多的随机数。当矿工散列块时,散列必须具有等于或小于目标数量的值才能成功。在挖掘比特币时,难度可以调整每2016块。这可能是每两周一次。但是,其他PoW区块链的调整速度更快。例如,Litecoin,因为它的封锁时间较短,难以每三天半调整一次。

另一方面,Digibyte实时调整每个区块的难度。

为什么调整很重要

如果难度没有调整,则散列能力和块奖励之间将存在线性关系。随着越来越多的矿工加入网络并增加散列能力,比特币奖励也会相应增加。这将破坏比特币协议的通胀控制,以及它的稳健货币特性。幸运的是,通过调整难度,块奖励可以每两周保持相对稳定。难度也可以调低。如果采矿盈利能力消失,那么矿工将停止运营并且哈希率下降。然后困难将适当调整。自从困难在10月4日达到顶峰以来,我们已经在比特币网络上看到了几个月。

在比特币上,在每2016块之后,比特币客户端将比较要生成的每个块的实时与目标时间。然后它会适当调整难度。目的是让矿工生产块尽可能接近十分钟。

安全散列算法保护

SHA-256算法的弹性可以防止矿工加速并欺骗试错过程。SHA-256属于SHA-2系列安全散列算法,并于2001年由NSA发布。如果这种算法被破坏,就像SHA-1类加密散列算法一样,那么PoW过程就会被破坏。

有几种方法可以打破哈希算法。我们的意思是能够绕过试错法并找到更快的正确的随机数。碰撞攻击是最新,最有效的方法。

安全散列算法的全部目的是确保散列的唯一性。对数据进行哈希处理时,输入应创建一个完全唯一的哈希值。可以复制相同数字的唯一方法是使用完全相同的输入,包括nonce。但是,碰撞攻击意味着可以从不同的输入生成相同的哈希。恶意行为者可以使用足够的计算资源来执行此操作 这完全破坏了安全散列算法的目的。

既然已经证明碰撞攻击对SHA-1算法有效,那么就不能再依赖它们了。这次袭击的可能性部分是因为过去十年来计算机能力的巨大进步。 

在某些时候,当计算能力增加到足够的时候,SHA-256也会受到这种攻击的攻击。但是,比特币开发者应该在它发生之前就知道这一点。这是因为在实际证明在现实生活中工作之前,这种攻击几乎总是在理论上被证明是可能的。比特币核心团队应该转向更新,更强硬的算法。

值得注意的是,互联网上的大多数认证协议目前都使用SHA-2算法。如果他们确实在一夜之间变得脆弱,那么我们将面临远远超出比特币采矿的重大全球性问题。

工作证明的价值

矿工们正在使用他们的硬件以每秒数百万的速度测试这些随机数。事实上,没有办法快速找到现时,使PoW成为一个开放和公平的系统。该系统的有益特征是需要大量的能量,时间和资金来解决正确的价值并赢得奖励。但是,与此同时,其他节点验证正确的值非常容易。这种二分法使网络安全,并提供了一种达成共识的简单方法。

最终,nonce只是比特币挖掘过程的一小部分。但是,它在维护其完整性方面发挥着至关重要的作用。随机数是矿工为了找到足够的哈希值而改变的唯一事物。它实际上是整个装置的加速器,制动器和离合器。