区块链上的随机数

#区块链 #教程

随机数

随机数的使用,由来已久,用在了生活中各个方面,比如说游戏,博弈等。产生随机数的方法有很多。自古以来我们就使用掷骰子、抛硬币等方法产生随机数。进入到计算机时代过后,我们使用计算机产生伪随机数。或者利用传感器获取来自物理世界的随机数。这类传统的随机数生成方法已经是有了充分的研究和讨论。

但区块链上的随机数,和以往的都不太一样。

随机数对于区块链技术来说非常的关键,其实从本质上讲,区块链作为分布式账本的一个核心,就是在于需要随机的选出区块的记账人,而这个随机性还必须可以证明,不能被操控,也不应该能够被预测。否则就会有恶意节点会利用这个特性,对区块链进行攻击。

区块链上的随机数

下面就现行的两大区块链共识机制分别讨论。

在pow工作量证明方案中。就是要所有节点竞争计算一道较难的数学题。只有当算力高的节点,才有较高的概率成为记账人。

在pos权益证明方案中。只有拥有权益证明份额高的,才有较高的几率成为记账人。前几天提到过的algorand其实也是利用特制的随机数方法,来使得,在pos权益证明机制下。能让所有权益拥有者,更加平均的获得记账几率。使其更加随机,被操控的可能性更小。

使用共识机制产生区块可以确保区块链的不可篡改性,但其代价较高,作为小范围使用的随机数,必然不会用这样的共识机制去明确随机数的公平性,但可以基于已经获得共识的区块链平台来做随机数发生器。

区块链上的随机数生成器的难度 

区块链作为一个去中心化的平台。所有信息都是公开的,因此设计一个可用的随机数发生器,难度是更大的。这个随机数生成器,除了应该满足/无法预测/这个特性之外还应该有不可操控,难以串谋,可证公平这几个特点。我们都知道,区块链是一个分布式的账本。在每一个节点上都会重复同样的操作。如果让每一个节点都产生自己的随机数,那运行的结果将会完全不同。所以说,显然在区块链上的随机数生成器,将会与传统的随机数生成机制完全不同。

如果区块链网络是通过获得物理传感器信息的方式产生随机数,将涉及到上链安全的问题。使得负责上链的节点具备操控随机数的能力。如果使用计算机生成伪随机数时,当只有一个人参与时,显而易见。这个人可以提前知道随机数是什么,无法保证公平。如果是多人合作时,这必然存在最后一个参与者。该参与者相比其他人拥有更大的优势,因为他可以提前知道这个生成的随机数。并可以根据情况改变提交的内容,或者选择不提交。使得最后一个参与者,能够操控随机数。另外,在多个合作者的情况,还有串谋的可能。

解决方案

预言机制

代表有Oraclize和Reality Keys方案。

它是将一个受信第三方的数据源,搬运到链上,这个数据源是基于tls,就是而我们浏览网站是常看见的https。由于有服务器的签名在,所以这个搬运工本身是无法作假的,这也被称为tls公证机制。

优点是,获取随机数的速度快。

缺点是,仍旧无法防止,数据的提供方本身作假,或修改内容。

区块数据作为种子

使用区块链上的区块数据作为产生随机数的种子信息。

优点是,所有数据都来自区块链。安全可证。

缺点是。当修改随机数可获得的利益,比单个区块的奖励更多时,矿工有可能会被贿赂,而去试图构造有利于自己的区块,从而操控随机数。

多人合作生成随机数

使用智能合约的方式。多个参与者分别向这个智能合约发送自己挑选的任意数字。一段时间后,智能合约将收集到的这些数字,通过一些数学计算构造出一个最终数字。最终的这个数字将作为随机数返还给参与者。

优点是。从多个不同的来源获得的种子数,来生成最后的随机数。随机性可得到保障。

缺点是。若某一时段,没有足够多的参与者,将无法获得有效的随机数。而且。由于需要等待参与者的加入,获取该随机数的时间会比较缓慢。

门限签名随机数

所有成员有一个逻辑上的私钥,但每个成员只有这个私钥的一部分,完整的私钥不会存在于任何成员手中,因此没有成员能够直接计算出签名,签名的时候,每个成员都将使用自己拥有的那部分私钥对信息进行签名,然后收集到足够多的成员签名,就可以计算出完整的签名,但依旧无法倒推出完整的私钥。因此单个成员都无法作恶。最终计算出的签名可作为随机数使用。在签名过程中,没有个体能够提前预知签名结果,因此无法操纵随机数。

优点是,安全性高,可以防止串谋。

缺点是,生成随机数的成本较高,速度会比较慢,需要等待所有成员签名。

总结 

由此可见,在区块链上的随机算法,也是非常复杂和非常重要的,因为他的使用范围广,而且他比以往的随机数算法都更加的安全和经得起审计,而一个不合格的随机算法会带来的不公平对于用户和应用来说,可能会是灾难性的。

整体来说,区块链网络中的随机数算法,将会是未来发展的一个重要方向。

 

参考资料