时间扭曲攻击可在20天内挖掉剩余的比特币?core开发者谈时间戳安全性

2019-03-04 16:32 来源:巴比特资讯 阅读:4161
中本聪所设计的2100万BTC总量,按照正常的挖矿情况,其剩余量预计会在大约2140年全部被挖完,那么,是否存在某种情况,会导致比特币被提前挖完呢?

前言:中本聪所设计的2100万BTC总量,按照正常的挖矿情况,其剩余量预计会在大约2140年全部被挖完,那么,是否存在某种情况,会导致比特币被提前挖完呢?答案是:有的,但这种方案目前也只是在理论的情况下。一种名为时间扭曲攻击的变体51%攻击,理论上最快能让剩余的比特币在18.7天内被挖完,然而,理性的矿工,不会在面对一只能够长期下金蛋的鹅的情况下,选择短期利益而去杀死它。

而这也是原文作者Jameson Lopp想要探讨的关于时间戳安全性的话题。

以下为译文:

Timestamp

(图片来自:pexels.com)

比特币通常被称作是一个安全的时间戳服务。在比特币出现之前,我们从未有过一个具有可靠时间戳的全球真相记录,那这是怎么发生的呢?这通常是由于工作量证明(PoW)被合并到一些简单的规则,而这是矿工们必须要遵守的。矿工的主要职能是:

  1. 接受未排序的未确认交易,并将其按特定顺序排列;

  2. 将交易打包到有效的容器当中(区块);

  3. 在可接受的时间范围内,对区块进行时间戳标记;

p1

而这最后一个属性,使得比特币能够控制比特币供应的释放。如果没有它的话,只要算力出现增长,比特币就会遭受快速通货膨胀的过程。但事实证明,这个属性为比特币协议分配了相当多的实用性,也使得人们可以将比特币用作其他服务的数据锚。因为我们有相当强的保证,让时间戳在给定范围内,并且我们有重写区块链历史所需能量的数学保证,比特币为数据时间戳提供了一个可靠的锚。但它有多可靠呢?

比特币时间戳的灵活性

为了让节点认为区块头的时间字段有效,它必须满足两个条件:

  1. 从你的计算机本地时间算起,未来不能超过2小时;

  2. 大于过去11个区块的中值时间戳;

第一条规则是很有意义的,我们显然不希望任何人声称来自未来,而且节点很容易拒绝此类声明,因为我们都对当前时间达成了一致意见(有多种方法可以检查当前时间,而一种非常流行的计算机同步时钟的方法,是通过网络时间协议)。

然而,要确保时间在一个合理的点之前不会太远是很困难的。这是因为,我们不能假定一个节点在其最初创建时间附近的任何点,都在验证区块。节点需要能够在任何原因或无任何原因的情况下离开和重新加入网络。如果必须在当前时间的几个小时内创建历史区块,那么位于链顶端太远的节点将开始拒绝历史区块。

这是来自中本聪白皮书中描写的一段话:

“节点可随意离开和重新加入网络,并接受工作量证明链作为它们消失时所发生事情的证明。”

也许与直觉相反,实际上没有规则要求区块的时间戳必须在前一区块的时间戳之后。如果你思考一下,这样的规则可能会导致一个问题:如果一个矿工在未来近2小时内创建了一个带有时间戳的区块,那么下一个区块也不得不等待一段漫长的时间,而对于其他矿工来说,很难自我更正过去11个区块的中值时间(MTP);

此外,请记住,虽然比特币网络预计每10分钟生产一个区块,但这并没有真正的保证。区块诞生的间隔时间可以从几毫秒到几个小时不等。虽然过去11个区块的预期中值时间应该是1个小时前,但它可能会更多或者更少;

p2

来源:https://en.bitcoin.it/wiki/confirmation

推动窗口

如果你考虑对手如何尝试扩展可接受的时间戳窗口,那么很明显,没有对手能够将时间戳推到未来的2小时以上(不管他们拥有多大的算力)。然而,一个拥有足够算力的攻击者,只需要在过去11个区块的中值时间后一秒钟内,创建时间戳几乎无效的区块,就可以对“比特币时间”的进程施加一些拖累;

有没有动机这么做?在极端情况下,“时间扭曲攻击”会提供短期的经济激励,关于此话题,我们稍后将讨论。现在还不太清楚,如果只是把时间戳拖上几个小时,会存在什么激励。尽管考虑到其他协议可以建立在比特币之上(如闪电网络),并且可能涉及时间锁,但未来可能有其他协议可通过减缓区块链上时间戳的进展来进行游戏。

算力时间拖动(Hashpower Time Dragging)

由于最早的有效区块时间,是基于过去11个区块的中值时间(MTP),因此一个敌对的矿工需要生成大量区块,以便在MTP上引起任何明显的阻力。

让我们假设一种情况,所有矿工通过中值时间(MTP)大致同步,但有一个敌对的矿工正试图尽可能多地拖动过去11个区块的中值时间(MTP)。

有一点是非常清楚的:中本聪明智的决定是使用过去11个区块的时间戳中值,而不是平均值,因为平均值更容易被操作。另一种考虑“过去中值时间”的方法是,如果所有时间戳都是有序的,那么它基本上就意味着第6个最近区块的时间戳。如果没有,算法只会对它们重新排序。因此,如果希望对该值产生不可忽略的影响,则需要解决过去11个区块中的6个。为了维持这种攻击,你需要掌握全网55%的算力,这时比特币的热力学安全性的一个主要假设就被破了。但如果矿工运气好到爆的话,即便其掌握的算力比较低,有时也能够做到这一点。

从11个区块中找出6个区块有多难?好吧,一个给定的矿工解决下一个区块的机会,基本上与他们占总网络算力的百分比相同,因此,如果你只掌握全网1%的算力(这仍然是相等大的矿工),那么,你在任何11个相邻区块中创造出6个区块的机会 = (0.01⁶*0.99⁵)*( 11!/(5!*6!)) 大约是20亿分之一。如果你一直保持1%的算力,那么你要在11个数据块中找到6个区块的预期时间将超过43000年。

对于成功完成时间拖拽攻击的预期等待时间,更通用的公式是:

(1 / (462 * (% hashrate⁶ * (1- % hashrate)⁵))) / 144 blocks/day = # days

p3

如我们所见,对于攻击者在任何有意义的时间尺度上进行此类攻击,那么他们需要一个大小合适的矿池,其中至少有10%的网络算力;

最大的拖拽

然而,为了在中值时间(MTP)上产生最大阻力,矿工需要连续求解6个区块。如果过去11个区块中的6个并非都井然有序,那么其他矿工造成的时间间隔,将迫使敌对矿工将其区块的时间戳设置为彼此间隔一秒以上,因为每个区块的MTP都会显著向前跳(诚实的矿工会在其区块上设置更准确的时间戳)。

连续求解6个区块有多困难?如果我们再次假设一个矿工拥有1%的网络算力,那么任何给定的连续6个区块的概率就是0.01⁶,大约是万亿分之一。如果你一直保持全网1%的算力,那么在11个数据块中找到6个连续区块的预期时间将接近200万年。

对于成功完成时间拖拽攻击的预期等待时间,更通用的公式是:

(1 / % hashrate⁶ ) / 144 blocks/day = # days

p4

这种攻击更加难以完成,需要在合理的时间段内发生,则矿工需要掌握20%或30%的全网算力。正如你所想象的,这种情况很少发生,一旦发生,人们就会注意到。而在比特币身上,其历史上最后一次出现这种情况是在2014年七月份,当时的GHash矿池在一段时间内掌握超过40%的算力,甚至短时间内超过了51%。如果你掌握了50%的算力,那么你能找到6个连续区块的概率就是0.5⁶ (64分之一)。如果你一直保持全网50%的算力,那么预期每12个小时,你就能找到6个连续的区块;

很明显,如果没有掌握大多数的算力,你就不太可能在长时间维度上拖拽比特币的中值时间,但是你可在短时间内(1个区块左右)将其拖上多达几个小时,同时要有运气和耐心。如果你假设其他矿工的时间戳相当准确,那么过去的中值时间应该是大约1小时前(尽管由于发现的区块变化,可能会多出几个小时)。如果你能用1小时前的时间戳加上1秒、2秒、3秒等创建6个数据块,那么在第6个数据块,MTP大约是2小时前。如果我们假设一个极端的条件,是区块之间间隔1小时,那么MTP将是6小时前。

通过区块时间戳合理的灵活性,然后取最近区块的中值时间,我们最终得到了一种算法,这种算法很难进行博弈,但也不会太脆弱,从而对与实时有些不同步的矿工产生不利影响。

时间扭曲攻击

如果一个攻击者拥有超过全网50%的算力,并且他们想要减缓比特币时间的流逝,那会发生什么?他们可以做一些非常讨厌的事情。这样一个敌对的矿工,可通过每个新区块推动超过1秒,以防止时间戳。如果他们这样做的时间足够长,使得之前的2016个区块的创建似乎花费了2周多的时间,他们可利用重定目标逻辑,每2016个区块将挖矿难度降低75%。最终,在难度足够低的情况下,他们可以在给定的时间段内按自己的意愿铸造出大量的区块,从而获得比预期更多的挖矿奖励。一个优化的时间扭曲攻击,可以在18.7天内挖掉所有剩余的比特币。事实上,我们在比特币的testnet3上也发现了类似的行为,这是由于重定难度巧合造成的(其曾在一天内诞生了1.6万个区块),现在testnet3在经历8年的历史后,已挖到了1,482,878个区块,约为预期排放量的350%。

时间扭曲攻击并不新鲜。2011年,这种攻击首次针对一种名为“Geist Geld”的币进行,并被社区认为是51%攻击的变种。

在2014年,一种名为Whitecoin的山寨币也遭受到了时间扭曲攻击。

2018年,隐私币种Verge也遭到了这样的攻击,6个星期后,它又被攻击了!

一般来说,对于给定类型的硬件(ASIC或GPU),具有少量算力的加密货币容易受到时间扭曲攻击,因为它们本身就很容易遭受51%攻击。

有趣的是,虽然时间扭曲通常被称为一种攻击,因为它会导致系统的意外行为,但一些人已经证明,它可被开发用于潜在的预期用途。2015年,Vitalik Buterin描述了一种通过软分叉加快区块速度的方法,从而提高链上容量。2018年,比特币开发者Mark Friedenbach提出了利用这种非预期行为为比特币添加新功能的建议。Mark在他的“前向区块”(Forward Blocks)提案中指出,他的方法能够将链上交易量扩大到当前水平的3584倍的。

然而,这样的提议是有争议的,并且迫使任何依赖于比特币区块头时间戳建立系统的人,去往别处寻找这些数据。这也很容易阻止此类更改,如Greg Maxwell在比特币开发者邮件列表中所述:

“它可通过进一步限制时间戳的软分叉进行修复,并且以及有几项沿着这个思路的提议被提出了。”

总结

比特币时间戳的安全性,和限制可接受时间戳窗口的简单规则,尽管存在着已知弱点,但在对抗性环境中它们仍能经受住10年的考验。我们知道,至少在短时间内,掌握51%算力的矿工集团可能会对网络造成破坏,但这却从未发生过,很可能是因为激励条件不符合矿工去这样做。理性的矿工,不会在面对一只能够长期下金蛋的鹅的情况下,选择短期利益而去杀死它。

声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。

点击阅读全文

相关阅读