# 比特幣安全漏洞:時間扭曲攻擊近日,一位比特幣開發者提出了一個新的軟分叉提案,旨在修復比特幣協議中長期存在的幾個漏洞和弱點。其中一個較爲嚴重的漏洞被稱爲"時間扭曲攻擊",本文將對此進行詳細探討。## 比特幣區塊時間戳保護機制在討論時間扭曲攻擊之前,我們先回顧一下當前的時間操縱保護規則:1. 中位過去時間(MPT)規則:區塊時間戳必須比最後十一個區塊的中位時間更晚。2. 未來區塊時間規則:區塊時間戳不能比節點對等體的中位時間超前超過2小時。節點時間與本地系統時鍾之間允許的最大差距是90分鍾。MPT規則防止區塊時間戳過於回溯,而未來區塊規則則防止時間戳過於超前。值得注意的是,無法實施類似未來區塊規則的機制來防止區塊有過去的時間戳,因爲這可能會影響初始區塊鏈同步。時間扭曲攻擊正是利用僞造時間戳,使其遠遠回到過去。## 難度調整周期的計算問題比特幣的難度調整周期包含2016個區塊,以10分鍾區塊目標計算,約爲兩周時間。在計算挖礦難度調整時,協議計算相關2016區塊窗口中第一個和最後一個區塊之間的時間戳差。這個2016區塊的窗口實際包含2015個區塊間隔,因此理論上使用的目標時間應該是60秒 * 10分鍾 * 2015個間隔,等於1,209,000秒。然而,比特幣協議使用了2016這個數字來計算目標。60秒 * 10分鍾 * 2016 = 1,209,600秒。這是一個"差一"錯誤,可能是由於混淆了區塊與區塊之間的間隔導致的。這個錯誤導致目標時間比應有的長0.05%。因此,比特幣實際目標間隔時間是10分鍾零0.3秒,而非10分鍾整。雖然這個誤差看似微不足道,但它與另一個更嚴重的問題相關聯。## 時間扭曲攻擊的原理時間扭曲攻擊利用了難度計算中的這個錯誤。在理想情況下,假設挖礦完全中心化,礦工可以設置協議允許的任何時間戳。攻擊者會採取以下策略:1. 對於大多數區塊,將時間戳設置爲比前一個區塊前進一秒。2. 爲了盡可能慢地推進時間,礦工可以連續六個區塊保持相同時間戳,然後在下一個區塊中將時間增加一秒。3. 在每個難度調整周期的最後一個區塊,將時間戳設置爲真實世界時間。4. 下一個週期的第一個區塊時間戳再次回到過去,比前一周期倒數第二個區塊提前一秒。這種操作符合MTP規則,因爲單個異常不會影響11個區塊的中位數。通過這種方式,區塊鏈會逐漸落後於真實時間,難度會不斷增加。然而,從第二個調整周期開始,難度將開始向下調整,使得礦工可以以極快速度創建區塊,潛在地產生大量比特幣。## 攻擊的可行性與挑戰盡管理論上這種攻擊具有毀滅性,但實施起來面臨一些挑戰:1. 可能需要控制大部分算力。2. 誠實礦工的存在會增加攻擊難度。3. MTP規則和誠實時間戳可能限制惡意時間戳的回溯程度。4. 如果誠實礦工產生任何難度調整窗口的第一個區塊,該週期的攻擊將失效。5. 攻擊過程是公開可見的,可能給社區留出時間推出緊急修復。## 潛在的解決方案修復這個漏洞有幾種可能的方法:1. 改變難度調整算法,計算不同2016窗口中區塊之間的時間跨度。2. 取消MTP規則,要求時間在每個區塊中總是向前移動。3. 設置新的限制規則:要求新難度週期的第一個區塊時間不早於前一周期最後一個區塊之前的特定分鍾數。目前,大共識清理提案中建議採用第三種方法,將時間限制設爲2小時。這個時間段約爲難度調整周期目標時間的0.6%,可以有效限制操縱難度向下的能力。關於具體應使用多長的寬限期,業內存在不同觀點。10分鍾限制和2小時限制各有優缺點,需要權衡考慮。無論最終採用哪種方案,修復這個漏洞都將大大提高比特幣網路的安全性和穩定性。
比特幣面臨時間扭曲攻擊 協議漏洞引發安全隱患
比特幣安全漏洞:時間扭曲攻擊
近日,一位比特幣開發者提出了一個新的軟分叉提案,旨在修復比特幣協議中長期存在的幾個漏洞和弱點。其中一個較爲嚴重的漏洞被稱爲"時間扭曲攻擊",本文將對此進行詳細探討。
比特幣區塊時間戳保護機制
在討論時間扭曲攻擊之前,我們先回顧一下當前的時間操縱保護規則:
中位過去時間(MPT)規則:區塊時間戳必須比最後十一個區塊的中位時間更晚。
未來區塊時間規則:區塊時間戳不能比節點對等體的中位時間超前超過2小時。節點時間與本地系統時鍾之間允許的最大差距是90分鍾。
MPT規則防止區塊時間戳過於回溯,而未來區塊規則則防止時間戳過於超前。值得注意的是,無法實施類似未來區塊規則的機制來防止區塊有過去的時間戳,因爲這可能會影響初始區塊鏈同步。時間扭曲攻擊正是利用僞造時間戳,使其遠遠回到過去。
難度調整周期的計算問題
比特幣的難度調整周期包含2016個區塊,以10分鍾區塊目標計算,約爲兩周時間。在計算挖礦難度調整時,協議計算相關2016區塊窗口中第一個和最後一個區塊之間的時間戳差。這個2016區塊的窗口實際包含2015個區塊間隔,因此理論上使用的目標時間應該是60秒 * 10分鍾 * 2015個間隔,等於1,209,000秒。
然而,比特幣協議使用了2016這個數字來計算目標。60秒 * 10分鍾 * 2016 = 1,209,600秒。這是一個"差一"錯誤,可能是由於混淆了區塊與區塊之間的間隔導致的。
這個錯誤導致目標時間比應有的長0.05%。因此,比特幣實際目標間隔時間是10分鍾零0.3秒,而非10分鍾整。雖然這個誤差看似微不足道,但它與另一個更嚴重的問題相關聯。
時間扭曲攻擊的原理
時間扭曲攻擊利用了難度計算中的這個錯誤。在理想情況下,假設挖礦完全中心化,礦工可以設置協議允許的任何時間戳。攻擊者會採取以下策略:
這種操作符合MTP規則,因爲單個異常不會影響11個區塊的中位數。通過這種方式,區塊鏈會逐漸落後於真實時間,難度會不斷增加。然而,從第二個調整周期開始,難度將開始向下調整,使得礦工可以以極快速度創建區塊,潛在地產生大量比特幣。
攻擊的可行性與挑戰
盡管理論上這種攻擊具有毀滅性,但實施起來面臨一些挑戰:
潛在的解決方案
修復這個漏洞有幾種可能的方法:
目前,大共識清理提案中建議採用第三種方法,將時間限制設爲2小時。這個時間段約爲難度調整周期目標時間的0.6%,可以有效限制操縱難度向下的能力。
關於具體應使用多長的寬限期,業內存在不同觀點。10分鍾限制和2小時限制各有優缺點,需要權衡考慮。無論最終採用哪種方案,修復這個漏洞都將大大提高比特幣網路的安全性和穩定性。