时间扭曲攻击

btcstudy發佈於 2025-06-10更新於 2025-06-18

作者:BitMEX Research

来源:https://blog.bitmex.com/the-timewarp-attack/

摘要:我们分析了比特币的一种安全漏洞,称作 “时间扭曲攻击”。这种攻击允许占据算力多数的敌意矿工操纵区块时间戳,从而可以任意调降出块难度、以至于几秒钟就可以挖出一个区块。这一弱点首次被发现是在大约 2011 年,可以通过 “共识清理软分叉” 来修复。我们还探讨了所提议的修复措施的部分细节。

clock-1024x919

2025 年 3 月 26 日,比特币开发者 Antoine Poinsot 公开了一个新的比特币升级提议。该软分叉提议叫做 “共识清理(The Great Consensus Cleanup)”。这一升级修复了多项比特币协议中存在已久的 bug 和漏洞。其中一个是 “重合交易” 问题,我们在近期一篇文章中已经讨论了。另一个可以修复的 bug,也是更加严重的一个,叫做 “时间扭曲攻击”,就是我们这篇文章的主题。

比特币的区块时间戳保护规则

在我们讨论时间扭曲攻击之前,不妨先回顾以下当前的时间戳操纵保护规则

  • 过往时间中值(MPT)规则:一个区块的时间戳必须大于过去 11 个区块的时间戳的中值。
  • 未来区块时间规则:根据 MAX_FUTURE_BLOCK_TIME 常量,区块的时间戳不能超过本地时钟 2 小时以上,这个 “本地时钟” 是来自节点的对等节点的当下时间的中值。(译者注:此一实现的细节似乎已经更改。)另一个保护装置是,来自对等节点的时间,与节点的系统时钟的时间,相差不能超过 90 分钟。

MTP 规则是为了确保区块的时间戳不会倒拨到许久以前;未来区块时间规则用于防止时间戳拨到太遥远的未来。请注意,类似于未来区块时间规则的做法不能用来防止区块时间戳倒拨,因为这会影响初始化区块链同步。时间扭曲攻击涉及到假的时间戳,以及倒拨到许久以前的时间戳。

中本聪的 “差一错误”

在比特币中,一个难度调整周期的长度是 2016 个区块;配合上 10 分钟的出块时间目标,意味着一个周期大约长两个星期。为了计算挖矿难度的调整量,协议会计算最近一个难度调整窗口的第一个区块和最后一个时间戳的差值。在由 2016 个区块构成的窗口中,包含了区块间 的 2015 段出块间隔(没错,就是 2016 减 1)因此,合理的挖矿目标时间应该是 60 秒 * 10 分钟 * 2015 个间隔,也就是 120 9000 秒。然而,比特币协议使用的间隔数量是 2016,使目标时间定义成了 120 9600 秒。这就是一个差一错误。这是一个很容易犯的错误,中本聪似乎搞混了区块数量与区块间隔的数量。

中本聪的代码

const unsigned int nTargetTimespan = 14 * 24 * 60 * 60; // two weeks

- 来源:https://sourceforge.net/p/bitcoin/code/1/tree//trunk/main.cpp%23l687 -

这个错误让目标时间比应该的长了 0.05%。因此,比特币的目标出块间隔并不真的是 10 分钟,而是 10 分钟又 0.3 秒。这个 bug 并不那么要紧,因为自比特币启动一来,出块间隔平均值是 9 分钟又 36 秒,远远低于 10 分钟。这是因为自 2009 年以来,平均来说挖矿算力一直在增长。这也是为什么最近一次比特币货币增发减半发生在 2024 年 4 月,而不是预期的 2025 年 1 月。我们赶在了日程表前面。不管怎么说,中本聪犯的这个 0.3 秒的错误在宏观层面上是无关紧要的。也许许多年以后,当比特币的价格和哈希率都停止增长的时候,这个 bug 会让我们回到预想的货币发行日程表。

d-1536x668

虽然 0.3 秒的 bug 自身并不算什么,一个相关的问题就变成了可以说严重的漏洞。难度调整量的计算基于每一个长为 2016 个区块的窗口中的第一个区块和最后一个区块。这也是不对的,从我们的视角看,合理的周期应该是本窗口最后一个区块与上一个窗口的最后一个区块的差值。这显然是计算难度调整周期长度的最符合逻辑的方式,关键之处是它会让时间区域与不同的难度调整窗口重叠。如果一开始就是这样做的,那么 2016 也会成为用于计算目标出块时间的正确间隔数量。

也许,中本聪犯下这个错误的理由在于,他必须考虑第一个难度调整窗口 —— 没有更早的难度调整窗口,也就无所谓上一个窗口的最后一个区块。

时间扭曲攻击

对比特币的时间扭曲攻击第一次被发现是在 2011 年,也利用了中本聪在难度计算中的错误。为了理解攻击,我们假设挖矿是 100% 中心化的,所以矿工可以设置协议所允许的任意时间戳。在攻击中,对挖出的所有区块,矿工都将时间戳设为比上一个区块多一秒,因此区块链的时间是向前的,也满足了 MTP 规则。要想时间戳挪动得尽可能慢,矿工可以为 6 个一组区块使用完全相同的时间戳,然后为下一组使用增加了一秒的时间戳,以此类推。这意味着每挖出 6 个区块,最新区块的时间戳只会正着往前拨动一秒。

这种攻击意味着,区块链最新区块的时间戳会逐渐落后于真实时间,而且,由于时间戳差值太小,难度就会上升,让挖矿变得越来越困难。但是,我们继续给攻击加料 —— 在每一个难度调整窗口的最后一个区块,矿工将时间戳设为真实世界的时间数值。到了下一个区块,也就是下一个难度调整窗口的第一个区块,矿工又将时间倒拨,拨到仅仅比上一个难度窗口的倒数第二个区块多一秒。这依然满足 MTP 规则,因为一个异类并不影响过往 11 个区块的时间戳中值。

在发动这样的攻击的时候,第一个窗口的难度并不会受影响。然而,在攻击开始的第二个难度调整窗口之后,难度就会下降。然后矿工就可以用极快的速度创建区块,也许能创造大量的比特币,甚至可以全部卖出获利。

精心设计的图解

因为一个难度调整窗口是 2016 个区块,所以很难在一张图中演示这样的攻击。因此,我们设计了如下场景来解释时间扭曲攻击。

  • 每一次难度调整窗口只有 5 个区块
  • 目标出块间隔是 10 分钟
  • MTP 规则只考虑过去 3 个区块
  • 每一个区块的时间戳都只多 1 分钟,除了每个窗口的最后一个区块,它会使用真实时间

c-1536x938

- 图解时间扭曲攻击 -

如上图所示,有两种线条:

  1. 红色曲线表示真实时间,在每一个难度调整周期的最后一个区块,与表示区块时间戳的蓝色直方线相交。这条曲线会变得越来越平缓,因为矿工的出块速度(随着难度降低而)越来越快。
  2. 蓝色的直方线,表示被操纵的时间戳。

时间扭曲攻击的计算

下图展示了在最极端的情况下,矿工使用时间扭曲攻击可以让挖矿难度多么快速地下降。

难度调整窗口数量难度下降幅度累计难度降幅出块间隔(分钟)单窗口时长(天)累计时长(天)
1NoneNone10.0014.0014.00
22.0x2.0x10.0014.0028.00
32.5x5.0x5.007.0035.00
42.7x13.5x2.002.8037.80
52.8x37.4x0.741.0438.84
62.8x104.7x0.270.3739.21
72.8x294.1x0.100.1339.35
82.8x826.8x0.030.0539.39
92.8x2325.6x0.010.0239.41
102.8x6541.3x0.000.0139.42
112.8x18398.0x0.000.0039.42

注意:协议所允许的单窗口最大难度调整幅度是 4 倍,但上图并没有达到。

单周期的难度调整降幅只稍微高于 2.8 倍。这是因为随着每一个周期的时长变得越来越短,难度下降得也越来越慢。

在上表的第 11 个窗口,也就是攻击发动后的第 39 天,一秒钟可以生产超过 6 个区块,准确来说是 10.9 个。这时候,分配给区块的时间戳的作用就发生了变化。根据 MTP 规则,每 6 个区块,时间戳就必须正着往前拨,最小的增量是 1 秒钟。因此,这时候,基于我们理解,时间戳的移动会快于真实时间的移动,区块链时钟会开始趋向真实值,但依然会落在真实时间的后面。除此之外,攻击可以持续,直到难度降低到不能再低(到达允许的最小值)为止。

攻击的显著性

虽然理论上这种攻击是毁灭性的,但真要发动它也面临一些困难。执行攻击可能需要占据大多数算力。只要有诚实矿工发布诚实的时间戳,攻击的难度就上身。MTP 规则和来自诚实矿工的时间戳可能会限制恶意矿工的时间戳倒拨的程度。此外,只要诚实矿工生产出了任何一个难度调整窗口的第一个区块,攻击在该窗口就不会生效(会暂停)。另一个会让攻击难度上升的缓解因素是,这样的攻击对每一个人都是可见的。时间戳对所有人都是可见的;而在难度真的下降之前,需要操纵时间戳长达 4 个星期;我们也许能够在此期间推出一次紧急软分叉来阻止它。

解决方案

修复这个漏洞不难,虽然可能需要一次软分叉协议变更。改变难度调整算法、计算另一个 2016 个出块间隔的区块时间戳差值、完全修复差一错误,可以直接修复问题,但是非常复杂,可能需要硬分叉。另一种修复方法是摒弃 MTP 规则、要求每一个区块的时间戳都必须大于上一个区块的,虽然这可能意味着时间戳会跑到真实时间前面去,而且也意味着使用自己的操作系统时钟的矿工会吃亏,因为其他矿工都把时钟拨快了几秒钟(从而他的时间戳就成了无效时间戳)。

幸运的是,还有一种非常简单的解决方案。为了防止时间戳攻击,我们只需让难度调整窗口的第一个区块的时间戳不能比上一个窗口的最后一个区块小太多。这个限度的具体数值(分钟数)一直在被讨论,人们的提议从 10 分钟到 2 小时都有。从缓解时间扭曲攻击的角度看,不论哪个似乎都可以。

Poinsot 的共识清理提议的当前版本决定使用 “2 小时”。2 小时只是一个难度调整窗口目标时间的大约 0.6%,因此,操纵难度调降的能力会大大受限。我们已经总结了关于宽限期长度的讨论:

10 分钟

支持意见:

  • 此数值有非常吸引人的特性:它刚好对冲了差一错误的影响。如果有人发动攻击,效果会刚好被中本聪的错误抵消。

反对意见:

  • 如果一个矿工使用真实时间来设定时间戳,有变成无效区块的额外风险。
  • 这个规则是更为巨大的协议变更,可能在常规情形中比 MTP 更为严格,增加额外的复杂性。

2 小时

支持意见:

  • 这个宽限期足够长,尽可能降低了意外开采出无效区块的风险。
  • 这是 Fabian Jahr 在测试这一提议时为 testnet4 选择的数值。
  • 这个数值匹配了未来区块时间戳规则,因此总是允许矿工在一个区块内纠正最大允许未来时间错误。
  • 相比于当前的规则集,这是一种更加保守的变更,可能比常规情况下的 MTP 规则更轻松

反对意见:

  • 这依然允许发动攻击的矿工在每个窗口中将难度调降大约 0.6%;不过,这会是一次性的变更,不能倍乘。

(完)

熱門幣種推薦

你可能也喜歡

大神Karpathy用Claude的方式,原来是这样的?

AI大神安德烈·卡帕西(Andrej Karpathy)在加入Anthropic后,开源活动减少。近期,一份据称是他本人使用的`CLAUDE.md`文件在社区流传,旨在指导Claude AI进行更高效的编程协作。该文件强调了一系列核心原则,并非简单建议而是必须遵守的规则,以规避大语言模型写代码时的常见错误。 核心原则包括: 1. **写之前先读**:在编写新代码前,务必认真阅读现有代码库,理解项目风格、既有模式和工具,确保新代码与项目保持一致。 2. **写代码之前先想清楚**:明确任务需求、澄清假设、说明方案取舍,避免基于模糊理解生成错误代码。 3. **保持简单**:抵制过度设计,避免过早抽象、臆想式错误处理和不必要的配置,编写能解决当前问题的最少代码。 4. **外科手术式修改**:修改代码时力求改动范围最小,严格匹配项目现有风格,只清理自己引入的问题,避免无谓的重构和格式化。 5. **验证**:重视测试,修复bug前先写测试复现,确保改动不破坏现有功能。 6. **目标驱动执行**:将模糊任务转化为可验证的具体步骤,并在执行前说明计划。 7. **调试**:遇到问题先深入调查、复现,理解根因,避免盲目添加临时解决方案。 8. **谨慎管理依赖**:添加新依赖前,优先考虑使用现有工具或标准库,并评估其维护状态和成本。 9. **有效沟通**:清晰说明改动内容和原因,主动指出潜在隐患和不确定之处。 文章指出,尽管这份文件的真实性存疑,但其内容高度契合卡帕西本人关于AI编程助手的公开观点。社区已据此提炼出原则并制作了模板,有测试表明能显著降低Claude的代码错误率。这些准则被认为是提升AI辅助编程效率、保证代码质量的关键。

marsbit5 小時前

大神Karpathy用Claude的方式,原来是这样的?

marsbit5 小時前

交易

現貨

熱門文章

什麼是 BITCOIN

理解 HarryPotterObamaSonic10Inu (ERC-20) 及其在加密空間中的地位 近年來,加密貨幣市場見證了迷因幣的流行激增,吸引了不僅是交易者的注意,還有尋求社區參與和娛樂價值的人士。在這些獨特的代幣中,有一個有趣的項目 HarryPotterObamaSonic10Inu (ERC-20),它將文化參考融入加密貨幣的織造中。本文深入探討 HarryPotterObamaSonic10Inu 的關鍵方面,探索其機制、以社區為驅動的精神,以及其與更廣泛的加密生態的互動。 HarryPotterObamaSonic10Inu (ERC-20) 是什麼? 正如其名所示,HarryPotterObamaSonic10Inu 是一種建立在以太坊區塊鏈上的迷因幣,按照 ERC-20 標準分類。與強調實用性或投資潛力的傳統加密貨幣不同,這項代幣依賴於娛樂價值和其社區的力量。該項目旨在促進一個讓互動用戶可以聚在一起、分享想法和參與受不同文化現象啟發的活動的環境。 HarryPotterObamaSonic10Inu 的一個顯著特點是其 交易零稅。這一引人注目的元素旨在鼓勵交易和社區參與,無需擔心可能會阻礙小型交易者的額外費用。該幣的總供應量定為十億個代幣,這一數字標示其意圖在社區內保持較大的流通量。 HarryPotterObamaSonic10Inu (ERC-20) 的創建者 HarryPotterObamaSonic10Inu 的起源有些神秘;對創建者的具體資訊尚不清楚。這個代幣的開發缺乏可識別的團隊或明確的藍圖,這在迷因幣領域並不罕見。相反,該項目是自然產生的,其進展主要依賴於社區的熱情和參與。 HarryPotterObamaSonic10Inu (ERC-20) 的投資者 關於外部投資和支持,HarryPotterObamaSonic10Inu 亦保持模稜兩可。該代幣並未列出任何已知的投資基金或顯著的組織支持。相反,該項目的生命力來自其草根社區,通過集體行動和參與在加密空間促進其增長和可持續性。 HarryPotterObamaSonic10Inu (ERC-20) 如何運作? 作為一種迷因幣,HarryPotterObamaSonic10Inu 主要在傳統的資產價值框架之外運作。以下是幾個定義該項目運作方式的獨特方面: 零稅交易:由於交易沒有稅費,使用者可以自由地買賣該代幣,而不必擔心隱藏成本。 社區參與:該項目依賴於社區互動,利用社交媒體平台創造話題並促進參與。討論、內容分享及互動是幫助擴展其影響力和加強支持者忠誠度的重要元素。 無實用性:需要指出的是,HarryPotterObamaSonic10Inu 在金融生態中並不提供具體的實用性。相反,它被定義為主要用於娛樂和社區活動的代幣。 文化參考:該代幣巧妙地融入了流行文化中的元素,以吸引興趣,與迷因愛好者和加密追隨者建立聯繫。 HarryPotterObamaSonic10Inu 範例展示了迷因幣如何與更傳統的加密貨幣項目運作不同,作為創新的社會構造進入市場,而非實用資產。 HarryPotterObamaSonic10Inu (ERC-20) 的時間線 HarryPotterObamaSonic10Inu 的歷史標誌著幾個值得注意的里程碑: 創建:這個代幣源於一個病毒式的迷因,捕捉了許多加密愛好者的想像力。具體的創建日期目前並不清楚,凸顯其自然興起。 上架交易所:HarryPotterObamaSonic10Inu 已經在多個交易所上架,使社區更容易存取和交易。 社區互動倡議:持續進行旨在增進社區互動的活動,包括比賽、社交媒體活動和來自粉絲和支持者的內容創作。 未來擴展計劃:該項目的路線圖包括推出 NFT 收藏品、周邊商品及相關電子商務網站,進一步與社區互動並嘗試為其生態系統增添更多維度。 關於 HarryPotterObamaSonic10Inu (ERC-20) 的關鍵點 以社區為驅動的特質:該項目優先考慮集體意見和創意,確保用戶參與在其發展過程中居於核心地位。 迷因幣分類:它代表了以娛樂為基礎的加密貨幣的典範,與傳統投資工具大相徑庭。 與比特幣無直接關聯:儘管在代碼名稱上有相似之處,HarryPotterObamaSonic10Inu 是獨特的,並不與比特幣或其他已建立的加密貨幣存在關係。 協作焦點:HarryPotterObamaSonic10Inu 旨在為持有者創造一個共享故事和協作的空間,提供創意和社區聯結的途徑。 未來前景:向超越其初步主題擴展至 NFT 和周邊商品的雄心,描繪了該項目潛在進入數字文化的更主流途徑。 隨著迷因幣繼續吸引加密貨幣社區的想像力,HarryPotterObamaSonic10Inu (ERC-20) 由於其文化聯繫和以社區為中心的方式而脫穎而出。儘管它可能不符合以實用性為導向的代幣的典型模式,其本質在於支持者間培育的快樂和友誼,突顯了在日益數字化的時代中,加密貨幣的演變特性。隨著該項目的持續發展,觀察社區動態如何影響其在不斷變化的區塊鏈技術格局中的軌跡將是重要的。

2.3k 人學過發佈於 2024.04.01更新於 2024.12.03

什麼是 BITCOIN

如何購買BTC

歡迎來到HTX.com!在這裡,購買Bitcoin (BTC)變得簡單而便捷。跟隨我們的逐步指南,放心開始您的加密貨幣之旅。第一步:創建您的HTX帳戶使用您的 Email、手機號碼在HTX註冊一個免費帳戶。體驗無憂的註冊過程並解鎖所有平台功能。立即註冊第二步:前往買幣頁面,選擇您的支付方式信用卡/金融卡購買:使用您的Visa或Mastercard即時購買Bitcoin (BTC)。餘額購買:使用您HTX帳戶餘額中的資金進行無縫交易。第三方購買:探索諸如Google Pay或Apple Pay等流行支付方式以增加便利性。C2C購買:在HTX平台上直接與其他用戶交易。HTX 場外交易 (OTC) 購買:為大量交易者提供個性化服務和競爭性匯率。第三步:存儲您的Bitcoin (BTC)購買Bitcoin (BTC)後,將其存儲在您的HTX帳戶中。您也可以透過區塊鏈轉帳將其發送到其他地址或者用於交易其他加密貨幣。第四步:交易Bitcoin (BTC)在HTX的現貨市場輕鬆交易Bitcoin (BTC)。前往您的帳戶,選擇交易對,執行交易,並即時監控。HTX為初學者和經驗豐富的交易者提供了友好的用戶體驗。

5.7k 人學過發佈於 2024.12.12更新於 2026.06.02

如何購買BTC

什麼是 $BITCOIN

數字黃金 ($BITCOIN):全面分析 數字黃金 ($BITCOIN) 介紹 數字黃金 ($BITCOIN) 是一個基於區塊鏈的項目,運行於 Solana 網絡,旨在將傳統貴金屬的特徵與去中心化技術的創新相結合。雖然它與比特幣同名,常被稱為「數字黃金」,因其被視為價值儲存工具,但數字黃金是一個獨立的代幣,旨在於 Web3 生態系統中創造一個獨特的生態系。其目標是將自己定位為一個可行的替代數字資產,儘管有關其應用和功能的具體細節仍在發展中。 什麼是數字黃金 ($BITCOIN)? 數字黃金 ($BITCOIN) 是一個專門為 Solana 區塊鏈設計的加密貨幣代幣。與比特幣提供廣泛認可的價值儲存角色不同,這個代幣似乎更專注於更廣泛的應用和特徵。值得注意的方面包括: 區塊鏈基礎設施:該代幣建立在 Solana 區塊鏈上,以其處理高速和低成本交易的能力而聞名。 供應動態:數字黃金的最大供應量上限為 100 萬兆代幣(100P $BITCOIN),儘管有關其流通供應的詳細信息目前尚未披露。 實用性:雖然具體功能尚未明確說明,但有跡象表明該代幣可能被用於各種應用,可能涉及去中心化應用(dApps)或資產代幣化策略。 誰是數字黃金 ($BITCOIN) 的創建者? 目前,數字黃金 ($BITCOIN) 的創建者和開發團隊的身份仍然是 未知 的。這種情況在許多創新項目中是典型的,特別是那些與去中心化金融和迷因幣現象相關的項目。雖然這種匿名性可能促進社區驅動的文化,但也加劇了對治理和問責制的擔憂。 誰是數字黃金 ($BITCOIN) 的投資者? 可用的信息顯示,數字黃金 ($BITCOIN) 沒有任何已知的機構支持者或知名的風險投資。該項目似乎運行在一個以社區支持和採用為重點的點對點模型上,而不是傳統的資金籌集途徑。其活動和流動性主要位於去中心化交易所(DEXs),如 PumpSwap,而不是已建立的集中交易平台,進一步突顯其草根方法。 數字黃金 ($BITCOIN) 如何運作 數字黃金 ($BITCOIN) 的運作機制可以根據其區塊鏈設計和網絡特徵進行詳細說明: 共識機制:通過利用 Solana 的獨特歷史證明(PoH)結合權益證明(PoS)模型,該項目確保高效的交易驗證,促進網絡的高性能。 代幣經濟學:雖然具體的通縮機制尚未詳細說明,但巨大的最大代幣供應量暗示它可能適合微交易或尚待定義的利基用例。 互操作性:存在與 Solana 更廣泛生態系統的整合潛力,包括各種去中心化金融(DeFi)平台。然而,關於具體整合的詳細信息仍未明確。 重要事件時間表 以下是關於數字黃金 ($BITCOIN) 的重要里程碑時間表: 2023:該代幣首次在 Solana 區塊鏈上部署,並以其合約地址為標誌。 2024:數字黃金獲得曝光,因其在去中心化交易所如 PumpSwap 上可供交易,允許用戶以 SOL 進行交易。 2025:該項目見證了零星的交易活動和社區主導參與的潛在興趣,儘管截至目前尚未記錄到任何顯著的合作夥伴關係或技術進展。 關鍵分析 優勢 可擴展性:基於 Solana 的基礎設施支持高交易量,這可能增強 $BITCOIN 在各種交易場景中的實用性。 可及性:每個代幣潛在的低交易價格可能吸引零售投資者,促進更廣泛的參與,因為存在分割所有權的機會。 風險 缺乏透明度:缺乏公眾已知的支持者、開發者或審計過程可能引發對該項目可持續性和可信度的懷疑。 市場波動性:交易活動在很大程度上依賴於投機行為,這可能導致價格波動和投資者的不確定性。 結論 數字黃金 ($BITCOIN) 在快速發展的 Solana 生態系統中,作為一個引人入勝但模糊的項目出現。雖然它試圖利用「數字黃金」的敘事,但其與比特幣作為價值儲存工具的既定角色的脫離,突顯了對其預期實用性和治理結構更清晰區分的需求。未來的接受度和採用率可能取決於解決當前的不透明性,並更明確地定義其運營和經濟策略。 注意:本報告涵蓋截至 2023 年 10 月的綜合信息,並且在研究期間可能發生了進展。

111 人學過發佈於 2025.05.13更新於 2025.05.13

什麼是 $BITCOIN

相關討論

歡迎來到 HTX 社群。在這裡,您可以了解最新的平台發展動態並獲得專業的市場意見。 以下是用戶對 BTC (BTC)幣價的意見。

活动图片