随机数|读懂Dfinity:去中心化云计算平台+高性能区块链网络( 三 )

  • R+1 step0 同步正确区块,R+1 轮开始,回到 step1 *注 3
  • -*注 1
    重点:非交互式。DFINITY,首先由随机数公开的选出了 400 个客户端一组的出块组,来打包交易并出块。每一个客户端都会出块,还有一组同时随机数选出的验证者,他们会接受区块,同时运行一个根据随机数判断区块权重的协议,验证者只签名权重最高的节点,期间大家不会交互,不会进行拜占庭共识互相发送签名数据,主要是固定区块时间里不断寻找权重最高的区块即可。在一个区块接受到了超过 50% 个验证者的签名后(是单独签名的,不是一起联合签名的),系统会自动聚合区块上的签名,并确认区块为唯一,一但客户端观察到聚合的签名,就会进入下一轮共识。可以看到,整个过程都没有进行拜占庭协议,只是遵序三个原则:
    • 客户端遵序最高权限的原则对区块签名,权重越高的链越会被确认
    • 系统遵循 50% 以上签名产出随机数信标的原则
    • 大家遵序一看到新的随机数信标马上进入下一轮共识的原则
    三个原则剔除了多余的无效区块,获得了唯一的区块,从而近似的达成了一致性共识(说近似是因为可能有同时存在两个被公证区块)。整个通讯过程几乎为零,在广播 gossip 协议的网络中,一个有 400 个节点的组网,只需转发大约 20KB 的通信数据,即可产生阈值签名。而一个小组的分布式签名密钥的生成,是在小组创建时就分配好的,不需要在共识阶段产生,一次生成多次使用。类比一下非常相似但由两轮拜占庭共识交互的 Algorand。Algo 的随机数抽签过程是隐秘式的,也就是说节点只知道自己被选择与否,它却不知道全网中有多少节点被选中。因此 Alogo 共识前必须遍历一编全部网络,进行一次拜占庭才能知道全部的被选取的验证组,因此这里的延迟时间与带宽使用就很高了。再加上前面讲的超大验证组(2000 人到 4000 人)的拜占庭通讯轮次与签名数据的问题,Algo 共识下带宽使用非常爆炸,这种人是没这个能力参与的。
    • *注 2重点:性能和安全性都很高的随机数算法。Dfinity 所用的随机数算法是 VRF。VRF 涉及很多数学演算,我们可以将其视为一个黑箱子,一段是输入,一段是输出。输入是一组客户端的签名,输出是一个准确的随机数。只有在获取了足够多的客户端签名,黑箱子才能输出随机数,再此之前,没有任何一个客户端能知道或预测它的输出。「足够多」签名的阀值为 50%,因此这个 VRF 的过程也叫做「阀值签名」。这个 VRF 具备三个特点:
    • 可验证:一但输出了随机数,大家都可以拿着客户端的签名对其进行验证。VRF 的 V 就体现在这里。
    • 唯一确定性:一但有超过 50% 的客户端发送了签名,黑箱子接受到后会获得唯一的一个确定的随机数。这里是因为使用的私钥签名算法具有唯一性,也就是统一密钥对统一数据的多次签名的结果都不相同,只有一个可以合法的验证。
    • 非交互:在产生随机数的过程中,虽然黑箱子需要收集大家的签名,但是客户端之间不需要进行交流,更没法干扰到随机数的从产生。
    在已知的密码学算法里,只有 BLS 算法能做到以上三点,而 BLS 算法的提出者之一「L」Lynn 正是 DFINITY 的高级工程师。其他的随机数方案,要么验证起来难度极高(连续哈希),要么无法保证唯一性,要么就是没有阀值的设计,必须进行交互,存在「最后一个参与者」就能间接影响随机数偏差的情况(以太坊的 RANDAO 与 VDF)。当然这个 VRF 还是一点问题,选取的一组共识者中如果有超过 50% 被攻击者掌握,那么他可以间接的干扰到随机数的生成,当然来预测随机数还是基本不可能的,没法直接控制。攻击者还可以不发送签名,让随机数生成过程停止,从而让整个系统宕机。(这个其实没有任何共识协议能顶得住)