摘要
加密货币系统中矿工越来越多,特别是近几个月比特币价格居高不下,加密货币系统的算力也越来越强。这导致个人矿工如果单独挖矿几乎不可能挖到,所以现在几乎所有的矿工都加入了矿池,矿池在一定程度上可以稳定矿工的收益。
算力较小的矿工难以挖到新的区块,这就衍生出对矿池的一种攻击。攻击者可以将自己一部分算力拿出来加入到其它的矿池去挖矿,但是自己挖到区块之后,不交给所在矿池。这样攻击者对于矿池永远没有贡献,却享受着矿池中其它矿工带来的收益分成。我们称这种攻击为区块扣留攻击(Block WithHolding, BWH)。
本文对于矿工之间的这种攻击,进行了博弈建模分析。在单攻击者模式下,攻击者永远可以获取比诚实挖矿更高的收益。在双攻击者模式下,攻击者之间就会陷入著名的囚徒困境。
背景
矿池
我们以比特币为例介绍矿池的基本工作原理。比特币挖矿过程就是寻找一个区块满足其哈希值小于某个特定值。为了控制新区块的产出保持在一个固定的速率,这个难度值会不断调整。矿工们组成矿池,共同计算这个哈希值,得到一个满足要求的哈希值(产生一个区块获取收益)后,大家按贡献分享挖矿带来的收益。基本工作模式如下:
矿池将工作任务分发给矿工,矿工们完成矿池分发的任务,由于挖矿难度大,绝大部分矿工无法挖出区块。于是,这些无法挖到区块的矿工,会定时向矿池提交当前自己计算出的最好的结果($pPoW$)。矿池对矿工提交的$pPoW$进行统计,一旦有一个矿工挖到了区块,也就是上图中矿工2提交的全工作量证明$fPoW$,那么矿池就根据前一轮统计的矿工的工作量,将收益按比例分发给矿工。一些矿池会设置一个阈值,在矿工累积工作量到达一定值的时候才会发放奖励,以降低交易成本。
本文提到的$BWH$攻击就是如下图所示,矿工2在挖到区块后,不交给矿池而是扔掉。
详细内容
基本攻击模型
攻击者矿池$A$,将其部分挖矿算力渗透到受害者矿池$B$中,渗透算力为$r$。我们称称渗透到受害者矿池挖矿的矿工为渗透矿工。渗透矿工只会提交$pPoW$(部分工作量证明)用于受害者矿池统计他们的工作,而渗透矿工永远不会提交$fPoW$(全工作量证明)。
$BWH$攻击会对挖矿造成以下三方面的影响:
- 受害者矿池,其挖矿算力没有变(不算渗透矿工),但是分享收益的人变多了
- 攻击者矿池,由于它分了一部分矿工去攻击别人,因此它自身的算力减少,自身矿池收益也减少了;但是,他可以从受害者矿池获取渗透矿工的收益分成
- 由于渗透矿工只打雷不下雨,导致整个区块链的算力下降,从而会导致整个区块链的挖矿难度下降
在这个挖矿游戏中,矿池需要做两个选择:
- 是否进行$BWH$攻击?
- 若攻击,使用多少渗透算力?
下面我们分两种情况分析。
单攻击者模式
单攻击者模式示意图如下:
我们假设网络中存在一个攻击者矿池1,受害者矿池2以及其余的矿工。设整个区块链的矿工算力为$m=1$,矿池1的算力为$m_1$,矿池2为$m_2$,渗透矿工算力为$x_{1,2}, (0 \le x_{1,2}\le m_1)$。矿池1和矿池2的收益分别为:
我们用收益除以算力,得到矿池的收益率分别为:
由于单攻击模型下,矿池2不会对矿池1的攻击做出反应,因此矿池1只需找出$\hat{x_{1,2}} = argmax_{x_{1,2}}r_1$。
根据上述$r_1$的公式,我们画出在不同$m_1, m_2$算力的情况下,投入$x_{1,2}$作为渗透算力的情况下的收益图。
其中横坐标为投入的攻击算力$x_{1,2}$,纵坐标为$r_1$。从图中我们可以分析出:
- 攻击者算力一定的情况下,受害者矿池的算力越大,攻击者可以获得的额外收益也越高
- 受害者矿池算力一定的情况下,攻击者的算力越大,可以获得额外的收益也越高
- 攻击者投入攻击算力超过一定阈值之后,收益率会快速下降,并且很可能低于诚实挖矿算力
- 此类攻击,整体额外收益不高,特别是在攻击者算力较小的情况下,额外收益很少,不值得实施
双攻击者模式
如果矿池中有两个矿池互相使用$BWH$来进行攻击,那么其收益如下表所示:
在有一方进行攻击时,和我们之前分析的一样,攻击方可以获取收益。但是如果两个矿池都攻击对方,那么他们都会浪费算力,这部分浪费的算力不会给双方带来任何收益,在此情况下,双方收益都下降。
这是经典的囚徒困境问题:对于矿池2来说,不管它攻击不攻击矿池1,只要矿池1攻击它,它的收益就是下降的;反过来也一样。所以对于矿池2来说,它最好的策略就是攻击,因为只有攻击才有可能提高收益。
实际问题
攻击检测
$BWH$攻击的检测还是比较简单的,攻击者只需要对比自己的挖矿算力和挖矿收益,查看是否差别过大就可以。但是,检测到并没有什么用,它无法分辨出是谁进行的攻击,因为小算力的矿工,正常情况下本来就很难挖到区块(比如一年才能挖到一个),这样即使一个矿工长时间没有提交$fPoW$,也不能说明它就是攻击者。
矿池还可以通过统计每个矿工的收益是否与其提交的$fPoW$成比例,但这基本也是没有用的。一来,攻击者可以将算力分解为大量的小矿工,让统计作用变得基本无用;二来,攻击者还可以不断的变化$ID$,这样针对之前ID的统计也就自然失效了。
对于区块链的影响
$BWH$攻击如果持续时间较长,对于矿池来说很容易检测到。这样矿池可能倾向于只使用自己可行的矿工来挖矿,这样可以降低矿池的大小,在一定程度上可以缓解区块链中心化的问题。
可能的解决方案
- 采用一种特殊的区块链结构,可以让矿池主进行钓鱼。也就是说在新的区块链结构下,矿主可以发送一个已知可以产生全工作量证明的任务,如果矿工没有提交一个全工作量证明那么攻击者就被发现了
- 矿池可以适当收取一些佣金,由于$BWH$攻击本身收益并不高,收取佣金可以提高攻击的门槛
结束语
本文分析了区块扣留攻击$BWH$:
- 攻击在只有一个攻击者的情况下,攻击者总是可以通过此种方式来获取更高收益。但是如果攻击者的算力较小,那么额外收益也很小。
- 在双攻击者模式下
- 攻击者之间陷入了囚徒困境。不管己方矿池采取什么操作,只要对方矿池进行攻击,己方的收益就会减少
- 受害者矿池越大,攻击者可以获得的收益就越高,因此大的矿池更容易收到攻击,这对于矿池的扩大有一定的抑制作用
引用
[1] Eyal I. The miner's dilemma[C]//2015 IEEE Symposium on Security and Privacy. IEEE, 2015: 89-103.
更多推荐