
文章目录
背景
激励机制是区块链共识机制的重要组成部分,关系到区块链的安全性问题。如今,大多数区块链的激励机制的安全性很难理解并且很多都未经测试。这其中的部分原因是:针对激励机制攻击的研究比较耗时,而且一般都是人工分析,缺乏自动化分析工具。随着区块链底层协议日趋复杂,分析针对其激励机制的攻击不仅需要理论知识,而且很要结合试验仿真,甚至需要靠实验人员的直觉,这就更增加了分析的难度。其中一些难点包括 a) 区块链的状态空间太大; b) 矿工间的博弈过程需要不断重复; c) 攻击者可以同时共存很多个等等。
现有的一些分析主要集中于单个或者两个攻击者的情况,而对于多个攻击者的情况缺乏分析。
本文提出的自动化分析框架 SquirRL 使用深度强化学习(Deep Reinforcement Learning, DRL)来分析区块链底层的激励机制,可以自动发现激励机制中存在的一些漏洞,这样就可以让区块链设计者提前修改这些漏洞,以免在实际使用中给用户造成重大的损失。
主要结果
发现
- SquirRL可以发现已知的比特币区块链中的最优自私挖矿攻击(Optimal Selfish Mining, OSM)和区块扣留攻击(Block WithHolding, BWH)
- 实验结果说明在多攻击用户的情况下,OSM是非纳什均衡的;文中的结果显示在多于2个攻击者(3个及以上)使用自私挖矿时,攻击者们可以同时获益的纳什均衡是不存在的
- 在应用Casper the Friendly Finality Gadget (FFG)协议的以太坊上,发现了一种新型的攻击类型
贡献
- 提出SquirRL分析框架
- 自私挖矿分析测量
- 框架的可扩展性展示(主要就是发现了以太坊FFG机制的一个新型攻击)
SquirRL
在前面背景里我们提到了分析的三个难点,这些难点使用深度强化学习都比较容易得到解决。要使用DRL,必须解决以下几个问题:
- 如何表示区块链的状态空间。大多数区块链可以用一个有向无环图来表示,这显然不适合作为神经网络的输入
- 如何什么DRL学习算法。使用基于值的方法(value-based methods)还是策略梯度算法?
- 如何设计奖励函数
- 矿工的行为空间(action space)如何设计。比如选择在哪个区块上挖矿等
下面我们介绍SquirRL的整体设计及其细节。
框架设计概览
框架基本工作流为:
- 根据区块链底层的激励机制设计选择DRL的相关设定
- 根据DRL的相关设定设计DRL模型
- 设计DRL的交互执行环境
- RL训练执行环境开始运行,最终训练输出一个攻击策略
其中,上图中的执行代理可能有多个,其策略可能是诚实的策略或者其它一些攻击策略,比如:自私挖矿、最优自私挖矿等,或者是使用DRL模型训练得到的策略(图中展示的就是使用DRL的情况,使用固定策略,比如:诚实挖矿、自私挖矿的情况并未画出)。
下面我们详细介绍上图中的一些模块。
DL运行环境基本设定
模拟环境中,区块的生成是一个离散的过程,在每一个时间段,每一方(诚实矿工或者攻击矿工)生成区块的概率$\alpha$与它们所控制的算力比例$\alpha$一致。并且假定出现攻击者的分叉时,诚实矿工中在攻击者的区块后进行挖矿的比例为$\gamma$(符号的使用与自私挖矿中论文中一样)。
在大多数链形结构的区块链中,矿工挖到的区块如果最终被包含到区块链中后,会得到一定量的虚拟货币奖励(区块奖励)。在本文的执行环境的设定中,仅考虑区块奖励,其它费用,比如交易费、挖矿成本(电费、设备、厂房等等)都不考虑。
对于诚实矿工来说,其行为空间(action space)比较有限,在每一轮开始时,他都会选择在最新的区块后面进行挖矿。而对于一个恶意的矿工来说,其选择较多。在本文的设计中,最小化了行为空间的设计,用户(上图中的执行代理)仅需决定:
- 将区块添加到哪一个分支上(如果有分叉)
- 何时广播区块
以比特币为例,行为空间(action space)包含四个选择:
- adopt: 用户停止在本地的私有分叉上挖矿,转而在公认的链上进行挖矿
- override: 用户广播足够多的本地隐藏的区块,用来将此刻诚实矿工所挖的分支变为无效(仅需释放比诚实矿工所挖分支长度大1即可)
- wait: 用户持续挖矿,并且不广播任何区块(如果有的话)
- match: 用户释放足够多的区块,以让自己所挖的新区块所在分支长度与诚实矿工所挖分支长度一致,以便与诚实矿工竞争
状态空间特征提取
由于区块链本身是一个有向无环图结构,而且长度还在不停增长,这样的结构显然无法直接作为神经网络的输入。因此,需要一种状态空间的特征表示方式。文中定义了三类特征: 分数(score), 即时收益(instantaneous reward), 可执行行为(permitted actions)。
分数 (Score)
此特征决定了一个区块、分叉、子图(对于不同情况下尚未被确认的分叉的结构)最终被包含到主链的可能性。
对于比特币、以太坊来讲就是分支的长度 (显然较长的分支最终会被确认到主链中)。
对于其它一些链来说,应根据具体的准则来决定这个特征值。比如GHOST协议选择哪个分叉有分叉的重量(weights)来决定,最重的分支会被包含到主链中,而不是最长的。
对于引入Casper FFG 协议(一种PoS协议)的以太坊来说,哪一个分支被最终会被确认不仅和分支的长度有关,还和该分支所获取的投票有关,此时Score特征包含两个值: 1. 分支长度;2. 分支获得的投票量。
即时收益 (Instantaneous Reward)
不同区块链的收益分配方式是不一样的,比如说比特币只有主链上的区块才有奖励,而其它一些区块链中分叉的区块(叔块)也是可以获取一定量的收益奖励的。以比特币来说,如果攻击者的分支链长度为$n$,那么即使收益即为$n$。
可执行行为 (Permitted Actions)
对于不同的策略来说,可以采取的行为是不一样的。对于一个诚实挖矿的比特币矿工来说,它收到一个新的区块时,它仅允许一种行为就是adopt;而对于自私矿工来说,如果他本地有隐藏区块,那么他还可能采取match和override行为。文中使用一个与行为空间长度一样的向量来表示可以执行的行为。如果某个行为可以被执行,那么其向量对应位置设置为1,否则设置为0。
RL算法选择
- 单执行代理(agent)模式下(此模式下,agent仅需与诚实矿工竞争挖矿),使用DDQN (Deep Dueling Q-Networks)算法
- 多执行代理(agent)模式下(此模式下,多个agent间需要进行竞争挖矿),使用PPO算法
实验发现,在单执行代理模式下,DDQN算法的收敛速度较快;而在多执行代理的模式下DDQN由于马尔可夫假设不再成立(整个区块链的状态空间为一个非稳态),算法(DDQN)无法收敛。
实现
文中在OpenAI Gym中实现了一个模拟环境,并且使用RLLib作为RL算法库进行了实验。
实验
单攻击者(执行代理)模式
作者对比了此模式下诚实挖矿(honest)、自私挖矿(SM1)、最优自私挖矿(OSM)以及使用强化学习学习(SquirRL)得到的不同策略的收益情况。此实验中 $\gamma=0.5$,在此设定下,攻击者如果想自私挖矿策略获取额外的收益,其算力占比至少要是全网的1/4。
结果对比图如下:
图中横坐标为攻击者算力比例,纵坐标为攻击者获取收益的比例。可以看出SquirRL输出的策略获取的收益可以和最优自私挖矿(OSM)相媲美。
笔注:单攻击者模式下,文中还有另外一组实验。在此实验中,攻击者的算力比例不再是固定的,而是有一个动态的变化范围。此实验的设定为攻击者的算力为一个高斯分布,均值为0.4,实验对比不同方差情况下的收益率情况。个人觉得算力均值设定为0.4没有什么意义,因为现在没有矿池可以达到如此高的比例。另外,他们的实验结果显示SquirRL输出策略所得到的收益超过了最优挖矿策略(OSM),这比较奇怪。最优挖矿策略理论上是最优的,但是为什么在算力变化的情况下,SquirRL输出策略的收益超过了OSM,文中没有给出解释。
多攻击者(执行代理)模式
此模式下,我们看一个比较重要的一个试验结果,图如下:
上图中有两条线,蓝色为2个攻击者的结果,橙色为3个攻击者的结果。横坐标为攻击者算力占比,纵坐标为额外收益占比($\cfrac{矿工最终收益比-算力占比}{算力占比}$)。
可以看到,三个攻击者时,无法获取额外收益。这样的结果应该与其实验设定有关,实验中设定每个攻击者的$\gamma_i = 1/3$。此处不知道如何理解,实际运行时,不太可能出现同时出现三个分叉并且这三个分叉都由攻击者产生的情况;而如果只出现了两个分叉,一个是诚实矿工所挖区块,另一个是其中一个攻击者所挖区块,此时$\gamma$如何分配?
笔注:直觉上,多攻击者竞争的情况下,假如一个攻击者的网络状况极好(其$\gamma=1$),那么他还是可以获取额外收益的,但是文中好像没有给出此条件下的实验。
新发现
实验在模拟使用Casper FFG协议的以太坊时,SquirRL发现了一个新型攻击。该攻击利用Casper投票机制与自私挖矿结合以获取更高收益。
Casper FFG是一个PoS(Proof of Stake)协议,该协议可以作为PoW协议的一个补充以加强PoW的安全性。区块链在使用PoW协议挖到一个区块后,投票者(拥有虚拟货币的账户)可以对区块进行投票,只有获取2/3以上投票的检查点(每隔N个区块有一个检查点区块)最终才会作为主链的一部分。如果投票者所投区块最终成为了主链的一部分,那么投票者也会得到一定的收益。具体细节大家可以参考相应文档。
攻击过程简述如下:
- 攻击者首先必须挖到两个连续的检查点 (这在实际中好像并不太可行,因为根据Casper协议,两个检查点之间包含很多个区块,如果使用PoW协议挖区块,这就要求进行大量的计算,连续挖到两个检查点的区块很难实现,文中我估计只是从原理方面实现了一个简化版的模拟方案来进行试验)
- 诚实矿工发现一个检查点并公开后,攻击者首先公开他挖到的第一个检查点用于和诚实矿工的检查点竞争
- 等待诚实矿工的检查点获得接近但还不到1/3投票的时候,攻击者公开第二个检查点。这样其余的投票者更倾向于将票投给攻击者的检查点,因为攻击者的检查点所在链更长。这就导致了投票给诚实矿工分叉的那部分投票者无法获得投票收益,这样就变相提高了攻击者的收益
一些问题
- 文中得出的在超过3个攻击者同时竞争的情况下,攻击者无法获取额外收益以及无法达到纳什均衡的状态是有特定条件的
- 在单攻击者模式、算力变化的情况下,SquirRL给出的额外收益比OSM的收益还要高,文中未给出解释
- 文中实验设定较为固定,先发现的攻击局限性较大
- 区块链的RL建模方式略显单薄,在实际使用时还是要根据不同的区块链类型、不同的攻击方式来重新建模较好
引用
[1] Hou, Charlie, et al. "SquirRL: Automating attack analysis on blockchain incentive mechanisms with deep reinforcement learning." arXiv preprint arXiv:1912.01798 (2019).
More Recommendations