Wanchain星系共识探索:随机数生成算法
在上一篇解读文章中,我们介绍了星系共识的整体框架和流程。在共识过程中,节点会组建成两大星群——RNP星群和EL星群,前者负责随机数的生成,后者负责打包交易提出区块。本文将深度介绍星系共识的随机数生成算法以及其所具有的优势和对共识协议运行的重要作用。
一、随机数对于区块链系统的重要作用
在正式谈随机数的作用之前,我们需要了解一个概念,那就是“熵”(entropy)。熵对于物理学领域的朋友一定不会陌生,它是体系混乱程度的度量。在1948年,香农(Claude Elwood Shannon)提出了信息熵的概念,去描述信源的不确信度。简而言之,熵就是不确定性的度量。举一个简单的例子:“北京明天的天气状况”,可能是晴天,也可能是阴天或者下雨,结果是不确定的,因此熵为正数;“地球明天要毁灭”,我们知道地球明天不会毁灭,这是确定的结果,因此熵为零。
那么熵和区块链系统有何关系呢?可以说,熵对于区块链系统是至关重要的,是整个系统运行的安全保障。以比特币系统为例,它采取PoW作为共识算法,矿工进行大量哈希计算去争夺出块权,任何高度区块的出块者身份都无法提前预测,这就是熵在比特币系统中的体现。试想如果熵为0,即每个区块的出块者都是事先确定的或者人为可控,那么必然会出现合谋、分叉等攻击。因此任何区块链系统都需要一种安全有效的方式为系统引入熵。基于PoW共识的区块链系统由于挖矿的随机性,以天然的方式为系统引入了熵,然而对于PoS和DPoS共识的区块链系统,就需要单独设计一种方式去引入熵,那就是随机数生成算法。可以说随机数生成算法是设计共识机制的主要挑战之一,也是衡量共识机制优劣的重要标准之一。
二、随机数生成算法优劣的衡量标准
既然随机数生成算法这么重要,那么一个好的随机数生成算法应该是什么样子呢?从安全和实用角度而言,它应当满足以下六大性质:
1. 去中心化(Distributed):随机数的生成过程要是去中心化的,不能依赖或者借助可信第三方完成。
2. 不可预测(Unpredictable):根据历史产生的随机数或其他信息无法预测未来的随机数,这是“随机”的基本要求。
3. 无偏性(Unbiased):任何人都无法通过计算能力或者后发优势去针对性左右随机数的生成结果。
4. 均匀分布(Uniformity):输出的随机数在其值域内是均匀分布的。
5. 保证输出(Guaranteed Output Delivery):随机数生成算法的参与者无法通过违背算法的方式使得无法输出随机数,即必然会有随机数输出。
6. 公开可验证(Publicly Verifiable):没参与随机数生成的节点可以以后验的方式,监督协议的执行,验证随机数是可信和无偏的。
以上六大性质对于随机数生成算法至关重要,违背其中任意一条都可能会导致严重的安全漏洞。据区块链安全公司PeckShield披露,EOS上有超过8个竞猜项目遭受黑客攻击并获利几百万美元,严重威胁到了EOS正常生态秩序,而大部分攻击成功的原因都与随机数生成漏洞有关。我们以EOS.WIN项目为例,剖析其随机数算法漏洞根源。
EOS.WIN支持的一个游戏是猜数字,即用户输入某个数字并压大或者压小,然后系统随机生成一个数字,如果用户压对大小,则视为中奖并获取收益。显然如果能够控制系统随机生成的数字,就可以左右游戏的结果。而决定EOS.WIN系统随机数生成的因素为交易哈希ID、成交区块高度、成交区块前缀、全局开奖序号等。其中成交区块高度、成交区块前缀虽然是未来某区块信息,但是在实施过程系统指定使用当前同步到的最新块信息,因而是确定的;同时,交易哈希ID能够通过交易内action结合块信息预先计算。于是随机数的生成仅依赖于全局开奖序号了。攻击者利用不断制造错误交易,造成交易状态回滚,控制全局开奖序号,从而控制随机数的生成,直到中奖。显而易见,EOS.WIN的随机数生成算法不满足上述的第二条性质(不可预测性)和第三条性质(无偏性),因此存在漏洞,最终被攻击者有效攻击。
三、星系共识随机数生成算法
星系共识中的RNP星群借助承诺、零知识证明、门限秘密分享、门限签名、椭圆曲线序对等多种密码学手段,实现了安全高效的随机数生成算法,为整个共识过程安全提供了数据基础。为了能够形象介绍随机数生成算法的设计初衷以及其精妙之处,我们将其类比一个简单的游戏:
纸牌游戏
中国观察