Antoine Riard最近披露的闪电网络漏洞分析
最近围绕 Antoine Riard 最近披露的闪电网络漏洞引起了很多争议。许多人声称天塌下来了,闪电从根本上被打破了,这与事实相去甚远。我认为部分问题在于,首先,人们并不真正理解这个漏洞是如何工作的,其次,许多人不理解这个单独的漏洞如何与闪电网络上已知解决方案的其他已知问题重叠。
首先,让我们仔细研究并尝试了解漏洞本身。当闪电支付通过网络进行路由时,需要了解的关键一件事是退款失败支付的时间锁如何工作。最靠近接收方的跃点的时间锁为“x”,返回发送方的每个跃点都具有“x 1”、“x 2”等之一。当您从接收方返回发送方的每一跳时,时间锁会逐渐变长。这样做的原因是,如果付款到达接收方,但某些问题阻止原像一路传播回发送方,则停止的那一跳有时间在链上强制执行它,并将原像放在那里前一跳需要确认付款。否则,中间的某个人,在发生故障的地方,可以让他们的传出跳跃通过原像索取资金,而转发给他们的跳跃则通过他们的退款路径索取资金,并让那个处于中间的人不走运失去资金。
替换循环攻击是一种复杂的方法,旨在尝试并准确地实现不期望的结果,目标节点通过让传出跳点通过成功交易索取资金而损失金钱,而传入跳点通过退款交易索取资金。这需要停止受害节点,并防止他们在一侧看到成功交易中的原像,直到另一侧的时间锁到期,以便他们可以在那里要求退款。
这需要一个非常有针对性和复杂的游戏来操纵受害者的内存池。我们来看看这里涉及的实际交易结构。您有承诺交易,它是代表闪电通道状态的主要交易。它为通道的每一侧都有一个输出,代表完全由一个成员或另一个成员控制的资金,并且在路由过程中为每个 HTLC 提供输出。这些输出是我们关心的。每个 HTLC 输出可以随时与来自接收器的原像一起立即使用,也可以在时间锁到期后退款。
该攻击要求恶意方或两个共谋方在受害者节点的两侧都有一个通道来路由支付。因此,受害者鲍勃与攻击者爱丽丝和卡罗尔有一个通道,并且付款从卡罗尔路由到鲍勃再到爱丽丝。现在请记住,Alice 和 Bob 之间的时间锁退款路径将在 Carol 和 Bob 之间的退款之前到期并生效。
攻击者通过 Bob 进行付款,然后 Alice 在收到原像时将拒绝向 Bob 发送原像以完成付款。Bob现在要做的就是等到自己和Alice之间的时间锁定窗口到期,并在时间锁定窗口到期之前去广播通道承诺交易和退款交易以使其得到确认。然后,Alice 要做的就是花费原像交易来领取与通道无关的输出的资金,然后将原像成功交易中的第二个输入加倍。这里的目标是从内存池中驱逐 Bob 的超时交易,同时也驱逐原像成功交易,这样 Bob 就看不到它。如果他这样做了,他将了解原像,并且可以在卡罗尔的超时交易有效之前索取他与卡罗尔的频道中的资金。
每次鲍勃与爱丽丝重新广播他的超时交易时,爱丽丝和卡罗尔都必须在一致的基础上执行此操作,直到区块高度超过卡罗尔的超时交易有效的位置。然后,他们可以在 Alice 这边提交成功交易,在 Carol 这边提交超时交易,然后让 Bob 承担损失他正在路由的付款价值的损失。
这个问题有两个方面。首先,受害者的比特币核心节点必须有针对性,以确保原像成功交易在任何时候都不会传播到其闪电节点可以获取原像的内存池中。其次,如果 Alice 用于驱逐原像交易的第二笔交易被确认,Alice 就会产生成本(记住,这个想法是用原像替换超时交易,以便从内存池中驱逐,然后用原像交易替换原像交易)第二个是双花原像交易中的额外输入)。这意味着每次鲍勃重新广播他的超时交易时,爱丽丝都必须支付更高的费用才能重新驱逐它,而当这一点得到确认时,她实际上会产生费用。
因此,Bob 可以通过定期以更高的费用重新广播他的超时交易来迫使 Alice 承担巨大的成本,这意味着如果支付 HTLC 输出的价值不明显高于 Alice 可能承担的费用,那么这种攻击在经济上不值得实施。通过改变 HTLC 成功和超时事务的构建方式,也可以完全防止攻击。通过使用 SIGHASH_ALL 标志,这意味着签名提交到整个交易,并且如果最微小的细节(例如在本次攻击所需的原像交易中添加新输入)发生更改,签名将变得无效。这不适用于使用锚点输出的当前版本的闪电通道,但它可以完全解决问题。Peter Todd 还提出了一个新的共识功能,可以完全解决这个问题,本质上是反向时间锁,交易将在一定时间或区块高度后变得无效,而不是在之后变得有效。然而,我认为没有必要走那么远。
只需定期重新广播您的交易并稍微增加一点费用,就可以极大地缓解攻击,但也有许多动态因素使得它无论如何都不是一个严重的问题。首先,如果您不是路由节点,那么这并不是一个严重的问题。因此大多数最终用户不会受到这种攻击。其次,节点不允许任何随机人向它们打开通道的原因有很多。大型节点对与谁对等的选择非常严格,因为未有效或专业管理的随机通道会在未使用的通道中以沉没或浪费资本的形式产生成本。因此,任何能够成为这次攻击的重要目标的大型节点都不是微不足道的,甚至首先要连接起来,更不用说通过多个通道连接到它们来首先完成攻击了。最后,正如我过去所写的,网络上可能发生的其他不相关攻击已经需要对节点如何选择处理它们可以转发的 HTLC 进行过滤和限制。即限制他们将转发的付款规模、在任何给定时间允许的付款数量等。因此,即使您可以打开一个具有值得攻击的节点的通道,随着网络的发展,也会通过标准和过滤器进行更多思考首先决定是否转发付款。
总体而言,这是一个合法的问题和可能的攻击,但无论是直接缓解措施,还是攻击如何与其他问题的长期解决方案相互作用,这都不是一个无法解决的问题。这是一个合法的问题,将其视为纯粹的 FUD 并不是一个准确的反应,但声称天塌下来并且闪电网络作为协议注定要失败就远远夸大了这个问题。
时间会前进,我们会遇到问题,我们会在问题出现时解决它们。就像我们一直以来那样。