很多时候这些攻击都是可以人为避免的…
昨日,小白在《我找到了攻击比特币的方法,但我做不到…》一文中,详细说到了51%双花攻击的流程。
除了发动51%攻击,还有其他方法吗?
小白再和大家谈一下其他类型的双花攻击。

一、芬尼攻击
芬尼攻击主要是通过控制区块的广播时间,攻击对象是接受0确认(未确认)的商家。
举个例子,攻击者挖到了一个区块,这个区块包含了一笔交易信息。
此时,他把币从地址1转到地址2,两个地址都是攻击者本人的。
不过,攻击者并没有广播这个区块,而是马上找到了一个商家。
接下来,他用地址1,把币转给了商家的地址3。
发给商家的交易广播出去后,如果这个商家接受了0确认,也就是没有确认的话,攻击者就会把之前挖到区块广播出去。
这样一来,之前从地址1发送到地址2的那笔交易就会被前置。
通过控制区块的广播时间,就完成了攻击。
所以,针对这种情况,不能为了节省时间而接受0确认,应该及时确认,降低资金回滚的风险。

二、种族攻击
这种攻击主要是通过控制矿工费来实现的。
举个例子,攻击者把一定数量的币发给一个商家,我们把它称为交易A。
如果商家接受0确认,那么攻击者就会把币发送给自己的另一个钱包,我们把它称为交易B。
在发送给自己的交易B中,攻击者加了较高的矿工费,从而提高了矿工的打包概率。
如果发送给自己的交易B被提前打包,会导致交易B的长度超过交易A,交易A上的交易就会回滚到交易B。
对于攻击者来说,只是增多了矿工费就实现了一次双花攻击。
当然,这种方式也不是百分之百能成功,不过,我们在交易前也应该。

三、Vector76攻击
这种攻击比前面两次的要高级多了,因为Vector76攻击是种族攻击和芬尼攻击的组合。
Vector76攻击又叫“一次确认攻击”,也就是交易即便有了一次确认,交易仍然可以回滚。
发生Vector76攻击的前提是,商家的电子钱包满足这3点。
1、商家钱包接受一次确认就进行支付;
2、钱包接受其它节点的直接连接;
3、钱包使用静态IP地址的节点。
具体的操作也和大家说一下。
举个例子,攻击者先控制了两个节点,节点A是直接连接到电子钱包的这个节点,而节点B与其他节点相连。
接下来,攻击者进行了两笔交易。
攻击者把一定数量的币发给一个商家,我们把它称为交易A。
攻击者再把这笔交易交易发送给自己的钱包,我们把它称为交易B。

和上面说的种族攻击一样,在发送给自己的交易B中,攻击者加了较高的矿工费,从而提高了矿工的打包概率。
同时,攻击者并没有把这两笔交易广播到网络中去。
然后攻击者开始在交易1所在的分支上进行挖矿,这条分支我们命名为分支1。
攻击者挖到区块后,并没有广播出去,而是同时做了两件事:在节点A上发送交易1,在节点B上发送交易2。
由于节点A只连接到电子钱包的节点,所以当电子钱包节点想把交易1传给其它对等节点时,连接了更多节点的节点B,已经把交易2广播给了网络中的大部分节点。
于是,从概率上来讲,交易2就更有可能被网络认定为是有效的,交易1被认定为无效。
交易2被认为有效后,攻击者立即把自己之前在分支1上挖到的区块,广播到网络中。
这时候,这个接受一次确认就支付的钱包,会立马将币支付给攻击者的钱包账户。
然后攻击者立马卖掉币,拿到现金。
由于分支2连接的更多节点,所以矿工在这个分支上挖出了另一个区块,也就是分支2的链长大于分支1的链长。
于是,分支1上的交易就会回滚,钱包之前支付给攻击者的交易信息就会被清除,但是攻击者早已经拿到钱。
「Vector76攻击」素材来自Odaily。

很多时候,这些有图谋的攻击着实令人防不胜防。
但小白认为,很多时候这些攻击都是可以人为避免的,比如我们在交易中可以多次确认,尽量使用动态IP节点,就能有效地预防这些攻击。
THE END