块代扣攻击理论上成立,但实际应用时往往得不偿失

chehw 发布在 比特币 链头条 26098

本文是针对《比特币和博弈论:块代扣攻击理论上是成立的?》一文的补充,原文只考虑了两个矿池的情况。此时扣块攻击必定成立,只要发起攻击则必有收益。但实际应用场景下,多个矿池并存,本文补充上在多矿池和任意算力比例下的扣块攻击收益公式,根据该公式可知,多矿池存在下,所有未被攻击到的矿池均可坐收渔翁之利。而攻击者稍有计算失误,扣块攻击就会得不偿失。

结论是:只要全网的矿池足够分散,对于扣块攻击没有必要太在意。

pic_proxy_meitu_34

原理:

当攻击发生时,必存在三种矿池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)时,攻击者可以获得最大收益。

 

计算公式:

使扣块攻击盈利的攻击算力取值范围:0 < x  < ab/(100-a);

扣块攻击最大收益点的攻击算力:x = ab/2(100-a);

其中,a为攻击者算力占全网的比例;b为被攻击者的算力比例;x为攻击者用于攻击的算力占全网的比例。 0 < (a + b) < 100,  0< x < a, a > 0, b > 0

 

示例:

以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的算力),则可以让攻击者自食其果,其他所有矿池都会收益。

 

文/chehw

2015.3.23


 

BTC addr:1CHEp8QzFtfvwXrreoeA6wmKc7cudWD3kv

Email: htc.chehw@gmail.com

 

 

本文链接:https://www.8btc.com/article/51643
转载请注明文章出处

评论(13)
登录 账号发表你的看法,还没有账号?立即免费 注册
  • 巴比特资讯 2015-04-10
    【扣块攻击理论上成立,但实际应用时往往得不偿失】本文是针对《比特币和博弈论:块代扣攻击理论上是成立的?》一文的补充,原文只考虑了两个矿池的情况。此时扣块攻击必定成立,只要发起攻击则必有收益。但实际应用场景下,多个矿池并存……http://t.cn/RAXL1Ol 作者@chehw_1
  • 长铗 2015-04-10
    @chehw_1 认为:而攻击者稍有计算失误,扣块攻击就会得不偿失。只要全网的矿池足够分散,对于扣块攻击没有必要太在意。非常精彩的见解,打赏一杯咖啡http://t.cn/RAX49vz
  • chehw_1 2015-04-10
    回复@长铗: 感谢支持![嘻嘻]
  • 比特币接盘女郎 2015-04-10
    好文共享 [笑cry]
  • 行者止步 2015-04-10
    分析的很到位,如果攻击者更勤奋一点,可以选择全矿池攻击,所有的被攻击矿池利益受损,所有的solo挖矿受益,攻击者受益或受损取决于solo矿工占全网算力比重。结果是什么?solo挖矿更加普及,中心化挖矿减少,扣块攻击是矿池的软肋,却是比特币的强大之处。
  • bitPaul 2015-04-10
    //@比特币中国社区:转发微博
  • 莱比特矿池 2015-04-11
    《块代扣攻击理论上是成立的?》和《块代扣攻击理论上成立,但实际应用时往往得不偿失》 两篇文章分析都犯了一个根本性错误, 矿池挖矿产出不是属于矿池自己的! 只有私有池(算力属于矿池自己)产出才是矿池自己的,但私有池不对外开放,也就根本没有扣块攻击问题。 公共矿池产出绝大部分都要发给矿工,只有2%~4%是矿池费。 如果公共矿池是PPS付款,那只要很少(比如5%)的算力实施扣块攻击,就足以让矿池破产。 如果公共矿池是PPLNS付款,那5-10%的扣块攻击算力(相当于5-10%的收益下降),也足以让矿工离开矿池。
    • chehw: 2015-04-11
      这里分析的是矿池,又不是solo。两篇文章中没有提到、且没人认为“矿池挖矿产出是属于矿池自己的”,也没有任何推断是基于“矿池挖矿产出是属于矿池自己”这种假设。
    • chehw: 2015-04-11
      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的信誉全失,与获取的利益相比,损失可能会更大。
  • 莱比特矿池 2015-04-11
    分析有误,公共矿池产出绝大部分都要发给矿工,只有2%~4%是矿池费。 如果公共矿池是PPS付款,那只要很少(比如5%)的算力实施扣块攻击,就足以让矿池破产。 如果公共矿池是PPLNS付款,那5-10%的扣块攻击算力(相当于5-10%的收益下降),也足以让矿工离开矿池。
    • chehw: 2015-04-11
      PPS下可能无解,所以矿池可以考虑避免使用PPS方式。 PPLNS下,矿池不自己出钱,不会有破产的风险。收益下降时,只是少收了些矿池费。此时矿工可以选择离开矿池,当矿工离开到一定比例时,攻击者自身就会有损失。 另外,即使矿工不离开矿池,由于随时会出现新增算力(可能算力会很大)且无法确定这些算力的去向,攻击者无法判断发动攻击所使用的算力是否会给自己带来亏损。
  • merry 2015-04-14
    非常感谢 http://blockmeta.com/tx/230eb3fe00a3f51bc188ca6baed681e7b3d0e769c4150217a971271ae58ba949
  • ockmeta_gh0_zl5 2018-08-03
    我的私池爆块被另一个池转走了,谁知道这叫什么攻击有解决方案吗