公共随机性是许多现实世界安全协议的一个重要组成部分。在一些应用中,如赌博和多人游戏,随机性增加了乐趣。在其他应用中,随机性提供了一种公平的方式来分配不可分割的资源,从绿卡,到巡回法庭法官的案件分配,再到体育比赛的种子选手。它也被用来分配负面资源,如税务审计或机场的二次安检。
传统上,我们依靠受信任的机构来为这些协议产生随机性,但在Web3世界中,我们需要做得更好。在这篇文章中,我们将探讨通过分布式随机信标建立可公开验证的随机性的方法,然后讨论一些链上应用。(第二部分即将发布,将特别关注领导者选举,同时提供对其他领导者选举方法的评估)。
预期的属性
生成随机数是一项众所周知的微妙任务。例如,许多加密密钥被泄露,因为它们依赖于一个有问题的随机数发生器(Cloudflare的wall of lava lamps可以作为一个创造性的缓解措施)。然而,这只是私人随机性,只有一方需要生成和使用它。
相比之下,公共随机性是一个多方参与的过程,这大大增加了难度。一个好的产生公共随机性的协议将具有以下安全特性:
-
无偏向性。没有攻击者或攻击者联盟能够偏袒输出。
-
可靠的。没有攻击者能够阻止协议产生输出。
-
可验证的。任何人都可以很容易地验证协议的输出,并且应该看到与其他人一样的输出。
-
不可预测的。如果协议在时间T1产生输出,在某个时间T0<T1之前,没有人能够预测任何关于输出的事情,最好是T0非常接近T1。
不可偏倚性是一个比不可预测性更弱的属性,因为任何可预测的协议都必须是不可偏倚的。计算机科学家会说,不偏倚性降低到不可预测性,因为如果你能偏倚,你就能预测。但有时我们会想把它们分开来推理,因为它们可能依赖于不同的假设,例如,一个不诚实的多数人可能会预测结果,但不会偏向它。
除了这些特性之外,该协议应该是高效运行的,并产生大量的随机比特。(在实践中,应用程序通常足以产生128个随机比特,用它们作为伪随机数发生器PNRG的种子,根据需要输出更多的比特。然而,不可预知性应该保持在输出的每个单独的位上,以用于诸如彩票或资源分配等应用)。该协议最好在通信和计算成本方面也是有效的。
不同的协议可能在不同的条件下实现这些属性。例如,一些协议可能是由任何f1个恶意节点组成的联盟不可偏袒的,而由任何f2<f1个恶意节点组成的联盟是不可预测的。也有不同程度的偏见。例如,在一些协议中,一个参与者可能能够通过 “一个比特”来偏置输出——这意味着他们可以在两个可能的输出中选择一个。其他攻击可能允许他们完全固定输出。然而,通常情况下,我们根本不想容忍任何偏见(或可预测性)。
加密学的理想:随机性信标
密码学家们经常从思考他们问题的理想解决方案开始。在公共随机性的情况下,随机性信标是一种理想化的服务,它定期产生满足所有必要安全要求的随机输出。
这样一个理想化的随机性信标,类似于其他密码学的抽象概念(如随机信标或通用组模型)在现实世界中并不存在。但这是一个值得努力的目标,也是推理依赖公共随机性的协议的有用模型。
我们可以考虑几个理想随机性信标的近似值。
-
集中式信标。产生良好随机性的最简单方法是通过中心化第三方的服务,如NIST随机性信标或Random.org,它从大气噪声中产生随机性并被认可用于赌博。这种对第三方的依赖完全破坏了去中心化的理念。事实上,在上面的例子中,我们不得不相信相关组织正在正确地生成随机性,而没有任何密码学证明。
-
物理随机性显示。许多传统的彩票依赖于公开展示,例如,这可能包括有人将手伸进一个装有不同数字的乒乓球的容器。不幸的是,这些往往很容易被操纵。例如,可以将某些球放在冰箱里,然后告诉选择者挑选冷的球。
-
自然信标。一个常见的想法是使用随机的自然现象,如天气或宇宙背景辐射作为一个信标。不幸的是,所有提议的来源都不能提供强有力的共识。不同的观察者会看到略有不同的数值,这就需要重新引入一个受信任的一方来进行正式的测量,这就有了中心化信标的所有缺点。
-
半中心化的信标。一个更好的方法是直接从比特币区块头或股票收盘价中获取随机性,这更容易公开验证,任何一方都难以完全控制。然而,对工作证明区块链随机性和股票价格随机性的微妙攻击仍然存在。例如,通过区块链头,矿工可以选择扣留那些头产生他们不喜欢的信标值的区块。或者他们可以选择在发现两个相撞的区块时,根据他们喜欢的信标输出来打破平局。
去中心化的随机性信标(DRBs)
解决中心化信标问题的一个自然方法是设计一个去中心化的加密协议来产生公共随机性。这个问题有点像设计去中心化的共识协议,只是更难。不仅所有的参与者需要就输出(随机性)达成一致,而且协议中的恶意参与者应该不可能对输出产生偏见或预测。
旨在模拟随机性信标的协议被称为分布式随机性信标(DRB)。 其他名称包括 “distributed coin-flipping”。)这个问题已经被研究了几十年,著名的不可能性结果在20世纪80年代被证明,但在区块链时代,人们重新燃起了兴趣。DRB可以用来提供链上随机性,这将是公平、安全和透明的链上应用的一个关键因素。
经典的方法:承诺-披露协议
在乐观的情况下,一个非常简单的两轮协议就足以满足DRB的要求。在第一轮中,每个参与者i产生一个随机值ri并公布一个加密承诺ci=Commit(ri)。在这个应用中,承诺可以是一个简单的哈希函数,如SHA-256。在每个参与者的承诺公布后,他们被锁定在他们对ri的选择上,但承诺不会透露任何关于其他参与者贡献的信息。在第二轮,每个参与者通过公布ri来 “打开他们的承诺”。然后,所有的随机值被组合起来,例如通过XOR或(最好是)哈希它们的连接。
这个协议很简单,只要有一个参与者随机选择他们的ri,就能产生一个随机的信标输出。不幸的是,它有一个典型的缺陷:当所有的参与者(除了一个)都透露了他们的随机值,最后一个参与者能够计算出假定的信标输出。如果他们不喜欢它,他们可以拒绝公布他们的值,从而中止协议。忽略一个有问题的参与者的贡献并不能解决问题,因为这仍然让攻击者在两个信标输出(一个用他们的贡献计算,一个没有)中选择。
区块链为这个问题提供了一个自然的补救措施:可以要求每个参与者把一些资金放在托管处,如果他们不透露他们的随机贡献,这些资金就会被扣押。这正是以太坊上的经典RANDAO信标采取的方法。这种方法的缺点是,输出仍然可能有偏差,如果托管的资金少于骑在信标结果上的资金,这对攻击者来说可能在经济上是值得的。要想更好地防范偏颇攻击,就必须在托管中投入更多的硬币。
承诺-披露-恢复协议
一些协议并不试图强迫所有各方透露他们的随机贡献,而是包括一个恢复机制,这样即使少数参与者退出,其余的人也能完成协议。重要的是,该协议在两种情况下都能产生相同的结果,这样各方就不能通过选择是否退出而使结果产生偏差。
实现这一点的一种方法是让每个参与者向其他参与者提供其秘密的份额,这样他们中的大多数就可以重建它,例如使用Shamir的秘密共享。然而,一个重要的属性是,其他人可以验证所承诺的秘密已被正确共享,这需要使用一个更强大的原始方法,称为可公开验证的秘密共享(PVSS)。
其他几种恢复机制是可能的,但它们都有相同的限制。如果有N个参与者,并且我们希望在最多f个节点的任何一组退出时有弹性,那么必须是N-f个参与者的任何一组可以计算出最终结果。但这也意味着N-f个参与者的恶意联盟可以通过私下模拟恢复机制提前预测结果。这也可能发生在协议的第一轮,在此期间,这样的联盟可以修改他们自己的随机性选择并偏向于结果。
换句话说,这意味着任何N-f节点的联盟必须包括至少一个诚实的节点。通过简单的代数,N-f>f,所以f<N/2,而这些协议本质上需要一个诚实的多数。这与承诺-披露的原始安全模型有很大区别,后者只要求f<N(至少一个诚实的参与者)。
这些协议通常还需要大量的通信费用,以便在协议的每次运行中的所有节点之间分享额外的PVSS信息。在过去的几年里,研究界对这个问题做了大量的工作,研究方案包括RandShare、Scrape、SecRand、HERB或Albatross,但似乎都没有看到现实世界的部署。
可验证的基于随机函数的协议
意识到一组N-f的参与者可以计算上述协议中的随机信标值,就会产生一种更简单的方法:在N方之间共享一个长期的秘密密钥,让他们用它来评估一个可验证的随机函数(VRF)。秘密密钥通过一个t-out-of-N的阈值方案共享,因此任何t个参与者都可以计算VRF(但一个较小的联盟不能)。对于t=N-f,这提供了与上面讨论的提交-揭示-恢复协议相同的对f个恶意节点的恢复能力。
DFINITY开创了这种方法,作为他们使用阈值BLS签名(其功能是VRF)的共识协议的一部分。独立的drand随机性信标使用了基本相同的方法,由一组参与者在每一轮中对一个计数器进行阈值-BLS签名。The League of Entropy是drand的一个开源实例,使用16个参与节点(截至2022年9月)每30秒产生一次随机性,由公司和大学研究团体混合运行。
这些方法的一个缺点是,初始化阈值密钥相对复杂,当节点加入或离开时,重新配置密钥也是如此。不过,在普通情况下,这些协议是非常有效的。
如上所述,简单地签署一个计数器值并不为每一轮增加任何新的随机性,所以如果有足够数量的参与者的密钥被泄露,那么该协议在未来的每一轮都是可预测的。
Chainlink VRF将这种方法(使用NSEC5 VRF)与请求随机性的各方指定的外部随机性来源相结合,在实践中通常是最近的区块链头。然后,这些数据通过一个VRF被送入,该VRF由一方运行或阈值到一个组。
以太坊的信标链目前使用基于BLS的VRF:每一轮的提议者将他们的VRF值添加到组合中。与提交-披露模式相比,这节省了一轮通信(假设长期的BLS公钥被注册一次),尽管这种设计继承了提交-披露方法的一些注意事项,包括通过扣留输出而使信标的输出有偏差的可能性。
可验证的基于延迟函数的协议
最后,一个有希望的新方向是使用基于时间的密码学,特别是可验证的延迟函数(VDFs)。这种方法有望提供良好的通信效率和稳健性,对N-1个恶意节点具有弹性。
回到最初的承诺-披露协议,传统的承诺可以用定时承诺代替,以消除参与者拒绝披露其随机贡献的问题。定时承诺可以由最初的承诺人,或任何愿意计算慢速函数(基本上是VDF)的人有效地打开。因此,如果任何参与者退出了承诺披露协议,他们的承诺仍然可以被其他人打开。至关重要的是,打开承诺的最小时间要足够长,不能在协议的第一轮(提交阶段)完成,否则恶意的参与者可以迅速打开别人的承诺,修改自己的贡献,使结果出现偏差。
现代的VDF可以实现一个更优雅的单轮协议:完全放弃承诺。每个参与者可以简单地公布他们的随机贡献,而最终结果是每个参与者的贡献的组合,通过VDF运行。计算VDF的时间延迟确保没有人能够以偏离最终输出的方式选择他们的承诺。这种方法是Arjen Lenstra和Benjamin Wesolowski在2015年提出的UNICORN,实际上是VDF发展中的一个关键激励应用。
我们已经能看到了这种方法的一些实际部署。Chia实现了其中的一个版本,作为其共识协议的一部分,在班组中使用重复求和的VDFs。Starkware使用基于SNARK的VDFs实现了一个基于VDF的信标概念验证。以太坊也计划使用这种方法,建立一个专门的ASIC来计算VDF,在共识层产生随机性。
***
公共随机性是许多协议的重要组成部分,但我们仍然缺乏任何提供高安全性的标准DRB。设计空间很大,上述方法的许多混合体和组合都是可能的。例如,有可能将基于VRF的协议与基于VDF的协议结合起来,这就增加了新鲜的熵,例如RandRunner提出的。以太坊的Beacon Chain目前使用VRF,尽管它可能在未来增加VDF,以消除区块扣留攻击带来的偏差的可能性。
什么时候可以接受诚实多数协议也是一个开放的问题。对于一个相对较小的、经过审查的参与者群体(如Entropy联盟)诚实多数假设是合理的。另一方面,只需要一个诚实参与者的协议有一个固有的优势——更多的参与者只能提高安全性。这意味着这些协议有可能被部署在开放的、无许可的参与中。
在第二部分,我们将讨论随机化领袖选举在共识协议中的具体应用,它的设计目标略有不同,因此有更多的协议和方法被提出。
***
Joseph Bonneau是a16z crypto的研究合伙人。他的研究重点是应用密码学和区块链安全。他曾在墨尔本大学、纽约大学、斯坦福大学和普林斯顿大学教授加密货币课程,并获得剑桥大学的计算机科学博士学位和斯坦福大学的学士/硕士学位。
Valeria Nikolaenko是a16z crypto的研究合伙人。她的研究重点是密码学和区块链安全。她也曾研究过PoS共识协议中的远程攻击、签名方案、后量子安全和多方计算等课题。她拥有斯坦福大学的密码学博士学位,由Dan Boneh教授指导,并作为核心研究团队的一员参与了Diem区块链的研究。
***
编辑:Tim Sullivan