干货

Verge 攻击解析,Part-2

Ajian   |     |   3643 次阅读


Verge 攻击解析,Part-1


Verge 挖矿(或:当五种算法不如一种算法时)

使用工作量证明的加密货币区块的计算通常使用单一算法,最常见的是 SHA-256 算法。然而,Verge 允许矿工任意使用五种不同算法(你要真想了解,我不妨直说,Verge 使用的五种算法是 Scrypt,X17,Lyra2rev2,myrgroestl 以及 blake2s。)使用多种挖矿算法的基本理由如下:

一些对比特币持批评态度的人认为,随着时间推移,比特币矿场变得过于专业化和中心化,例如,比特币大部分区块都是由 Bitcoin ASIC 矿机(这种矿机专门设计用于挖比特币)产生,并且许多比特币是由少数矿池挖出来的,矿池是由许多矿工组成,这些矿工将计算资源整合到一起,并按比例获得收益。这些批评者认为,不同类型的“中心化”趋势,已经与无需许可的加密货币的基本主张背道而驰。使用多种挖矿算法产生加密货币能够避免这种趋势。该观点认为,在硬件、工业和资源管理方面控制五种不同的算法,肯定比只控制一种算法更难,从而促进 Verge 挖矿经济朝着更分布式、去中心化的方向发展。

所以,他们决定:唯一保证系统正常运行的方法是,每个算法都有 自己 的挖矿难度参数,并且独立于其余四个算法进行调整,这意味着,Scrypt 的挖矿难度将调整到每30秒产生一个区块,X17 及其他三种算法亦然。从而整个 Verge 网络才能保证每 30 秒产生一个区块、保持全部五种算法的收益对于矿工来说都是均衡的,并确保没有一种算法占优势地位(否则使用五种算法就毫无意义了)。

这意味着伪造的时间戳并没有降低整个网络挖矿难度,他仅仅只是降低了五个算法中的 Scrypt 一个算法的挖矿难度。因此,当 Scrypt 矿工的挖矿难度很低时,其他四种算法的矿工依旧得像之前一样努力工作,那么它们的哈希算力对于维护网络安全就没用了。更重要的是,攻击者仅需要使用 Scrypt 算法挖矿,并且仅需要与也使用 Srypt 挖矿的人竞争。因此,攻击者控制网络所需的哈希算力从当初的超过50%(在整个网络中占多数),下降到仅需超过10%(在 Scrypt 矿工中占多数)。

现在,事情看起来确实有点投机,但实际情况比现在看起来的更糟糕。鉴于挖矿难度调整的性质,我们可以大致估计每种挖矿算法的经济资源分配(算力分配)是相同的,得出的“10%”仅仅是一个估计值。然而,现实往往是拒绝遵循自由市场经济规则的。根据社区里的讨论,由于多方面原因的存在——有的 Scrpyt ASIC 矿机尚未部署,可通过 Nicehash 租闲置资源等,意味着在攻击的时候,控制 Scrypt 会远比其余四种算法的成本更低。我们可以放心的假设,攻击所需算力一定是远远小于10%的,Reddit 论坛上有人粗略地估计,这个数字甚至低至0.4%

综上所述,时间戳造假可以极大的降低挖矿难度,Verge 使用了五种共识算法,意味着可以针对某一个算法降低其挖矿难度,这也就使得控制整个网络变得更加容易。这一特殊挖矿算法(Scrypt)的经济/工业状况造成其更容易控制。极地的挖矿难度最终造成区块间隔大幅度减少,并使得此次攻击所获得的利润是正常挖矿情况下的 30 倍以上。

经验教训

从此次攻击中可以得到什么样的经验教训呢?可以预见,此次黑客攻击的短期内会给网络带来很大混乱。大约几天之后,核心开发者开发出一些 Bug 快速修复程序,当然这些程序内部仍有可能存在 Bug,Verge 网络最终也是经历了一次硬分叉,这次分叉也许并不是意外。在黑客攻击一周内,世界范围内的 Verge 币价涨了 30%,并在接下来的一周,该公司宣布 Verge 将支持 pronbub.com 的订阅支付服务。近期最大的协议级加密货币攻击,怎么会使得该加密货币价格反而上涨,且之后又宣布与互联网上访问量最大的……建立合作伙伴关系呢?这个问题我不知道如何解释,我个人的初步见解是,这个世界也许是毫无道理可言的,人们也完全失去了理智。

言归正传。从更广的角度来看,确实有一些我们应该汲取的经验:

首先,使用时间戳来人为降低难度的方法很早之前就已为人所知,我们给它起个名字——“时间扭曲”漏洞。具体信息可以查看几年前比特币论坛中关于攻击者向量的讨论。在某种意义上,攻击之所以能够在 Verge 网络中生效是由于其使用了更新的、更华丽的暗重力井(Dark Gravity Well,以下简称DGW)难度调整算法。与比特币协议里每 2016 个区块调整一次难度不同,在这种算法中每产生一个区块都会调整挖矿难度。在这种间隔调整挖矿难度,乍一看这些离散增量像是一种奇怪的决策,但在此次黑客攻击后可以明显看出这是一种安全防护。在比特币中,如果想采取某些措施略微降低挖矿难度,攻击者每两周仅能尝试一次且效果可忽略不计,但在 Verge 中攻击者每30 秒就可以发起一次攻击。

有趣的是,据说 DGW 算法的好处之一是它能够免疫时间扭曲漏洞。鉴于这种说法已经被证明是无效的,其他使用该算法的货币至少应该有些警惕了。

由于使用了五种挖矿算法:从长远角度看,有助于从经济上鼓励去中心化,但也带来了新的复杂性,不可避免地增加了出现不可预见的漏洞的可能性。

这两种情况,黑客攻击行为都有力的证明了:当涉及用户金融资产时,应更倾向于事实证明更行之有效的东西,并防止事情变得过于复杂,从而带来不必要的风险。我想这对比特币团队来说意味着两点。

有一个更大的问题是:软件开发者,尽管我们不愿意承认,在最终分析中只有人类。即使底层安全协议看起来非常完美,但也总有出错的可能。出现意想不到的攻击向量,trade-off 的预估结果很差等等,当然,总有一些老式 Bug。软件也不一直是按照我们的预期运行,这类故障会导致资金损失,这在 2018 年应该不会让人感到特别震惊。但事实上,当资金在软件上流动时,就应该增加预防措施。

考虑到我们中大多数没有时间对我们投资的每个项目进行彻底的代码审计,预防灾难的最好的方法是更加信任已证明安全的控件,并且开发理念转向保守一些。与此同时,如果你想投资开发迅速、突破性强且资金回报快的项目,你也应该清楚其中存在的风险。最重要的是,来自社区的压力激发地努力减弱未来灾难的努力是系统安全最好的保障。我相信 Gerorge Santayana 所说的:“那些没有从过去的漏洞中吸取教训的人最终还会遇到这些漏洞”,这句话我们要谨记,以免当我们意识过来地时候已经再次处于时间扭曲的边缘。

更正难度重新调整的窗口最初等于允许时间漂移(2小时)。实际上,根据跟踪数据显示,重置窗口为 30 分钟,低于当初系统理论设计值。

更新(5/22):似乎我们又遭遇了时间扭曲的攻击,这次黑客针对两个而不是一个挖矿算法进行攻击。说时迟那时快,相同的漏洞又出现了。详情请继续关注!

更新:请在这里阅读后续文章。

(完)


原文链接: https://blog.theabacus.io/the-verge-hack-explained-7942f63a3017
作者: Daniel Goldman
翻译&校对: stormpang & Elisa

本文由作者授权 EthFans 翻译及再出版。


你可能还会喜欢:

干货 | 什么是加密经济学? 初学者终极指南
干货 | 加密货币挖矿的现状
干货 | Solidity 安全:已知攻击方法和常见防御模式综合列表,Part-1

 
0 人喜欢