文档章节

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

暖冰
 暖冰
发布于 10/17 04:36
字数 1252
阅读 10
收藏 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 共识前的共识前的共识

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

© 著作权归作者所有

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

评论(1)

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

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

互链脉搏
07/25
0
0
2018年最值得投资的10款数字货币

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

未来财经
2017/12/19
0
0
秋风瑟瑟CVP热情不减,干货满满开发者受益良多

秋风瑟瑟CVP热情不减,干货满满开发者受益良多 2018-10-29 09:46编辑: Gboy分类:区块链来源: 区块链 招聘信息: 图像处理及模式识别工程师 C/C++工程师 Cocos2d-x游戏客户端开发 iOS开发工...

Gboy
10/29
0
0
(陈波涛)时戳资本03区块链公链项目研究报告

2018-04-09 简书 章昱昕 | 时戳资本 | 01 区块链行业发展与投资机会研究报告 4.9日,时戳资本发布了 区块链行业研究报告系列01——《区块链行业发展与投资机会研究报告》——章昱昕@时戳资本...

大圣2017
07/06
0
0
专访 | EOStoken联合创始人 曾子涛

昨晚,Uchain团队《大咖说》线上演讲第二季第一期正式上线了!有需要的同学可以点击阅读原文在千聊回听,了解EOStoken联合创始人【曾子涛】的真实观点和行业动态。 以下是昨晚演讲的文字整理...

Uchain
08/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

php获取客户端IP

php获取客户端IP 首先先阅读关于IP真实性安全的文章:如何正確的取得使用者 IP? 「任何從客戶端取得的資料都是不可信任的!」 HTTP_CLIENT_IP头是有的,但未成标准,不一定服务器都实现。 ...

DrChenXX
昨天
0
0
. The valid characters are defined in RFC 7230 and RFC 问题

通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tom...

west_coast
昨天
1
0
刷leetcode第704题-二分查找

今天双十一买的算法书到货了,路上刷到有人说的这个题,借(chao)鉴(xi)一下别人的思路,这个是C++标准库里面的经典方法,思路精巧,优雅好品味 int search(int* nums, int numsSize, in...

锟斤拷烫烫烫
昨天
2
0
【分享实录】BANCOR算法详解及代码实现

1 活动基本信息 1)主题:【区块链技术工坊22期】BANCOR算法详解及代码实现 2)议题: BANCOR算法的特点和优劣势 BANCOR算法和举例 如何加入BANCOR.NETWORK交易所 如何开发自己的BANCOR去中心...

HiBlock
昨天
2
0
微信小程序(2)

开始看微信小程序的教程了。刚刚看完官方教程的视图层部分。这里摘录一些自己认为的部分关键点。 1.直接修改数值无法重新渲染,需要使用setData()方法; 2.列表渲染中:wx:key用于保持项目在...

MKjy
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部