Lightning-Network

失敗的交易能否找出哪個 Channel 已用盡?

  • January 20, 2020

根據此 LND PRTemporaryChannelFailure中的資訊,可以確定an 的發送者:

在許多情況下,發送方不可能確定一對中的兩個節點中的哪一個對故障負責。在這種情況下,我們現在進行雙向懲罰。這不會傷害對中的好節點,因為只有它與壞節點的連接會受到懲罰。

所以我對這條評論的理解是,可以很容易地辨識通道,或者至少是一個耗盡通道旁邊的節點。真的那麼容易嗎?因此,是否可以TemporaryChannelFailure將通道耗盡總是分配給兩個節點或一個通道?

我一直認為,錯誤根本無法分配給節點或通道。

這可能會簡化一些論文的工作,例如J Herrera-Joancomarti 等人的 On the Difficulty of Hiding the Balance of Lightning Network Channels。,或打開新的攻擊向量。

編輯:更多連結以供進一步研究

如果有人想給出更深入的答案或在此基礎上進行研究,這裡有一些指向lnd客戶端 github 程式碼庫中程式碼的連結:

據我了解(但我沒有仔細檢查程式碼)答案是肯定的。洋蔥中的錯誤消息似乎以某種方式加密,只有洋蔥的原始發送者才能解密它。由於還必須填充錯誤以保持恆定長度的錯誤洋蔥,因此用於發送洋蔥的密鑰派生方案是一種重用。從這個意義上說,錯誤消息的接收者解開所有信封,因此應該知道錯誤來自哪個節點。

當中間或最終節點(預期接收者)想要發送錯誤消息時,它們會創建一個包含(1)錯誤消息的錯誤包;(2) 填充以隱藏長度和 (3) 使用密鑰驗證數據包的 HMAC um。然後,這個出錯的節點會生成一個密鑰,該密鑰ammag用於生成一個偽隨機流,然後使用 XOR 將其應用於錯誤數據包以對其進行模糊處理。update_fail_htlc然後使用包含失敗消息的錯誤消息發送此錯誤數據包temporary_channel_failure(此失敗消息用於通道資金不足或飛行中的 htlc 過多的情況)。

然後,這個出錯的節點會將這個錯誤數據包轉發給將 htlc 轉發給它的節點。中間節點儲存來自前向路徑的共享秘密,並在每一跳期間重複使用它來混淆任何相應的返回數據包。沿著返迴路徑的每一跳都會重複混淆步驟,生成自己的ammag,生成偽隨機字節流,並在返迴轉發之前將結果應用於返回數據包。錯誤消息包括id讓對等方知道錯誤消息被引用到的 htlc。

當錯誤消息到達源節點時,它能夠檢測到該錯誤消息是由它自己使用的,id因為它是創建它的那個。當源節點接收到與其發起的傳輸匹配的錯誤消息時,它會為路由中的每個躍點生成ammagum密鑰。然後,它使用每一跳的密鑰迭代地解密錯誤消息,並使用每一跳的ammag密鑰計算 HMAC um。因此,源節點可以通過將 hmac 欄位與計算的錯誤數據包的 HMAC 進行匹配來檢測錯誤消息的發送者。

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