基于 Move 的 Roll:Aptos 上的安全、即时随机性

  • aptoslabs
  • 发布于 2024-02-02 17:21
  • 阅读 35

Aptos Roll 是首个为 PoS 区块链设计的安全、即时链上随机数 API,它基于新的密码学结构,包括加权公开可验证秘密共享 (wPVSS) 方案和加权可验证随机函数 (wVRF),并集成到 Aptos 区块链协议中,为去中心化应用提供即时、不可预测和无偏的随机值。

作者:Alin TomescuZhuolun Xiang

概要: 首个安全的、即时的 链上随机数API,专为PoS区块链设计,仅在Aptos上可用。如果你需要在Move中使用随机数,只需调用 aptos_framework::randomness::u64_integer()。如果你需要字节,调用 aptos_framework::randomness::bytes()

概述

在这篇博文中,我们将介绍 Aptos Roll,一个安全的 即时随机数 API及其底层的密码学实现,它将为下一代随机DApp提供动力。

Aptos Roll的核心在于两个新颖的密码学构造:一个加权公开可验证秘密共享(wPVSS) 方案和一个加权可验证随机函数(wVRF),它们经过精心设计,并集成到Aptos区块链协议中。

让我们深入研究Aptos Roll背后的技术细节!

如何使用Aptos Roll

对链上随机数的需求出现在许多应用中,例如去中心化游戏、抽奖、随机NFT、随机空投等等。此外,许多区块链应用将受益于随机性,从而提高公平性、安全性和功能性。

Aptos Roll提供一个简单的Move API接口,供这些应用访问即时交付的 不可预测的公正的 随机值:

  • fun randomness::u64_integer(): u64 立即返回一个均匀采样的64位无符号整数
  • fun randomness::bytes(n: u64): vector<u8> 立即返回一个均匀采样的 n 字节向量。
  • fun randomness::permutation(n: u64): vector<u64> 立即返回向量 [0, 1, 2, ..., n-1] 的均匀采样混洗。

此API的一个显著特点是即时交付:Move智能合约只需调用API即可立即获得随机数。与从_外部_随机数信标获取随机数相比,这对开发者来说更加方便,因为后者会给智能合约带来承诺(并等待)未来生成的随机数的负担。

更多详情,请参阅我们的Aptos改进提案(AIP)41,其中深入描述了此API。

为什么它很酷

易于使用的API: Aptos Roll提供了一个易于使用的API,可以立即将随机数传递给调用者。这些即时API比基于提交和揭示过程的解决方案(一个提交交易,然后是一个使用交易)更方便使用。

与区块链一样安全: Aptos Roll不需要额外的信任假设,仅依赖于区块链的权益证明(PoS)验证器集的安全性和可用性。具体来说,对于控制权益少于50%的攻击者来说,Aptos上的随机数既不可预测,也不可偏袒。

新颖密码学: 在PoS环境中设计可扩展的随机数信标需要解决一些困难的密码学问题。

  • 首先,Aptos Roll有一个新颖的_加权公开可验证秘密共享(wPVSS)_算法,可以由每个验证器高效运行并且可聚合,这有助于减少通信开销。
  • 其次,Aptos Roll在其之上有一个通信高效的_可聚合加权分布式密钥生成(wDKG)_生成协议。
  • 第三,Aptos Roll有一个新颖的加权可验证随机函数(wVRF),验证器每轮都会对其进行评估,并且每个验证器的通信是恒定的,而不是与验证器的权益成线性关系。

背景

Aptos是一个权益证明(PoS)区块链,其共识算法以周期性的两小时间隔(称为epoch)运行。验证器集及其权益分配在每个epoch内保持不变,并且可以在epoch边界之间更改。下一个epoch的验证器要等到新的epoch开始才会上线。

区块链还将共识(即,目前是一个名为Jolteon的BFT共识协议)与执行(即,一个名为BlockSTM的乐观并发控制执行引擎)分离,其中每个区块首先通过共识最终确定,然后执行以更新区块链状态。

这种分离对于网络的链上随机数尤其重要,因为它允许网络首先提交事务的排序,然后再计算并稍后揭示随机数。

设计

这种方法使验证器能够在每个epoch开始时通过_加权分布式密钥生成(wDKG)_协议共同生成一个共享秘密

这个共享秘密只能由50%或更多[1]的权益重建,因此可以安全地用于计算该epoch中每个区块的随机数种子

该种子通过在此共享秘密下,对特定于区块的公正消息(例如,epoch号和轮数)评估_加权可验证随机函数(wVRF)_来计算。最后,此区块种子用于伪随机地为该区块中的每个API调用派生随机数。

从高层次上讲,这总结了你需要了解的关于这种随机数方法的所有信息。从低层次上讲,事情会更有趣。事实证明,在权益证明(PoS)环境中联合生成共享秘密,同时频繁且高效地在此秘密下评估wVRF是一个难以解决的开放性问题。

让我们深入研究下面的一些有趣细节。

来自加权公开可验证秘密共享(wPVSS)的加权分布式密钥生成(wDKG)

在新的epoch开始之前,旧epoch的验证器将合作向新的epoch的验证器处理共享秘密。

具体来说,每个旧验证器都充当dealer:他选择一个随机值,并通过可靠的多播向所有新验证器发送加权公开可验证秘密共享(wPVSS)记录,与他们秘密共享。此记录将包含针对每个验证器的,该验证器所处理的随机值的_秘密份额_的加密。重要的是,每个旧验证器都可以处理给新的验证器,即使新的验证器尚未上线,因为他们的epoch尚未开始。

一旦每个旧验证器从66%或更多[2]的权益中收到安全子集的有效记录,它就会将有效的记录聚合为单个最终的聚合记录,并将其传递给共识。此聚合记录将为每个新的验证器加密他们对最终共享秘密的份额,该份额将是来自66%或更多权益中的随机值的总和。在就第一个有效的聚合记录达成一致后,验证器完成wDKG并启动新的epoch。

最后,当新的epoch开始并且新的验证器上线时,他们可以从聚合记录中解密他们的秘密份额。此时,新的验证器将准备好通过以秘密共享的方式评估wVRF来为每个区块生成随机数,我们将在下面解释。

其中一个关键创新是设计一个具有快速处理时间、快速验证时间和小型记录大小的可聚合wPVSS。这非常困难,因为我们处于加权设置中,其中共享秘密只能由50%或更多的权益重建。为确保这一点,最简单的方法是向每个验证器发出与其权益成比例的秘密份额,但这可能会变得相当低效。通过将权益仔细舍入为较小的_权重_并设计出一种即使处理数千个份额仍然有效的全新wPVSS,解决了这一挑战。详细细节将在学术论文中公开提供[3]

加权可验证随机函数(wVRF)

一旦在新的验证器之间建立了共享秘密,他们就可以协作以评估此秘密下的加权可验证随机函数(wVRF)。每个区块执行一次此操作,以产生上述区块的随机数种子。

当一个区块达成共识最终确定时,每个验证器将使用其从聚合wPVSS记录中解密的份额,生成其该区块的wVRF份额,并可靠地多播此份额。一旦来自50%或更多权益的wVRF份额可用,每个验证器都会将它们组合成(并就此达成一致)最终的wVRF评估,该评估将成为区块种子。最后,此种子附加到区块,并将该区块发送以执行。

重要的是,只有50%或更多的权益可以计算wVRF评估,这确保了不可预测性。此外,wVRF的唯一性以及wPVSS方案的秘密性可确保针对控制少于50%权益的攻击者的公正性

使这种方法切实可行的一个关键创新是新颖的wVRF方案,该方案对于每个验证器的份额数量与其权重成比例的加权设置必须是高效的。再次,这具有挑战性。

例如,基于最新技术BLS的VRF的简单解决方案将具有与验证器的权重成线性的wVRF份额大小。这将导致每个区块产生过多的通信开销,并减慢共识。

相比之下,wVRF方案将份额大小从线性减少到常数,这在计算区块种子时保持了通信开销的最佳状态。

比较

下表总结了Aptos Roll与其他区块链的链上随机数之间的差异,其中Aptos模型脱颖而出,成为唯一具有即时交付随机数API的PoS区块链的安全解决方案。

与其他链上或外部随机数信标的比较

DFINITY 依赖于阈值DKG (tDKG)阈值VRF (tVRF),而不是加权的。 这是因为DFINITY假设一种非PoS安全模型,只要不超过 三分之一 的验证器(而不是权益)受到损害,该链条仍然安全。 这种阈值设置 比Aptos的加权设置容易得多,因为份额总数可以设置为验证器的数量(例如,数百个)。 相比之下,在Aptos的加权设置中,份额总数与总权益成正比,即使向下舍入,也会更大(例如,数千个)。

Drand等外部信标也依赖于在一组服务器中实施tDKG和tVRF。 因此,在阈值设置中更容易实现它们。 遗憾的是,当dApp消耗生成的随机数时,它现在必须将外部信任 置于随机数信标的安全性和可用性中。 此外,随机数无法立即消耗,而是通过提交和揭示过程消耗,这使得开发更加繁琐,并且对随机数的访问更加延迟。 同样的问题也适用于 Algorand的随机数信标设计,该设计依赖于从单独的外部随机数信标消耗随机数。

一种非常有前途的产生随机数的方法是通过可验证延迟函数(VDF)。 这种方法被 Chia 采用,即使在所有验证器都损坏的情况下,在没有人能比VDF最初设置的延迟更快地评估VDF的假设下,不可预测性也成立。 遗憾的是,这种方法 无法快速产生随机数,因为它本质上是基于延迟随机数的计算。 此外,基于VDF的方法无法轻松提供即时交付的随机数,因为这将需要每个区块产生一个VDF,由于VDF本质上很慢,因此这对于低延迟区块链来说很困难。 换句话说,如果产生区块的频率高于VDF,那么这些区块将无法访问即时随机数。

最后,一些随机数设计没有采用现实的威胁模型,并且可以被单个恶意验证器偏袒或预测。

Flow的设计中,验证器会投票并附加他们对提议区块A的VRF评估,从而允许下一个区块B的提议者汇总投票并揭示A的随机性。 这可以通过策略性地不提议区块B来偏袒,从而使区块A成为孤立区块。

Celo 允许区块的提议者选择随机数,提交给它并在随后的区块中揭示它。 这为拒绝揭示随机数或根据后续区块中的预期交易进行知情预测以最大化利润开辟了途径。

Ethereum中,每个区块提议者都会评估当前epoch号上的VRF。 然后,epoch的随机数被定义为提议者VRF评估的最佳组合。 遗憾的是,这种方法容易产生偏见,因为一个或多个勾结的区块提议者可以选择不混合他们的贡献,如果他们不喜欢结果。 此外,这种方法非常慢,因为epoch仅每6.4分钟发生一次。

鸣谢

我们要感谢Dan Boneh、Valeria Nikolaenko和整个a16z加密研究团队审查并帮助验证我们的设计。

脚注和参考文献

[1] Aptos Roll依赖于将每个验证器的权益舍入为较小的权重。 这对于实现实际性能非常有用,但对秘密性和可用性有影响。 具体来说,任何舍入方案都会导致舍入误差:即,某些参与者可能会收到比他们应得的更多的秘密份额,而其他参与者可能会收到更少的秘密份额。 结果,这有效地将阈值秘密共享方案变为斜坡秘密共享方案,该方案具有不同的秘密性阈值和不同的重建阈值。 通常,重建阈值更高。 因此,对于活跃性,该机制需要确保任何66%或更多的权益都可以重建,同时针对任何33%或更少的权益保持秘密性。 为了最大限度地减少MEV攻击的影响,我们选择使秘密性阈值更高,将其设置为50%,同时仍保持重建阈值低于66%,以应对33%的攻击者。

[2] 验证者可以在此处选择33%的权益,因为不存在如[1]中的舍入问题,但他们保守地等待额外的权益,以便对验证者串通预先确定共享秘密的MEV攻击更具弹性。

[3] 使用加权VRF的分布式随机数,作者:Sourav Das、Benny Pinkas、Alin Tomescu、Zhuolun Xiang;2024

  • 原文链接: aptoslabs.medium.com/rol...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
aptoslabs
aptoslabs
江湖只有他的大名,没有他的介绍。