比特大陆蚂蚁矿机S7

比特币和博弈论:块代扣攻击理论上是成立的?

茶茶ashley 发布在 比特币 20 3407

之前的文章中我讨论了为什么比特币的稳定性基本上是一个博弈论命题,且最后以几个问题结束:

我们可以使用系统中策略语言和回报最大化中的交互组件来有效地建模系统吗?这个运算结果模型易于处理吗——我们能从数学上或者使用模拟来分析它吗?最重要地,它的预测与我们实际上观察的东西相符吗?

博弈

我们以矿池之间的“块代扣攻击”为大环境来看这些问题。

矿池是将矿工的算力聚合在一起进行联合挖矿。假设两个矿池(我们分别叫它们蓝矿池和红矿池)都在想办法最大化它们的挖矿奖励。比方说红色矿池的管理者决定潜入蓝色矿池并且使用一些红色矿池直接或间接控制的算力来降低蓝色矿池的效率。提交份额(部分工作证明)赚取一份回报,但是拒绝任何发现的有效区块并且不给蓝色矿池贡献任何生产性工作,通过该方式可以完成这个任务。初看上去这个方法似乎损人不利己,当然,蓝色矿池的效率受到损害,但是红色矿池也浪费了自己的算力。

要理解这种情况,我们要写下三条在矿池联合挖矿时管理回报的规则:

  1. 一个矿池在任何时期的收益都和其成员挖掘的比特币数量成比例,作为这期间挖掘的总区块的一部分计算。
  2. 一个矿工的回报和提交的“份额”数量成比例,作为矿池中所有成员提交份额的一部分。
  3.  矿工可以简单地创建多个伪身份(“sybils”),每个身份贡献极少量的挖矿资源。因此团体不容易发现一个矿工是否拒绝了有效的区块(也不能惩罚拒绝了有效区块的矿工)。

这些规则多少有些粗略,但因为其分析清楚它们被广泛接受作为一个起点。这种框架中,我们愿意决定一个区块拒绝攻击是否可以带来利益。这明显是一个重要的问题,从数学角度它也是定义明确的。我们已经从方程式中消除了所有人类行为的元素,因此我们可以用一些算法来检查这个答案。假如一开始,蓝色矿池和红色矿池都管理50%的挖矿算力。在这个例子中,我们忽略51%攻击

game-theory

块代扣攻击成功获得利益,红色矿池有50%的算力但是赚取了5/9的回报。

现在红色矿池投入一半资源(总数的25%)渗透到蓝色矿池,并且把仅有的份额而不是区块发送给矿池。这意味着所有到达比特币网络的区块,2/3来自蓝色矿池,1/3来自红色矿池。因此挖矿回报会以相同的比例分给两个矿池,2/31/3

但是蓝色矿池的回报中,蓝色矿池要支付其中的1/3给红色矿池,只留给自己2/3。这是因为红色矿池贡献了1/3的蓝色份额,而矿池以份额而不是区块为基础支付。回想下,蓝色矿池不能辨别不良行为来自于哪些矿工。加上红色矿池直接赚取的1/3,红色矿池的份额是5/9

这意味着块代扣攻击理论上是可收益的,这就其本身而言是个非常有趣的事实。

但是令人难以置信的是,很长一段时间当人们被问到是否块代扣攻击可以获得收益时,莫名其妙地没有一个人做出上几段列出的计算来发现这个答案。该攻击的收益首次在CourtoisBahack去年的论文中被指出时并没有引起多大注意。最近Ittay Eyal对它进行了细致的分析,做了一些关于多个攻击矿池情况的整齐的博弈论分析,这也引起了广泛的关注。

关于比特币挖掘稳定性的广泛设想,这不一唯一一个想起来明显的片断示例。至少还有Eyal和Sirer的自私挖矿(selfish mining)和Andrew Miller的羽毛分叉(feather fork)俩大案例,在每个案例中,矿工都可以突破默认协议获得额外潜在的收益,尽管分析这些挖矿模型是比较简单的,但发现这些bug却花费了数年的时间,并且我相信它们并不会是最后的bug.

因为某种原因我要用Bug这个词。如果你想想软件测试和模型校检中用来找到软件Bug和编写正确程序所取得的巨大进步,很难相信我们找不到一个方式来用常规语言表达比特币的策略空间并且自动探索异常的策略。这仅仅是因为博弈论和比特币研究社区没有重合吗?或者是因为某些原因博弈论中开发的用于自动平衡分析的工具不能处理比特币挖矿的域?[1]

比特币提供极佳的试验台来探索并改善我们对于博弈论的认知。由于大型金融股权激励,关于策略的理论知识被认为颇具价值。然而,不像在股票市场,该系统是“封闭”且相对容易建模和分析的。[2]我们只能慢慢地开始利用这个机会,而在这个领域的进一步工作能充实比特币和博弈论。

最后,目前为止关于矿工利用异常策略的证据很少甚至没有。但这没有以任何方式减少我们已经说过的分析类型的重要性,问一问是什么导致了模型与所观察行为之前的差距非常重要,我会在下篇文章中说说这个问题。

 

原文:https://freedom-to-tinker.com/blog/randomwalker/bitcoin-and-game-theory-were-still-scratching-the-surface/
作者: ARVIND NARAYANAN
译者:茶里的勿忘我
稿源:巴比特资讯(http://www.8btc.com/bitcoin-and-game-theory ‎)

注释    (↵ returns to text)
  1. 比特币社区已经做了一些工作来创建挖矿模拟器。这是个不同的方法,但也是一个有意思的方向。
  2. 对于要关闭的系统,我们必须忽略挖矿策略对比特币兑换率的影响等因素。下篇文章会主要讲这个。
版权声明: by nc" sa 作者保留权利。文章为作者独立观点,不代表巴比特立场。

评论:20

您需要登录后才可以回复 登录|注册
    翻身的咸鱼-
    翻身的咸鱼- 591 天前

    A池攻击B池,A放弃部分收益,在B欺骗矿池获部分收益,A这部分算力相当于从全网撤出。对于矿池,算力就是武器,假设AB各50%市场份额,攻击要有效果,至少放10%以上算力到B。A放弃自己的武器去B骗收益,B反过来51%A,A会破产的!还谈收益?如不考虑51%攻击的话,本身就是悖论了!只知道列公式,读傻书!

    +1
    +1
    我要点评
    Author Image
    merry 603 天前

    已打赏,请查收

    +1
    +1
    我要点评
    清清的雾气
    清清的雾气 606 天前

    来巴比特看长铗的精彩的点评,体味智慧和洞察力,已经上瘾//@长铗: 为什么比特币社区没人重视“块代扣攻击”,原因很简单,这并不是比特币协议层面上的bug,而只是针对矿池,矿池都是现实主义的商人,他们不会为理论上的损失而去修改矿池挖矿协议,只有看到账面上的损失,他们才会采取行动

    +1
    +1
    我要点评
    Author Image
    莱比特矿池 607 天前

    《块代扣攻击理论上是成立的?》和《块代扣攻击理论上成立,但实际应用时往往得不偿失》
    两篇文章分析都犯了一个根本性错误,
    矿池挖矿产出不是属于矿池自己的!
    只有私有池(算力属于矿池自己)产出才是矿池自己的,但私有池不对外开放,也就根本没有扣块攻击问题。

    公共矿池产出绝大部分都要发给矿工,只有2%~4%是矿池费。
    如果公共矿池是PPS付款,那只要很少(比如5%)的算力实施扣块攻击,就足以让矿池破产。
    如果公共矿池是PPLNS付款,那5-10%的扣块攻击算力(相当于5-10%的收益下降),也足以让矿工离开矿池。

    +1
    +1
    我要点评
      Author Image
      chehw 607 天前

      PPS下可能无解,但矿池不是必须选择PPS方式(个人认为PPS是一种不太好的分配方式)。

      PPLNS下,假设最终用占全网5%的算力进行攻击,那么获利的前提是攻击者自身的全部算力也比较大,大约需要全网算力的25%。假设a=25,b=30,c=45,此时,攻击者用5%的算力可获得最大收益,总收益率又25%提高至25.56%,相当于额外获取了2.26%的利润(=(25.56-25)/100)。B矿池则损失较大,利润率只有原来的90.2%。当全网矿池足够分散(可选择余地比较多时),矿工自由选择去留,此时理性矿工可以选择迁出算力,如果B为免费矿池,当有50%的矿工迁出时,攻击者将不再获利(如果B为收费矿池,则攻击者已经亏损);当有2/3的矿工迁出时,攻击者将损失1.8%的收益。

      博弈是一个动态过程,攻守双方会根据环境采取相应的对策。比特币系统是一个分布式网络,用户只需根据自身利益最大化原则(不必忠诚于任意一个矿池)就可以使攻击无效化(或者是自动反击)。
      我认为,扣块攻击得不尝试,一是因为其收益率较低,且有损失的风险。另一个原因是,发动扣块攻击获利的前提是攻击者自身也需要有相当大的算力(比如占全网算力的25%),而且也有被发现的可能性(虽然很难找到证据),一旦被发现,A的信誉全失,与偷来的利益相比,损失可能会更大。

      +1
      +1
      我要点评
        Author Image
        chehw 607 天前

        更正一下第5行: …..利润(=(25.56/25)-1)* 100%)。

        +1
        +1
        我要点评
        Author Image
        莱比特矿池 605 天前

        1、你认为PPS是一种不太好的分配方式?
        矿工认为PPS是一种非常好的分配方式。 2、你这是幼稚地从短期挖矿收益看攻击,而不是从矿池生存角度看。
        扣块攻击目的是杀死竞争对手矿池,而不是提高算力收益。
        攻击者一小部分攻击算力的收益无关紧要,关键是让竞争对手矿池算力跑光,死亡。

        +1
        +1
        我要点评
        Author Image
        莱比特矿池 605 天前

        真不能理解你的想法,攻击者要一枪打死你的时候,你居然用长篇大论去讨论哪种子弹性价比高,完全不在点上

        +1
        +1
        我要点评
        Author Image
        莱比特矿池 605 天前

        真不能理解你的想法,攻击者要一枪打死你的时候,
        你居然用长篇大论去讨论攻击者会不会因为子弹花钱就舍不得开枪,完全不在点上

        +1
        +1
        我要点评
    Author Image
    行者止步 607 天前

    分析的很到位,如果攻击者更勤奋一点,可以选择全矿池攻击,所有的被攻击矿池利益受损,所有的solo挖矿受益,攻击者受益或受损取决于solo矿工占全网算力比重。结果是什么?solo挖矿更加普及,中心化挖矿减少,扣块攻击是矿池的软肋,却是比特币的强大之处。

    +1
    +1
    我要点评
    Author Image
    长铗 607 天前

    漂亮的反击,原论述只考虑了静态博弈情形,在块代扣攻击中,支付函数不是共同知识,攻击者还需要与被攻击者之外的C、D、E等矿池博弈。

    +1
    +1
    我要点评
    Author Image
    chehw 607 天前

    这个计算有问题,他只考虑了两个矿池的情况。当有多个矿池时,稍有计算失误,扣块攻击就会得不偿失。而所有未被攻击到的矿池均可坐收鱼翁之利。只要全网的矿池足够分数,对于扣块攻击没有必要太在意。

    原理:
    当攻击发生时,必存在三种矿池A、B、C。其中A代表攻击者矿池;B代表被攻击的矿池(可以是多个);C代表未被攻击的矿池。假设各类矿池所占的算力比例分别为a, b, c。

    当攻击发生前,三种矿池的收益分别为 a/100, b/100, c/100;
    若A拿出比例为x的算力进行攻击,此时,无论A和B矿池的收益发生什么变化,C的收益将变为C/(100-X),必大于原有收益。(所以C会乐于有人发起扣块攻击,只要攻击的不是他就行);

    而A则必须谨慎计算x的取值:
    因为攻击发生后,A的收益将变为(a-x)/(100-x) + x/(b+x) * b/(100-x),要想使攻击获利,则A的收益必须要大于原有的收益a/100才行。
    即:必须保证 (a-x)/(100-x) + x/(b+x) * b/(100-x) > a / 100

    另f(x) = (a-x)/(100-x) + x/(b+x) * b/(100-x) – a / 100

    盈亏平衡点为 f(x) = 0
    解这个二元一次方程方程可知,x 的取值范围必须在 [0,ab/(100-a)]才行。
    对f(x)求导,可知当x = ab/ 2(100-a)时,攻击者可以获得最大收益。

    以a = 30, b = 30, c = 40为例,
    当且进当x < 90/7 = 12.85时,攻击者A才可获利,当x = 90 /14时,收益最大化,A的收益率由原来的30%变为30.85%,提高了0.85个百分点;B则变为26.4%, 下降了3.6个百分点,而C在什么也没做的情况下,收益率变为42.75,提高了2.75个百分点。

    当B发现被攻击时,可以考虑的策略之一是:将算力转移到其他矿池,只要使攻击的算力大于上述的阈值(比如迁出2/3的算力),则可以让攻击者自食其果,其他所有矿池都会收益。

    +1
    +1
    我要点评
      Author Image
      行者止步 607 天前

      分析的很到位,如果攻击者更勤奋一点,可以选择全矿池攻击,所有的被攻击矿池利益受损,所有的solo挖矿受益,攻击者受益或受损取决于solo矿工占全网算力比重。结果是什么?solo挖矿更加普及,中心化挖矿减少,扣块攻击是矿池的软肋,却是比特币的强大之处。

      +1
      +1
      我要点评

    份额可精确计算 算力只可以估计

    +1
    +1
    我要点评
    长铗
    长铗 608 天前

    回复@神鱼BTCer:把按份额改成按全网算力占比。

    +1
    +1
    我要点评
    神鱼BTCer
    神鱼BTCer 608 天前

    补上这个漏洞怎么简单

    +1
    +1
    我要点评
    星际堡垒
    星际堡垒 608 天前

    //@长铗: 为什么比特币社区没人重视“块代扣攻击”,原因很简单,这并不是比特币协议层面上的bug,而只是针对矿池,矿池都是现实主义的商人,他们不会为理论上的损失而去修改矿池挖矿协议,只有看到账面上的损失,他们才会采取行动,而且要补上这个漏洞是很简单的。

    +1
    +1
    我要点评
    长铗
    长铗 608 天前

    为什么比特币社区没人重视“块代扣攻击”,原因很简单,这并不是比特币协议层面上的bug,而只是针对矿池,矿池都是现实主义的商人,他们不会为理论上的损失而去修改矿池挖矿协议,只有看到账面上的损失,他们才会采取行动,而且要补上这个漏洞是很简单的。

    +1
    +1
    我要点评

    文章有个简单的错误 认为比特币挖坑难度会即时调整。实际情况是在很长一段时间难度是固定的 红方这样做等于是牺牲了1/4算力 网络总收益变为原来的3/4 最后损人又损己。另外 网络上远不止一个矿池 即便等到算力调整后 得到的收益也微乎其微。最后 时间一长 通过统计 矿池是可以知道谁故意隐瞒区块的。

    +1
    +1
    我要点评
    巴比特资讯
    巴比特资讯 608 天前

    【比特币和博弈论:我们仍然有待深入】很长一段时间当人们被问到是否块代扣攻击可以获得收益时,莫名其妙地没有一个人做出上几段列出的计算来发现这个答案。该攻击的收益首次在Courtois和Bahack去年的论文中被指出时并没有引起多大注意。http://t.cn/RA6EQO1

    +1
    +1
    我要点评