「知矿大学问答」什么是扣块攻击?

栏目介绍

「知矿大学问答」是以问答的形式,邀请行业资深从业者,解答用户挖矿相关的提问。提出好问题并被采纳的用户,将会获得知矿大学精美周边一份。

来自 @不能说的秘密 的提问:

什么是扣块攻击,为什么说它让矿池蒙受损失,而不会损害矿工的利益?

知矿大学小编 @OWEN 的回答:

扣块攻击有两种,一种是为了“双花”而发起的攻击,由比特币链上交易的第一位接受者HalFinney提出,因此这种攻击也被称为“芬尼攻击”。

第二种扣块攻击是指矿工找到合法的区块之后,私自把区块扣下不对外发布。@不能说的秘密 的提问,指的就是这一种,下面我们就来介绍这类扣块攻击。

 01 扣块攻击

要说扣块攻击,得从矿池的概念说起。知矿大学在《什么是比特币矿场和矿池?》中介绍过:

矿池就相当于项目经理,接入矿池的算力就是服从项目经理工作安排的项目组员。项目是挖矿,尽快找到符合比特币系统要求的解。所有的项目组成员,都按照项目经理的安排推进工作任务,并提交工作成果,项目经理按照“多劳多得”的方式,根据项目成员完成任务的具体情况进行奖励。

扣块攻击的问题就出在提交工作成果上。

找到符合比特币系统要求的解,对于单独的矿工来说,是极小概率事件。矿池为了更好衡量矿工们的工作量,会给矿工们设置一个合理的提交工作成果(Share)的门槛。

挖矿这个过程类似一个抛256枚硬币的游戏,假设系统规定挖出新区块需要从第一枚硬币开始至少连续20枚硬币正面朝上,这个难度对于单个矿工来说太难了,矿池为了更好衡量矿工们的工作量,规定矿工只要从第一枚硬币开始至少连续10枚硬币正面朝上的结果,便计作该矿工的有效工作量证明。

扣块攻击是指,恶意矿工在找到满足矿池要求结果,但不满足比特币系统要求的结果时,正常向矿池提交工作证明;一旦得到满足比特币系统要求的结果时,也就是真的挖到区块时,则把这个结果私自扣下,不向矿池提交,矿池便因此损失了对应的奖励。

 02 扣块攻击的危害

扣块攻击对矿池的伤害很大。第三次产出减半之后被扣下一个块,就损失了6.25枚BTC(忽略打包矿工费),按目前价格,约¥40万。矿池持续遭受扣块攻击,矿池的幸运值长期偏低,蒙受巨大损失,严重的甚至会导致矿池的倒闭。

为什么说发起扣块攻击对恶意矿工几乎不会有影响呢?这要从矿池的结算方式说起。目前主流的结算方式是FPPS和PPS+。矿池根据矿工提交的工作量证明,也就是按照理论产出给矿工结算收益。

欲对矿池发起“扣块攻击”的恶意矿工,肯定也是选择这样的结算方式。对于恶意矿工来说,提交满足矿池要求的工作量证明(Share)与提交满足比特币系统要求工作量证明,这两者的频次之比是相当悬殊的,初略估计前者是后者的数十万倍,也就是说,矿工向矿池提交数十万次工作量证明,才会有机会碰到一次扣块攻击,10万次有效的工作量变成了9.9999万次,这对矿工收益的影响可以忽略不计。但这个行为频次虽然很低,但每次都是数十万元的损失,这对矿池的损害特别大。 

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

▲矿工发起扣块攻击频次示意图

那么问题来了,矿工为什么要发起扣块攻击这种“损人不利己”的行为呢?答案是矿池之前的恶性竞争。矿池是一个竞争非常激烈的赛道。有的矿池为了搞垮竞争对手,会把自己的算力“卧底”到其他矿池,意图发起扣块攻击,给对方造成经济损失,削弱竞争者的实力。 

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

▲神鱼曾在微博上公开指责过这种恶意竞争的行为

 

 03 扣块攻击可以预防吗?

因为比特币底层协议的原因,目前在技术层面上,矿池对扣块攻击没有有效的预防手段。矿池只能在察觉到幸运值异常之后,再去核对单个用户的出块情况。如果发现某些用户出块数据显著低于平均水平,就把这些有明显嫌疑的矿工移出矿池。当然,这种做法是有可能会错杀的,把没有发起过扣块攻击矿工判定为恶意矿工,但矿池要截断亏损,只能把嫌疑矿工踢出矿池,这也是不得已而为之。

矿池可以通过改变收益的分配模式来防止矿工发起扣块攻击。矿池把分配模式从PPS类换成PPLNS,PPLNS的分配模式下,矿池和矿工的关系相当于公司与公司合伙人,合伙人与公司是命运共同体,盈亏与公司同步。

既然这样,那矿池主流的分配模式是PPS类,而不是PPLNS呢?限于篇幅,我们就不在此展开了,后续找机会再来分解。

感谢李世胜和闪电对本文的指导。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。