这篇文章的目的是正式公开一个对以太坊平台的严重威胁,其危险性清晰而明确,直到“柏林”硬分叉才解除。
状态
我们先来了解一些以太坊和“状态”的背景知识。
以太坊状态是一棵帕特里夏-默克尔树。本文不会深入过多细节,你只要知道,随着状态数量的增长,这个树结构的分支会变得越来越密。以太坊区块链上每多一个账户,这棵树就多一个叶子节点。在树的根节点与叶子节点,是许多所谓的“中间”节点。
为了查找某个账户,或者说在这棵庞大的树上找到某片“叶子”,需要解析6~9个哈希值,从根节点开始,经由中间节点,最终解析到一个能够给予我们所需数据的哈希值。
用大白话来说:无论什么时候要在这棵树上查找某个账户,都要经过8~9次解析操作。每次解析操作都是一次数据库查询,而每一次数据库查询都意味着不确定数量的多次硬盘操作。硬盘操作的次数很难估计,但是因为状态树的“键”是密码学哈希值,所以这些键都是随机的,这对所有数据库来说都属于最坏的情况。
随着以太坊状态的增加,就有必要提高访问状态树的操作的Gas消耗量。早在2016年10月,我们就曾用“橘子口哨”分叉做过这样的事。EIP150大幅提高了特定操作的Gas消耗量,并引入了一系列的措施来保护网络免于DoS攻击;这是在所谓的“上海攻击”之后推出的。
金色晨讯 | 11月12日隔夜重要动态一览:21:00-7:00关键词:苏富比、欧盟委员会、迈阿密、惠誉
1.苏富比将在“The Now”拍卖会上使用以太坊进行现场拍卖;
2.美国国会联合经济委员会下周将举行“数字资产和政府作用”主题听证会;
3.欧盟委员会敦促成员就加密市场法规达成一致;
4.迈阿密将向市民发放来自MiamiCoin质押的比特币收益;
5.云南36个区块链项目完成备案;
6.神鱼:USDM项目方发动Rug Pull卷走3500万美元,USDM已接近归零;
7.报告:到2030年,加密行业可为印度增加1840亿美元的经济价值;
8.惠誉:萨尔瓦多银行业目前不会因为比特币成为法币而面临重大直接金融风险。[2021/11/12 6:47:43]
另一次这样的Gas消耗量提升是在“伊斯坦布尔”分叉的时候,在区块高度?9069000?激活,引入了EIP1884。1884的内容包括:
SLOAD?操作码的Gas消耗量从?200?提高到?800?gas
BALANCE?消耗量从?400?提高到?700?gas
EXTCODEHASH?消耗量从?400?提升到?700?gas
金色午报 | 12月10日午间重要动态一览:7:00-12:00关键词:韩国、加密钱包监管、3iQ以太坊基金
1.韩国交易所对加密相关股票进行严查;
2.韩国釜山通过建立虚拟资产金融中心政策提案;
3.美国议员要求财政部长重新考虑加密钱包监管规定;
4.比特币矿工单日流出量达8966枚 创年内新高;
5.3iQ以太坊基金明早将于TSX上市 已筹集7500万美元;
6.Coinbase及CoinbasePro出现连接问题 目前已修复;
7.北美上市矿业公司将购买1万台S-19jPro蚂蚁矿机;
8.灰度BTC信托增持1275枚ETH信托持仓量减少202枚。[2020/12/10 14:47:09]
问题
在2019年3月,MartinSwende测量了EVM操作码的性能。这一研究后来导致了EIP-1884的创建。在1884激活的几个月前,这篇以“BrokenMetre”为名的论文发表。
两位以太坊安全研究员——HubertRitzdorf和MatthiasEgli——与这篇论文的作者之一DanielPerez展开了合作,并“武器化”了一个漏洞,并提交给了以太坊的bug悬赏项目。那是在2019年10月4日。
金色相对论 | 褚康:比特币其内在设计使其更加符合价值储存的特性:在今日举行的《危机向左,信仰向右》的比特币减半特辑之资本篇的直播中,针对“比特币最核心的价值或者比特币最牛的地方是什么”的问题,犇睿资本创始人褚康表示,我认为比特币最出色的设计在于其定量发行和挖矿奖励减半机制,这使得比特币成为世界上唯一一个有已知固定最大供应量、大市值的可交易资产。根据其设计,比特币的总量不会超过2100万个,挖矿奖励减半通过不断降低比特币的供应速度使其越发稀有,这与各国政府所发行法币的理念完全不同。这次货币大通胀使更多人认识到我们手中所持有的法币每年都在通过通胀贬值,理论上这种通胀最终会使得法币的价值无限趋近于0,那么我们所持有的法币真的具有财富储备的作用吗,比特币其内在设计区别于法币发行的理念,使其更加符合价值储存的特性。[2020/5/14]
我们建议你完整地阅读他们提交的报告,写得非常好。
在一个专门讨论跨客户端安全性的频道里,来自Geth客户端、Parity客户端和Aleth客户端的开发者被告知了这份报告,就在同一天。
该漏洞的本质是触发随机的树查找。一个非常简单的变体是:
金色晚报 | 12月25日晚间重要动态一览:12:00-21:00关键词:国资委、广州金融局、农业农村部、Biger
1: 广州金融局局长邱亿通:广州所有虚拟货币平台均已正常退出市场;
2: 重庆市发布关于防范假借区块链名义非法集资的风险提示;
3: 国资委党委书记:央企要加大在区块链等领域的布局力度;
4: 农业农村部:大力推进数字农业建设,加快区块链等技术运用;
5: 分布式金融白皮书:区块链将迎来蓬勃发展期;
6: Biger交易所称响应政策良性退出,12月27日后停止提币;
7: 全国首次《区块链技术能力测试(初级)》推出;
8: 广西自贸试验区将对符合条件区块链等领域企业予以相关奖励。[2019/12/25]
在他们的报告里,研究员通过?eth_call?RPC端点对同步到主网的节点执行了这一负载,下面是它们消耗1000万gas所需的时间。
使用?EXTCOEHASH?耗尽1000万gas
Parity:约90秒
Geth:约70秒
使用?EXTCODESIZE?消耗1000万gas
Parity:约50秒
Geth:约38秒
显而易见的是,EIP-1884确实减少了攻击的效果,但还是远远不够的。
金色财经现场报道 腾讯金融科技高级研发总监:目前的共识机制都存在部分问题:金色财经现场报道,在2018大数据产业峰会上,腾讯金融科技高级研发总监李茂才表示目前主流共识算法都存在部分问题,如BFT,拜占庭容错,确定一致性算法,共识性能高,但对网络质量的依赖搞,去中心化不足;POW方案其算力越高,挖矿时间越长,矿工获得的货币就越多,但其能耗高;POS方案由于其特性持币越多、获得的币越多,通过持币数来决定记账权的几率,安全性难以证明;DPOS的成员数量有限,但被选中的成员可以行使权利。[2018/4/19]
那时候离大阪Devcon已经很近了。在Devcon期间,关于这一问题的知识在主网的客户端开发者之间传开来。我们也会晤了Hubert和Mathias,还有GregMarkou。ETC区块链的开发者们也收到了这份报告。
随着2019年接近尾声,我们发现,这问题比我们之前以为的还要棘手,恶意的事务可能导致出块时间延长到以分钟计。更难办的是,开发者社区已经对EIP-1884感到不满,它打破了一些合约,而且用户和矿工都希望提高区块的GasLimit。
此外,仅仅两个月之后,到了2019年12月,PartiyEthereum就宣布要退出了,OpenEthereum项目接管了Parity客户端的代码维护工作。
于是大家创建了一个新的客户端协作频道,Geth、Netheremind、OpenEthereum和Besu的开发者继续合作。
解决方案
我们意识到,只有双管齐下才能解决这个问题。一方面,我们要改进以太坊协议,也就是在协议层解决这个问题;最好是不要打破合约,也不要惩罚“善意”的行为,但又能防止攻击。
另一方面,我们可以依靠软件工程,改变客户端内的数据模式和结构。
协议层工作
处理此类攻击的第一个思路是这个。在2020年2月,其正式版本作为EIP2583发布。该提案背后的观念是增加一个惩罚措施,每次树查找导致miss时就触发。
不过,Peter找出了一个绕过它的办法——“shieldedrelay”攻击——使得本质上惩罚有了一个上限。
惩罚miss?方法的问题在于,必须先有查找的过程,然后才能确定要不要实施惩罚。但如果剩余的gas已不足于实施惩罚,则一个没有得到充分支付的消耗流程又已经执行了。即使这会导致抛出错误,这些状态读取也可以封装到嵌套调用中,使得外部调用者可以重复执行攻击而不必支付惩罚。
因此,这个EIP也被抛弃了,我们要寻找更好的替代方案。
AlexeyAkhunov研究了Oil的概念——一种次级的“Gas”,但与Gas完全不同的是,它对执行层是不可见的,而且可能导致事务全局回滚。
Martin提了一个类似的提案,称为“Karma”,在2020年5月。
虽然这许多方案都有进展,VitalikButerin提议仅仅提高Gas消耗量,并维护一个“访问清单”。在2020年8月,Martin和Vitalik开始迭代后来成为EIP-2929及其同伴EIP-2930?的想法。
EIP-2929在根本上解决了许多上面提到的问题。
与EIP-1884相反;1884是无条件提高Gas消耗量,但2929仅提高访问新对象的Gas消耗量。这使得净成本仅增加了不到一个百分点。
同样地,与EIP-2930配合后,就不会打破任何合约。
它还可以通过提高Gas消耗量来进一步调整
在2021年4月14日,这两个EIP都在“柏林”分叉时激活。
开发工作
Peter尝试用动态的状态快照解决这个问题,时值2019年10月。
快照是一个次级的数据结构,用来以扁平格式存储以太坊状态。快照可在Geth节点正常运行期间创建,无需下线专门执行。快照的好处是,它可以作为状态访问的一种加速结构:
不再是执行?O(logN)?次硬盘读取来访问一个账户/存储项,快照可以提供直接的,O(1)?级别的访问时间。
快照还支持以每个条目?O(1)?的复杂度迭代账户和存储项,这使得远程节点可以检索连续的状态数据,比以往便宜非常多。
快照的存在还支持其它更奇怪的用途,比如离线修剪状态树,以及迁移到另一种数据格式。
弊端是,快照等于是完全复制了账户和存储项的未经处理的数据。若在主网环境中使用,这意味着需要额外25GB的固态硬盘空间。
动态快照的想法从2019年中就有了,当时的主要目标是启用“快照同步”。那时候Geth团队还在开发许多“大项目”:
离线的状态修剪
同态快照+快照同步
通过共享状态实现LES状态分散
不过,后来他们决定一心一意做快照功能,推迟了其他项目。这些工作为后来的?snap/1?同步算法打下了基础。这一算法已在2020年3月合并到了代码库中。
有了“动态快照”功能,我们就能喘口气了。如果以太坊网络遭到攻击,那会是很痛苦的,但至少,我们能通知用户打开快照功能。生成快照需要花一些时间,而且还没有办法同步快照,但网络至少能继续运行了。
结合
在2021年3月/4月,?snap/1?协议已经在geth客户端推出,节点能够使用新的、基于快照的算法来同步区块链了。虽然还不是默认的同步模式,这是使快照能不仅作为攻击保护措施,也能显著提高用户体验的一部。
在协议层,“柏林”升级已于2021年4月激活。
在我们的AWS监控环境中,我们的基准测试结果如下:
“柏林”前,没有快照,处理2500万gas:14.3秒
“柏林”前,有快照,处理2500万gas:1.5秒
“柏林”后,没有快照,处理2500万gas:约3.1秒
“柏林”后,有快照,处理2500万gas:约0.3秒
这个的数字表明,“柏林”升级使攻击的效率降低了5倍,而快照使之降低了10倍,最终使其影响降低了50倍。
我们估计,在当前的主网上,不使用?快照的geth节点可能可以做到只需2.5~3秒就能执行一个区块。随着状态的增长,这个数字会继续恶化。
如果gas返还机制被用来造成单个区块的实际gas使用量提升,这个恶化的倍数是2倍。在EIP-1559实施后,区块的GasLimit会有更高的弹性,在短时间内可爆发出最大2倍的恶化乘数。
至于实施这种攻击的可行性,攻击者买断一个区块的成本大概在几个ETH这样的级别。
为何要在此时公开
这一威胁在很长时间里都是“公开的秘密”——因为疏忽,它至少被公开披露过一次;而且在核心开发者会议中也多次提到它,虽然没有公开细节。
因为我们已经激活了“柏林”升级,也因为geth客户端已经默认使用快照功能,我们认为,威胁已经足够低,而透明化才是更重要的了。所以是时候把幕后的工作都公开了。
重要的是,社区得到了一次理解和思考这些影响用户体验的变更的机会。
加入PolkaWorld社区,共建Web3.0! 北京时间5月20日凌晨3:25,波卡创始人GavinWood博士在波卡社区大会「PolkadotDecoded」上和大家在线聊天.
来源:棱镜 作者:肖望、王凡 “前一小时我还在谈笑风生,下一秒我直接懵了。”北京时间5月19日晚10点左右,币圈投资者汪帅对作者表示。夜幕降临之际,虚拟货币的急速下跌,震惊了整个币圈.
简介 Thorchain是什么,它是如何让不同区块链上的原始资产可以进行交换?本文将回答这些问题.
自“519”以来,比特币接连下挫,近乎腰斩,“比特币大跌”连续几天登陆微博热搜。不过,最新数据显示,比特币自2020年3月以来首次到达RSI的超卖区域,当BTC已经超卖时不要卖出.
5月19日,加密资产市场遭遇瀑布,比特币一路下探29000美元。在危机到来前的阴跌周期内,「MATIC」这个资产代码成功吸引了市场关注,在5月17、18日大盘下行时连续上涨,最高达2.89美元,
原标题:《RayDalio:我有一些比特币,比特币的最大风险就是它的成功,或遭政府打击》桥水基金创始人RayDalio已拥抱了加密货币.