当前位置:首页 行业动态 正文

随机数是 Web3 世界不可或缺的一部分

2025-01-28

随机 & 命运

如果现在有一群极其富有但极其无聊的的 BTC 巨鲸,决定每年共同拿出 1000 个 BTC 举办一次俄罗斯轮盘。他们会准备一把左轮手枪,在可装 6 发子弹的弹夹中只装入一颗子弹,然后对准你的脑袋扣动扳机。 每次扣动扳机所产生的结果可以视为一种平行宇宙,由此在这个单一事件下,总共有对应着 6 种不同结局的平行宇宙,而每种平行宇宙产生的概率相同。这其中的 5 个平行宇宙会使你一夜暴富,甚至荣登《Forbes》封面,而剩下的唯一一个平行宇宙则会让你死相难看,贻笑大方。

你愿意参与这个赌局吗?愿意参与一届?两届?还是每年都来碰碰运气?

玩这个游戏需要勇气,当然也需要动一些脑筋。83% 是一个很高的胜率,确定性达到 83% 的事情在生活中也并不多见。但如果有些贪婪的傻瓜选择一直玩下去,那 20 年后他们中的绝大多数应该都可以在报纸的讣闻一栏找到。在这个假设的俄罗斯轮盘游戏里,规则制定得非常清楚,赔率可以计算,风险也可以衡量,所有条件信息都已提前披露,但在现实世界中,我们往往面临的都是非对称信息的动态博弈 (Asymmetric Information Game Theory)。左右我们命运的并不是一把左轮手枪,或是一副扑克牌。我们不知道有多少弹夹中有多少枚子弹,也不知道这副牌有多少花色。在无限多重平行宇宙和无穷大的风险条件下,我们的命运不可预知。

而这正昭示着我们生活在一个充满随机的世界中。

如费曼所言,自然界允许我们计算的只是概率。一旦我们具备了计算「概率振幅」的超能力,我们就可以成为先知,预测甚至改变未来。换句话说,谁掌握了随机性,谁就拿到了命运的骰子,成为了上帝。

随机 & 安全

将这种思维平移至加密世界中,生成随机数的机器就可以被视为是传达上帝神谕的使者。也正是因为扮演着这样的角色,预言机 (oracle) 才由此得名。在过去关于预言机的文章中,我们已经指出由于区块链系统的透明性,其链上生成的一切算法、输入、输出都会被暴露给系统参与者。因此在链上直接生成的随机序列实际是可以被预测的。

一些典型的链上随机数生成方法,比如未来区块哈希,都存在很大的作弊空间和安全漏洞。举一个简单的例子,如果矿工在玩一个博彩游戏,这个游戏的中奖金额是 10ETH,而区块奖励的金额却只有 3ETH,那么矿工当然有明显动机去作弊。他可以通过丢弃和不发布区块来影响随机序列的生成 (Block Withholding Attacks),从而为自己赢得在游戏中优势。这相当于是你和矿工打同样一局扑克,但人家可以换底牌。而如果将这种可以被篡改和预测的伪随机序列应用到 Web3 各个场景中,我们不难想象其背后的巨大安全风险和不公平性:一旦黑客或攻击者找到随机算法,并测算出了随机序列的初始输入值,那么无论是 NFT 的空投发放,GameFi 中的极品装备爆出,还是用户个人钱包的私钥地址生成,都有可能被操纵和篡改。

那究竟怎样的随机数才是真正可信和安全的呢?这里我们就需要先对随机数的分类做一个简单了解。

一般地,我们将随机数分成两种:真随机数(True Random Number, 后简称 TRN) 和伪随机数(Pseudo-Random Number,后简称 PRN)

其中,伪随机数又可以被细分为:弱伪随机数和强伪随机数。 

正如 「伪」这个词所暗示的那样,伪随机数不是真正的随机。所有在区块链上生成的随机数也都是「伪」的。本质上,PRN 是计算机软件根据既定的数学公式和算法指令所输出的看似随机的数字序列,需要外部输入一个初始值来充当 seed。并且和许多人天然的认知相反,计算机其实很难被用来生成一些偶然的条件,因为它本身就是可预测的设备。元器件是确定的,线路是预设的,代码和算法命令是明确的,在种种固定的外界条件下,我们完全可以通过某些途径(如上文提到的作弊方式)定位出序列结果。而能够被算出的结果,emm 怎么不算…… 伪随机呢?

真正的 TRN,是从噪音,混乱现象,量子随机过程等物理现象中提取出来随机性,引入计算机才得以生成的。直白一点讲,就是把链下的一个大骰子接到了计算机。

在性质上,TRN 需要同时具备随机性,不可预测性和不可重现性三重特质:

  • 随机性:数列完全杂乱无章,不存在统计学偏差,但不代表不会被看穿

  • 不可预测性:在知道过去数列的前提下,依然无法预测接下来生成的数列

  • 不可重现性:无法重现完全相同的数列,除非将原本的数列保存下来

强 PRN 只具备前两者,而弱 PRN 只具备随机性这一个性质,很容易被看穿。

image

我们说一个随机数可信,安全,最起码的就是指它不会被看穿。因此具有不可预测性的 TRN 和强 PRN 都可以被用作可信随机数引入智能合约。弱 PRN 是不能被应用到比如生成密钥,生成口令密码等等密码学相关的场景中的。

至于如何生成可信安全的随机数,目前来看最直接高效的方法就是通过预言机链接外部 API 并生成加密认证。比如 Chainlink 的可验证随机函数(VRF)服务,就是通过在测试网络中接入外部 API,再用公钥和智能合约的 seed 来验证生成的强 PRN,然后将其传输至智能合约 (具体工作流程见下图)。Chainlink 的 VRF 服务主要采取订阅账号的收费方式,用户在将足够的 LINK 代币存入账户后即可通过发送订阅请求来获取其提供的随机数。

image

再比如,API3 最近选择通过和澳大利亚国立大学(ANU)量子光学团队合作,为 dApp 和 Web3 各类产品提供量子随机数生成(QRNG)服务,将其基于量子现象的生成 TRN 验证上链交付给请求者(具体工作流程见下图)。QRNG 也是目前唯一一个生成 TRN 的服务机制,根据其白皮书的相关论述,QRNG 能在最大程度上防止女巫攻击,并且这一功能完全免费使用。

image

随机 & Web3

在理解了可信随机数的定义与来源后,我们来谈谈一个更实际的问题:随机数在 Web3 到底有什么用?

事实上,随机数在几乎所有的 Web3 场景和用例中都不可或缺。

1. GameFi  

在游戏中需要用到概率分配的情况比比皆是,RPG 游戏便是一个典型的例子。有些角色非常稀有,具有罕见的属性,而有些角色就极为平常。通常越是稀有的角色,就价值越高,越能帮助用户获得高额的经济回报。比如 Axie,每个精灵角色都