内容简介:随机数场景在我们的日常生活中有广泛的应用,从幼儿园入学资格、到初高中分配学校、再到买车买房买彩票,都有赖于摇号抽签。这其中,所谓的“运气”不过是随机数原理在发挥作用。 如何产生公平公开的随机数是许多...
随机数场景在我们的日常生活中有广泛的应用,从幼儿园入学资格、到初高中分配学校、再到买车买房买彩票,都有赖于摇号抽签。这其中,所谓的“运气”不过是随机数原理在发挥作用。
如何产生公平公开的随机数是许多商业应用的核心问题。区块链作为一个多中心化的平台, 天然具有公开透明不可篡改的特性。基于区块链这些优良特性,再结合相关密码学和预言机技术,在区块链平台上产生的随机数,可实现无法预测,不可操控,且具有可验证和不可抵赖性。这对诸多应用场景都是颇具吸引力的解决方案。
今年1月,微众银行开源了联盟链可信预言机解决方案Truora。此次,Truora v1.1.0发布,新增VRF随机数功能,方便开发者使用链上安全可验证随机数,助力拓宽联盟链的应用场景。
在介绍VRF的原理和功能前,我们先简要回顾链上常用的随机数解决方案,并分析优缺点。
区块链随机数产生方案
通过程序生成的随机数一般都是伪随机数,伪随机数尽可能地接近其应具有的随机性,但与真随机数相比,它们由算法生成,并不是一个真实的随机过程。只要保证伪随机数的分布函数与相关性均能通过统计测试,则被认为是安全的随机数方案。伪随机数生成算法需要传入随机数种子值,简而言之,伪随机数 = 算法 + 种子。
1、链上信息做随机数种子
此方案采用纯链上信息做随机数种子,如取block.number, blockhash, blocktimestamp,保证了种子的足够随机性。
算法则可以采用哈希算法,如sha3,sha256,keccak256。示例代码如下:
pragma solidity 0.4.25;contract Random{// Defining a function to generate a random numberfunction rand(uint userSeed) public returns(uint){return uint(keccak256(abi.encodePacked(block.timestamp, block.number, userSeed,block.blockhash(block.number))));}}
-
优点:实现简单,成本最低。
-
缺点:
1、打包区块的节点可以一定程度上控制随机数生成。
2、这种方案容易被攻击。攻击合约可以按此逻辑生成随机数,则相当于提前知道随 机数结果,然后利用此随机数结果攻击用户的业务合约。
2、承诺-揭示模式
此方案是一种在规定时间内由多人参与产生随机数的流程。它的主要特点是"多人参与,两轮交互"。commit即承诺, reveal即揭示。流程如下:
1、在第一轮中,参与方各自生成随机数种子,并进行加密处理得到commit(如哈希处理),参与方将commit和随机数有效时间发送到链上;
2、在第二轮中,参与方将随机数种子明文(reveal)发到链上,合约验证commit与reveal是否匹配,并且确认随机数是在有效时间范围内;
3、合约对所有reveal(随机数种子明文)进行简单运算(如求和)产生最终随机数。
-
优点:生成的随机数安全,单方无法预知,难以共谋。
-
缺点:多方参与,成本高。需要引入惩罚机制,交互过程中不响应,且作恶者需要被惩罚。
3、通过预言机获取链下随机数
引入预言机服务,指定链下随机数网站,借助预言机获取链下随机数。
例如random利用大气噪音生成真随机数并对外提供服务,可以产生实际可靠的随机数。用户可以使用预言机服务,告知此网站url,则预言机服务可以获取此网站的随机数并回写到区块链上。目前微众银行区块链开发的Truora 可信预言机解决方案已支持该功能。random官方网站地址如下:
https://www.random.org
-
优点:获取链下实际可靠随机数(不是伪随机数),使用简单。
-
缺点:需要信任预言机,预言机可以篡改结果,且随机数无法链上验证。
Truora VRF随机数方案
对比可知,以上三种随机数方案各有优缺点。本次微众银行区块链团队开源的VRF随机数解决方案是基于算法实现的伪随机数,需要提供随机数种子。但此方案从算法上杜绝节点或预言机单方控制随机数的生成,或篡改随机数结果。此外,VRF随机数方案具有的一个显著优点就是具有可验证性,智能合约可以验证随机数确实是用户种子和预言机私钥生成。
1、VRF介绍
可验证随机函数( Verifiable Random Function ,简写 VRF )是一种将输入映射为可验证的伪随机输出的加密方案。广泛应用于区块链的共识算法和智能合约产生随机数场景中。
VRF随机数方案主要原理如下:
VRF随机数的生成需要用户方和预言机服务方的两方参与。用户方提供随机数种子(seed),预言机服务方提供私钥(sk)。预言机收到用户的种子,在本地调用VRF算法生成证明(proof)和随机数结果(random),并将结果和证明传入智能合约,智能合约根据预言机服务方公钥 (pk)和用户的随机数种子 (seed)验证证明(proof)是否通过。
Truora VRF随机数方案严格按照VRF算法规范标准化文档实现,采用的是SECP256K1_SHA256_TAI加密套件。VRF算法规范标准化文档地址如下:
https://tools.ietf.org/html/draft-irtf-cfrg-vrf-06#section-5
2、VRF使用流程
VRF使用流程跟Truora访问链下API方式类似。区别在于API方式用户需要指定url,而VRF方案需要指定随机数种子。具体使用流程如下:
1、用户需要继承Truora提供的抽象合约VRFClient实现自己的业务合约,我们提供了RandomNumberSampleVRF合约作为参考实现;
2、Truora-Service服务会监听用户的随机数种子,并且结合自己的私钥在本地调用VRF算法,生成随机数(random)和证明 (proof)。最后,Truora-Service将结果回写到VRFCore合约;
3、VRFCore合约使用预言机的公钥验证随机数证明 (proof)。验证通过后,VRFCore合约将随机数回写到用户合约。
相关
此次迭代版本除了新增VRF功能外,增加了如下功能:
1、新增多返回值格式支持(新增string,bytes类型支持),用户可以更加灵活处理预言机 的回写结果。
2、新增合约版本号控制,方便用户管理不同迭代版本的合约。
3、新增版本升级 工具 和指导文档。
即刻体验Truora
随机数广泛应用于密码学、数值计算模拟、统计研究、游戏抽奖等场景,具有极高的商业价值。欢迎社区开发者体验VRF功能,更详细的原理和使用介绍请参看我们的文档链接:
https://truora.readthedocs.io/zh_CN/latest/
上述优化及功能所涉及的最新代码和技术文档已同步更新,欢迎体验和star支持。
开源地址
github代码库地址
后端代码库:
https://github.com/WeBankBlockchain/Truora-Service
前端代码库:
https://github.com/WeBankBlockchain/Truora-Web
gitee代码库地址
后端代码库:
https://gitee.com/WeBankBlockchain/Truora-Service
前端代码库:
https://gitee.com/WeBankBlockchain/Truora-Web
文档地址:
https://truora.readthedocs.io/
首次体验Truora,可参考一键部署文档:
https://truora.readthedocs.io/zh_CN/dev/docs/Truora-Install/docker-all.html
如需升级已有版本,可参考:
https://truora.readthedocs.io/zh_CN/latest/docs/upgrade.html
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Think Python
Allen B. Downey / O'Reilly Media / 2012-8-23 / GBP 29.99
Think Python is an introduction to Python programming for students with no programming experience. It starts with the most basic concepts of programming, and is carefully designed to define all terms ......一起来看看 《Think Python》 这本书的介绍吧!