分散预测机Chainlink可验证随机函数(以下简称Chainlink VRF)正式推出。开发者可以用这个工具生成随机数,并在链上验证。Chainlink VRF将为许多优秀的智能合约项目带来巨大的价值,尤其是证明智能合约中使用的随机数不可篡改和操纵。
链家VRF在区块链游戏、安全和第二层协议等许多领域帮助加速智能合约的开发进程。开发人员可以很容易地集成VRF链,参考我们最近发布的开发人员文档,并在智能合同中使用可验证的随机数。
要验证随机数的价值,要开发安全的智能合约,避免合约资金被盗的风险,开发者必须在安全性上下大功夫。如果随机数是智能契约所依赖的关键数据,那么开发者自然会期望参与契约的各方都具有相同的不确定性,减少因一方预测成功而被利用漏洞的风险。
Chainlink VRF可以为智能合约提供随机数和加密证明,并验证链中随机数的不可预测性,因此可以满足上述两个要求。由于链节VRF的随机数可以在链上验证,问题节点只能选择不响应请求。在即将推出的Chainlink的跑马圈地机制下,这样的行为会被罚款,之后可能会被从随机数生成器名单中移除,因此会遭受经济损失。
开发人员可以使用Chainlink VRF开发基于随机数的可靠智能合约应用程序:
为游戏提供随机数,数据可以在链上验证,提高了游戏的可信度,为对安全性敏感的用户提供了额外的保护。
给游戏带来更多的挑战和不确定性,比如随机给玩家提供奖励(比如:战利品掉落)。
随机分配任务和资源,并确保可验证性,如随机分配法官审理案件或分配审计员给公司。
选择观察员代表对智能契约的提议进行投票并达成共识(调查是实现抵抗女巫攻击的额外能力的有效方式)
链环VRF的可验证随机数可以克服现有随机数生成方法的诸多局限性,是现有方法的安全隐患。利用链上的数据,比如块哈希值,或者把链上生成的随机数传到链上,这两种方法都有各自的缺陷。
开发人员应该尽量避免过度依赖基于块哈希生成随机数。假设一个智能合约是基于某个高度的块哈希值最后一位的奇偶判断结果。这似乎是50/50的概率,但假设有一个矿工(或矿工工会)的产量占总块数的三分之一。现在这个矿工决定扔掉所有块哈希值最后一位数为1的获胜块,放弃大约2-3以太坊的块奖励。通过这种方式,挖掘者可以将结果为0的概率从50%增加到2/3,导致所有依靠这种方法生成随机数的智能合约用户的损失。如果这样能给这个矿工带来12-18以太币的额外收入,那么他的选择在经济上是合理的。所以这种机制下的合同价值会有一定的上限。
为了避免这样的问题,开发人员转向了链外解决方案,即在链下生成随机数并将其发送回链。但如果链下的随机数无法通过加密验证,则数据可能在链下生成和传输过程中被篡改。同样,用户也只能闭上眼睛,相信链下生成的随机数是公平可靠的,这些数据在传输过程中没有被篡改。
区块链开发者在为智能合约提供随机数的过程中,还需要避免以下关键痛点和安全风险:
智能合约不可访问或不兼容。
集中式随机数生成器处理数据。
区块链的矿工利用用户谋取私利。
最终用户需要盲目相信应用程序的安全性和可靠性。
为解决上述问题及其他安全风险,链结VRF使随机数生成过程安全透明,并通过加密技术证明每个结果的公平公正。
链环VRF的工作原理链环VRF的工作原理
简而言之,智能合同将为Chainlink或Chainlink Oracle network提供一个请求随机数的种子。这个种子是Oracle无法预测的,将用于生成一个随机数。每个先知将使用自己的私钥来生成随机数。结果和证明在链上发布后,可以使用甲骨文的公钥和智能契约的种子进行验证。这种方法利用了区块链著名的签名验证功能,合同只能使用在相同区块链环境下验证过的随机数。
使用Chainlink VRF工具的最大优点是可以验证随机数。即使一个节点被攻破,它也无法操纵或影响最终结果,因为它无法通过链上的加密验证。最坏的情况无非是倒下的节点没有响应请求,这将立即被区块链记录下来,并永远保存在链上。用户可以参考有效证书,不再使用未能响应或提供有效签名记录的节点。即使节点被操纵,生成的随机数也不会受到影响。倒下的节点只能选择不响应请求,但在Chainlink的跑马圈地机制下,这种行为会被罚款,问题节点稍后会从随机数生成器列表中移除。因此,低质量或非法节点将遭受巨大的短期和长期经济损失。简而言之,只要正确访问,链环VRF就永远不能被操纵。唯一能发生的就是问题节点下线或者不响应,然后彻底清除。这种机制为智能合约的开发者和用户提供了极大的安全性。
Chainlink VRF还有一个优势,就是随着用户数量的增加,用户向节点运营商支付的费用也会相应上涨,因此节点会更有动力提供尽可能多的安全保障。之后,用户可能会通过staking要求加密安全性,并为额外的安全性支付更多费用。这样,用户的付费就会形成一个全球共享资源池。原本需要花钱自主开发RNG(注:随机数生成器)解决方案的用户,会用这笔钱来提高整个区块链生态系统中共享资源的安全级别。Chainlink接入了Polkadot、Tezos等众多区块链,这意味着Chainlink生态系统中的用户将形成网络效应并不断扩大,用户数量和加密安全级别也将形成良性循环,相得益彰。
整合案例详解:PoolTogetherPoolTogether是以太坊的保本储蓄彩票游戏,我们认为是一个非常新颖有趣的概念。经过广泛的技术研究,PoolTogether团队决定使用Chainlink VRF为其应用程序提供可验证的随机数。
PoolTogether如何使用Chainlink验证随机数?
PoolTogether是一款保本储蓄游戏,用户的存款汇集在一起,每天或每周进行一次抽奖,存款利息作为奖金支付给中奖者。这款游戏通过抽奖机制鼓励用户的储蓄行为。
PoolTogether使用Chainlink VRF生成可验证的随机数,可以向其用户证明每期的中奖者都是由完全随机的数字选出的。这样既能保证我们自身的安全,又能向用户证明关键环节的安全是可追溯的,随机数生成过程是可验证的。通过这种方式,用户更有信心参与智能合约,并相信他们享有相同的获胜概率。
技术细节Chainlink VRF是戈德堡可验证随机函数(VRF)的实现。详情请参考本文。“可验证随机函数”中的“随机”是指“任何没有种子或密钥的人根本无法预测(即概率均匀分布)”。
vr密钥是甲骨文在均匀分布的{0,…,#secp256k1-1}中通过加密选取的一个数(注:secp256k1是以太坊加密算法中的椭圆曲线)。这个密钥对面有一个公钥,这个公钥对应一个预言机。Oracle将公钥与链上VRF和Chainlink任务id绑定在一起。
当智能合约请求一个随机数时,它将提供一个种子。为了保证VRF结果不可预测,需要在种子中植入不可预测且难以被篡改的值,比如最新的块哈希值或加密验证后的离线数据,比如某项资产的最新更新价格。您可以将这些数据转换为bytes32,并使用keccak256算法生成种子。链VRF将智能合同种子与其他数据混合,以避免重放攻击,并为合同提供一些基本保护,但除此之外,提供一些特殊保护也是必不可少的。
一旦链上的VRF确定了种子,就会在以太坊日志中广播,向智能契约要求的甲骨文请求相应的VRF结果。看到此日志后,预测器将执行以下操作:
首先,它以seed和Oracle的公钥作为数据输入,“以输入的哈希值作为曲线方程的输入”,从secp256k1中获取安全加密的随机样本。方法是使用keccak256算法,用递归的方法散列数据,直到输出小于secp256k1算法的基域(即secp2561算法中描述的P值),是secp256k1曲线上一点(X,y)的X坐标(基域中y2=x3 7)。因此,(x,y)是对输入进行哈希运算的结果。
然后,将secp256k1曲线的(x,y)坐标乘以关键点,得到该点。哈希值由keccak256算法获得,VRF的输出结果为uint256格式。它会生成一个证明,证明的倍数除以(x,y)等于甲骨文公钥的倍数除以secp256k1生成器。这个证明方法非常接近Schnorr的签名:首先,他从{0,…, #secp256k1-1}中随机安全地取出一个nonce,类似于私钥的生成方式。然后,计算公式u=ng,其中g为secp256k1生成器,u为以太坊地址。然后计算公式v=n(x,y)。然后,(x,y),VRF的公钥,的地址,u,v进行哈希运算,哈希模运算#secp256k1的余数称为c,最后计算s=n-ck模运算# secp256k1,其中k为VRF密钥。因此,证明包含公钥、c、s和种子。然后将结果发送回链上的VRF,验证证明,如果验证通过,则将数据返回给智能合约。
为了核实证明,合同应做到以下几点:
检查公钥和是否是secp256k1曲线上的有效点。
验证cpk sg点的地址与U的地址是否一致(注:pk指的是Oracle的公钥)
用公钥和种子取hash作为曲线方程的输入,检查C S (x,y)的keccak256 hash值是否等于C.
如果你有兴趣直观的了解这个方案的加密安全逻辑,可以参考Jimmy Song的书《Programming Bitcoin》第三章“签名与验证”中“箭头”的类比。我们希望在这里实现的特殊“目标”是c。要全面了解该方案的安全认证机制,请参考附录B《使NSEC5适用于DNSSEC》。
但是使用secp256k1进行标量乘法(比如C),在以太坊虚拟机上直接运算的成本极高。所以为了提高效率,我们借鉴了Vitalik的方法,在证明中引入一个证人,验证证人的C 运算结果是否与现实相等。这样就可以把C 的运算转移到链上,只需要验证链下的运算结果是否与实际相等,大大降低了运算成本。
所以上链验证除了以上数据输入和步骤,还包括C和s(x,y)的见证。需要检查这些见证是否是secp256k1曲线上的有效点,用Vitalik方法验证这些见证的计算结果是否与现实相符。另外以太坊上的地址用U表示,也用Vitalik方法验证U是否匹配cpk sg点。
Chainlink VRF发展计划Chainlink分散式Oracle网络包含1000多个高质量节点。使用门限签名技术,该网络是高度可扩展的,并且以成本有效的方式去中心化。这将为VRF链家带来高度的权力下放和可用性。我们将两者合二为一,不仅利用Chainlink VRF的独特优势在链上提供可验证的随机数,还利用Chainlink网络中的成千上万个节点实现高性价比和高可用性。
Chainlink以分散的方式实现可验证的随机函数。
一旦Chainlink丰富的生态系统加入Chainlink VRF,我们就可以建立一个遍布全球的分布式节点网络,在经济激励的驱动下,在链条上生成并广播可验证的随机数。Chainlink门限签名技术结合高度分散的节点网络将有效避免用户资金被盗的风险。不仅可以在链路上验证VRF反馈的数据,还可以保证高可用性。目前,Chainlink可以访问许多可能需要可验证随机数的区块链。加上虚拟货币经济的激励机制,Chainlink VRF很可能成为智能合约使用随机数的新标准。
除了上述优势,我们目前正在完善Chainlink VRF的功能,开发分散式随机数生成技术,并积极与其他RNG(注:随机数生成器)系统合作。根据我们的初步研究,我们认为链节VRF可以与VDF和其他随机数生成方法结合在链上和链下。我们很高兴与区块链圈和学术圈合作,共同推动智能合约可验证随机数生成技术的发展。
欢迎试用VRF链家,并提出您的宝贵意见。我们目前正处于Chainlink VRF安全评估的最后阶段,希望与开发者社区和学术界的用户交流反馈。如果您对VRF及其改善方案有任何意见或建议,请发邮件至vrf@chain.link