最近(2023年10月下旬)比特幣社群爆出閃電網路可能有重大缺陷,用戶可以建構一種攻擊手法來偷錢,英文名叫「lightning replacement cycling attack」。
我讀了它的原理,中文名可翻譯成「閃電網路循環替換交易攻擊」。
它的攻擊原理如下。
首先解釋下閃電網路的工作原理:
1.alice和bob雙方開通一個支付通道,就是共同開通一個2-2簽署的地址,他們一人持有一把私鑰。
alice和bob分別往這個2-2簽名的地址裡充值0.5btc和0.6btc(金額可以任意選擇,我只是舉例),這兩筆儲值交易都是發生在比特幣主鏈上的,礦工是要確認的。這樣這個支付通道的初始狀態就是0.5btc屬於alice,0.6btc屬於bob,我們記為(alice:0.5btc;bob:0.6btc)。
這樣在這個2-2簽名地址裡,alice和bob就可以互相支付,例如alice可以支付給bob0.1btc,這樣狀態通道的狀態就變成了0.4btc屬於alice,0.7btc屬於bob,(alice:0.4 btc;bob:0.7btc)。而這樣的交易是不需要到比特幣主鏈上打包,只是發生在alice和bob之間的記賬,這就叫支付通道。
alice和bob之間可以任意轉賬,而不需要到主鏈結算,這就節省了大量的礦工費,並且可以實時到賬,不再需要10分鐘的區塊確認。
但如果只能在兩個人之間互相轉帳交易,那也沒啥用。
2.bob和carol之間也開通一個支付通道,初始狀態是bob有1.0btc,carol0btc,記為(bob:1.0btc;carol:0btc)。
3.這時,你看alice和bob之間有支付通道,bob和carol之間也有支付通道。
那alice就可以透過bob,向,carol支付比特幣。
付款過程如下:alice向carol支付0.1btc,事實在上述兩個支付通道發生如下的狀態變更
1)alice和bob之間的狀態變更為(alice:0.3btc;bob:0.8btc)
2)bob和carol之間的狀態變更為(bob:0.9btc;carol:0.1btc)
3)這樣就完成了從alice到carol轉0.1btc的交易。
4.當越來越多的雙方打開支付通道,並且實現了相互聯通,就形成了一個支付網絡了,我們稱之為閃電網絡。
當然詳細的技術解釋太複雜了,上述就是最精簡的解釋。
以下介紹下閃電網路循環替換交易攻擊的大致過程,詳細的技術細節我也講不明白,那些opcode、合約和函數有點複雜。
1.攻擊者是alice和carol兩人,這兩人合謀去攻擊bob,bob是受害者。
2.alice向carol支付0.3btc。
1)初始狀態通道如下(alice:0.3btc;bob:0.8btc)和(bob:0.9btc;carol:0.1btc)
2)alice和bob之間的狀態通道應該變更為(alice:0;bob:1.1btc)
3)bob和carol之間的狀態通道應該變更為(bob:0.6btc;carol:0.4btc)
3.alice和carol決定合夥騙bob的0.3btc
1)carol一直不去認領確認自己收到了來自alice支付的0.3btc,即carol不將閃電網路的收款回執訊息發給bob。這樣就導致bob也無法在閃電網路內將alice的0.3btc合法的納為己有。
2)到了一定時間,alice耍賴,直接在比特幣主鏈發起清算交易tx1,聲稱自己還有0.3btc,而bob在和他的狀態通道裡只有0.8btc。
tx1這筆交易中有0.3btc是發給alice自己的地址(單簽),這樣alice就是試圖將不屬於自己的0.3btc偷為己有。
3)因為bob沒有拿到carol的收款回執,所以bob無法證明(alice;bob)這個狀態通道當中狀態應該修改為(alice:0btc;bob:1.1btc)
4)一旦tx1在鏈上被打包,即alice真的偷到了0.3btc後,carol就會立刻在閃電網絡裡收下0.3btc,將收款回執發給bob。
5)這樣,alice沒有真實發出0.3btc給bob,而carol卻真實收到了bob的0.3btc。所以bob被alice和carol合夥偷走了0.3btc。
6)注意alice在主鏈上發起tx1偷幣交易時,bob是有反制措施的,即向主鏈發起交易tx2證明alice在作弊,但因為bob沒有拿到carol的收款回執,所以tx2這筆交易還挺麻煩的,但理論上可做到。
而alice在看到tx2後,就會再次使用更高礦工費的辦法,重置tx1,以誘使礦工打包tx1,而拒絕tx2,這就所謂的「替換交易(replacement)」。
7)而目前開發者說,alice和carol的合謀,確實是可以讓讓bob的tx2在比特幣主鏈礦工上看起來更難合法化,而想要更清楚地證明tx2是合法的,需要修改協議,並且對主鏈來說是一個軟分叉,這就很難了。
上述就是閃電網路循環替換交易攻擊大致過程,具體的技術原理太複雜了,我也看不明白,我只是假設在網路上看到的開發者發布的技術細節是正確的。
攻擊的辦法是兩個夾一個,而交易所是天然的和所有用戶開通了支付通道,所以交易所要遭殃了。
最後,我覺得這也不是啥大不了的事,軟體哪有沒bug的啊,會有辦法修復的。