高級
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 攻擊。
已複製連結