最近(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.4btc;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的啊,会有办法修复的。