随机数场景在我们的日常生活中有广泛的应用,从幼儿园入学资格、到初高中分配学校、再到买车买房买彩票,都有赖于摇号抽签。这其中,所谓的“运气”不过是随机数原理在发挥作用。

如何产生公平公开的随机数是许多商业应用的核心问题。区块链作为一个多中心化的平台, 天然具有公开透明不可篡改的特性。基于区块链这些优良特性,再结合相关密码学和预言机技术,在区块链平台上产生的随机数,可实现无法预测,不可操控,且具有可验证和不可抵赖性。这对诸多应用场景都是颇具吸引力的解决方案。

今年1月,微众银行开源了联盟链可信预言机解决方案Truora。此次,Truora v1.1.0发布,新增VRF随机数功能,方便开发者使用链上安全可验证随机数,助力拓宽联盟链的应用场景。

在介绍VRF的原理和功能前,我们先简要回顾链上常用的随机数解决方案,并分析优缺点。

  区块链随机数产生方案

通过程序生成的随机数一般都是伪随机数,伪随机数尽可能地接近其应具有的随机性,但与真随机数相比,它们由算法生成,并不是一个真实的随机过程。只要保证伪随机数的分布函数与相关性均能通过统计测试,则被认为是安全的随机数方案。伪随机数生成算法需要传入随机数种子值,简而言之,伪随机数 = 算法 + 种子。

1、链上信息做随机数种子

此方案采用纯链上信息做随机数种子,如取block.number, blockhash, blockstamp,保证了种子的足够随机性。

算法则可以采用哈希算法,如sha3,sha256,keccak256。示例代码如下:

pragma solidity 0.4.25;


contract Random
{
   // Defining a function to generate a random number
    function 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#p-5

2、VRF使用流程

VRF使用流程跟Truora访问链下API方式类似。区别在于API方式用户需要指定url,而VRF方案需要指定随机数种子。具体使用流程如下:

1、用户需要继承Truora提供的抽象合约VRFClient实现自己的业务合约,我们提供了RandomMumberSampleVRF合约作为参考实现;

2、Truora-Service服务会监听用户的随机数种子,并且结合自己的私钥在本地调用VRF算法,生成随机数(random)和证明 (proof)。最后,Truora-Service将结果回写到VRFCore合约;

3、VRFCore合约使用预言机的公钥验证随机数证明 (proof)。验证通过后,VRFCore合约将随机数回写到用户合约。

  相关

此次迭代版本除了新增VRF功能外,增加了如下功能:

1、新增多返回值格式支持(新增strting,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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐