高級
Data Loss Protection 數據丟失保護
了解閃電網路的數據丟失保護機制,如何在節點數據損失後安全恢復。
10 分鐘
數據丟失的風險
閃電節點需要保存每個通道的最新狀態。如果丟失數據並使用舊狀態,可能會被視為作弊而損失資金。 Data Loss Protection(DLP)協議幫助安全恢復。
功能位: option_data_loss_protect(bit 0/1)現在幾乎是必需的功能。
DLP 協議原理
channel_reestablish 訊息:
重連時交換:
channel_reestablish {
channel_id,
next_commitment_number, // 我期望的下一個承諾編號
next_revocation_number, // 我期望的下一個撤銷編號
your_last_per_commitment_secret, // 你最後給我的 secret
my_current_per_commitment_point // 我當前的承諾點
}
正常情況:
A 發送:next_commitment=100, next_revocation=99
B 發送:next_commitment=100, next_revocation=99
→ 雙方同步,繼續正常操作
數據丟失檢測:
A(丟失數據):next_commitment=50, next_revocation=49
B(正常): next_commitment=100, next_revocation=99
B 檢測到:A 的狀態比我知道的舊
→ 觸發 DLP 恢復流程 恢復流程
DLP 恢復選項: 選項 1:對方協助關閉 1. 對方發送:your_last_per_commitment_secret 2. 丟失方可以驗證這是自己的 secret 3. 對方發起協商關閉(mutual close) 4. 雙方按最新餘額分配資金 這是最好的結果:沒有懲罰,費用最低 選項 2:對方強制關閉 1. 對方廣播自己的承諾交易 2. 丟失方等待 to_remote 輸出(無時間鎖) 3. 使用 static_remotekey 可以直接花費 結果:丟失進行中的 HTLC,但主餘額安全 最壞情況:丟失方廣播舊狀態 如果丟失方錯誤地廣播舊承諾交易: • 對方持有撤銷密鑰 • 可以執行懲罰交易 • 丟失方損失全部資金! DLP 的目的就是防止這種情況
Static Remote Key
static_remotekey 增強: 傳統問題: • to_remote 輸出的密鑰每次承諾都變化 • 丟失數據 → 不知道當前密鑰 → 無法花費 static_remotekey 解決方案: • to_remote 輸出始終使用固定的 payment_basepoint • 只需要種子就能恢復密鑰 • 即使數據丟失也能取回資金
SCB 備份
Static Channel Backup 配合 DLP 使用,提供通道恢復資訊。
瞭望塔
即使你離線,瞭望塔也能檢測作弊並執行懲罰。
關鍵提醒: 永遠不要從備份恢復後直接嘗試使用通道!應該讓對方關閉通道。
相關資源
- • 通道備份
- • Static Remote Key
- • 瞭望塔
已複製連結