『学概念找员外』通过贿赂来进行分叉攻击

通过贿赂来进行分叉攻击

通过购买足够多的矿机来控制大部分的算力,是一件非常困难而且昂贵的任务。但可能还是会存在其他简单的方法来进行分叉攻击:相比直接购买算力以获取超越所有其他人算力的昂贵做法,贿赂那些有能力的矿工来为你来工作也是可能的。

有几种贿赂其他矿工的方法。其中一个方法是“系统外的”(out of band)——可能找到一些矿工然后直接用现金来贿赂他们。当然一个更加聪明的办法是创建一个新的矿池,然后提供更好的奖励来吸引其他矿工来加入,即使矿池运行可能因此而亏损。虽然这种奖励不可能长期维持下去,但是可以维持足够长的一段时间直到可以发动一个成功的分叉攻击,然后获利。还有一种方法是在你的分叉区块链里留下足够多的“小费”,多到足以让其他矿工离开最长链来加入你的分链,矿工们希望你的链成为最长的链,这样一来他们可以收取你留下的小费。

不管是哪种贿赂的方式,核心思路都是一样的:有别于直接获得大量算力,攻击者去贿赂那些已经拥有算力的人,让他们帮助自己分叉出另外一条最长的区块链。

可能矿工们并不愿意去帮助一个攻击者,因为这么做会危害整个货币的价值,而他们已经在此之上投入了相当多的资金和矿机。从另一方面看,虽然矿工们作为一个整体可能希望保持货币的价值,但是他们可能做不到一致行动。个别矿工可能会因为短期利益,将个人利益置于集体利益之上。从经济学的角度来看,那就是个经典的“公地悲剧”了。

这些假想在现实中未曾发生,贿赂攻击是否可行,这依旧是一个悬而未决的问题。

临时保留区块攻击

假设找到一个区块之后,默认的做法是你会立刻向全网宣布找到的区块。但是如果你想进行一个临时保留区块攻击,你也可以不立刻宣布,然后在这块上面继续挖矿,期望你可以在其他矿工找到下一个区块之前连续找到两个有效区块,在整个过程中秘密地保留你所发现的区块。

如果你已经拥有两个公共区块链上超前的秘密区块,那么全网剩下的矿工所做的挖矿努力都会被浪费,其他的矿工都会在他们认为最长的链上继续挖矿,一旦他们宣布他们找到了一个有效区块,你可以立刻宣布你所秘密保留的两个区块,这样你的区块链立刻变成了最长的有效链,而其他人辛苦挖出来的区块马上就变成了一个孤块而被丢弃,你的这种行为被称为自私挖矿。通过使网络上的其他矿工浪费算力计算出来的区块瞬间过期,可以有效地增加你的挖矿获利。

这里面的关键是你需要运气好到连续发现两个区块,风险在于你只领先了一个区块,其他人就已经向网络宣布发现了一个有效区块。如果这种情况发生,你必须立刻宣布你的秘密区块,这叫造成了一个区块的分叉,每个矿工都需要选择哪一个区块继续挖下去。当然,你希望大部分其他矿工最早监听到你的区块并在上面继续挖矿。由于这种攻击的有效性严重依赖你赢得这个竞赛的能力,所以网络位置至关重要。你可以尝试跟所有的节点建立链接,以使得你的区块可以第一个到达其他的节点。

假设只有50%的机会可以赢得这个竞赛,在α>0.25的情况下,自私挖矿可以比默认策略更有收益。如果α>0.333,即使你输掉每一个这种竞赛,仍然可以获得更高的收益。这种攻击的存在是令人震惊的,原来大家都相信如果没有很大的算力——比如α≤0.5——不会有比默认策略更有利的挖矿策略。所以,即使某个矿工控制的算力低于50%,也是有可能通过切换到其他的挖矿策略来获取更多的收益。

到2015年为止,临时保留区块攻击仅仅是理论上的,在实际中并没有观察到这类攻击事件,自私挖矿则很容易被检测到,因为这种策略会增加同时宣布区块的概率。

你可能感兴趣的:(『学概念找员外』通过贿赂来进行分叉攻击)