数字货币 | 矿池攻击认识一下

时间:2021-08-15 00:19编辑:未知

没办法偷懒的挖矿过程

发现独吞区块奖励不可行之后,又有的矿工会想既然最后分配收益的发时候是根据大伙的计算量来分配,那样我不进行计算然后随便提交一个值过去是不是也可以蒙混过关呢,如此伪造算力岂不是可以省一大笔钱

这个想法依旧非常危险,但却也没什么可行性,在这里大家需要知晓的是矿池分发任务时不是叫你直接计算满足挖矿需要的区块hash,它们总是会设置一个较低困难程度的目的,譬如符合需要的区块头的hash要满足前16位为0的话,矿池给你的任务可能仅需计算得到的hash满足前10位为0即可提交作为一个share,通常矿池那边也会做一个验证,由于这个任务的困难程度系数比较低,所以基本上可以保证你可以常常提交share,这也为后面对你的提交记录进行剖析从而发现扣块攻击提供了帮,具体的大家后面再谈

至于说如此低困难程度的任务怎么样满足计算符合需要的区块头的需要就是一个概率问题了,矿池设立这个目的就是为了保证大伙都在进行运算并积极提交share,只须大伙都在计算那样就有概率碰到一个满足需要的块,譬如这次你完成任务提交的是一个hash前10位为0的块,下次挖到的可能是一个hash前12位为0的,一直挖下去总能碰到满足需要的区块头

Pool hoh3h3ing

这个其实在前面大家已经提到过几次了,对于Proportional的奖励模式,假如有矿池的运气不太好很久都没挖到区块,在这个矿池里的矿工的share就开始不断贬值,等于算力愈加不值钱,这个时候一些矿工就可以选择将其算力转到另一个刚挖到区块的矿池下去挖矿,由于这个时候时间最初计算,每一个share的价值比较高,等于算力也比较值钱,假如一段时间没挖到,他也可以选择第三跳池,一直去探寻share价值比较高的地方,至于前面所耗费的算力能值多少钱就不需要太关心了

使用这种方案在统计学上来讲最后获得的收益一定是要比你一直待在一个池里不动的收益要来得多的,不过伴随目前矿池的收益分发方案的改变这种攻击方案已经不可行了

3.矿池的种类

2.矿池运作的保障

大伙都去加入矿池去挖矿了,矿池一定也要采取手段来保障我们的利益,对于一些不怀好意的矿工一定也不可以让他随便地破坏矿池的运作是吧

0x3.两个矿池互相攻击

这样的情况就比较复杂了,可能是一个矿池发现自己被攻击后对攻击矿池进行的以其人之道还治其人之身的反击,也会是两池本来就心怀不轨互相开撕

容易起见大家还是假设两个矿池A与B,它们都对他们进行了区块截留攻击,而这场战争一旦开始,除非双方同时收手,不然将比较容易陷入囚徒困境当中,非常有意思,下面大家要来讲讲博弈论了

囚徒困境我想大伙应该都听说过,这里举一个容易的例子

目前警方逮捕了甲和乙两名嫌犯,他们是团伙作案,但由于没充分的证据进行指控,于是将他们分开审讯

假如两人都认罪的话那样就各判五年,假如两人都不认罪那样将因证据不足而仅判半年,但一旦出现其中一方认罪而另一方不认罪,则认罪的一方即刻释放而另一方将被判十年

这是一个很经典的囚徒困境场景,在此处假设双方都是利己的,不关心他们死活,那样就要完全为我们的利益着想,那样假想你来做选择的话

1.他们不认罪,那样我认罪就可以直接释放,好的,选择背叛

2.他们认罪,那样假如我不认罪就要被判十年,不可以,我也只能认罪,好的,还是选择背叛

假如双方都进行如此的考虑,那样这场博弈最后的结果将是双方互相背叛,结果各判五年,也就是这场博弈所达到的纳什均衡,虽然团体的最佳解应该是严守秘密以获得各半年的刑期,这也正是困境之所在

同样的状况其实也出目前这里两个矿池的博弈中

两个矿池要选择攻击与否的方案,假如两个矿池都不攻击,则此时收益不受影响,假如一个矿池攻击另一个不攻击,则攻击矿池收益增加,受害矿池收益降低,两个矿池都攻击,则收益降低,但没受害时降低的多,这个时候大家依旧假设双方都是使用利己方案,根据上面的剖析,在不知晓他们选择的状况下,二者极大概将选择相互攻击,从而陷入囚徒困境的纳什均衡

上面的博弈只不过个容易的剖析,这种两池间的互相攻击状况是较为复杂的,在二者算力不同与相同的状况下二者需要投入的算力的比率与最后收益也是不一样的,也就是说达到的纳什均衡的平衡点是不同的,篇幅与水平所限这里就不展开来讲了,有意愿深究的可以自行去知道

而且在理论上这种攻击的困境是不可回避的,只有当双方中一方的算力在总算力中占比超越80%才能在这种博弈中获得收益,也就是可以防止攻击,当然,这样的情况几乎是不会发生的

另外在这种攻击模式下其实还有一点应该注意,就是要防范特务矿工的诞生,A矿池派出矿工渗透进B矿池,B矿池攻击A矿池的时候假如不进行检查大概将A矿池派来的矿工又给派了回去,如此这部分矿工就成了特务,如此A矿池自然乐见其成,被B派来的A矿工将在A手下诚实的工作,提交区块,B矿池血亏,所以要进行防范矿池就需要有我们的亲兵,也就是验证过的忠诚的矿工,这对普通的矿池而言其实不是那些问题,它们手下都有很多的矿机,,用以出租或供应等,当然了,具体的规模普通人也无从得知

Block withholding

下面要说的就是区块截留攻击,其实它应该算是一类型型的挖矿方案,即挖到区块后是在手上保留一段时间还是直接丢弃,这种方案会有不一样的人出于不一样的目的来使用,只是都不是什么好事,下面大家就来剖析可能的各种状况

自私挖掘 在这样的情况下矿工或矿池挖到区块后并不会立刻将其广播出去,而是将其在手上留存一段时间

对于矿工而言,他可以将手上的算力均摊到各个矿池里,一旦他在某个矿池里挖到了区块,他就将区块给扣留下来,然后将手头的算力集中到这个矿池进行挖矿,累积share,然后提交区块以获得更多的利益,当然如此的话大概其他人在这期间里也挖到了区块并将其公布,所以还是有肯定的风险,但最后从统计学的角度来看用这种方案还是会提升收益

对于矿池而言状况则要复杂一些,矿池在获得到有效区块后他也可以选择保留区块,下面他可以将手上的算力之间投入下一波的区块挖掘,一定量上也算是抢得了先机,然后对于挖到的区块他将立刻同步给手下的节点,并不广播给全节点

然后矿池可以对互联网状况进行监控,一旦发现有新的区块头的出现,立刻让手上的节点广播己方的区块,使其他矿池失去该区块的奖励,其实如此的风险还是有点大,除非该矿池算力足够大,总能处于优势地位,而且也要考虑互联网传播效率的影响,通常而言选择保留一段时间广播区块即可

矿池使用这种方案进行挖矿在短期会使我们的收入减少,但如此也会打压其他池的收入,甚至损失更多,其他的诚实的矿工也会会倒戈到自私挖矿的矿池里以获得更多收入,如此就会壮大自私池的算力,进一步加剧这种现象,并让自私池所持有些算力持续增加,甚至跨过50%的红线,如此的后果是很紧急的

不过由于多方面是什么原因现在这种攻击还是极少见,现在来看主要还是理论研究上多一点,在理想模型下一个最开始仅有33%算力的矿池逐步采取这种方案是可以逐步提高我们的算力水平到50%

丢弃区块 下面大家来看看挖到区块后不直接丢弃它的状况,如你所见,这是一种破坏性的攻击,它也可以分为多种状况

1.容易介绍

对于区块链的有关技术知道一些的同学对于挖矿也肯定不会陌生,这是工作量证明的共识机制的核心,大伙一块求解一个密码学问题以获得可用的区块头,从而产生新的区块,早期的时候你直接用自己电脑都可以参与挖矿,然而伴随BTC价值的增长,参与人数愈加多,大规模的GPU并行挖矿提供了很多的算力,之后定制化的ASIC设施进一步与一般计算机拉开了差距,于是挖矿的困难程度也伴随算力的增长急剧攀升,到目前你想拿一般计算机挖矿是没什么指望了。

目前想靠挖矿挣钱基本只能购买矿机来作为挖矿设施,说起来定制的ASIC芯片刚出现时确实是引起了不小的恐慌,毕竟这玩意性能相较于一般机器太恐怖了,它的运算速度相比你的电脑快了近一百万倍,这比较容易致使算力集中化,那样区块的出块权岂不是被一家学会想如何玩就如何玩,这样的情况可能也是中本聪设计BTC时所没料到的,所幸之后矿机设施飞速普及并广泛分布在世界各地,算起来作为主要矿机生产厂家的比特国内也是挺厉害的,这种模式应该说也进一步刺激了BTC价格的上扬

当然了,矿机这样常见之后,你的方案假如还是自己挖矿去获得区块奖励,那样你想把本钱收回来可能都非常困难,所以矿池也成了现在挖矿权势的主流,大伙等于在一个节点下挖矿,矿池根据贡献将区块奖励分发给大伙,如此大伙的收入就会较为稳定,也比自己单打独斗要强得多,这种由矿池垄断算力的状况有利也有弊,其中心化的性质饱受诟病,BTC在设计的时候可能也没预料到会出现如此的局面

除此之外目前数字货币市场也算是百花齐放,有的货币使用特殊的挖矿的加密算法以对抗ASIC设施,譬如XMR币等,由于针对这种算法的ASIC设施较难设计而且速度提高也没这么大,所以购买这种设施的动力不足,还有一些则使用不一样的共识算法如POS和DPOS等,这就无需挖矿来产生区块了,这方面的内容感兴趣可以自行知道,下面进入正题

0x1.矿工的恶意破坏

在这样的情况下矿工在矿池内挖到区块后并不公布而是直接丢弃,但share依旧正常提交,如此的话等于该矿工没为矿池创造任何收益,但一直在参与其他诚实的矿工挖矿结果的分红,这种行为显然是损人不利己的,通常也没人会用,这里仅仅作为一种可能性

Q=Pbx/Mb + / = /)

这是在A矿池推行攻击后获得的收益,理论上讲A矿池通过选取适合的x进行攻击是可以使收益较未推行攻击前有所增加的,不过当时提出这个思路的时候选取的未推行攻击前的收益被容易表示为了Ma,也就是A矿池的算力,近期又看了一篇论文表示这种假设非常不严谨,事实上伴随攻击的进行系统的算力降低了,变成了1-x,在这种算力下整个系统额度出块速度也将降低,这意味着在进行攻击与否的两种不同状况下运行相同的时间挖到的块的数目是不一样的,而BTC的困难程度调整周期是2021个区块,接近两周的时间,这是一个非常长的跨度,时间差将带来不少损失,想要回本就得保持攻击到困难程度改变之后,然而想维持攻击这么长期不被发现是一件非常困难的事,在重新计算后发现单纯对B进行区块截留攻击是一个吃亏的行为,这也在某方面讲解了这种攻击得到确认的报告还说很少见,主要就是14年Eligius矿池确认过一次这种攻击,损失了300个BTC,这里的损失是指损失了被丢弃的本应得到的挖矿奖励,这可能是综合了其他的攻击手法亦或是就是一场报复性攻击

4.矿池攻击

下面大家就来看看矿池主要会面临哪些威胁

Pb * x/Mb

而A矿池自己诚实挖矿还可以拿到一部分区块奖励

推广托管矿池

推广托管矿池应该算是现在的主流,即一个矿池有一个中心服务器,对其下属的所有矿机进行协调与管理,同时这个服务器通常也会与一个或多个完全节点进行同步,如此就可以帮下属的矿工完成对区块的验证,从而缓解矿机的重压,毕竟一个完整的区块副本还是非常大的,如此矿工们也可以投入更多的算力获得更多的价值

/

0x2.一个攻击矿池

上面大家讨论的恶意的矿工是给自己打工的,这里大家要介绍的恶意矿工是给其他矿池打工的,这里为了容易大家假设有两个矿池A和B,其中A对B派遣恶意矿工进行攻击

这个模型还是比较容易,大家可以设总算力为1,A池用x算力渗透进B区块进行攻击,显然这x算力就是躺着不干活的算力了,那样此时大家的总算力其实是1-x

然后大家分别设A与B拥有些算力为Ma和Mb,如此的话B出块的概率即为Pb = /,于是A从B处拿到区块奖励

矿池对收益的结算模式

第一大家来看看矿池是怎么样分发收益的,现在市场上存在不少的结算模式,大家介绍几种主流的方法

Proportional 这是一种比较直接的奖励机制,它用目前矿池发现的上一个区块到下一个区块被发现作为一个周期,统计在这之间每一个矿工所提交的share,然后计算每一个矿工所占的份额,即百分比,然后发放区块奖励

其实如此就比较容易致使一种状况,伴随一个周期时间的增长你在这个矿池所提交的share会变得愈加不值钱,由于什么时间能挖到块是不确定的,而假如在一个周期的刚开始就挖到了块,就算你只提交了几个share也能获得比在之后提交几百个share更多的收益,看得出来这种模式并不健康

这种模式是早期BTC矿池使用的奖励机制,但这种模式容易致使矿工使用一种跳池的方案来获得更多收益,这个大家后面再叙述,所以这种模式现在基本被弃用了

Pay-per-share 在这种模式下,矿池将根据矿工所提交的share即刻支付成本,矿池会依据你的算力在矿池的占比,并估算矿池的算力天天所能获得的收入来给你分配收益,通常每一个sahre的成本是固定的,如此的话矿工天天所能获得的收入就比较稳定了,不过如此的话矿池就得承担肯定的风险,所以就需要对矿工收取更高的手续费,这也算是稳定所需要付出的代价吧

Pay-per-last-N-shares PPLNS与PPS非常类似,但它取的是区块发现首要条件交的N个share来分发奖励,N是固定了,但什么时间发现区块并不确定,所以总share大于N就得舍弃一部分,小于N又得重复计算一部分,如此有哪些好处是防止了Proportional中share持续的贬值状况,于是也就能防范跳池的矿工

Slush’s Method 这种办法是在Proportional的基础上进行了改进,初衷是想对抗跳池的方案,它按矿工提交的share计算积分,而每一个share所值的积分伴随时间的增长而不断提升,这算是对于Proportional中时间较长的周期的最后一个share的奖励过低的一部分补偿,但这种办法并没完全消除Proportional的影响,发现的两个区块间隔较短的时候,每一个share依旧很值钱,理论上来讲还是存在跳池的可能

Geometric method 这种办法是对Slush’s Method的进一步改进,它也是对share进行积分,越后面的share获得的积分也越多,但积分的增长方法不同,这里是以指数级增长,所以随时间的推移每一个share所获得的回报也呈现指数级的降低,这就遏制了前面提交的share的价值

当然了,具体的算法设计要愈加精巧,最后计算得到的奖励的期望在采取跳池方案与否的状况下是相同的,所以可以完全防止跳池方案的攻击

除去这部分办法还有不少的奖励分发模式,譬如MPPS,SMPPS,ESMPPS等,这里就不一一介绍了,感兴趣的可以自行知道

所以A矿池获得的总收益即为

没办法独吞的区块奖励

有的矿工可能会想既然大伙都是在一块计算挖矿,当我挖到块的时候我把它扣留下来不提交给矿池,而是自己将它广播出去,如此岂不是可以独吞区块奖励

需要指出的是虽然这个想法非常危险,但却没可行性,由于大家挖矿的时候其实是在计算符合需要的区块头,在这个区块头中就包含了这个区块的区块奖励的收益地址,当这个区块被确认后获得区块奖励的只有区块头中的那个地址,当矿池把挖矿任务分发下来的时候已经写好了区块奖励的接收地址,所以就算你私自广播出去也是没任何收益的,假如你在计算时篡改这一地址那就变成你的个人挖矿了,跟矿池就没关系了,所以这条路现在是走不通的

之所以说现在走不通是由于这种由大矿池垄断算力的生态已经引发了很多人的担心,有人就提出修改挖矿算法使得修改区块头中的收益地址变得可能,如此矿池手下的矿工可能都会选择私自广播区块,从而使得矿池瓦解,当然了,我感觉也只不过想想,毕竟牵扯太多

0x5.怎么样防范

现在提出的较可能的区块截留攻击的解决方法是更改挖矿算法使得矿工没办法验证得到的share是不是是符合BTC需要的区块解,如此也就没办法选择丢弃了,下面是一种可能的方法

每一个Block额外添加三个字段——SecretSeed,ExtraHash和SecretHash 其中ExtraHash = hash ExtraHash是block header的一部分,也将参与blockhash的运算 SecretHash = hash 之前一个有效的block需要满足BlockHash前32n位为0,目前还需要满足BlockHash前32位为0,同时满足SecretHash的前n位为0 由于矿工并不知晓SecretSeed,所以没办法计算SecretHash,也将没办法验证区块是不是满足需要,只能在找到满足需要的BlockHash后就提交share,由矿池来完成区块的验证

h32h3矿池

由于推广托管矿池的管理员存在作弊的可能,特别是那些大矿池,假如有那个意愿他们是可以控制区块的走向,所将来面又出现了p2p 矿池

如它的名字所示这种矿池没中心服务器,取而代之的是一个名为份额链的像区块链的系统,矿工们在这条链上进行挖矿,这条链的困难程度远低于BTC,基本上30秒一个块,大伙在这里计算并由该份额链统计share,当份额链有一个区块头的hash满足BTC的困难程度需要时,这个区块即使是挖矿成功的结果了,并将被广播出去,然后份额链将对区块奖励根据统计的share进行分发,其实就是用一个区块链系统达成了一个中心服务器

不过这种矿池相比推广托管矿池要复杂的多,效率也相对比较低下,所以目前也在慢慢淡出市场,毕竟资本一直逐利的

5.写在最后

在上面的文章里大家探讨了一下针对矿池的攻击手法,还是挺有意思的,其实大部分的攻击都是针对推广托管矿池的,说起来貌似点对点矿池还是比较安全的,首要条件是点对点的节点要做好安全防范,不然被攻击者渗透进来修改了代码可能会致使下属的算力也失窃用,另外性能上的差距也是一大妨碍,还是有点可惜的

另外在区块截留攻击的背后其实还有不少内容可以去挖掘,文中只不过谈了谈容易的攻击模型,感兴趣的同学完全可以继续深入

最后我想说除去write up外确实极少写这么长的文章,其中逻辑可能有表述不清的地方与可能会有一些纰漏,期望大佬们多多指教,有问题欢迎与我联系。

0x4.怎么样测试

这种攻击其实是非常难测试的,现在而言常见的做法也只不过针对矿工提交的share来计算其算力,与他实质发现的区块数进行对照查询是不是存在问题,不过这种办法成效确实非常有限,由于大概他们确实就是运气不好,而且攻击方总是会对攻击的矿工进行拆分,用很多账号来挖矿,如此对应的算力愈加小了,不确定性原因更大,除非统计的周期足够长,不然非常难发现攻击的具体出处,只能如此被动的挨打

此文出于传递更多信息之目的,并不意味着同意其看法或证实其描述。本网站所提供的信息,只供参考之用。

本文标签: 矿池挖矿过程

上一篇:没有了

下一篇:没有了