文档章节

一个可能的NEO链上安全随机数解决方案

暖冰
 暖冰
发布于 2018/10/17 04:36
字数 1252
阅读 27
收藏 0

0x00 困境

链上安全随机数生成应该算是一个比较蛋疼的问题,哪怕你的系统再牛逼,合约程序困在小小的虚拟机里,哪怕天大的本事也施展不开。 更悲催的是,交易执行的时候,是在每一个节点都执行一遍,那就意味着,要想保证同一个交易在所有节点执行结果都一致, 那么交易获取的随机数也就必须一致。目前来看,当交易执行的时候,合约所能获取到的数据无非是

  • (1)已有的链上数据。
  • (2)通过调用别的合约获取返回值。
  • (3)交易传递的参数。

对于第一种数据来源,已有的链上数据都是公开的,随机数获取算法也是公开的,无论怎么搞,通过链上数据获取的随机数结果怎么看都不怎么靠谱, 用户在交易发布之前,稍微分析甚至不需要分析就能猜到自己可能获取到的随机数值范围。

如果通过调用别的合约来获取返回值,这就进入了死循环————别的合约的随机数哪里来的?

最后一种,交易传参,这就更不能用于随机数生成了,本来随机数是要让用户交易执行之前完全不可预测的,现在直接跟用户输入相关的话倒不如直接让用户自己设置自己的随机数来的直接。

0x01 共识前的共识

研究过NEO共识的同学应该都知道,NEO共识协议采用的是dBFT(没研究过的可以看https://my.oschina.net/u/2276921/blog/1621870 ),这种共识协议不需要靠计算量证明,也不需要大家提供股权证明,简直是绿色环保节能减排居家旅行必备的良心共识协议。 仔细看看,这个共识协议有一个很奇怪的特性,就是在真正的对区块进行打包共识之前,有一个产生议长的共识过程, 只有在议长确定之后,才会由议长发起一轮共识。这就意味着,在所有的节点中, 议长节点是第一个对新一个区块中所有的交易进行验证执行的节点。议长之前没有节点执行交易,议长之后大家数据必须跟议长一致,否则就会重新选举议长。放在我们随机数场景里。议长节点执行之前没有随机数,议长节点执行后,所有的节点的随机数必须和议长使用的 随机数一致。那这就很明确了,在新的区块生成之前,随机数不能存在,而新区块生成的开天辟地第一步就是议长节点发起共识。同时,我们也知道,其实议长也确实在新区快生成的时候,本地生成了一个新的随机数---nonce。

0x02 无法使用的最可靠的随机数

然而,现实是,由于交易在虚拟机里执行,像是被困在了一个盒子里,能调用的只有system和runtime几个库提供的少的可怜的接口,而这个nonce随机数更是不在可用资源列表里,所以以上分析基本又成了废话。

0x03 议长的可信问题

在现有的dBFT协议中,议长其实是不需要可信的,因为一个不可信的议长并不会对系统造成任何的干扰,整个系统除了依赖系统发起共识之外,议长并没有什么剩余价值,即便是那个随机数nonce虽然依赖议长生成,但是也并不会对系统安全造成影响。但是如果依赖那个nonce来 最为种子生成随机数,那么就相当于给了议长一定的权力,至少议长就可以干扰随机数的生成了。所以这个系统还是有问题的,那就是议长的可信度。

0x04 共识前的共识前的共识

摆脱议长可信问题的解决方案是,在选举议长的时候增加议员节点间通信,每个议员都广播自己本地生成的随机数,然后把所有议员的随机数进行哈希来产生分布式的随机数,这样就可以不依赖某个几点来产生随机数了。

© 著作权归作者所有

共有 人打赏支持
暖冰
粉丝 46
博文 124
码字总数 116908
作品 1
长沙
程序员
私信 提问
加载中

评论(1)

虫洞社区
看到您的关于区块链的文章写得不错,可以留一个方便的联系方式吗?日后讨教问题
对话NEL创始人刘永新:百亿市值NEO的中国开发者社区运营之道

今年以来,全球区块链明星项目NEO动作频频,不仅诞生了首个“独立节点”加速去中心化,在推动区块链3.0应用落地上同样是紧锣密鼓,其市值在今年最高峰曾一度超过百亿美金。 作为NEO生态布局中...

互链脉搏
2018/07/25
0
0
区块链安全:实现公链双花攻击的多种方法

针对 EOS、NEO 等大公链平台的多个双花攻击漏洞的案例,360 区块链实验室总结出了多种造成数字货币双花攻击的多种原因,并提出了一种通用的安全减缓措施。各种大公链项目实际上都产生过能够产...

HiBlock
2018/11/28
0
0
2018年最值得投资的10款数字货币

随着比特币的价值,以及其投资价值的持续走高,数字货币界也如雨后春笋般涌现了许多后起之秀。针对此类情况,各国政府也开始陆陆续续实施“双规(两种规划)”举措,一种举措是:加入数字货币...

未来财经
2017/12/19
0
0
核财经独家|国产明星公链的熊市救赎

文|主笔 Vincent 先驱与先烈,仅有一步之遥。 从1.0货币时代,到2.0金融时代,再到百链竞发的3.0应用时代……区块链行业迭代不可抗拒,而熊市成长的基本特色是:一批曾经“优秀”的项目倒下...

核财经
2018/11/19
0
0
NEO改进协议提案9(NEP-9)

文章目录 摘要 动机 详述 原生资产转移URI 智能合约调用URI 原理 实现 参考 摘要 本NEP描述了一个用于NEO原生资产转移的URI标准。此外,它提议一个URI子集用于完善智能合约操作,在本提案所包...

NEO-FANS
2018/12/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

在 Linux 上使用 tarball

Tarball 提供了一种在 Linux 系统上备份和管理一组文件的通用方法。请按照以下提示了解如何创建它们,以及从中提取和删除单个文件。 “tarball” (LCTT 译注:国内也常称为“tar 包”)一词...

Linux就该这么学
13分钟前
0
0
2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势(上)

摘要: 回顾2018,展望2019,计算机科学技术继续前进! 1、简介: 过去几年一直是人工智能爱好者和机器学习专业人士最幸福的时光。因为这些技术已经发展成为主流,并且正在影响着数百万人的生...

阿里云官方博客
17分钟前
0
0
UnsatisfiedLinkError sawindbg.dll

方法:搜索sawindbg.dll,然后将文件报错的目录下

洛水
18分钟前
0
0
说说不知道的Golang中参数传递

本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为。在golang中...

腾讯云加社区
19分钟前
0
0
207. 多数据源 ssm项目

参考博客: https://blog.csdn.net/a15020059230/article/details/76677322 1.效果 一个项目同时连接多个数据源 2. 过程 2.1 搭建单数据源ssm项目 https://my.oschina.net/springMVCAndsprin...

Lucky_Me
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部