更多精彩 >

合约之熵,安全之殇 | 区块参数依赖

2018-09-29 13:57:28   来源:链安科技  作者: 

摘要:山竹过境,气候入秋,想必大家都感受到了久违的一丝凉意,这倒也与区块链产业的“寒冬”有些应景。不过更令人心寒的还是近期以太坊游戏的事故频发。

引子: 橘生淮南则为橘,生于淮北则为枳,叶徒相似,其实味不同。所以然者何?水土异也。 —— 《晏子春秋·杂下之十》


前情提要


上回说到,合约安全隐私未必,外部读取暴露无遗。


只要是储存在storage里面,存在于区块链上的变量,尤其是状态变量,由于区块链公开的特性,都是可以通过不执行合约直接从外部读取的。因此,将隐私信息,不可公开的数据储存在智能合约中是非常不安全的做法。即使进行有意或者无意的此类操作,都要及时附加相应的加密处理,避免因为对于可见性说明符的片面理解而留下安全隐患。全面理解代码技术细节,融会贯通互联网安全知识,才能安全应用区块链技术。


本期话题


第十回,机制依赖参数主导,矿工操纵投机取巧


山竹过境,气候入秋,想必大家都感受到了久违的一丝凉意,这倒也与区块链产业的“寒冬”有些应景。不过更令人心寒的还是近期以太坊游戏的事故频发。例如,FOMO3D最近的第二次开奖,获奖者仍然是黑客,使用的手段依然是我们在第六期游戏合约漏洞总结当中提到的“类似竞态条件利用的阻塞交易手法”。还有我们之前在快讯中提到的Mycryptochamp这个游戏,其随机数(或者说熵的变量)生成机制依赖的是可预测的参数,导致投机者轻易获取空投,影响游戏公平性。


这些游戏的机制都依据以太坊的特性来设计随机数的产生,但是设计理念却是在没有理解这些特性的基本原理来定制的。因此如火如荼短时间炒作后,在无法实现公平游戏的情况下“迅速降温”。本期,我们将重点分析游戏过于依赖区块参数设计而产生的两种漏洞 —— 时间戳依赖和区块哈希依赖。


基础小知识


什么是区块参数?


以太坊的实现机制与比特币有很大的差别,以太坊的每个区块头多了一些以太坊自身特殊的字段,用来表示区块的属性值,以太坊智能合约可以通过以太坊提供的接口读取这些属性值:


block.blockhash(uint blockNumber) returns (bytes32):指定区块的区块哈希——仅可用于最新的 256 个区块且不包括当前区块;而 blocks 从 0.4.22 版本开始已经不推荐使用,由 blockhash(uint blockNumber) 代替


block.coinbase (address): 挖出当前区块的矿工地址


block.difficulty (uint): 当前区块难度


block.gaslimit (uint): 当前区块 gas 限额


block.number (uint): 当前区块号


block.timestamp (uint): 自 unix epoch 起始当前区块以秒计的时间戳


now (uint): 目前区块时间戳(block.timestamp)


需要注意的是:在同一个块中,每笔交易读取的区块参数都是一样的


什么是熵?


熵(entropy)的概念最早起源于物理学,用于度量一个热力学系统的无序程度。在信息论里面,熵是对不确定性的测量。


所以在以太坊中,熵(entropy)也就是我们所说的随机性(randomness)。


对于一个以随机性为核心的游戏合约,熵的变量的计算尤为重要。


事故频发,问题凸显


上面讲到的MyCryptoChamp体现,其合约中RandMod函数使用私有变量randNonce和父块哈希作为参数生成随机数。任何人都可以用web3.eth.getStorageAt()函数外部读取私有变量randNonce(我们在上一期期已经阐述过详细方法),而父块哈希(blockhash(uint blockNumber))在合约内外都可以读取到。这样产生随机数的计算方法就已经被看破,投机者只需在计算出较理想的随机数时加入游戏即可获得空投。


除此之外,国外已有专业人士Arseny Reutov分析了3649份智能合约,发现有43份存在类似的可被利用的漏洞,并将此类情况称为假随机数生成漏洞(PRNG)。


如此看来,将区块参数与熵联系起来运用到游戏设计(尤其是博弈类游戏)并不是个例。需要思考的是,以太坊的区块参数能不能可靠的运用于熵。


以太坊没有提供类似于传统编程语言的rand()函数。于是实现去中心化的熵已经成为一个颇具规模的问题,许多人参与了这个问题的考究,甚至连V神自己也发表了一片文档提出了一些完善计划,例如使用RanDAO或者私有随机(private randomness)。所以,区块参数能够可靠的用于设计锁仓功能,但是放在随机数生成设计当中,它的地位相当不可靠,形象的来说,同样的橘树,生长在淮南长出甜的橘,生长在淮北长出苦的枳。


02.jpg


区块参数依赖漏洞反例


一、时间戳依赖


数据块时间戳(block.timestamp)历来被用于各种应用,例如随机数的函数,锁定一段时间的资金以及时间相关的各种状态变化的条件语句。矿工有能力稍微调整时间戳,如果在智能合约中使用错误的块时间戳,这可能会证明是相当危险的。


block.timestamp或者别名now可以由矿工操纵,如果他们有这样做的动机。


例如下面这个简单的游戏合约.


03.png


这份合约表现得像一个简单的彩票。每块一笔交易可以打赌10 ether赢得合约余额的机会。这里的假设是,block.timestamp关于最后两位数字是均匀分布的。如果是这样,那么将有1/15的机会赢得这个彩票。 但是,正如我们所知,矿工可以根据需要调整时间戳。在这种特殊情况下,如果合约中有足够的ether,解决某个区块的矿工将被激励选择一个block.timestamp % 15 == 0或now % 15 == 0的时间戳。在这样做的时候,他们可能会赢得这个合约以及块奖励。由于每个区块只允许一个人下注,所以这也容易受到前置交易攻击。


在实践中,块时间戳是单调递增的,所以矿工不能选择任意块时间戳(它们必须大于其前辈)。但是它们也限制在将来设置不太远的块时间,因为这些块可能会被网络拒绝(节点不会验证其时间戳在未来的块)。


二、区块哈希依赖


在一些赌博游戏合约中,使用区块头相关的参数来产生随机数:区块号(block.number)、区块时间戳(block.timestamp)、区块难度(block.difficulty)、区块gas限制(block.gaslimit)等。当以太坊上矿工挖出一个区块时,此时区块头的相关参数就可以被矿工获知,一些恶意挖矿的矿工可以利用这些区块参数进行攻击。


例如下面这个游戏合约


04.png


一个实现轮盘赌博的智能合约中,其逻辑是如果下一个块哈希值以偶数结尾,则返回一个黑色数字。一个矿工(或矿池)可以在黑色上下注100万美元。如果他们挖出下一个区块并发现区块哈希值以奇数结尾,他们会丢弃该块、继续挖矿、直到他们挖出一个块哈希值为偶数的块,从而从漏洞合约中获利。


漏洞修复


随机数生成的方法有很多,并不一定要依赖区块参数,下面介绍两种理念防范矿工或者投机者。


1.随机数的来源尽量来自于区块链之外,这可以在具有诸如commit-reveal之类的系统的对等体之间完成。


2.通过将信任模型改变为一组参与者(例如在RandDAO)来完成。 这也可以通过中心化的实体来完成,该实体充当随机预言。


3.根据Solidity官方建议,合约开发者可以使用链外的第三方服务,比如Oraclize来获取随机数。


总的来说,块变量(一般来说,有一些例外)不应该用于随机种子,因为它们可以被矿工操纵。


问渠哪得清如许?为有源头活水来


这些漏洞,类似事件,惨烈教训,对区块链产业进入寒冬负有不可推卸的责任,从技术角度不断加强对于新知识的正确理解与使用,提高智能合约的安全性是让这个产业冰消雪融,让项目方、参与方合力破冰前行的唯一希望。望各位学而思之、思而践之、践而悟之。

猜你喜欢

USDT暴雷之后的Bitfinex:受害者还是幕后黑手?

资讯区块链USDT暴雷

早在“USDT暴雷”事件之前,交易所巨头Bitfinex就已经开始遭到业界内的种种质疑,流言甚嚣尘上...

4小时前

比特币市场即将成为外汇市场的替代品

资讯比特币区块链

比特币市场最重要的统计参数非常清楚地表明,数月以来,它已经满足了金融成熟度的所有重要标准。在其他加密...

4小时前

英国金融行为监管局或年底推出加密货币监管政策 确保不扼杀创新

资讯英国区块链

如今,越来越多英国企业开始提供加密货币、或是加密货币相关的产品,但是英国金融行为监管局的监管范围仅局...

4小时前

哪个国家比特币最多?调查证明,美国不是最多的,这个小国数量最多

资讯比特币区块链

加密货币未来真的有无法想象的市值,但是哪个国家能成为加密社区的王者,目前还真不好说,我们只有等待时间...

4小时前

印度:持有未经政府批准的加密货币或将被定为非法

资讯印度区块链

禁令实施后的几个月,印度仍能感受到毁灭性的影响。今年9月,该国最大的加密货币交易所之一Zebpay宣...

4小时前

区块之争!比特现金为何要再次分叉?

资讯比特币区块链比特现金

因为区块之争,2017年8月1日,比特现金从比特币分裂出来;因为区块之争,2018年11月15日,比...

2018-09-08

比特黄金退市背后的故事

资讯区块链比特黄金

没有一点点防备,美国西雅图的加密数字货币交易平台Bittrex宣布,将下架比特币硬分叉的数字货币——...

2018-09-08

区块链第一美女网红吃安眠药自杀 直播将空气币价格爆拉20%

网红资讯区块链空气币

9月7日,著名区块链媒体人,有区块链第一网红之称的《甜甜说币》创始人甜甜(真名:曾颖)传出自杀消息。...

2018-09-08

国内版Telegram,子弹短信或将重燃区块链战火?

资讯区块链Telegram子弹短信

“子弹”火爆究竟是用户一时的尝鲜导致的昙花一现,还是真正具有内在逻辑,能够成为撼动微信“币圈社交扛把...

2018-09-08

25岁的迷茫人生 |王兴、李林和吴忌寒

资讯区块链李林

2018年,是区块链市场熊市,也是传统公司资金荒的一年。自今年年初以来,已经有30多家科技公司谋求到...

2018-09-08

最高法明确互联网法院管辖范围 不受理P2P借贷纠纷

资讯区块链P2P

《最高人民法院关于互联网法院审理案件若干问题的规定》已于2018年9月3日由最高人民法院审判委员会第...

2018-09-08

从“馅饼”到“陷阱”,医疗租赁令租赁公司和医院频频受伤

资讯区块链医疗租赁

8月中旬,来自黑龙江、河北等地的多为县级医院院长来道远程视界曾经的办公地北京益园文化创意产业基地讨要...

2018-09-08

比特币能否改变非洲陈旧的银行业?(上)

资讯区块链非洲

非洲已稳步加速向现代技术转变。可是,这片面临银行技术陈旧、金融包容率低、银行体系信心不足以及汇款成本...

2018-09-08

最高人民法院已认可通过区块链等技术收集的证据

资讯区块链最高人民法院

最高人民法院已认可通过区块链等技术收集的证据;上海发布区块链白皮书, 建议加快出台政策支持区块链发展...

2018-09-08

金色相对论:互联网巨头多点布局区块链影响几何?

互联网资讯区块链

都说互联网公司是中心化的,那么在如今的区块链浪潮之下,阿里、腾讯、京东、360等巨头纷纷选择顺应趋势...

2018-09-08

财链社(www.bcpress.com)专业的全球区块链财经媒体与社群,链接区块链、物联网、大数据、人工智能,致力于成为最有深度的区块链全产业链分析家,为区块链创业者及投资者提供最好的产品和服务。

链马思享会第四期:公信宝黄敏强,如何应对数据经济困局?

在信息安全问题日益严峻的今天,作为普通互联网用户,该如何保护自己的隐私?

INE智联生态COO白眉独家|区块链4321黄金投资法则

不是所有的区块链项目都在落地,INE智联生态一直在落地!——IntelliShare does ...

INE智联生态COO白眉独家|区块链4321黄金投资法则

不是所有的区块链项目都在落地,INE智联生态一直在落地!——IntelliShare does ...

马云:并不是数字化就会变得冷淡 技术让城市变得更暖

10月11日,杭州市打造全国数字经济第一城动员大会在浙江杭州云栖小镇国际会展中心举行。

央行姚前&孙浩:数字稳定代币的试验与启示

虚拟货币无法有效履行计价单位、交易媒介和价值储藏三大货币基本职能,客观上阻碍了其自身的应用进程。因此...

一起寻找“全球链改优秀项目”!

一起寻找“全球链改优秀项目”!

2018年9月10日,由中国通信工业协会区块链专业委员会、区块链改革全国联席会议作为指导,全球链改节...

HelloEOS 区块链全国行活动“EOS 和他的朋友们”正在进行

HelloEOS 区块链全国行活动“EOS 和他的朋友们”正在进行

HelloEOS 区块链全国行活动“EOS 和他的朋友们”正在进行,第六站厦门将在本周六(9月8日)...

区动智慧,链接未来-区块链如何赋能实体经济

区动智慧,链接未来-区块链如何赋能实体经济

自区块链概念流入国内,吸引大量人才进入到这个行业,随着区块链掀起的火热风潮,它被视为本世纪最大的风口...

区块链峰会受监管政策屡屡叫停,920这场峰会却办得热火朝天

区块链峰会受监管政策屡屡叫停,920这场峰会却办得热火朝天

“2018国际数字经济博览会”将于9月20日-22日在石家庄国际会展中心隆重举办。本次峰会邀请到了诸...

嘉楠耘智推出7nm矿机新品,算力翻倍

嘉楠耘智推出7nm矿机新品,算力翻倍

据中关村在线消息,目前首批由台积电代工生产的7nm芯片已完成交货。