跳到正文

PoS 長程攻擊:歷史金鑰、啟動風險與檢查點

PoS 長程攻擊利用歷史驗證者權限簽署另一套歷史。了解哪些節點會暴露於風險、攻擊者必須重現什麼,以及弱主觀性檢查點和協定特定的同步規則如何限制風險。

更新於

僅供協定安全教育分析。長程攻擊抵抗能力取決於特定協定和版本;在依賴新同步或長期離線的節點之前,應從經過身分驗證並獨立核對的來源取得啟動資料。

直接回答

權益證明長程攻擊是利用在很久以前有效的驗證者權限,使一套相互衝突的歷史看起來可信的企圖。一種常見形式通常稱為後驗腐化:攻擊者在驗證者退出且其抵押品不再可被罰沒後,取得或攻破這些驗證者的金鑰。由於產生舊簽章不需要重播工作量證明所消耗的能源,攻擊者相較於誠實鏈的歷史成本,可能以較低代價建立一條內部一致的分叉。

攻擊目標通常是沒有近期已驗證視圖的節點:首次運行的節點、從舊備份還原的節點,或離線時間超過協定安全同步範圍的節點。持續觀察網路的節點已經知道一個已終局化或受到其他方式保護的祖先,理應拒絕與之衝突的分叉。因此,日蝕攻擊或遭攻破的資料來源可透過向同步節點隱藏誠實視圖來放大攻擊。

僅有歷史金鑰並不等於擁有通用偽造工具。另一套歷史必須滿足目標協定的簽章域、狀態轉換、驗證者集合演變、時間規則、終局性或鏈選擇證據,以及任何金鑰演進或檢查點限制。有些 PoS 協定要求近期弱主觀性檢查點;另一些協定規定從創世狀態出發的啟動方式,或採用不同的信任與可用性假設。應分析確切的鏈、網路、分叉版本、用戶端和同步模式,而不是把「PoS」視為一種單一機制。

檢查點不只是一個方便使用的區塊編號。它把特定網路和共識狀態綁定到某個 epoch、slot 或高度上的 root 或雜湊。通過身分驗證後,它會限制節點考慮哪些歷史。隨後,節點可以從該錨點開始,依照協定規則驗證剩餘鏈。這就是弱主觀性:在啟動階段提供有界的外部輸入,之後在假設期間內進行客觀驗證,而不是永久信任某個對等節點回報的最新鏈頭。

攻擊與驗證路徑

  1. 選擇舊分叉點。 攻擊者找出一個歷史狀態;其驗證者權限後來已經輪替,或新節點難以獨立驗證該權限。
  2. 取得足夠的歷史簽章權。 驗證者退出後,金鑰可能被購買、竊取、保留、從備份中還原,或經由遭攻破的簽章系統暴露。所需權重和訊息類型取決於特定協定;擁有一把舊提議者金鑰並不必然足夠。
  3. 建立符合協定規則的替代歷史。 攻擊者產生能夠通過受害者用戶端歷史檢查的區塊、投票、憑證和驗證者集合變更。任何無效狀態轉換、錯誤簽章域、不可能的時間安排或缺少的證明,仍可使該分叉無效。
  4. 延伸並展示分叉。 低成本的簽章產生可能讓攻擊者填充一段很長的歷史,但原始區塊數量並不能決定結果。該分支必須贏得或繞過相應同步模式採用的精確選擇流程。
  5. 控制啟動視圖。 受害者與經過身分驗證的近期檢查點或誠實對等節點證據隔離,只能看到替代歷史,並被告知它是唯一或優先候選鏈。
  6. 誘導下游依賴。 如果節點接受了錯誤狀態,其 RPC、錢包、索引器、跨鏈橋監控器或應用程式可能回報在攻擊者分叉上符合協定規則的餘額、事件和驗證者成員關係,儘管即時網路遵循另一條鏈。

防禦者應反向重現這條路徑:驗證錨點身分,確認其鏈和網路識別,核實候選鏈是它的後代,執行全部共識與狀態轉換檢查,並在獨立基礎設施之間比較已終局化或被選中的狀態。下載成功並不能證明所選歷史是規範歷史。

完整範例

假設驗證者集合 V_old 在 epoch 120,000 控制著一條假想 PoS 鏈。多年後,該歷史權重中超過 2/3 的驗證者已經退出,不再承受協定懲罰。攻擊者取得這些舊金鑰,並在檢查點 C_old 之後立即開始建立一套相互衝突的歷史。

在偽造分支上,攻擊者簽署該假想協定所需的投票,更改後續驗證者成員,並繼續推進到 epoch 420,000。誠實網路也已到達 epoch 420,000,因此相同的 epoch 編號或更長的檔案無法告訴啟動中的節點,哪條分支才是社會和營運層面認可的規範鏈。偽造分支是否具備可接受性,取決於它能否滿足該協定的每一條歷史規則。

節點 N_live 曾觀察到真實的已終局化檢查點 C_recent,它位於 epoch 419,936。由於攻擊分叉並非 C_recent 的後代,N_live 會拒絕它。然而,節點 N_new 從創世狀態開始,只連線到攻擊者控制的對等節點,且沒有經過身分驗證的近期錨點。如果其協定和同步模式無法僅憑歷史內部證據區分兩條鏈,它就可能接受攻擊分支。

N_new 提供經過身分驗證的二元組 C_recent = (root, 419,936) 會改變決策邊界。用戶端必須要求同步路徑包含這個確切檢查點,並在無法滿足時採取封閉式失敗。範例中的 epoch 和 2/3 閾值用於說明一種終局性風格的設計;它們不是通用 PoS 參數,也不是任何具名網路的目前設定。

控制措施與審查清單

協定設計

  • 記錄確切的長程安全模型:後驗腐化、驗證者輪替、自適應金鑰攻破、網路隔離和資料可用性。
  • 定義哪些已終局化狀態永遠不得回滾,以及分叉選擇如何處理與本地可信錨點的衝突。
  • 限制驗證者退出、提款和集合輪替,使安全假設在仍可偵測和懲罰矛盾簽章時保持有效。
  • 將弱主觀性期間或替代同步安全假設定義為根據目前狀態和協定常數推導出的值,而不是永久不變的日曆期限。
  • 在協定設計支援的情況下考慮金鑰演進簽章或前向安全簽章;一般金鑰刪除是有用的安全習慣,但並非完整的共識防禦措施。
  • 分別測試首次同步、檢查點同步、快照還原和長期離線復原。安全的即時分叉選擇規則不會自動保證啟動過程安全。

節點啟動與維運

  • 同步前記錄檢查點 root 或區塊雜湊、epoch 或高度、chain ID、網路、分叉版本、取得時間和提供者。
  • 透過經過身分驗證的管道取得錨點,並比較多個真正獨立的來源。由同一節點或營運方支撐的多個網站並不相互獨立。
  • 拒絕過期、格式錯誤、網路不符或相互衝突的檢查點。驗證失敗後,不得無聲回退到沒有錨點的同步方式。
  • 要求同步後的鏈包含確切錨點,並用指定的共識用戶端和執行用戶端驗證它的所有後代。
  • 採用對等節點、用戶端、營運方和 RPC 多樣性;監控日蝕條件、已終局化 root 分歧、異常回滾和長期終局性故障。
  • 從舊資料庫或備份還原後重新核對錨點,並在協定規定的安全期間內更新錨點。

應用依賴

  • 不要僅因為一個新同步的 RPC 回報成功,就釋放存款、跨鏈橋訊息或不可逆交易。
  • 在執行高影響操作前,應在獨立節點之間核對鏈識別、已終局化檢查點和事件祖先關係。
  • 將共識歷史與應用事實分開:規範鏈並不能證明預言機正確、合約安全、協定之外的資料可用,也不能證明託管人有償付能力。
  • 為相互衝突的已終局化檢查點或可信錨點制定停止策略。這種情況可能表示共識故障、啟動資料損壞或網路選擇錯誤,不應透過自動選擇較長分支來解決。

常見迷思

  • 每條 PoS 鏈都以同樣方式暴露於攻擊。 長程攻擊抵抗能力取決於協定的驗證者演變、簽章、終局性、分叉選擇、檢查點和同步假設。
  • 舊金鑰可以不受限制地改寫任何交易。 攻擊者仍須產生一套能通過受害者完整驗證規則的歷史;歷史權限只在某些攻擊建構中是必要條件,而且可能並不充分。
  • 區塊、epoch 或簽章更多的鏈就是真的。 選擇過程使用協定特定的有效性、權重、憑證和錨點,不存在通用的長度比較方法。
  • 僅靠終局性就能讓從創世狀態啟動的節點識別社會認可的鏈。 對沒有經過身分驗證的近期視圖的節點而言,兩套內部有效的已終局化歷史可能無法區分;終局性保護的是已經知道相關檢查點的節點。
  • 罰沒總能阻止攻擊。 完全退出的驗證者可能已沒有可罰沒的抵押品,而且證據必須可歸責,並在懲罰仍可執行時完成處理。
  • 檢查點意味著永遠信任一家公司。 信任可以限定在一個特定的近期錨點,並透過身分驗證分發、獨立交叉核對和後續本地驗證進一步降低。
  • 刪除退役金鑰就解決了協定問題。 安全抹除可以降低金鑰洩露風險,但穩健的共識和啟動規則必須容忍部分歷史金鑰變得可用。

相關主題

來源

導覽

搜尋知識庫...