基于Nervos CKB共识机制设计的新型哈希算法Eaglesong解析
扫描二维码
随时随地手机看文章
Eaglesong 是专门为 Nervos CKB 设计的新型哈希算法。这是第一个成功结合了创新性、简洁性和安全性三个设计要求的哈希算法。今天这篇文章,我们将详细解释Eaglesong的设计思路以及它带来的优势。
背 景
Nervos CKB 的共识机制(NC-Max)是改进版的比特币中本聪共识(Nakamoto Consensus, NC),它是就网络参与者的支付权限来达成共识的。通过这种机制,只要满足以下两个条件,那么任意节点都可以对系统状态进行更新(这种更新也被称为出块):
· 该区块是有效的;
· 出块者解出了一个叫作工作量证明的计算难题。
不断尝试解出这个难题并争取下一个区块出块权的节点被称为矿工,矿工会在难题被解出时获得相应的奖励。中本聪共识降低了网络所需的安全性,使其不受覆写历史的攻击,这是对算力分布的一种假设,即超过 50% 的算力都在诚实的矿工手中。
工作量证明难题是根据提出的块来定义的;这保证了难题的解和区块一一对应,并能够唯一地证明这一个块。具体来说,每个块都有一个唯一的 block_header,用于验证待确认队列中的一系列交易及验证人。以往的工作量证明难题一般会包括找到一个有效的随机数,比如:
H(block_header || nonce) 《= t 。
这里面:
· t 表示难度系数,该难度系数是周期性调整的,以控制平均出块时间;
· || 表示比特串(Bit Strings)的串接;
· nonce 是一串随机的比特;
· H 是一个单向加密哈希函数。
这个哈希函数 H 有以下几种作用:
· H 是公开的,因此网络上的任何节点都可以仅通过验证上述公式来验证所提出的节点是否有效。此外,任何节点都可以在无需许可的情况下成为矿工。
· H 是难以预测的,因此矿工的最佳策略是随机地猜测 nonces 且不断尝试新的 nonce,直到满足这个公式为止。这就意味着,矿工得到的奖励与他为保护整个网络所付出的算力份额相匹配。
比特币的哈希函数 H 是两次重复的 SHA2-256 运算。从结果来看,重复这个函数两次似乎有点多此一举,因为近二十年的密码分析都未能产生真正有意义的攻击。然而,在比特币刚出现的时候,SHA1 正在面临被破解的危机,那时的 SHA2 则更新颖一些。当然 SHA2 也有可能被 SHA3 取代,如果 SHA2 也到了和 SHA1 同样的境地的话。
虽然用 SHA2 定义工作量证明难题对比特币来说是一个不错的选择,但对后来的很多加密货币来说却不一样。很多为了挖比特币而特意开发的专用设备现在已经过时了,而采用相同工作量证明难题的新加密货币则可以重新启用那些过时的设备。甚至那些没有过时的设备也可以租出去,重新挖新的币。因此,算力分布变得非常难以预测,也可能遇到突然的算力大幅度波动。同样的道理也适用于为 SHA2 而量身定制的算法优化,它可以降低函数的软件计算成本,而不需要采用基于降低硬件成本的解决方案。
对于一种新的加密货币来说,使用一种其他的加密货币尚未使用过的工作量证明函数来定义工作量证明难题是非常可行的。对于 Nervos CKB 而言,我们会更进一步,选择一个全新的、完全不可能面临过早优化问题的工作量证明函数。
另外,挖矿设备达不到预期的情况仅会出现在早期。长远来看,部署专用的挖矿设备将会是非常有益的,这大大增加了攻击网络的难度。因此,对于一种新的加密货币来说,其工作量证明函数的前两个设计目标,除了创新性以外,还应该是简单的,这样它能够显著地降低专业挖矿设备开发的门槛。
第三个设计目标显然是安全性。虽然说,一个已知的漏洞对所有矿工来说都是一样的,大家都可以利用,但这只会导致更高的难度;而一个未公开的漏洞可能会给发现这个漏洞的矿工带来不一样的挖矿优势,这会导致他付出的算力和奖励不成正本。为了避免这种情况,最好的方法是为系统的安全性做一个强有力的论证。
Eaglesong
这时,Eaglesong 的用武之地就显现了。
Eaglesong 是专门为 Nervos CKB 工作量证明设计的新的哈希函数,它也适用于其他需要安全哈希函数的应用场景。其设计标准正是上面列出的那样:创新、简单和安全。我们希望这样的设计足够新颖,并且想要为技术的进步做一点小小的贡献,同时,也希望这样的设计仍然符合现实场景,以提出强有力的安全论证。为此,我们选择使用 ARX 步骤(添加,循环然后 xor —— 是不是很简单!)构建的排列来实例化 Sponge 架构 (与 Keccak/SHA3 相同),并基于宽路径策略为其安全性做出论证 (与 AES 的基本论证相同)。
安全到底意味着什么呢?让哈希函数适用于(诸如此处描述的)工作量证明难题的这个属性被称为多目标单向性(Multi-target One-wayness)。该属性是根据一场游戏定义的,在这个游戏中,会给对手一个目标列表,如果他能够在 H 下,对任意一个目标生成单一原像,那么他就获胜。除了一个个试错之外,如果对手没有其他更好的方法,那么就意味着函数 H 具有此属性。然而,哈希函数通常还具有其他属性,例如抗第二原像攻击(Second Preimage Resistance),抗碰撞性(Collision Resistance)和相关不可行性(CorrelaTIon Intractability)。对一个属性的攻击不会自动转换为对另一个属性的攻击。因此,从方法论角度来看,仅用多目标单向函数来实例化一个工作量证明难题是合理的。尽管如此,在 Eaglesong 的设计中,我们还是设定了轮数,这样一来,我们就无法区分所得的结果是随机排列的,还是在给定工作量的情况下排列的。Sponge 框架的结果是所得到的函数具有与哈希函数相关联的所有安全属性。
来源: Nervos 中文社区