什么是 Transaction Replacement Attack?
Transaction Replacement Attack 是指有人先发送加密货币付款,然后在该交易被确认之前,迅速广播一个修改了细节的不同版本。目的是欺骗接受第一个待处理付款的人。可以把它想象成在收银台承诺付现金,然后趁收银员不注意回去把钞票换成别的。
如果交易显示为待处理,就可以安全地当作已付款。并非如此。在矿工将其打包进区块之前,交易仍可能被替换,Transaction Replacement Attack 会改变结果。
Transaction Replacement Attack 是如何运作的
简要流程,结合一个简单结账场景。
- Step 1: 攻击者以低手续费向你付款。你看到交易处于待处理状态,认为没问题。
- Step 2: 在确认之前,攻击者构造一个新的交易,花费相同的资金,通常通过 Replace by Fee (RBF) 或在账户模型链上用相同 nonce 重新提交实现。
- Step 3: 替代交易支付更高的手续费,对矿工更有吸引力,因此会被打包,而第一笔交易被丢弃。
- Step 4: 在严重的 network congestion 时更容易发生,因为矿工会优先选择更高手续费的交易。
- Step 5: 你在交易处于待处理时就交付商品或服务,等链上确认替代交易后就会没有收到款项。
这就是手法。简单、有些欺骗性,但可以防范。
为什么 Transaction Replacement Attack 很重要
无论你是在运行收银系统还是只是给朋友转账,下面说明为什么你应该关注。
- Benefit: 替换机制允许诚实用户通过提高手续费加快卡住的付款,这在需要立即确认时很有用。
- Perspective: 同样的工具在你信任待处理付款以换取商品或访问权时也可能被用来对付你。
- Relevance: 你会在销售点、NFT 铸造、OTC 交易以及任何接受待处理交易的场合看到此类情况。
使用能清晰标记可替换交易并显示确认次数的 cryptocurrency wallet。对于付款,在交付重要物品之前要求多次确认。
Transaction Replacement Attack 的主要特征
用通俗的话说,特点如下:
- Timing: 发生在确认之前,当交易仍在内存池中漂浮时。
- Incentives: 更高的手续费或更诱人的条件会促使矿工或验证者打包替代交易而非原始交易。
- Signals: 有些交易被标记为可替换,账户模型链允许使用相同 nonce 进行替换。
- Target: 接受待处理付款的商家或对等方是薄弱环节。
变体
相同主题,不同链上机制略有差异。
- RBF: 发送方将付款标记为可替换,随后广播支付更高手续费的版本,改变输出或接收方。
- Nonce swap: 在账户模型链上,用户使用相同 nonce 但更高 gas 重新提交交易,从而取消或更改之前的意图。
- Refund trick: 发送方先向商家付款,然后替换待处理交易为将资金发回其控制地址的交易。
在你的节点标记该 transaction as settled 之前,不要把付款当作最终完成。获得足够确认后,Transaction Replacement Attack 就不再有效。
示例
一家咖啡店接受了点拿铁的待处理付款,买家立刻广播了一个支付更高手续费的替代交易将资金发往其他地址,咖啡师后来才发现买家在 exploiting 可替换性。
趣闻
提高手续费的做法最初是为帮助诚实用户挽救卡住的交易而引入,远早于它被用于欺骗。像许多技术手段一样,这件事的好坏取决于谁掌握着密钥。
总结
简短版:不要在可能未收到款的情况下交付商品。等一到两个区块确认后再放心。
