本文将从EOS DApp攻击开始,从流行科学的角度解释安全随机数的标准以及公共链上随机数的当前生成机制。自从EOS主网于去年6月上线以来,已经发生了DApp智能合约被黑客入侵的事件。其中,泛随机数攻击占大多数。以下为攻击事件列表:上面的19种EOS DApp攻击造成的损失总计超过100万美元,其中14种是随机数攻击,另外5种是回滚攻击。这些攻击与随机数直接或间接相关,可以称为泛随机数攻击。随着这些攻击的发生,区块链上随机数的安全性越来越受到关注。什么是“安全”?随机数?首先考虑一下我们对随机数的要求。在我们生活中的许多地方都使用随机数。当它至关重要时,我们将要求它“公正”,合理。和“安全”。例如,在抽奖时,彩票公司要求每个人租用一个频道,让第三方预先认可一系列公平的彩球,在频道上打开一组彩球,然后将彩球放入彩票中盒子玩。进行混沌处理,然后一个个地绘制彩球以获得数字,目的是使每个人都相信,很多绘制过程都是公平的。但是,这可能无法真正实现正义。例如,当第三方与彩票公司密谋时,可以在彩球上安装磁铁。最后,只有带有磁铁的彩球会被吸出,这似乎是随机的。这个过程不是随机的。在这一点上,我们首先得出一个小结论。一个好的随机数应满足以下三个特征:·不能操纵或预测(不能用磁铁改变)·可以由公众对其随机性进行验证(您可以相信启动过程实际上是随机的)·否需要信任第三方(无需聘请律师来确认球是可以的)。除了现实的抽奖活动外,开发程序(例如测验,dubo,任务随机分配,等我们首先有了随机数的概念后,我们将研究区块链上当前存在的随机数问题。区块链上的随机数如何产生?目前,EOS和以太坊均未提供官方的随机数生成服务。如果开发人员需要在智能合约中使用随机数,则他们有两种选择:自己生成随机数或依靠第三方oracle。以太坊正式建议使用Oraclize(第三方oracle服务)生成随机数,但是去中心化的区块链依赖于一个集中的第三方来提供随机数,这完全是在转马。对于流行的DApp,经常调用第三方oracle是非常昂贵的,并且它可能还会增加完成步骤所需的事务数量,从而导致DApp的延迟增加,因此大多数开发人员倾向于随机生成随机数。问题在这里。在官方不提供随机数生成服务的情况下,公共链上的开发人员只能将公共链上可用的各种变量用作随机数种子,而这些变量通常来自区块。信息,对那些有兴趣的人来说很容易预测随机数。例如,不久前受到攻击的EOSDice使用两个变量tapos_block_prefix()和tapos_block_num()作为随机数种子,它们是用于押注“上一区块”的信息。交易。精明的读者可能发现有问题,实际上是在下注之前就形成了随机数的种子!正是通过看到此规则,黑客才能预测“必须下注”事件。随机数,并在不公平的条件下赢得交易商的钱。第一次黑客事件发生后,EOSDice立即纠正了随机数生成方法。开发者切换到双倍延期活动以延迟抽奖时间,从而使参考块成为下注时未生成的块。不可能预先获得块信息。但是魔力很高,黑客直接写了一个合同来模拟EOSDice合同的行为。只要两个合同在同一块中运行,它们将引用同一块并获得相同的块信息。因此,EOSDice第二次遭到黑客攻击。由于公共链上的区块信息是公开的,因此使用“区块信息”的当前方法已经成为现实。无论如何设计,在智能合约中生成随机数都将具有安全性