74

文章目录

  1. 摘要
  2. 背景知识
  3. FAW 攻击
    1. 攻击模型与假设
      1. 攻击模型
      2. 假设
    2. 攻击方式
    3. 攻击分析
      1. 攻击一个矿池
        1. 收益分析
      2. 同时攻击多个矿池
      3. 1 v 1
  4. 攻击检测与解决方案
    1. 检测
    2. 可行解决方案
  5. 引用

摘要

本文在自私挖矿[2]和区块扣留攻击(Block WithHolding Attack, BWH)[3]的基础上提出一种针对PoW挖矿系统的新型攻击 FAW。此攻击的至少可以获得与BWH攻击相当的收益,并且此类型的攻击更容易实施(实施攻击所需算力更少)。在同时攻击多个矿池的情况下,FAW攻击的收益大概可以比BWH攻击多56%。与BWH攻击不同的是,FAW攻击在两个矿池互相攻击的情况下,矿工的囚徒困境不再存在:在特定情况下,算力大的矿池总是可以获胜(实际上该条件很难满足)。

背景知识

  • 比特币: 参考 [4]
  • 自私挖矿: 参考 [2]
  • BWH: 参考 [3]

FAW 攻击

攻击模型与假设

攻击模型

攻击模型基本与BWH一致,主要有以下几点:

  1. 攻击者可以是单个矿工或者管理一个矿池
  2. 攻击者可以发动女巫攻击: 攻击者可以在矿池中创造任意多的账号,并且可以创建任意多的比特币账户(攻击者不能加入一个私有矿池)
  3. 攻击者的计算能力是有限的,但是可以任意分割算力到不同矿池;典型的,管理员将算力分为诚实挖矿(正常挖矿)和渗透挖矿(用于攻击)算力两部分
  4. 攻击者用于渗透攻击的挖矿算力,应该是忠诚的(也就是这部分算力不能是别的攻击者用来攻击他的)
  5. 攻击者可以在比特币网路中散布任意多的节点,以用于监听其它矿工的区块以及快速散播自己的区块

假设

攻击忽略了一些实际的细节,和之前的攻击前提也差不多,主要有以下几点:

  1. 无绝对算力存在:矿工的算力不会超过50%,全网算力总和计为1,矿工的算力用百分比表示
  2. 单一攻击:网络中只存在FAW攻击,不考虑其它类型的攻击同时发生的情况
  3. 无偶然分叉:不考虑偶然情况下的分叉。正常情况下,比特币由于网络时延,也会有较小的概率产生分叉,由于此情况发生概率较小,实验中忽略
  4. 按劳分配:矿池管理员会正常将挖到的区块按算力比例发放给做出贡献的矿工矿工

另外,为了方便,假设每个区块每一轮挖到一个BTC。

攻击方式

FAW攻击的核心思想就是:攻击者会分出一部分算力去攻击其它矿池,与BWH攻击不同的是,在BWH攻击中,渗透矿工发现一个区块(称之为渗透区块)后永远留在手中不会公开。但是在FAW攻击中,攻击者会在合适的时候将渗透区块公开,以便在区块链网络中形成一个分叉(与自私挖矿类似),并借此获取比BWH攻击更多的奖励。

攻击分析

攻击一个矿池

攻击者将其算力分为两部分,一部分用于诚实挖矿,一部分用于渗透攻击挖矿,此时挖矿分为几种情况。

如果攻击者的诚实挖矿的矿工首先挖到了区块,此时攻击者正常公开区块以获取奖励。

如果渗透矿工在目标矿池挖到了区块,他不会立即公开此区块,此时分三种情况讨论:

  1. 如果第三方矿工(攻击者与被攻击者以外的矿工)挖到了区块,那么攻击者立即将其挖到的区块公开,以产生一个分叉
  2. 如果受害者矿池内的其它矿工挖到了一个区块,那么攻击者将他挖到的区块丢弃
  3. 攻击者正常挖矿的矿工发现了一个新的区块,那么攻击者将所挖到的渗透区块丢弃

2、3两种情况与BWH攻击是一样的,因此,相比BWH攻击多出来的收益就来自于情形1。此情况的额外收益与自私挖矿差不多。因为在网路中,产生了分叉,那么攻击者的区块就有可能被包含在主网的区块中,一旦攻击者的区块被包含在了区块链主网中,那么渗透矿工所在的矿池就可以获取收益,而这部分收益也会按算力比例分配一部分给渗透矿工。攻击者区块被包含在网络中的概率与在其区块之后挖矿的矿工算力比例有关。

一般情况下,如果受害者矿池如果先收到第三方矿工的区块,那么诚实的矿池就会在第三方矿工的区块后面挖矿。但是,如果受害者矿池以利益为先,那么矿池就会在自己矿池所出的区块(也就是渗透矿工挖到的区块)上继续挖矿,这样矿池就可以获得区块的部分抽成(如果有的话)。此外,即使受害者矿池是一个诚实的矿池,攻击者也可以通过广泛的外部连接来监听区块链网络,以便在第三方区块尚未到达受害者矿池之前,将渗透区块发送给受害者矿池。这样受害者矿池就可以在渗透区块后面挖矿,这就增大了渗透区块被包含在主网的概率,从而变相提高了攻击者的收益。

收益分析

算力情况

如上图所示,攻击者算力比例为$\alpha$,受害者算力比例为$\beta$。其中攻击者将其算力占比为$\tau$的部分用于渗透攻击受害者矿池。此时,在以下三种情况下,攻击者可以获取收益。

(1) 攻击者用于诚实挖矿的算力挖到了区块,此时收益为:

$$ \frac{(1-\tau)\alpha}{1-\tau \alpha} $$

(2) 受害者矿池中的原本的诚实矿工发现了区块,此时收益为:

$$ \frac{\beta}{1-\tau \alpha} \cdot \frac{\tau \alpha}{\beta + \tau \alpha} $$

其中$\frac{\beta}{1-\tau \alpha}$为受害者矿池挖到区块的概率,$\frac{\tau \alpha}{\beta + \tau \alpha}$为攻击者贡献的算力比例。

(3) 攻击者的渗透算力发现了一个区块后隐藏起来,随后第三方发现了区块,此时隐藏区块被公开,那么在区块链中形成了分叉。首先,攻击者的渗透算力发现区块的概率为$\tau \alpha$;此后,第三方挖到区块的概率为$\frac{1-\alpha-\beta}{1-\tau \alpha}$,这两个是独立事件,因此同时发生的概率为$\tau \alpha \cdot \frac{1-\alpha-\beta}{1-\tau \alpha}$。此时我们假设攻击者的分叉最终被主网络包含的概率为$c$,这个概率受到网络状况等因素的影响。最终攻击者可以获得的奖励份额为:

$$ c \tau \alpha \cdot \frac{1-\alpha-\beta}{1-\tau \alpha} \cdot \frac{\tau \alpha}{\beta + \tau \alpha} $$

将$(1), (2), (3)$的收益相加,可以得到FAW攻击在攻击单个矿池情况下的收益期望为:

$$ R_{a}(\tau) = \frac{(1-\tau)\alpha}{1-\tau \alpha} + (\frac{\beta}{1-\tau \alpha} + c \tau \alpha \cdot \frac{1-\alpha-\beta}{1-\tau \alpha}) \cdot \frac{\tau \alpha}{\beta + \tau \alpha} $$

此时对$\tau$求导,可以得到让$R_a(\tau)$最大化的最优值$\bar{\tau}$ (文中给出了公式,感兴趣的可以查看原论文[1])。为了对收益有一个直观的了解,我们假设$\beta=0.2$,定义额外收益比例

$$ R^{\prime} = \frac{R_a - R_h}{R_h} \cdot $$

其中$R_h$为无攻击者情况下的攻击者应得的收益,也就是攻击者的算力比例。那么有如下的额外收益(百分比)图:

FAW攻击额外收益比例

图中不同颜色表示攻击者的总算力占比,图中展示了$\alpha=0.1,0.2,0.3,0.4$四种情况下额外收益的情况。由图中可见,即使攻击者的总算力只占全网的$1/10$,通过FAW攻击,只要增加自己区块被主网接收的概率,也可以获取不少的额外收益。

同时攻击多个矿池

攻击者将算力分散在多个矿池之后,在一轮挖矿时间之内,攻击者的可能在多个矿池都挖到了区块。此时,如果在网路中有第三方发现了新的区块,那么攻击者就可以同时公开这些区块,这就在区块链网络中就形成了多个分叉。此时,这些分叉中只有一个分叉不是攻击者的,那么攻击者的区块就有更大的概率被区块链主网确认。此外,攻击者还有另外一个优势:渗透矿工可以以最快的速度将其挖到的区块传递给所在的矿池,而无需担心时延问题,这就增加了攻击者区块被确认的概率。

这里的理论分析公式较为繁琐,感兴趣参考原论文,此处给出量化分析的图表,如下图所示。

多路攻击收益图

此图实验设定为:攻击者同时攻击两个矿池,两个被攻击的矿池算力比例为$\beta_1, \beta_2$,攻击者的算力$\alpha=0.2$。

图中,横纵坐标含义与前面的图一样。闪图显示了四类情形的结果:

  • Case 1: $\beta_1=0.1, \beta_2=0.1$
  • Case 2: $\beta_1=0.2, \beta_2=0.1$
  • Case 3: $\beta_1=0.3, \beta_2=0.1$
  • Case 4: 攻击者攻击其它所有矿池,假设除了攻击者的0.2算力之外,其它有4个矿池,算力分别为0.2, 0.1, 0.1, 0.1(该比例根据当时比特币区块链的算力分布来的,剩余还有0.3的算力为额外的未知的算力,未纳入攻击范围)

在Case 4的情况下,如果使用BWH攻击,最多只能得到$2.96\%$的额外收益,而使用FAW最多可以得到$4.36\%$的额外收益,大概比BWH攻击多$56.24\%$。

图中使用$\times$标出的点为模拟实验的结果,基本与理论分析结果一致。

1 v 1

1对1的互相攻击,理论分析公式繁琐,此处我们从直观上去理解。

根据我们之前分享的BWH攻击,在BWH攻击下,矿工们如果相互攻击,那么会两败俱伤。这个很好理解,因为双方都浪费了算力。在FAW攻击下,其实也差不多,唯一的差别就是,FAW攻击允许攻击者产生分叉,这就为攻击者带来了相对于BWH攻击额外的收益。

我们知道攻击别人,会提高自己的收益;而自己被攻击,自己的收益就会降低。那么,相互攻击的情况下,自己攻击带来的收益能否弥补自己被攻击带来的损失就很重要。

在BWH攻击条件下,相互攻击的双方所受到的损失无论如何都无法被攻击带来的收益所弥补。

笔注:这里与囚徒困境有点不同的是,在理论上,根据囚徒困境,矿工们进行BWH攻击攻击对方收益肯定会比不攻击高。而现实生活中,矿工们“似乎”达成了某种协定,都不进行攻击。

在这一点上,矿工们似乎走出了囚徒困境。一种可能的原因是:矿工们可能觉得不损失相比赚的多更重要。

在FAW攻击模式下,由于FAW攻击的收益相对高一点,这种收益的提高对于算力大的矿工来说收益系数大。也就是说,大矿工攻击的额外收益比小矿工的额外收益大得多。一旦大矿工的收益可以弥补小矿工攻击带来的损失,那么就不存在平衡点了,大矿工就一直采用最优策略攻击即可。

这种非平衡的攻击条件,在势均力敌的两个攻击者之间是很难达到的。根据文中给出的结果,我们接单分析两种情况:

  1. 攻击者的区块每次都能被主网络接收(显然这是不可能的)。在此情况下,如果相互攻击,算力大的矿工永远可以获取更多收益,算力小的矿工永远挨打
  2. 攻击者的区块有一半(50%)的概率被主网接收(这个比较合理)。在此情况下,我们假设矿池1的算力为0.1,那么矿池2要在与矿池1的互相攻击中取得不败地位,它的算力必须达到全网的0.41左右,这个条件,就目前来看几乎无法实现

攻击检测与解决方案

检测

由于在公共矿池中攻击者可以任意注册ID以及任意产生区块链地址,所以现有比特币区块链挖矿系统基本很难检测。

可行解决方案

无。

引用

[1] Kwon, Yujin, et al. "Be selfish and avoid dilemmas: Fork after withholding (faw) attacks on bitcoin." Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security. 2017.

[2] 自私挖矿介绍 https://mp.weixin.qq.com/s?__biz=Mzg4MDU2MTM1Mg==&mid=2247483882&idx=1&sn=14b954bb89d0a3411568c05ff9284ec3&chksm=cf721c4df805955ba6053e90b264cbf574dbb94784db3e8948ac146c371b3d46108a14551154&token=542639658&lang=zh_CN#rd

[3] 矿工的囚徒困境 https://mp.weixin.qq.com/s?__biz=Mzg4MDU2MTM1Mg==&mid=2247483932&idx=1&sn=861f7333eb16b13f6abb83840f2ddabb&chksm=cf721fbbf80596ad743031978ef03c1a0762291e05de561e213ae760432f675dc0dccc43b0df&token=542639658&lang=zh_CN#rd

[4] 比特币 https://mp.weixin.qq.com/s?__biz=Mzg4MDU2MTM1Mg==&mid=2247483796&idx=1&sn=25bb5f34f6d0e2e1bb3b1f2df9d8b704&chksm=cf721c33f80595258400e974eee6310f43e3a3ab5ea21845e4606ff39e239bf04ba2dd0d5eac&token=542639658&lang=zh_CN#rd