恶意矿工只需控制全网 20% 算力就能使比特币网络停止运转?研究机构 IC3 提出的 BDoS 攻击引起了众多区块链从业者关注。

原文标题:《新研究报告:全网 20% 算力就能攻击比特币网络?》
作者:Chaosmos

本文新增了荷兰代尔夫特理工大学博士后任之劼对此事的观点。

一份新研究报告认为,利用区块链拒绝服务攻击 (BDoS: Blockchain Denial of Service),恶意矿工只需要控制全网 20% 的算力就能使比特币网络停止运转。报告作者来自康奈尔大学和以色列理工合作成立的研究机构 IC3 (The initiative for cryptocurrencies and contracts)。

攻击方法?

攻击者挖出一个块,然后只公布区块头。研究者认为,这时候矿工有三个选择:一、不理这个区块头,继续挖主链;二、因为不确定块里有哪些交易,先挖一个空块;三、停止挖掘。

《20%算力便能使比特币网络瘫痪?一分钟了解BDoS攻击》

研究者认为,攻击者可以制造不确定性,让矿工停止挖掘。具体方法是:

《20%算力便能使比特币网络瘫痪?一分钟了解BDoS攻击》

如果矿工选择不理这个区块头,继续挖主链(防守块),那么攻击者就快速广播与区块头对应的完整块(攻击块)。因为点对点网络里每个节点的网络连通性不一致,有的节点会先收到攻击块,有的节点会先收到防守块。研究者认为,这会导致两组矿工博弈,主链分叉。

假设防守块 Bi 输掉,不被包含在主链中。这时,挖防守块的矿工损失掉一个区块收益。

挖进攻块 BA 的矿工,本来可以获得区块收益,但是攻击者可以不发送完整的 BA 块,让这个块不能上主链,这样挖进攻块 BA 的矿工也损失掉一个区块收益。

研究者得出的结论是,不管矿工挖防守块还是进攻块,攻击者都可以让矿工拿不到收益,所以矿工最好的选择就是关机不挖。所以,这个攻击可以让比特币网络停机。

行得通吗?

就这个问题采访了鱼池创始人神鱼

作为一个矿池,如果在只收到区块头的情况下,在没有验证交易合法性的情况下,我不会去跟着挖。因为如果这个区块是有问题的,在他后面跟着挖等于是浪费我的算力。

在现实情况下,如果一个高度上存在两个区块,一个区块只公布了区块头,另一个区块公布了交易数据,虽然可能公布交易数据的区块时间上晚一点,但大家还是会去优先认可这个公布了交易数据的块。如果一个矿池恶意去只公布区块头,不公布数据,它这个块被拒绝的风险很大,会损失掉确定性的区块收益。

除非我是同一个实体控制的矿池,或者是联盟,这时候我挖到一个块,为了速度更快,先把区块头传回来自己挖,默认这个区块是合法的。这时这个攻击等同于自私挖矿攻击,它只广播区块头,等同于不广播区块的攻击。因为我如果不是跟他联盟,我也不敢在后面跟着挖。

此外,荷兰代尔夫特理工大学博士后任之劼认为:

理论上是一种新的攻击方式,有一定的理论意义,但理论意义高于实际意义。

这个攻击简单来说就是提出了一种攻击方式可以降低其他人的挖矿收益,于是,当挖矿收益率不高的时候(比如挖矿奖励刚刚够交电费这种),理性的矿工应该停止挖矿,因为挖矿的收益会赶不上电费投入。但是这个攻击基本上没有什么实际意义。

首先,这里面的门槛还是很高,因为按照当前的算力分布和收益率来看,还是需要 20% 的算力才能进行这种攻击。

其次,如果我们和 51% 攻击和自私挖矿对比:和自私挖矿比的话,自私挖矿是当满足条件之后,例如有人控制 25% 的算力并且有更好的网络连接时,自私挖矿是可以获益的并且是最优策略,于是整个网络最终被迫都会采用自私挖矿。

而这个攻击中并不是这样,攻击者并不能天然从攻击中获益,而实际上是在牺牲自己的挖矿奖励进行攻击。对比 51% 共计的话,51% 攻击门槛更高,但是可以破坏一致性,可以双花获益,但这种攻击仅仅可以攻击活性而不是一致性,我想不出来攻击者可以通过破坏活性获益的方法。

解读

研究人员的假设是,攻击者公布区块头后,可以成功吸引到足够的矿工去跟着攻击块挖矿。

现实情况是,如果只公布一个区块头,这个区块大概率被拒绝,攻击者损失掉一个区块收益,矿工跟着先公布整个区块的块继续挖,这个攻击不能威胁比特币网络。