Bitcoin-Core

探勘陳舊的低難度區塊作為 DoS 攻擊

  • June 29, 2022

我在任何地方都沒有真正看到過針對比特幣節點的 DoS 攻擊向量是在低難度時代(比如在創世塊之後)探勘一條陳舊的鏈,理想情況下有很多昂貴的操作,比如簽名檢查。

這個答案提到,在比特幣核心中,只有“有機會成為最佳鏈的一部分的區塊才會被實際下載和儲存”,這個機會究竟是如何量化的?其他節點實現如何處理這種攻擊向量?

比特幣通過選擇工作量最大的鏈來確定最佳鏈。由於“工作”有點模糊,因此使用稱為“鍊式”的指標專門確定。Chainwork 只是產生鏈中所有塊所需的預期雜湊數。它是通過計算生成塊所需的預期雜湊數來計算的,並將其添加到前一個塊的鏈中。因此,鏈條只能增加。

比特幣核心的假設有效機制還包括一個最小鏈值。這被設置為假設有效塊的鏈。比特幣核心接受的任何鏈都必須有一個大於這個值的鏈。

使用最少的鏈,Bitcoin Core 可以過濾掉低難度的鏈。由於它首先同步標頭,因此它將下載低工作鏈的塊標頭,看到其鏈小於最小鏈,並且不下載該鏈的塊。它還將斷開向其通告該鏈的對等方。

塊下載分兩個階段進行。雖然它們確實大部分同時發生,但更容易將它們視為單獨的步驟:

  • 首先,從對等節點下載區塊頭,並根據難度調整規則驗證語法正確性和工作量證明。今天(2022 年 6 月)的所有標頭加起來不到 60 MiB。
  • 計算收到的每個標頭鏈中的總工作量(大致等於其中塊的難度總和),作為生產它需要多少工作量的指標。該指標不能偽造。一旦該值足夠高(*),該鏈上的塊就會同時從可能的多個對等點獲取,並在到達後按高度順序進行驗證。

(*) 現在,什麼是足夠的工作?

  • 首先,如果我們已經有一個經過驗證和接受的區塊鏈(不僅僅是區塊鏈),我們只會沿著區塊鏈下載區塊,其總工作量至少與目前接受鏈中的總工作量一樣多。這是因為任何總工作量少於我們接受的鏈的頭鏈顯然永遠不會真正擊敗我們目前接受的鏈。
  • 其次,在初始同步期間,當沒有(長)接受鏈時,使用門檻值“minchainwork”(可配置,但預設值在比特幣核心軟體中硬編碼,並在每次發佈時更新)。總工作量至少不及 minchainwork 的鏈上不會下載任何塊。

因此,如果攻擊者要建構具有大量昂貴簽名檢查的低難度陳舊鏈,那麼節點可能最終會下載並驗證相應的標頭。但是這些標頭永遠不會擊敗 minchainwork(在初始同步時)或真正已經接受的鏈(在以後同步時),因此它的塊永遠不會被下載,更不用說驗證了。

引用自:https://bitcoin.stackexchange.com/questions/114241