跳至主要內容
高級

Transaction Pinning

了解交易釘住攻擊如何影響 Layer 2 協議,以及各種緩解方案。

12 分鐘

Transaction Pinning(交易釘住)是一種攻擊技術,攻擊者通過創建低手續費率但 高絕對手續費的交易,阻止受害者的交易被確認或替換。這對閃電網路等 Layer 2 協議構成嚴重威脅。

什麼是 Pinning 攻擊?

在需要時間敏感交易確認的場景中(如閃電網路的 HTLC 超時),攻擊者可以利用 mempool 的規則來「釘住」交易,使其難以被替換或確認。

正常情況:
Alice 廣播 TX_A (手續費: 1000 sat, 1 sat/vB)
Alice 可以用 RBF 替換為更高手續費的版本

Pinning 攻擊:
Mallory 創建 TX_M,花費 TX_A 的輸出
TX_M: 手續費 100,000 sat,但大小 100,000 vB (1 sat/vB)

結果:
- TX_A 無法單獨被 RBF(因為有子交易)
- 替換整個 package 需要支付 > 100,000 sat
- Alice 被「釘住」,無法以合理成本加速交易

Pinning 的類型

1. BIP-125 Rule 3 Pinning

RBF 規則要求替換交易支付比所有被替換交易更高的絕對手續費。

// BIP-125 Rule 3
replacement_fee > sum(replaced_tx_fees)

攻擊:
TX_A: 1,000 sat (Alice 的交易)
TX_M: 99,000 sat (Mallory 的大型低費率子交易)

要替換 TX_A,Alice 必須支付 > 100,000 sat
即使新交易只有 200 vB,仍需 500+ sat/vB

2. BIP-125 Rule 5 Pinning

RBF 規則限制被替換交易的後代數量(最多 100 個)。

// BIP-125 Rule 5
evicted_descendants <= 100

攻擊:
Mallory 創建 100 個小型子交易花費 TX_A
每個子交易: 最小手續費

Alice 的 RBF 嘗試將因超出限制而失敗

3. CPFP Carve-out Pinning

即使有 CPFP carve-out 例外,仍有 pinning 攻擊向量。

// CPFP Carve-out (用於 LN anchor outputs)
允許額外一個 1000 vWU 的子交易

攻擊:
Mallory 先使用 carve-out 額度
廣播一個 1000 vWU 的低費率子交易
Alice 無法再使用 carve-out

對閃電網路的影響

閃電網路 HTLC 超時場景:

1. Alice 發送 1 BTC 給 Bob (HTLC)
2. 如果 Bob 不揭示 preimage,Alice 在超時後可取回資金
3. Bob 揭示 preimage 但不廣播成功交易

攻擊:
- Bob 廣播低費率的 claim 交易
- 同時創建 pinning 子交易
- Alice 無法及時廣播超時交易
- 超時後,Bob 可以同時 claim HTLC 和取回資金

結果: Alice 損失資金

緩解方案

1. Anchor Outputs

在承諾交易中添加可被 CPFP 的小額輸出。

承諾交易輸出:
- to_local: Alice 的餘額
- to_remote: Bob 的餘額
- anchor_local: 330 sat (Alice 可用 CPFP)
- anchor_remote: 330 sat (Bob 可用 CPFP)

雙方都可以獨立加速交易

2. V3 Transactions (TRUC)

BIP-431 引入嚴格的拓撲限制:

V3 交易規則:
- 最多 1 個未確認父交易
- 最多 1 個未確認子交易
- 子交易最大 1000 vB
- 繼承 V3 特性

防 pinning 效果:
- 無法創建大型子交易
- 無法創建多個子交易
- 替換成本可預測

3. Package RBF

允許以 package 為單位進行 RBF:

// Package RBF
submitpackage([parent_tx, child_tx])

如果 package 費率高於現有衝突交易的 package 費率,
可以整體替換

這允許低手續費父交易通過高手續費子交易被確認

4. Ephemeral Anchors

提議中的零值 anchor 輸出:

Ephemeral Anchor:
- 輸出值: 0 sat
- scriptPubKey: OP_TRUE (任何人可花費)
- 必須在同一 package 中被花費

優點:
- 無需鎖定資金在 anchor 中
- 任何人都可以 CPFP
- 與 V3 交易配合使用

Bitcoin Core 的保護措施

// 現有限制
MAX_PACKAGE_COUNT = 25          // 最大 package 大小
MAX_ANCESTORS = 25              // 最大祖先數量
MAX_DESCENDANTS = 25            // 最大後代數量
MAX_ANCESTOR_SIZE = 101 KB      // 最大祖先總大小
MAX_DESCENDANT_SIZE = 101 KB    // 最大後代總大小

// CPFP carve-out
允許 +1 個額外子交易 (最大 1000 vWU)
僅適用於 2 輸出的父交易

開發者注意事項

  • 時間敏感交易:設計協議時考慮 pinning 攻擊向量
  • 使用 V3 交易:新的 Layer 2 協議應採用 V3 交易格式
  • 預留手續費空間:為 CPFP 預留足夠的輸出值
  • 監控 mempool:檢測可能的 pinning 嘗試

相關 BIP 和提案

  • BIP-125:Opt-in RBF 規則
  • BIP-431:V3 交易拓撲限制
  • Package Relay:交易包中繼(開發中)
  • Ephemeral Anchors:臨時錨點輸出(提案中)
  • Cluster Mempool:新的 mempool 架構(開發中)

未來發展

Pinning 問題的完整解決需要多項協議改進配合。Cluster Mempool 重構 有望提供更好的 package 費率計算和 RBF 規則,進一步緩解 pinning 攻擊。

已複製連結
已複製到剪貼簿