最近( 2023 年 10 月下旬)比特币社区爆出闪电网络可能存在重大缺陷,用户可以构造一种攻击手法来偷钱,英文名叫“lightn ing 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可以支付给bob 0.1btc ,这样状态通道的状态就变成了 0.4btc 属于 alice , 0.7btc 属于 bob ,(alice :0.4btc ;bob: 0.7btc )。并且这样的交易是不需要到比特币主链上打包,只是发生在alice和bob之间的记账,这就叫支付通道。

alice和bob之间可以任意转账,而不需要到主链结算,这就节省了大量的矿工费,并且可以实时到账,不再需要 10 分钟的区块确认。

但如果只能在两个人之间相互转账交易,那也没啥用。

2.bob 和 carol 之间也开通一个支付通道,初始状态是bob有 1.0btc ,carol 0btc ,记为 (bob:1.0btc ;car ol: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 耍赖,直接在比特币主链发起清算交易tx 1 ,声称自己还有 0.3btc ,而bob在和他的状态通道里只有 0.8btc 。

tx 1 这笔交易中有 0.3btc 是发给 alice 自己的地址(单签),这样alice就是试图将不属于自己的 0.3btc 偷为己有。

3 )因为 bob 没有拿到 carol 的收款回执,所以 bob 无法证明( alice ; bob )这个状态通道当中状态应该修改为( alice : 0btc ; bob : 1.1btc )

4 )一旦tx 1 在链上被打包,即alice真的偷到了 0.3btc 后,carol就会立刻在闪电网络里收下 0.3btc ,将收款回执发给 bob 。

5 )这样, alice 没有真实发出 0.3btc 给 bob ,而 carol 却真实收到了 bob 的 0.3btc 。所以 bob 被 alice 和 carol 合伙偷走了 0.3btc 。

6 )注意alice在主链上发起tx 1 偷币交易时,bob是有反制措施的,即向主链发起交易tx 2 证明alice在作弊,但因为bob没有拿到 carol 的收款回执,所以tx 2 这笔交易还是挺麻烦的,但理论上是可做到。

而alice在看到tx 2 后,就会再次使用更高矿工费的办法,重置tx 1 ,以诱使矿工打包tx 1 ,而拒绝tx 2 ,这就所谓的“替换交易(rep lacement )”。

7 )而目前开发者说,alice和carol的合谋,确实是可以让让bob的tx 2 在比特币主链矿工上看起来更难合法化,而想要更清楚地证明 tx2 是合法的,需要修改协议,并且对主链来说是一个软分叉,这就难了。

上述就是闪电网络循环替换交易攻击大致过程,具体的技术原理太复杂了,我也看不明白,我只是假设在网上看到的开发者发布的技术细节是正确的。

攻击的办法是两个夹一个,而交易所是天然的和所有用户开通了支付通道,所以交易所要遭殃了。

最后,我感觉这也不是啥大不了的事,软件哪有没bug的啊,会有办法修复的。

微信里点“发现”,扫一下二维码便可将本篇文章分享至朋友圈