电脑网络 · 2019年10月11号 0

粉尘攻击

区块链技术迅猛发展的同时,区块链网络的安全问题也越来越突出,比特币在价格飙升的过程中,也出现了多次重大安全事件,粉尘攻击就是比特币网络的威胁之一。

粉尘攻击,其实就是在比特币网络中有很多交易金额极少,手续费极低甚至是免费的交易,造成了比特币网络的拥堵。可能大家会奇怪,比特币转账都是要收取手续费的呀,怎么会有免费的?其实在比特币交易手续费的设置规则里是存在免手续费的情况。

比特币区块链由一个个区块组成,数据通过载体形成文件,永久记录在比特币网络上,这个载体就叫区块,每一个区块就是一个数据库,无数的区块链接起来,就形成了区块链。

比特币的账本是记在区块里的,从创世区块开始,每十分钟就增加一个区块。区块里记录的是一条条的交易数据,主要形式是——“某地址转账多少比特币到另一个地址”。比特币这种格式的账本,被称之为UTXO格式,它是流水账一样的,正是由于比特币这种记录交易历史过程的记账方式,使比特币的记账可以回溯历史,跟踪每一笔转账。

比特币这种特别的记账方式,也有它特别的手续费计算方法。传统记账方法,就是转账数额大,需要的手续费就多。但是,比特币是按照交易字节数来收取手续费的。

下面举例子:

情况一:A地址转给B地址1个btc;

情况二:A地址转给B/C/D地址各0.0001btc;

如果按照传统机构按交易金额百分比的形式收取,情况一的手续费肯定是要高于情况二的手续费。但是在比特币网络中,情况二转出的地址多,而每一笔交易,无论金额大小,交易的字节数都是差不多的,所以情况二交易数据的字节数要比情况一的多,所以情况二的手续费要远高于情况一。而情况二,恰恰是造成粉尘攻击的原因。

在比特币交易手续费的设计中,每一个交易都会分配一个优先级,这个优先级是由币龄、交易的字节数和交易的数量来决定的,交易数量越大、币龄(这些币在区块中存在的时间)越高优先级就越高,就越有机会免交易手续费。

比特币的每笔交易手续费默认最少是0.0001比特币的,如果你转账的金额太小或者是刚刚挖出来不久的新币(币龄很小),那么必须要付手续费。如果你转出的金额少于0.01比特币,也必需付0.0001比特币手续费。如果你需要大量的小额比特币转账,又想免费转出,这时候你可以加一个数额大的、币龄高的比特币金额,就会将平均优先级提高,从而可以免费转出比特币。

所以,粉尘攻击一方面是比特币的设计规则有漏洞,导致有人可以利用,允许极少金额的交易。另一方面,有人频繁恶意地进行小额交易,才会造成比特币网络的拥堵。因为,比特币的交易区间只有1M的大小,所以,那么多手续费极低甚至免费的小额交易,拥挤在比特币网络,必然会导致比特币网络的拥堵,而粉尘攻击最大的危害就是导致比特币网络拥堵。