聊聊粉尘攻击Dust Attack
September 24th, 2023

什么是粉尘攻击?

粉尘攻击是指恶意行为者发送一小量比特币(被称为"粉尘")到一个或多个特定的比特币地址,为追踪该等地址的所有者、破坏比特币网络或进行其他恶意行为。

我们在《为什么铭文是546聪》里面对粉尘攻击也有所讨论。

粉尘攻击的类型

粉尘攻击的类型常见有三种:跟踪型、网络破坏型以及交易费攻击。

跟踪型粉尘攻击根据分布广泛的粉尘交易进行资金追踪,旨在关联和识别比特币钱包,并分析钱包的交易行为。

网络破坏型粉尘攻击是大批量发送大量的粉尘交易,试图"堵塞"比特币网络,造成网络拥挤,进而影响比特币网络的正常运行。

交易费攻击是因为交易的额度非常小,所以如果想把这些粉尘再次用于交易,那么必须要支付更高的交易费用(因为交易数据量大,费用相对也会大)。由于费用太高,这些小额度的比特币可能永远无法被使用。攻击者利用这个机制,以迫使接收者支付比交易额度更高的费用。

粉尘攻击的原理

当你创建比特币交易时,你是在创建一项指令,告诉网络你想将你的比特币从一个或多个比特币地址,转移到一个或多个不同的比特币地址。这项指令的数据大小取决于你引用的输入个数,而这输入就是你在这个交易中要花费的比特币份额。

如果你的地址收到了非常多的小额度比特币,比如一个“粉尘攻击”,那么在你使用这些“粉尘”

作为下一步交易的输入时,你必须在交易中提供这些输入的详细信息,因此,你的交易的数据大小会增加,需要支付的交易费用也会随之增加。尽管你的交易额度很小,但由于输入的“粉尘”较多,交易数据的大小将会急剧增加,从而提高了交易的费用。

一个粉尘攻击的实例

这个是一个特定的比特币交易的详细视图。

这是一个低费用的交易,网络拥堵而暂时卡在了mempool(由待处理的交易组成的池子)中。然而,如果有人尝试通过发送大量很低的费用的交易来“堵塞”网络,这种行为的影响通常是有限的。因为矿工在确认交易时,会优先选择那些付费较高的交易(以获得更高的报酬),所以这些低费用的交易可能需要等待比较长的时间才会被确认。

然而,这并不完全意味着这些低费用的交易会"永远"困在mempool中。比特币网络的交易拥堵情况是有周期性的,较空闲的时候(比如夜间或周末),也有可能会有矿工去处理这些低费用的交易。但正确的处理方式还是,如果你需要发送一个交易并希望它能在预期的时间内被确认,那么需要设定一个合理的费用来激励矿工进行处理。

虽然如果一个交易包含了很多小额输入(比如被粉尘攻击的结果),那么这个交易可能需要很多空间,导致交易费用的增加。但是大部分现代钱包都有对付粉尘攻击的策略,包括设定最小接收金额,或者对于小额度输入实行合并处理等。

粉尘交易费攻击的详细解释

当你创建比特币交易时,实际上是在创建一项指令,告诉网络你想将你的比特币从一个或多个比特币地址,转移到一个或多个不同的比特币地址。这项指令的数据大小取决于你引用的输入数量。一个输入就是你在这个交易中想要花费的比特币份额,这些份额之前被发送到你的地址。

所以,假设你的地址接收到了大量的"粉尘"交易--比如,你有1000个只收到0.00001比特币的输入--那么,现在假设你想要创建一个交易,这个交易使用这些粉尘,你必须在你的交易中引用这1000个输入。这个交易的比特大小将会很大,因为你需要为每个输入提供详细的信息,包括每个输入所引用的先前的交易,以及先前交易的其他一些信息。

比特币交易的费用并不是基于你要转移的比特币的数量,而是基于交易数据的大小。因此,尽管你可能只是想要发送一个很小的总量,如果你需要引用很多小额输入,你的交易就会变得很大,导致需要支付较高的费用。

在实际情况中,大部分电子钱包会自动为你处理这些细节,它们会在创建一笔交易时,优先选择那些会使你支付较少交易费的输入。为此,你的钱包可能会选择不使用粉尘交易,除非你没有其它选择,或者这些粉尘的累积量已经足够大,值得你支付高昂的交易费用。

但是,技术上来说,未确认的交易的输出(UTXO)在技术上是可以被再次用作新交易的输入,但这种交易被称为链上交易(chained transaction),它本身也就变成了未确认的状态,因为它依赖于还未被确认的交易。许多钱包软件和比特币服务,为了避免这种可能导致问题的链上交易,通常默认标记正在mempool中的交易UTXO(即还未被确认的交易)是不可用的。

如果你的钱包未对此做特别处理,而你试图将mempool中的交易UTXO作为输入,创建新的交易,那么,你的这个新交易需要等待其所有输入被确认,也就是等待那个初次交易被矿工取出mempool,放入新区块并被网络确认,才能被网络确认。

这可能会造成一种情况,即后续的交易因为输入的交易未确认而无法被确认,直到那个低费用的粉尘交易被确认的情况发生。因此,处于这种情况的用户通常需要等待,或者使用技术比如Replace-By-Fee(通过增加费用来替换之前的交易)或Child-Pays-For-Parent(通过创建一个新的交易,支付足够的费用来包含未确认交易和新交易)来试图加速交易的确认。

如何防范粉尘攻击

对于个人用户,你可以定期清理你的钱包中的“粉尘”,或者使用具有防“粉尘”攻击功能的钱包。

定期清理:当你的钱包中存在大量小额度比特币(即“粉尘”)时,你可以定期创建一笔交易,将这些“粉尘”组合起来发送到另一个你拥有的地址。尽管你需要支付一些交易费用,但在网络相对空闲、交易费用相对较低的时候进行清理,可以最大限度地降低成本。

选择防“粉尘”钱包:有些钱包提供了防“粉尘”攻击的功能,可以帮助你过滤或者拒绝接收小额度的比特币。你可以在选择钱包时优先考虑这类功能的钱包。

对于公司和大的比特币服务提供商,可以考虑使用分层对冲策略,将客户的比特币放在不同的地址,隔离大额交易和小额交易,从而最小化“粉尘”攻击的影响。

总的来说,尽管粉尘攻击对于比特币网络和用户可能会带来一些麻烦,但通过一些策略和方法,我们可以有效地防粉尘攻击。市场检查交易时候的输入输出也助于你免于粉尘攻击。

Subscribe to DrJingle 金狗博士
Receive the latest updates directly to your inbox.
Nft graphic
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from DrJingle 金狗博士

Skeleton

Skeleton

Skeleton