链内参
长按图片保存分享

拯救DApp,聊聊BOS随机数方案

竞猜类游戏一直占据EOS DApp游戏的大部分江山,不论是参与人数还是流水量都是十分可观,数据可以参考如下两张图。

活跃用户

交易金额

从DAppTotal提供的数据来看,30天日活账户数量在11万,交易金额在5百万美金,虽然是全网数据统计,但从DApp分类上面可以看到,基于随机逻辑的竞猜类DApp绝对是主流。在这繁荣的背后,其实暗流涌动。

EOS DApp被黑损失总金额,数据来源 slowmist

从区块链安全团队SlowMist提供的数据统计来看,EOS DApp 共有超过1千万的攻击损失,从这部分攻击方式来看其中很大一部分都是DApp的随机数方案有缺陷或者不合理。“随机数”这么一个看似简单的功能,为啥EOS迟迟没有给出方案?应该如何拯救这些DApp?

对于随机数而言,不同的场景对随机数、随机程度和来源有不同的要求,基本的有以下3点要求:

1. 公平,不能由游戏方直接控制结果;

2. 公开,需要让用户了解随机数的来源规则;

3. 不可预测,一旦可预测攻击者就能盗取游戏资产,损害其他玩家利益。

当前常见的EOS随机数有几种方案:

1. 直接由游戏方的后端服务器生成随机数,对游戏开奖;

2. 使用未来区块的数据(如block_id);

3. 使用未来区块的数据加其他随机来源,如账户id等。

先来说说方案1,这种方法直接违背公平原则,用户输赢直接掐在游戏项目方手里,让你输就输,让赢你就赢,对玩家来说毫无公正性和可信性。

对于方案2,在EOSIO链上数据,有两个常见哈希值,一个是 transaction_id ,这是对当前执行的这个 transaction 数据进行哈希运算得到的哈希值,知道了当前执行的操作数据,就掌握了这个哈希值,所以几乎没有DApp开发者使用。另一个是整个区块的 block_id,这是对区块头做哈希运算。区块头里包含 action_merkle 和 trx_merkle,所以需要知道一个块里的所有交易的详情才能生成这个哈希值,难度就大多了,所以很多开发者都用未来区块的 block_id 作为开奖随机数。

常言道:没有做不到,只有想不到。这个方案最近在 EOSPlay 里也被攻破了,而且方法相当暴力,对技术要求也比较高。攻击者直接拉高CPU价格,让一个块里只出现他的操作,这样就控制了块里所有的交易,从而可以直接控制 block_id,事件详情可以参考《慢雾预警:EOS DApp EOSPlay 遭遇新型随机数攻击》(原文链接见文末)。

再看方案3,这种方案更早就被破解了,基本上是各种附加随机内容被控制造成的。可以参考下《智能合约攻击方式汇总》(原文链接见文末)。

有一个理论上可信的“中本聪骰子”方案生成随机数,具体过程如下:

• 项目方服务器生成随机数,记为 host_rand. 对其进行哈希运算,记为 hash(host_rand),将hash(host_rand) 发送给用户;

• 用户生成随机数,记为 user_rand,将其发送给项目方服务器(断绝用户作弊可能);

• 项目方将 host_rand 发送给用户,此时用户可以验证之前收到的 hash(host_rand) 确实是由该host_rand 生成的(断绝项目方作弊可能);

• 项目方将 hash(host_rand +user_rand) 作为随机数使用;

该方案同时利用项目方和用户生成的随机数,哪一方都无法控制最终结果,且全程公开透明,可验证。是符合公平、公开、安全原则的。但这个方案实现起来成本高,操作复杂需要多次交互,用户要确认方可。而且对于普通用户来说,科普成本很高。

众里寻他千百度以后,到底有没有一个十分安全并且易用的链上随机数方案?耐心找寻以后,发现了这一EOS历史悠久的问题,已经被BOS解决了,实现方式简单安全。BOS是基于EOSIO项目具有3秒共识以及首个原生支持去中心化IBC的DPoS公链,技术十分厉害。其他不表,直接看下BOS是怎样解决随机数这一难题的。

BOS的随机数生成方式:

• BP_Sign_Key : 使用BP私钥签名,避免他人进行投机计算。

• F:将block_timestamp按照0.5向下取整,降低BP调整时间戳来进行投机概率。

• global_action_sequence: 全局action自增标识,防止 INLINE_ACTION 攻击。

它的使用也很简单,可以直接在合约的中调用,例如:

基于BOS的随机数方案,可以让一部分数据从客户端生成,这样一个随机数的生成包含了项目方、BP、玩家三方,安全度十分高,对上面提到的攻击方法都免疫,使用也很方便。满足公平、公开、不可预测的原则,推荐在游戏中作为随机数来源使用。

从BOS提供的“更安全随机数方案”(原文链接见文末)来看,十分契合“更可用的链 , 为DApp而生”这一主旨。

安全的随机数来源对区块链上的游戏至关重要,希望项目方能使用合理的生成方案,给用户们带来优秀的游戏,让用户们玩的放心,玩的开心。后续也会持续关注BOS带来的其他“落地”特性。

本文提到的文章原文如下:

《慢雾预警:EOS DApp EOSPlay 遭遇新型随机数攻击》

(http://www.btc126.com/view/51547.html)

《智能合约攻击方式汇总》

(https://www.tuoniaox.com/news/p-274286.html)

《BOS更安全随机数方案》

(https://github.com/boscore/Documentation/blob/master/BOSCoreTechnicalWhitePaper_zh.md#%E6%9B%B4%E5%AE%89%E5%85%A8%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%96%B9%E6%A1%88)


免责声明:本资料不应作为作出投资决定的依据,亦不应被解释为从事投资交易的建议。交易数字资产涉及重大风险,并可能导致您的投资资本损失。因而你应确保充分了解所涉及的风险并谨慎投资。《链内参》只负责分享信息,不构成任何投资建议,用户一切投资行为与本站无关。 

0 0 分享到: