零确认双花攻击
“零确认双花攻击”(Zero-confirmation double spending)是在交易尚未被区块链网络打包进区块(即“确认”)之前就进行的双花攻击行为。
✅ 一、什么是“零确认交易”?
在比特币等区块链网络中:
-
每一笔交易被矿工打包进区块并被其他节点认可后,称为“获得一次确认”;
-
“零确认交易”(Zero Confirmation Transaction)指的是:
- 交易刚刚广播到网络,但尚未被任何区块打包进去;
- 处于“待确认”状态。
许多商家,尤其是小额支付场景(如咖啡、便利店),为了追求交易速度,会在“0确认”阶段就放行交易。
✅ 二、什么是“零确认双花攻击”?
定义:
攻击者利用商家在交易未确认时交付商品的漏洞,同时广播两笔支出交易,试图让只有其中一笔被确认,达到“重复花钱”的目的。
✅ 三、零确认双花攻击的步骤
- 攻击者A向商家S发起支付1 BTC的交易
Tx1
; - 同时,A向自己另一个钱包广播另一个交易
Tx2
,也花了那1 BTC; - 商家看到
Tx1
广播成功,但尚未确认; - 商家“信任”网络,交付商品;
- 网络最终只确认了
Tx2
(因为手续费更高、传播更快等原因); Tx1
被丢弃,商家没有收到 BTC,而攻击者既保留了币,又得到了商品;
=> 攻击成功,双花完成。
✅ 四、关键点:为什么这种攻击能成功?
条件 | 说明 |
---|---|
网络传播机制 | 交易之间存在传播时间差 |
商家未等待确认 | 只看到交易被广播就放行商品 |
攻击者控制交易结构 | 可以使用 RBF(Replace-By-Fee)或手动构造冲突交易 |
没有足够的防护机制 | 如未使用“监听所有节点”、“RBF 防护”等 |
✅ 五、RBF 与零确认双花的关系
- RBF(Replace-By-Fee) 是一种允许用户用更高手续费的交易替代原交易的机制;
- 攻击者可以利用 RBF,在交易未被确认前,发送更高手续费的替代交易,把前一笔支付“挤掉”;
- 所以,开启 RBF 的钱包更容易被用于发起零确认双花攻击。
✅ 六、如何防止零确认双花攻击?
防护方法 | 原理 |
---|---|
等待至少1确认再交付商品 | 最安全的方法,防止一切形式的双花 |
使用多节点监听 | 提高检测冲突交易的能力 |
检查交易是否为 RBF-enabled | 不信任可替换交易 |
使用支付通道(如闪电网络) | 不依赖链上确认 |
使用可信支付网关服务 | 例如 BitPay、OpenNode 等第三方平台承担风险 |
✅ 七、总结:零确认双花攻击与经典双花攻击的区别
类型 | 零确认双花攻击 | 经典双花攻击(如51%攻击实现) |
---|---|---|
是否已确认 | ❌ 未被打包入区块 | ✅ 已确认后再被回滚 |
是否需要51%算力 | ❌ 不需要 | ✅ 通常需要 |
实施难度 | ✅ 简单,技术门槛低 | ❌ 高,需要控制算力或网络分区 |
影响 | 一般小额欺诈 | 可造成重大损失 |