闪电网络有资金风险?一文解读其原理和处理方法
原创 | Odaily星球日报
作者 | 南枳
引言
10 月 20 日, Bitcoin Core 核心开发者 /dev/fd0 在 X 平台宣布, 将停止参与闪电网络及其实施的开发,包括协调处理协议级安全问题 。
/dev/fd0 表示,每个比特币节点都有自己的内存池。交易由对等节点转发。如果闪电网络节点用于打开通道并接受 HTLC 转发,那么很容易受到 替代循环攻击 (Replacement Cycling Attacks)。
该开发者所指的“替代循环攻击”是什么,其具体实现途径如何,Odaily星球日报将于本文揭示。
闪电网络
比特币网络的 TPS 仅约为 7 ,并且手续费高昂,为解决小额支付的需求,闪电网络应运而生。
闪电网络( Lightning Network)是一种针对比特币和其他加密货币的第二层扩展解决方案,旨在解决加密货币网络的可扩展性和交易速度问题。
其实现原理可简化为:
-
交易双方 A 与 B 建立了一个“交易通道”(实际上是个多签钱包)
-
A 与 B 分别往里面充钱 A1 和 B1 (此步上链)
-
A 与 B 在链下发生任意笔交易,A 净转出额 X(例如 A 向 B 转账 100 次 1 元,B 向 A 转账 99 次 1 元,最终 A 净流出 1 元)
-
将 A1 -X 与 B1 +X 的交易更新上链
通过以上流程,不论 A、B 在链下进行多少次交易,都只要支付两笔上链费用,并节约了大量的时间。
哈希时间锁合约(HTLC)
以上介绍的形式限于 A 和 B 之间有直接的交易通道,为跨通道支付而出现了中继节点, 中继节点中转两者交易,以便跨通道进行支付 ,而中继节点可以收取小费。
但这面临着一个问题: 需要确保每个通道内每个参与者都是诚实守信的 ,通过多通道链接是安全的。
因而出现了 HTLC(Hash Time-Lock Contract、哈希时间锁合约),一笔带有 HTLC 的支付事务可简化为:
-
A 准备一个暗号 R,并计算其哈希值 H
-
A 设定一个时限 T
-
A 向 B 发送一笔带有 HTLC 的支付事务,仅当符合以下两个条件时交易才会最终成立
-
B 回答出暗号 R(通过 H 验证)
-
B 回答的时间在 T 之内(例如 10 个区块内给出答案)
-
若 B 不知道暗号,或者回答超时,则资金退回给 A
正常交易流程
通过上述的 HTLC,一笔涉及中继节点的支付流程如下:
-
最终的接收者 C 向发送资金者 A 提供暗号
-
A 用哈希值 H 发起 HTLC 支付(请注意, 此时资金并未到 B 手中 )
-
B 接收到支付信息,向 C 用哈希值 H 发起 HTLC 支付
-
C 为了接收资金,回答暗号,收到资金。B 此时也知道了暗号
-
B 用暗号获取 A 发起的支付,收到资金,交易完成
涉及三者的流程如上,中间也可以多加入几个中继节点,而支付模式仍保持不变,通过链式发送支付到最终接收者,然后再反向传播暗号至初始的中继节点,最终完成交易。
而中继节点如果迟迟没有收到暗号 R (下家不做解答,时限由中继节点自行判断) ,则中继节点可以选择关闭通道, 若成功上链, 则 B 发起的支付将“失效”,没有资金损失。
循环替代攻击
回到 HTLC 的基本原理中,除了回答暗号外,中继节点还需要达成另一条件“中继节点回答的时间在 T 之内”,而恶意攻击者即是瞄准了该点进行攻击:
-
A 和 C 恶意串通,受害人为中继节点 B(B 要求下家 3 个区块内回答)
-
A 向 B 发起支付(假设此时区块高度为 1000),要求在 区块 1020 前回答
-
B 向 C 发起支付(区块高度 1005)
-
区块高度 1008 时,B 见到 C 还不回答,决定关闭通道,将在区块 1009 生效
-
C 发起高 Gas 的交易①(区块 1008),使 B 发起的交易无法进入内存池
-
C 发起高 Gas 的交易②(区块 1009),B 仍无法进入内存池
-
C 无限循环操作,直到区块 1020 ,给出暗号 R,提取资金
B 尽管获取了暗号,但已没有时间回答 A 发起的支付,资金退回给 A,而向 C 的支付又已经成立,最终“循环替代攻击”实现 。此外,A、C 也可以通过串通,循环攻击 B 的关闭交易而实现双花。
结语
尽管存在以上攻击途径,但并不意味着攻击者就可以为所欲为,任意盗取闪电网络中的资金,原文中作者也提出了五种处理办法,如本地内存池和事务中继流量监控、矿工内存池监控等。
前途是光明的,道路是曲折的,今年比特币网络上也诞生出了 Ordinals 、BRC-20、Taproot Asset 等一系列新事物,问题虽存在,但持续的发展终将能解决问题。