欢迎访问本站!

首页科技正文

免费足球贴士(www.zq68.vip):逃避子弹:以太坊状态问题

admin2021-05-2268

这篇文章的目的是正式公然一个对以太坊平台的严重威胁,其危险性清晰而明确,直到 “柏林” 硬分叉才排除。

状态

我们先来领会一些以太坊和 “状态” 的靠山知识。

以太坊状态是一棵 帕特里夏-默克尔树(particia-merkle trie,一种兼有前缀树规则的默克尔树)。本文不会深入过多细节,你只要知道,随着状态数目的增进,这个树结构的分支会变得越来越密。以太坊区块链上每多一个账户,这棵树就多一个叶子节点。在树的根节点与叶子节点,是许多所谓的 “中央” 节点。

为了查找某个账户,或者说在这棵重大的树上找到某片 “叶子”,需要剖析 6 ~ 9 个哈希值,从根节点最先,经由中央节点,最终剖析到一个能够给予我们所需数据的哈希值。

用明了话来说:无论什么时刻要在这棵树上查找某个账户,都要经由 8 ~ 9 次剖析操作。每次剖析操作都是一次数据库查询,而每一次数据库查询都意味着不确定数目的多次硬盘操作。硬盘操作的次数很难估量,然则由于状态树的 “键(key)” 是密码学哈希值(抗碰撞的),以是这些键都是随机的,这对所有数据库来说都属于最坏的情形。

随着以太坊状态的增添,就有需要提高接见状态树的操作的 Gas 消耗量。早在 2016 年 10 月,我们就曾用 “橘子口哨(Tangerine Whistle)” 分叉(纳入 EIP 150,在区块高度 246 3000 激活)做过这样的事。EIP 150 大幅提高了特定操作的 Gas 消耗量,并引入了一系列的措施来珍爱网络免于 DoS 攻击;这是在所谓的 “上海攻击” 之后推出的。

另一次这样的 Gas 消耗量提升是在 “伊斯坦布尔” 分叉的时刻,在区块高度 906 9000 (2019 年 12 月)激活,引入了 EIP 1884。1884 的内容包罗:

问题(们)

在 2019 年 3 月,Martin Swende 丈量了 EVM 操作码的性能。这一研究厥后导致了 EIP-1884 的确立。在 1884 激活的几个月前,这篇以 “Broken Metre” 为名的论文揭晓(2019 年 9 月)。

两位以太坊平安研究员 —— Hubert Ritzdorf 和 Matthias Egli —— 与这篇论文的作者之一 Daniel Perez 睁开了互助,并 “武器化” 了一个破绽,并提交给了以太坊的 bug 悬赏项目。那是在 2019 年 10 月 4 日。

我们建议你完整地阅读他们提交的讲述,写得异常好。

在一个专门讨论跨客户端平安性的频道里,来自 Geth 客户端、Parity 客户端和 Aleth 客户端的开发者被见告了这份讲述,就在统一天。

该破绽的本质是触发随机的树查找。一个异常简朴的变体是:

在他们的讲述里,研究员通过 eth_call RPC 端点对同步到主网的节点执行了这一负载,下面是它们消耗 1000 万 gas 所需的时间。

    • Parity:约 90 秒

    • Geth:约 70 秒

  • 使用 EXTCODESIZE (名义 Gas 消耗量是 700)消耗 1000 万 gas

    • Parity:约 50 秒

    • Geth:约 38 秒

(译者注:此处的意思是,若是一个 1000 万 gas 的区块全用这两个操作码填满,则节点需要这么长时间才气处置完这个区块)

显而易见的是,EIP-1884 确实削减了攻击的效果,但照样远远不够的。

那时刻离大阪 Devcon 已经很近了。在 Devcon 时代,关于这一问题的知识在主网的客户端开发者之间传开来。我们也会晤了 Hubert 和 Mathias,另有 Greg Markou(他来自 Chainsafe 团队,一直在做 ETC 的事情)。ETC 区块链的开发者们也收到了这份讲述。

随着 2019 年靠近尾声,我们发现,这问题比我们之前以为的还要棘手,恶意的事务可能导致出块时间延伸到以分钟计。更难办的是,开发者社区已经对 EIP-1884 感应不满,它打破了一些合约,而且用户和矿工都希望提高区块的 Gas Limit。

此外,仅仅两个月之后,到了 2019 年 12 月,Partiy Ethereum 就宣布要退出了,OpenEthereum 项目接受了 Parity 客户端的代码维护事情。

于是人人确立了一个新的客户端协作频道,Geth、Netheremind、OpenEthereum 和 Besu 的开发者继续互助。

解决方案

我们意识到,只有双管齐下才气解决这个问题。一方面,我们要改善以太坊协议,也就是在协议层解决这个问题;最好是不要打破合约,也不要责罚 “善意” 的行为,但又能防止攻击。

另一方面,我们可以依赖软件工程,改变客户端内的数据模式和结构。

协议层事情

处置此类攻击的第一个思绪是这个。在 2020 年2 月,其正式版本作为 EIP 2583 宣布。该提案背后的看法是增添一个责罚措施,每次树查找导致 miss (“未找到”)时就触发。

不外,Peter 找出了一个绕过它的设施 ——“shielded relay” 攻击 —— 使得本质上责罚有了一个上限(约为 800)(译者注:此处没有单元,疑为 gas)。

责罚 miss 方式的问题在于,必须先有查找的历程,然后才气确定要不要实行责罚。但若是剩余的 gas 已不足于实行责罚,则(从协议的角度看)一个没有获得充实支付的消耗流程又已经执行了。纵然这会导致抛失足误,这些状态读取也可以封装到嵌套挪用中,使得外部挪用者可以重复执行攻击而不必支付(完整的)责罚。

因此,这个 EIP 也被甩掉了,我们要寻找更好的替换方案。

  • Alexey Akhunov 研究了 Oil 的看法 —— 一种次级的 “Gas”,但与 Gas 完全差其余是,它对执行层是不能见的,而且可能导致事务全局回滚(transaction-global revert)。

    ,

    USDT线上交易

    U交所(www.9cx.net)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U交所开放usdt otc API接口、支付回调等接口。

    ,
  • Martin 提了一个类似的提案,称为 “Karma”,在 2020 年5 月。

虽然这许多方案都有希望,Vitalik Buterin 提议仅仅提高 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 月。

快照是一个次级的数据结构,用来以扁平花样(flat format)存储以太坊状态。快照可在 Geth 节点正常运行时代确立,无需下线专门执行。快照的利益是,它可以作为状态接见的一种加速结构:

  • 不再是执行 O(log N) 次硬盘读取(还要乘以 LevelDB 的开销)来接见一个账户/存储项,快照可以提供直接的,O(1) 级其余接见时间(再乘以 LevelDB 的开销)。

  • 快照还支持以每个条目 O(1) 的庞大度迭代账户和存储项,这使得远程节点可以检索延续的状态数据,比以往廉价异常多。

  • 快照的存在还支持其它更新鲜的用途,好比离线修剪状态树,以及迁徙到另一种数据花样。

坏处是,快照即是是完全复制了账户和存储项的未经处置(raw)的数据。若在主网环境中使用,这意味着需要分外 25 GB 的固态硬盘空间。

动态快照的想法从 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 倍。

我们估量,在当前的主网上(区块为 1500 万 gas),不使用 快照的 geth 节点可能可以做到只需 2.5 ~ 3 秒就能执行一个区块。随着状态的增进,这个数字会继续恶化(对于不使用快照的节点来说是云云)。

若是 gas 返还机制被用来造成单个区块的现实 gas 使用量提升,这个恶化的倍数(最大)是 2 倍。在 EIP-1559 实行后,区块的 Gas Limit 会有更高的弹性,在短时间内可发作出最大 2 倍的恶化乘数。

至于实行这种攻击的可行性,攻击者买断一个区块的成本也许在几个 ETH 这样的级别(1500 万 gas,100 Gwei 的价钱,乘出来就是 1.5 ETH)。

为何要在此时公然

这一威胁在很长时间里都是 “公然的隐秘” —— 由于疏忽,它至少被公然披露过一次;而且在焦点开发者 *** 中也多次提到它,虽然没有公然细节。

由于我们已经激活了 “柏林” 升级,也由于 geth 客户端已经默认使用快照功效,我们以为,威胁已经足够低,而透明化才是更主要的了。以是是时刻把幕后的事情都公然了。

Filecoin矿池

Filecoin矿池官网(www.ipfs8.vip)是FiLecoin致力服务于使用FiLecoin存储和检索数据的官方权威平台。IPFS官网实时更新FiLecoin(FIL)行情、当前FiLecoin(FIL)矿池、FiLecoin(FIL)收益数据、各类FiLecoin(FIL)矿机出售信息。并开放FiLecoin(FIL)交易所、IPFS云矿机、IPFS矿机出售、租用、招商等业务。

网友评论