如何从区块链上取得随机数

作者:admin   发布时间:2019-03-09 23:44   浏览:
正文

上一节中我们给出了随机性的一个定义,这样的定义也将用于本文余下的部分。并且,我们还给出了伪随机性以及伪随机数发生器的概念。在实际应用中,可用于密码学的伪随机数发生器有很多并且也已经很成熟了,那么我们很自然地想到,能否将伪随机数发生器直接用在区块链,在区块链的共识过程或者应用上面加入随机性,使得这样的随机性满足我们上面提到的三条性质?

那么符合要求的输入存在吗?答案是肯定的,这样的输入实际上来源于我们对于区块链系统参与者之间不是一个整体的假设。

除了伪随机数发生器和真随机数发生器,还有一类随机数发生器会直接利用区块链系统中共识过程所天然产生的随机性。比如,使用未来某个块或者之前某个块的 Hash 值来作为种子之一生成随机数(其他的种子可以是用户的地址、用户支付的以太币数量等,但是这些是用户可控的部分,没有增加不可预测性的作用)。这种做法也常见于各种区块链博彩类游戏以及资金盘游戏当中,但是这样的随机数获取过程有着致命的漏洞——用户有可能通过仔细选择交易时间来控制随机数向有利于自己的方向生成;即使用户无法控制,矿工也可以控制随机数的生成,并且这样的攻击成立并不需要太多算力的参与。只要最终随机数牵涉的金额足够,完全可以使用租用算力或者贿赂矿工的方式进行攻击。

那么归根结底,在区块链这样的一个系统当中随机性可以来自哪里呢?也就是说,通过上面的分析,我们发现,对于如上做法的随机数发生器,无论规则或者程序设计得如何复杂,它都是确定性的算法。对于一个确定性的算法,算法本身不会对输出的随机性有任何的影响,能够影响最终输出的随机性的,只有算法的输入。因此,在区块链系统当中,我们需要在一个分布式的,公开透明的环境中去仔细选择一个有足够随机性的输入。

很遗憾的是,答案是否定的。伪随机数发生器产生的随机序列的不可预测性的前提是伪随机数发生器作为一个黑盒,除了它的输出,外界无法得知其他一切信息。但是区块链上的一切都是公开透明的,包括使用的伪随机数发生器及输入到伪随机数发生器里面的种子也是一样公开透明的。在这样的情况下,所有传统的伪随机数发生器都无法在区块链的环境下产出具有不可预测性的随机数序列。而至于真随机数发生器,的确存在将真随机数发生器的结果通过可验证的不可篡改的通道引入区块链系统内部,这样的通道又被称作 Oracle。以太坊现在常用的随机数发生器就是通过 Oracle,引入 random.org(random.org 是一个网站,它声称提供真随机数)提供的随机数。但是这种方法的问题在于,所谓的“真随机数发生器”往往是中心化的,拥有这样的硬件或者软件的人或者组织拥有篡改随机数发生器结果并且不让用户发觉的能力。这对于主打“去中心化”的区块链系统来说,无疑如鲠在喉。

热点文章
近期更新
友情链接

Powered by 瑞祥彩票 @2018 RSS地图 html地图