深入探讨保持比特币区块的时间戳相对准确性背后的博弈论。
比特币通常被称为安全的时间戳服务。我们从来没有过具有可信全球时间戳记录,这是如何实现的呢?归功于将工作证明与矿工必须遵守的一些简单规则相结合。矿工的主要功能包括:
这个最后的属性使比特币能够控制比特币供应的释放。否则,每当算力增加时,比特币就会受到快速供应膨胀的影响。但事实证明,这个属性为比特币协议赋予了相当多的实用价值,使人们能够将比特币用作其他服务的数据锚定。由于我们有合理强有力的保证时间戳落在给定范围内,并且我们有数学保证重写区块链历史所需的能量数量,比特币为数据的时间戳提供了一个可靠的锚点。但它有多可靠?
为了使区块头的时间字段被节点视为有效,它必须满足两个标准:
第一个规则很合理——显然我们不希望任何人声称来自未来,节点很容易拒绝这种主张,因为我们大家对当前时间是一致的。有多种方式可以检查当前时间,尽管计算机同步时间的一种非常流行的方法是通过网络时间协议。
然而,确保时间不会太早到一个合理的点位比较困难。这是因为我们不能假设一个节点在创造块时就以接近初始创建时间验证该块。节点可能因各种原因离开并重新加入网络。如果一个节点同步的区块数据落后,那么需要在当前时间前几个小时内同步历史块,它们就会开始拒绝历史块。
“节点可以随意离开并重新加入网络,接受工作证明链作为他们离开后产生区块的证据。Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone ” --中本聪,比特币白皮书
没有规则要求一个区块的时间戳必须晚于前一个区块的时间戳,也许有些违反直觉。如果仔细考虑,这样的规则可能会引发问题——如果一个矿工创建了一个将近 2 小时未来的时间戳的区块,那么接下来的区块也必须是将来的时间--其他矿工将更难自我校正过去 11 个区块的中位时间。
另外,虽然预期每 10 分钟产生一个区块,但没有真正的保证。区块之间的时间间隔可能介于数毫秒到数小时之间。虽然过去 11 个区块的中位时间预期应该是 1 小时前,但它可能远多于或远少于这个预期时间。
比特币出块时间概率
如果思考一下作恶矿工可能如何尝试扩大可接受的时间戳窗口,很明显没有任何作恶矿工能够将时间戳推到未来超过 2 小时,无论他们有多少算力。然而,一个拥有足够算力的攻击者可以通过只铸造时间戳几乎有效的区块来对“比特币时间”的进展造成时间戳延迟,即这些时间戳仅比过去 11 个区块的中位时间延迟一秒。
这样做会有什么激励?在极端情况下,“时间扭曲攻击 time warp attack”提供了我们将在稍后讨论的短期财务激励。目前还不太清楚仅仅轻微地推迟时间戳的情况下可能存在哪些激励。尽管考虑到其他协议可以建立在比特币之上(如闪电网络)并且可能涉及时间锁定,未来可能出现其他协议受到滞后区块链时间戳进展制约的情况。
由于最新有效的区块时间是基于过去 11 个区块的中位时间,作恶矿工需要生成大量区块才能对中位时间产生显著影响。
我们假设矿工大致通过网络时间协议(NTP)保持同步,但存在一个试图尽可能拖延过去 11 个区块中位时间的作恶矿工。
一个观点是非常清晰的:中本聪决定使用过去 11 个区块的中位时间而不是平均时间是个明智的决定,因为平均时间更容易被操纵。
“过去中位时间”另一种理解方式是如果所有时间戳按顺序排列,则第 6 个最近的区块的时间戳。如果时间戳未按顺序排列,算法会重新排序。因此,如果您想对这个值产生非微不足道的影响,您需要解决过去 11 个区块中的第 6 个。为了持续进行这样的攻击,您需要 55% 的算力,此时比特币热力学安全的一个主要假设会受到破坏。但是,如果一位算力较低的矿工有一连串的幸运,仍然有可能偶尔实现这一点。
找到 11 个区块中的第 6 个有多难呢?矿工打包出下一个区块的概率基本上等于他们在整个网络总算力中所占的百分比。因此,即使只拥有 1% 的算力(这已经很高了),那么在任意连续 11 个区块中铸造 6 个的可能性为: (0.01⁶0.99⁵)(11!/(5!*6!))= 约 20 亿分之一。
如果持有 1% 的算力,那么在找到 11 个区块中的 6 个之前出现的区块数的预期值将超过 43,000 年。 进行成功的时间篡改攻击所需的平均等待时间的更一般化公式为: (1 /(462 *(%算力⁶ *(1- %算力)⁵)))/ 每天 144 个区块 = # 天
比特币网络算力占比和出块概率图表
正如我们所看到的,要在任何有意义的时间范围内进行这种攻击,攻击者需要一个相当大的挖矿矿池,至少占据总网络算力的 10%。
然而,为了对 MTP 施加最大的影响,作恶矿工希望连续打出 6 个区块。如果他们过去 11 个区块中的 6 个时间戳未按顺序排列,那么其他矿工所创建的时间间隔将迫使作恶矿工设置其区块的时间戳相距超过 1 秒,因为随着诚实矿工在其区块上放置更准确的时间戳,每个区块的 MTP 都会向前跳跃。
连续打出 6 个区块有多难呢?如果我们再次假设一个拥有 1% 网络算力的矿工,那么连续铸造 6 个区块的机会为 0.01⁶= 约一万亿分之一。如果您持有 1% 的算力,那么在找到 6 个连续区块之前出现的区块数的预期值将接近 200 万年。
成功进行时间拉拽攻击的预期时间公式的版本将是: (1 / %算力⁶)/ 每天 144 个区块 = # 天
这种攻击更难以实施,需要约 20% 或 30% 的网络算力在合理时间内才能实现。上次发生这种情况是在 2014 年 7 月,由 GHash 达成,一段时间拥有超过 40% 的算力,甚至有短暂时间触及 51%。在此之前 9 个月,BTC Guild 曾拥有近一半的算力。如果你拥有 50% 的算力,那么连续铸造 6 个区块的机会为 0.5⁶= 64 分之一。如果您持有 50% 的算力,那么您可以预计每 12 小时左右会连续打出 6 个区块。
很显然,在长期时间尺度上无法持续对比特币的过去中位时间施加影响,而不占据多数算力,但通过正确的运气,可以在短期内(一个或多个区块)将其拖延数小时。如果假设其他矿工的时间戳相当准确,则过去中位时间应该大约是 1 小时前,尽管由于找到区块的变化性,这可能会再多几小时。如果您成功铸造了 6 个时间戳为 1 小时前加 1 秒、2 秒、3 秒等的区块,那么在第 6 个区块时,过去中位时间应该是大约 2 小时前。如果假设区块之间有 1 小时间隔的极端情况,则过去中位时间应该是 6 小时前。
通过允许区块时间戳具有合理的灵活性,然后取最近区块的中位时间,我们得到了一个相当难以操纵的算法,但并不会对那些与真实时间有些不同步的矿工造成不利影响。
如果攻击者拥有超过 50% 的网络算力,并且他们想要延迟比特币时间戳的流逝会发生什么呢?他们可以做一些相当危险的事情。
这样的作恶矿工可以延迟新区块时间一秒。如果他们在足够长的时间内这样做,并且在难度重设期间创建区块,并让时间戳看起来像是前 2016 个区块花费了远远超过 2 周的时间来创造,他们可以操纵挖矿难度调整逻辑,使每 2016 个区块的挖矿难度降低高达 75%。最终,难度足够低后,他们可以在规定时间内铸造任意数量的区块,从而获得比预期更多的挖矿奖励。优化后的时间扭曲攻击可以在 18.7 天内挖出所有剩余比特币。实际上,由于难度调整中的一个小问题,我们在比特币的 testnet3 上看到了类似行为,现在 testnet3 在 8 年内铸造了 1,482,878 个区块,这是预期发行总量的约 350%。
时间扭曲攻击并不是什么新鲜事。这样的攻击首次针对一种被称为“Geist Geld”的加密货币在 2011 年进行,被视为比特币论坛上“51% 攻击的变种”。Geist Geld 旨在通过非常短的区块时间测试区块生成速率的上限,以及与(几乎)稳定的生成速率和供应没有上限或变化的加密货币的行为。
Whitecoin 在 2014 年似乎也遭受了一次时间扭曲攻击。 2018 年,Verge遭受了这样的攻击。然后 6 周后再次遭受攻击!
一般来说,对于特定类型的硬件(ASIC 或 GPU),低算力的加密货币容易受到时间扭曲攻击的影响,因为它们本质上容易受到 51% 攻击的攻击。
推荐阅读 Not Everyone Wants to Fix Bitcoin's 'Time Warp Attack' – Here's Why
有趣的是,尽管时间扭曲通常被称为一种攻击,因为它导致系统行为发生意外变化,但一些人表明它实际上可以被利用作为潜在的期望用途。2015 年,Vitalik Buterin 描述了通过软分叉加快区块速度,从而增加链上容量的方法。2018 年,比特币开发者 Mark Friedenbach 提出了一项利用这种意外行为以增加比特币新功能的提议。在他的“Forward Blocks”提议中,Mark 表示他的方法可以将链上交易量扩大到目前水平的 3584 倍,以一种向后兼容的方式更改工作证明算法,进行分片、为共识费用检测设置可返还的手续费市场,并平滑矿工补贴下降,同时为机密交易、mimblewimble、不可链接匿名花费以及侧链的先决协议提供支持。
然而,此类提议存在争议,可能会迫使任何构建依赖比特币区块头中时间戳的系统的人去寻找其他数据源。这样的改变也很容易被阻止,正如 Greg Maxwell 在比特币开发者邮件列表上所述:
可以通过进一步约束区块时间戳的软分叉来修复这个问题,关于这方面已经提出了几项建议。
比特币的时间戳安全性和约束可接受时间戳窗口的简单规则尽管存在已知的弱点,但在对抗环境下经受了 10 年的考验。我们知道,如果有一群算力占比 51% 的矿工,他们可能会在网络上制造混乱,至少在短期内可以作恶,但这种情况从未发生过——可能是因为矿工没有这样做的激励。理性的矿工不会选择短期利益来毁掉长期的金蛋。