主页 > imtoken最新安卓版本下载 > 矿工们指的是 矿池攻击

矿工们指的是 矿池攻击

imtoken最新安卓版本下载 2023-01-17 01:06:42

前言

最近对区块链的一些底层算法和机制做了一些了解和研究。今天我们来看看比特币的底层激励机制,也就是挖矿形成的矿池中的一些攻击方式。希望大家喜欢

简介

熟悉区块链相关技术的同学也会熟悉挖矿。这是工作量证明共识机制的核心。一起解决一个密码学问题,获取可用的区块头,从而生成新的区块,早期可以直接用自己的电脑参与挖矿。但是,随着比特币价值的增加,参与者数量的增加,大规模的GPU并行挖矿提供了大量的算力。之后,定制化的ASIC设备进一步拉开了与普通电脑的差距,因此挖矿难度也随着算力的增长而急剧上升。现在用普通电脑挖矿已经没有希望了。

现在想通过挖矿赚钱,基本上只能购买矿机作为挖矿设备。说起来,定制ASIC芯片刚出现的时候,确实引起了不小的恐慌。毕竟这玩意的性能比起普通机器来说,实在是太吓人了。现在,它的计算速度比你的电脑快近百万倍,这很容易导致计算能力的集中。那样的话,出块权不是由一家人控制,随心所欲地玩吗?在这种情况下,也许是中本聪在设计比特币时没有预料到的事情。幸运的是,采矿设备开始流行并在世界各地广泛分布。比特大陆作为矿机大厂,实力也相当强。这种模式应该说也进一步刺激了比特币价格的上涨

当然,在矿机如此普及之后,如果你的策略是自己挖矿获得区块奖励,那么你可能很难收回资金,所以矿池已经成为当前算力的主流. ,每个人相当于在一个节点下挖矿,矿池根据贡献度给每个人分配区块奖励,这样每个人的收益都会更加稳定,比单打独斗要强很多。这种算力被矿池垄断。比特币的情况有利也有弊,其中心化性质一直受到诟病。比特币在设计时可能没有预料到会出现这样的情况

此外,加密货币市场现在正在蓬勃发展。有些币种使用特殊的挖矿加密算法来抵抗ASIC设备,比如门罗币,因为这种算法的ASIC设备设计难度大,速度也没有那么高。所以购买这种设备的动机不足,有的使用了POS、DPOS等不同的共识算法,不需要挖矿出块。如果您对这方面感兴趣,可以自己了解一下。主题

矿池运营保障

每个人都加入了矿池挖矿,矿池必须采取措施保护自己的利益。对于一些无良矿工来说,决不能让他们轻易破坏矿池的运行,对吧

p>

矿池收益结算方式

首先,我们来看看矿池是如何分配收益的。市场上有多种结算模式。我们介绍几种主流方法

比例

这是一种比较直接的奖励机制。它以当前矿池发现的上一个区块到发现下一个区块为一个周期,统计这段时间内每个矿工提交的份额,然后计算每个矿工的份额,这是一个百分比,然后区块奖励发放

事实上,这很容易导致一种情况。随着周期时间的增加,您在这个矿池中提交的份额将变得越来越不值钱,因为不确定何时会挖出一个区块。而如果一个区块在一个周期的开始就被挖出来,即使你只提交了几份,也可以获得比之后提交数百份更多的收益,可见这种模式是不健康的

这种模式是早期比特币矿池采用的奖励机制,但是这种模式很容易导致矿工采用跳池策略来获得更多收益,我们稍后会介绍,因此这种模式目前已基本被弃用

p>

矿工们指的是

每股付费 (PPS)

在该模式下,矿池将根据矿工提交的份额立即支付费用,矿池将根据你在矿池中的算力占比估算矿池的每日收益。为了给你分配收益,一般每个sahre的手续费是固定的,这样矿工每天可以获得的收益是比较稳定的,但是这种情况下矿池要承担一定的风险,所以需要向矿工收取更高的费用这也是稳定的代价。

按最后 N 股付费 (PPLNS)

PPLNS 与 PPS 非常相似,但它需要在区块发现之前提交 N 股来分配奖励。 N 是固定的,但是找到块的时候是不确定的,所以总份额大于 N 的部分必须丢弃 小于 N 的部分必须重复计算。这样做的好处是避免了Proportional的股份不断贬值,所以也可以防止矿工跳池

Slush 的方法

这种方法是在Proportional的基础上改进的。初衷是为了对抗跳池的策略。它根据矿工提交的份额计算积分,每份份额的积分随着时间的推移而增加。 ,这是对 Proportional 中较长期最后一个份额的低回报的部分补偿,但这种方法并没有完全消除 Proportional 的影响。当找到的两个区块的间隔时间很短时,每个份额还是很有价值的,理论上还是有跳入池子的可能

几何方法

此方法是对 Slush 方法的进一步改进。它还点股票。后面的股份获得更多的积分,但积分的增长是不同的。这里是指数增长,所以随着时间的推移,每一股获得的回报也呈现指数下降,这抑制了之前提交的股票的价值

当然,具体的算法设计要更加精巧,无论是否采用跳池策略,最终计算出的奖励的期望值都是一样的,所以可以完全避免跳池策略的攻击

除了这些方法之外,还有很多奖励分配方式,比如MPPS、SMPPS、ESMPPS等,这里就不一一介绍了。有兴趣的可以自行了解

阻止无法吞咽的奖励

有些矿工可能会想,既然大家一起计算,一起挖矿,我挖一个区块的时候矿工们指的是,我会扣留它,不提交给矿池,而是自己广播出去,这样我就可以拥有这个区块。区块奖励

需要指出的是,这种想法虽然很危险,但并不可行,因为我们挖矿的时候,其实是在计算符合要求的区块头,而区块头中包含了这个区块的区块奖励。当区块被确认后,只有区块头中的地址才能获得区块奖励。矿池分发挖矿任务的时候,已经写入了区块奖励的接收地址,所以即使你私下广播也没有收益。如果你在计算的时候篡改了这个地址,就会变成你的个人挖矿,和矿池没有关系,所以这条路目前是行不通的

目前之所以行不通,是因为这种大型矿池垄断算力的生态引起了很多人的关注。有人提出修改挖矿算法,让修改区块头中的收益地址成为可能,这样矿池下的矿工可能会选择私下广播区块,从而导致矿池崩溃。当然,我只是想想,毕竟涉及的太多了

不能偷懒的挖矿过程

在发现拿区块奖励不可行后,有矿工认为,既然收益的最终分配是按照大家的计算量来分配的,那我就不做计算了,然后随便提交一个值。 ,这个假算力不是省了很多钱吗

矿工们指的是

这个想法还是很危险的,但是不可行。这里我们需要知道的是,矿池分配任务的时候,并不是你直接计算出满足挖矿要求的区块哈希。他们通常设置较低的难度。比如满足要求的区块头的hash必须满足前16位0,那么矿池给你的任务可能只要求计算出的hash满足前10位0就可以提交为一份。方也会做验证。因为这个任务的难度系数比较低,基本保证了你可以频繁提交分享,这也为分析你的提交记录发现区块扣留攻击提供了帮助。具体的我们以后再说

至于如此低难度的任务如何满足计算出符合要求的区块头,这是一个概率问题。矿池的目的是确保每个人都在进行计算并积极提交份额。只要大家都在计算,那么就有一定概率遇到符合要求的区块。比如这次你完成了任务,提交了一个哈希值前10位为0的区块。下次你挖一个哈希值前12位为0的区块时,继续挖掘的总次数。可以遇到满足需求的区块头

托管矿池的矿池类型

托管矿池应该算是目前的主流,即一个矿池有一个中央服务器来协调和管理其下属的所有矿机,这个服务器一般会同步一个或多个完整的节点,这样就可以帮助下属矿工完成区块的验证,从而减轻矿工的压力。毕竟一个完整的区块副本还是很大的,这样矿工们也可以投入更多的算力来获取更多的收益 p>

p2p 池

因为托管矿池的管理员存在作弊的可能,特别是那些大型矿池,如果他们有意愿,他们可以控制区块的方向,所以p2p矿池出现在后面

顾名思义,这个矿池没有中央服务器。取而代之的是一个类似区块链的系统,叫做共享链,矿工挖链的难度比比特币低很多,基本上每30秒出一个块,大家在这里计算,从共享链中计算份额。当共享链有满足比特币难度要求的区块头哈希时,该区块被认为是一次成功的挖矿。结果会被广播出去,然后共享链会根据统计共享分配出块奖励,其实就是用区块链系统实现了一个中心服务器

但是,这种矿池比托管矿池复杂得多,效率也低得多,所以现在正在慢慢淡出市场。毕竟,资本总是追求利润

矿池攻击

让我们来看看矿池面临的主要威胁

跳池

事实上,我们之前已经提到过几次。关于比例奖励模型,如果某个矿池的运气不是很好,并且该块很长时间没有被挖出,那么这个矿池中矿工的份额就会开始不断贬值,这意味着计算能力变得越来越不值钱。这时候部分矿工可以选择将自己的算力转移到另一个刚刚挖出区块的矿池去挖矿,因为时间刚刚开始计算,每份的价值都比较高,这意味着算力也更有价值。如果一段时间不挖,也可以选择再次跳入池中,不断寻找份额价值比较高的地方。不要太在意钱

从统计上看,采用这种策略获得的最终收益肯定比一直呆在矿池中的收益要高得多。但是随着目前矿池收益分配策略的变化,这种攻击策略已经行不通了

阻止预扣

以下是区块扣留攻击。其实应该算是一种挖矿策略,即挖出一个区块后,不管是保留一段时间还是直接丢弃,这个策略会因不同的人而不同的用途,但它是不是一件好事。让我们分析一下可能的情况。

自挖<​​/p>

矿工们指的是

在这种情况下,矿工或矿池不会在挖出区块后立即广播该区块,而是保留一段时间

对于一个矿工来说,他可以将手中的算力平均分配到各个矿池。一旦他在某个矿池挖了一个块,他就会扣除该块,然后使用手中的计算能力。在这个矿池中集中挖矿,积累份额,然后提交区块获得更多收益。当然,在这种情况下,有可能其他人也在此期间也挖了区块并公布了,所以还是有一定风险的,但最终使用这种策略,从统计上看还是增加收益的

对于矿池来说,情况更加复杂。矿池获得有效区块后,他也可以选择保留该区块,然后他可以将自己的算力投入到下一波区块中。挖矿,在一定程度上可以看作是一次机会,抓住了机会,然后他会立即将挖出的区块同步到他的下级节点,不会广播给所有节点

然后矿池可以监控网络情况。一旦发现新的区块头,立即让手头节点广播自己的区块,让其他矿池失去该区块的奖励。其实这样的风险还是有点大的,除非矿池的算力足够大,否则总能处于优势地位,还要考虑网络传播效率的影响。一般来说,你可以选择让广播块保持一段时间

使用这种策略的矿池在短期内会减少自身的收益,但这也会压制其他矿池的收益,甚至损失更多,其他诚实矿工也可能投奔自私挖矿。为了在矿池中获得更多收益,这会增加自私池的算力,进一步加剧这种现象,让自私池持有的算力继续增加,甚至越过50%的红线。这样做的后果是非常严重的

但由于种种原因,目前此类攻击还很少见。目前主要以理论研究为主。理想模型下,一开始只有33%算力的矿池逐渐采用这种策略。是的,您可以逐渐将您的计算能力提高到 50%

丢弃块

我们来看看挖矿后没有直接丢弃区块的情况,可以看出,这是一种破坏性攻击,也可以分为多种情况

0x1.矿工恶意破坏

在这种情况下,矿工在矿池中挖完区块后并没有发布区块,而是直接丢弃,但是份额仍然正常提交,这意味着矿工没有为矿池创造任何收益,但是一直在参与其他诚实矿工挖矿成果的红利,显然对他人有害,对自己不利。一般来说,没有人会使用它们。这只是一种可能。

0x2.一个攻击池

我们上面讨论的恶意矿工为自己工作。这里我们介绍为其他矿池工作的恶意矿工。为简单起见,我们假设有两个矿池,A 和 B,A 将 B 派发给 B。恶意矿工攻击

这个模型比较简单。我们不妨将总算力设置为 1。A 池使用 x 算力渗透到 B 块进行攻击。很明显,这个x算力属于说谎不工作的算力,那么这个我们的总算力其实就是1-x

然后我们设置A和B的算力分别为Ma和Mb,这样B产生块的概率为Pb = (Mb-x)/(1-x),所以A从B块奖励

Pb * x/Mb

矿池自身诚实挖矿也可以获得部分区块奖励

矿工们指的是

(Max-x)/(1-x)

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

Q=Pbx/Mb + (Ma-x)/(1-x) = (Mb Ma - x^2)/(Mb(1-x))

这是攻击A矿池后获得的收益。理论上,A矿池可以通过选择合适的x来进行攻击,与攻击前相比,可以增加收益。但是,当时提出这个想法的时候,攻击前选择的利润简单地表示为 Ma,即 A 矿池的算力。我最近读到一篇论文,说这个假设并不严谨。事实上,系统的计算能力随着攻击的进行而降低。现在,它变成了 1-x。在这样的算力下,整个系统的出块速度也会降低,这意味着在两种不同的攻击条件下同时挖出的块数是比特币的难度调整周期是2016个块,也就是接近两周。这是一个很长的跨度。时差会带来很大的损失。如果你想恢复,你必须保持攻击,直到难度发生变化。但是,要让攻击在这么长时间内不被发现是非常困难的。重新计算后发现对B的块拦截攻击是劣势,这也说明了这次攻击已经被证实的事实。报道还称,这种情况非常罕见,主要是因为 Eligius 矿池在 2014 年确认了一次这次攻击,损失了 300 个比特币。这里的损失是指本应获得的废弃挖矿奖励的损失。这可能是其他攻击方式的组合,也可能是报复性攻击

0x3.两个矿池互相攻击

这种情况比较复杂。可能是某个矿池发现自己被攻击,以自己的方式反击攻击的矿池,也可能是两个矿池一开始就有恶意。互相撕破

为简单起见,我们假设两个矿池 A 和 B 都相互进行了区块拦截攻击。一旦战争开始,除非双方同时停止,否则很容易陷入囚徒困境。有趣,我们来谈谈博弈论

我想每个人都听说过囚徒困境,这里有一个简单的例子

现在警方已经逮捕了两名嫌疑人A和B,他们是团伙成员,但因为没有足够的证据指控,将分别审问他们

如果他们俩都认罪,那么每个人都将被判处五年徒刑。如果两人都认罪,因证据不足,只会被判刑半年。但是,一旦其中一人认罪而另一人不认罪,认罪的人将立即被释放。对方将被判十年有期徒刑

这是一个非常经典的囚徒困境场景,假设双方都是自私的,不关心对方的生死,那么他们必须完全考虑自己的利益,然后假设你做出选择

1.对方不认罪,那我认罪就可以直接释放,好吧,选择背叛

2.对方认罪,那我不认罪就判十年,不行,我只能认罪,好吧,还是选择背叛

如果双方都这样想,那么这场博弈的最终结果将是双方互相背叛,各判五年,也就是这场博弈达到的纳什均衡,虽然最优解该集团应该守口如瓶才能获得六个月的监禁,这就是困境所在

这里的两个矿池之间的博弈,其实也发生了同样的情况

两个矿池需要选择攻击或不攻击的策略。如果没有矿池攻击,此时收益不会受到影响。如果一个矿池攻击另一个矿池而不攻击,则攻击矿池将增加收益,而遭受矿池收益减少。如果两个矿池都攻击,收益会减少,但如果没有受害,减少的幅度会小得多。此时,我们仍然假设双方都采取自利的策略。根据以上分析,在不知道对方选择的情况下,两人极有可能选择互相攻击,从而陷入囚徒困境的纳什均衡

矿工们指的是

上面的游戏只是一个简单的分析。这种两个池子之间的相互攻击比较复杂。当两个矿池的算力不同且相同时,它们需要投入的算力与最终收益的比例也不同,也就是说达到的纳什均衡的平衡点不同。限于篇幅和层次,这里就不展开了。有心去探究的可以自行理解

理论上,这种攻击的困境是不可避免的。只有当两方之一的算力占总算力的 80% 以上时,我们才能在这场博弈中获得收益矿工们指的是,即可以避免攻击。当然,,这几乎不会发生

此外,这种攻击方式还有一点需要注意,就是防止间谍矿工的诞生。 A矿池派矿工渗入B矿池。 B矿池攻击A矿池的时候,如果不检查A矿池派来的矿工,就有可能把这些矿工送回去,让这些矿工成为间谍,所以A矿池看到成功自然是高兴的,而且B派出的A矿工会在A手下老老实实工作,并提交Block,B矿池的血亏,所以要防范矿池,你需要有自己的贴身士兵,也就是经过验证和忠诚的矿工,这对一般矿池来说不是问题,他们都有大量的矿场。机器,用于出租或出售,当然具体规模不为普通人所知。

0x4.如何检测

这种攻击实际上很难被发现。目前比较普遍的做法是计算矿工提交的份额的算力,和他实际发现的区块数比较,看看有没有问题。方法的效果确实很有限,因为有可能对方真的很倒霉,而且攻击者经常拆分被攻击的矿工,使用多个账户进行挖矿,这样对应的算力就更小了,不确定因素更高。很大,除非统计周期够长,否则很难找到具体的攻击源,只能被动挨打

0x5.如何预防

目前提出的区块拦截攻击最可能的解决方案是改变挖矿算法,使矿工无法验证获得的份额是否是符合比特币要求的区块解,从而无法被丢弃。以下是一种可能的方式

因为矿工不知道SecretSeed,所以无法计算SecretHash,也无法验证区块是否符合要求。他们只有在找到符合要求的BlockHash后才能提交分享,矿池将完成对区块的验证

写在最后

在上面的文章中,我们讨论了针对矿池的攻击方法,这很有趣。事实上,大多数攻击都是针对托管矿池的。看来P2P矿池还是比较安全的,前提是P2P节点一定要做好安全防范,否则攻击者渗透修改代码,可能导致下属算力被盗。另外,性能差距也是一个很大的障碍,很可惜。

另外,区块拦截攻击背后还有很多可以探索的内容。本文只讨论一个简单的攻击模型。有兴趣的同学可以继续深入了解

最后我想说的是,除了写起来,我很少写这么长的文章。逻辑可能不清楚,可能存在一些缺陷。我希望你能给我更多的建议。有任何问题请联系我

参考文献

矿工的困境

比特币联合挖矿奖励系统分析

区块链自私挖矿研究与分析

关于比特币中 BWH 攻击的说明

POW共识算法博弈困境分析与优化