玩币族移动版

玩币族首页 > 行情分析 >

比特币矿工的困境

  开放矿池面临矿工囚徒困境,任何一个开放矿池可通过攻击其他矿池,增加自己利润,但如他们都选择攻击对方,获得利润要少于都不选择攻击对方的情况。矿池利润下降,矿工将转移到其它或小矿池。短期刺激能引起自发分解,使比特币架构更分布,健壮和安全。

  ----

d

  矿池是比特币生态系统最重要的一部分。矿池使得小矿工能够在合理的商业风险的条件下,进行挖矿。然而,矿池也给比特币带来了风险,以前成功的矿池的规模达到足以威胁到比特币。

  到目前为止,还没有力量能够阻止这种现象。加文安德森--比特币基金会的首席科学家--一直在不断督促矿工使用规模更小的矿池,其他研究者,包括我本人,建议使用技术手段减少矿池规模(这儿和这儿)。但是,比特币社区的这种努力只取得了有限的成功,技术解决方案仍在开发阶段,距离投入使用还非常遥远。

  现在,我将解释为什么这些解决方案可能不是必要的。在一份分析中,我说明了开放的矿池面临着矿工困境--比特币矿工版本的囚徒困境。在矿工困境下,矿工可以选择攻击其他矿工,或者不理会其他矿工。我发现任何一个开放的矿池可以通过攻击其他矿池,增加自己的利润。然而,如果他们都选择攻击对方,那么他们获得利润要少于他们在都不选择攻击对方的情况下获得的利润。

  众所周知的是,矿池可以通过装作为另一个矿池工作,从而攻击另一个矿池。发起攻击的矿池的收益因此会减少,但是它不会通过发现区块为被攻击的矿池做出贡献。直到最近,人们仍然相信这样做不能增加攻击者的利润。

  因为区块截留攻击(block withholding attacks)并不普遍(这个是例外),至少据我们所知是这样的,我们能够推测,矿池做出了正确选择,同意不进行互相攻击。然而,我的分析却表明,这是一个不稳定的平衡。只有当自己不被攻击时,矿池不进行攻击才是有意义的。如果一个矿池开始攻击其它矿池,它将迫使其它矿池进行报复。

  一旦矿池被攻击时,公开矿池(public pool)的利润会降低,从而导致矿工选择其它矿池,例如选择一个矿工之间互相信任的封闭矿池(closed pool)。这样的封闭矿池要比开放的公开矿池小很多。这种对规模过大的矿池的分解,将给比特币带来比现在更好的安全,现在由少数几个大矿池控制着挖矿。

  现在让我们从技术上进行分析。我将概述攻击行为和用于分析的工具,然后检查分析结果。详细的分析请看这篇论文。但是,我会将首先介绍一些背景。如果你非常熟悉挖矿的机制、矿池和典型的区块截留攻击(block withholding attack),可以直接跳到矿池区块截留部分。

  背景--矿工、矿池和区块截留(block withholding)

  矿工和矿池

  比特币的安全保障来自于被称为矿工的参与者投入的巨大计算资源。这些参与者贡献他们的算力(被称为挖矿算力),比特币系统奖励给他们比特币。我们假设矿工遵循诚实的挖矿协议,因此一个矿工的回报与他的挖矿算力占系统全部算力的份额成比例。当通过工作量证明生成新的区块时,挖矿奖励就会发给矿工,每个矿工会获得与自己的算力成比例的奖励。

  现在,平均而言比特币系统每十分钟会奖励25个比特币。这意味,一个挖矿算力只占到全部算力非常小份额的小矿工,如果独自挖矿,可能在非常长的时间内也得不到奖励。理论上,这些小矿工需要数年的时间才有机会挖到区块,所以他们选择聚集在一个矿池中。一个矿池有一位管理员,当矿池的一位参与者挖到区块时,比特币奖励会发送到矿池管理员。然后,管理员根据每个参与者对矿池算力的贡献,向参与者发放比特币奖励。

  为了估计每个矿池参与者的贡献值,矿池的管理员不仅从矿工那里接收进入比特币系统的完整的工作量证明(full proofs of work),也接收部分工作量证明(partial proof of work)。部分证明类似于完整证明,但是更加容易生成,所以小矿工能够以很快的频率生成部分证明,从而管理员能够很好地估计他们的算力。这些部分证明使得矿池管理员能够确认,一个矿工确实在为矿池的利益进行挖矿,因为在矿工努力发现一个完整工作量证明的过程中,很自然地会发现部分工作量证明,这些部分证明表明矿工投入了多少算力进行挖矿。

  许多矿池是开放的。它们有一个公开的网页界面,矿工可以在此注册。注册完以后,矿工将他们的挖矿硬件指向一个指定的服务器,接受挖矿任务。他们向服务器发送部分工作量证明和全部工作量证明,矿池管理员根据他们的贡献和矿池收入,向他们的账户发送相应的收益。

  目前,矿池比它们应有的规模大太多了。一个算力占全部算力5%的矿池,已经足以提供有效的稳定性了。但是,大矿池的算力份额有时候接近50%,这是一个非常严重的问题。另外,即使算力份额小于50%的矿池也能够破坏比特币系统。在下面我们将看到,这个问题可以自我解决。

  典型的区块截留攻击(Block Withholding Attack)

  矿池挖矿模式刚出现时,就存在区块截留攻击问题了。它是由矿池的参与者发起的攻击,对矿池和其它参与者的挖矿收益造成损害。发起区块截留攻击的矿工只向矿池发送部分工作量证明,但是如果他们发现了完整的证明,他们将抛弃该证明。因此矿池还是会向攻击者发放挖矿收益,但是矿池不能从攻击者的挖矿算力中受益。这减少了被攻击矿池的所有参与者的收益,当然也减少了攻击者自己的收益,攻击者们公平挖矿会获得更多的收益。

  我们注意到工作量证明只能被任务的创建者使用。攻击者不能将发起区块截留攻击的算力再用作它途,不能从这部分算力中获得任何其它收益。

  矿池区块截留(Pool Block Withholding)

  区块截留攻击能够增加矿工的收益吗 最近比特币基金会的首席科学家加文安德森,提出了这个问题。虽然详细的攻击策略没有被公布出来,但是在某些特定情况下,截留区块攻击能够增加矿工的收益。

  现在,我们将看看当一个矿池对其它矿池进行区块截留攻击时,会发生些什么

  攻击策略

  一个矿池有许多忠诚的矿工,按照矿池管理员的指示进行挖矿。一个标准的矿池使用所有的忠诚矿工进行挖矿。发起攻击的矿池是这样进行攻击的:发起攻击的矿池管理员使用自己的一些矿工。他通过在矿池注册,成为一个正常矿工,渗透到被攻击的矿池。然后,它从矿池接受挖矿任务,将这些任务发送给自己的忠诚的矿工。攻击者将挖矿任务重新定向的算力被称为渗透率(infiltration rate),这些矿工被称为渗透矿工(infiltration miner)。当攻击者从渗透矿工那里接收到部分工作量证明时,攻击者将它发送到评估攻击者算力的矿池管理员。然而,当攻击者从渗透矿工那里接收到完整的工作量证明时,攻击者会截留并抛弃它,因此不能为矿池的收益做出贡献(注意,矿工本可以使用渗透算力进行挖矿的,所以造成机会损失)。矿池被欺骗了,认为渗透算力正在进行有效的挖矿,并和矿池分享收益。攻击者将从自己挖矿和他的渗透矿工挖矿中获得收益在所有的忠诚矿工中进行分配。

  矿池博弈

  矿池的收入受到多个因素的影响。一个被攻击矿池的有效挖矿算力不会被攻击改变,但是它的收入被更多的矿工分享。一个攻击者矿池的挖矿算力是减少的,因为它的某些矿工用于区块截留,但是它通过渗透其它矿池获得额外的收入。最后,矿池中有效的挖矿算力降低,使得比特币协议减少挖矿难度。

  将所有的因素考虑在内,我们发现,与人们的直觉相反,一个矿池可以从将一部分算力用于攻击其它矿池中获得更多的收入。因此,每个矿池都会面临是否攻击系统的其它矿池的选择,选择多少渗入率。这会引起矿池间的博弈。

  矿工的困境

  我对矿池博弈的分析表明,一个矿池总是能够通过攻击一个诚实的矿池增加收入。无论这个矿池的规模有多大。这让人有些吃惊:攻击者通过抛弃工作量证明增加自己的利润。正如生活和研究中所表明的,问题在于细节之中,但是攻击者喜欢这两个因素。第一,抛弃工作量证明,他没有失去太多的利益,因为他仍然可以向被渗透的矿池提交部分工作量证明,被攻击矿池仍然会向他分发不错的挖矿收益。第二,通过减少有效的挖矿算力,他自己的挖矿收入增加了。

  但是,如果其它矿池进行报复呢 这样事情将变得更加有趣。如果两个矿池互相攻击(同时其它矿池正常挖矿),矿池应该将它们的渗透率调整到最优状态。在这一平衡点上,没有矿池可以通过使用更多或者更少的矿工渗入到对方矿池,提高自己的收入。所以,矿池面临一个选择:攻击还是不攻击。这是矿工版的囚徒困境。

  在典型的囚徒困境中,两个罪犯不得不决定是否认罪。如果没人认罪,他们都只被判刑一年。如果一人认罪,另一人不认罪,认罪者被释放,不认罪者被判刑五年。如果两人都认罪,两人都被判刑两年。所以认罪是一个优势策略。无论对方做出什么反应,自己认罪都是更好的策略。然而,如果他们都采取优势策略,他们最终陷入公共地悲剧,后果要比都不认罪严重。

  在矿池的情景下,矿池面临相似的困境。如果没有矿池选择攻击,都公平挖矿,他们的矿工将获得应得的收益。如果一个矿池进行攻击,它会因此提高自己的收入,同时其它矿池的收入恶化。如果两个矿池都选择攻击,在均衡点上,每个矿池获得收益都少于都不发送攻击时的收益,但是多于对方发动攻击,而自己不发动攻击的收益。因此,攻击成为了一个优势策略。一个矿池将通过攻击提高自己的收入,无论另一个矿池攻击与否。

  防御

  为了隐藏矿池区块截留攻击,一个攻击者可以在被攻击矿池注册多个矿工账户,每一账户分配少量挖矿算力。虽然,被攻击的矿池将通过不断减少的收入中认识到它正在遭受攻击,但是它很难发现究竟是哪个矿工正在进行攻击。他们都发送部分工作量证明,但是很少有矿工发现一个完整的工作量证明,因此,矿池需要花费很长的时间,才能找到足够证明表明区块被截留。这使得防御区块截留攻击非常困难。攻击者也能够匿名执行攻击,因为矿池注册一般只需要一个接收挖矿收益的比特币地址和/或者一个邮箱地址。被攻击矿池不知道它的矿工究竟是谁。

  深度阅读和相关文章

  这篇文章描述的矿池区块截留攻击不同于自私的挖矿策略(selfish mining strategy)。在区块截留攻击中,区块被抛弃,然而,在自私的挖矿中,矿工只是保守秘密,在合适的时间才发布挖到的区块。区块截留是通过渗入其它矿池做到的,然而,在自私的挖矿中,其他矿工被视作不透明的,或者封闭的矿池。

  矿池使用不同的方法向矿池的参与者分发挖矿收益。有兴趣的读者,可以阅读Meni Rosenfeld的综述。

  总结

  我的分析表明,所有的矿池都不进行攻击,会有更好的收益。然而,为了短期利润,一个矿池可能决定攻击它的对手,打破平衡。如果开发矿池的利润下降,矿工将转移到其它矿池,例如更小的、封闭矿池。他们能从算力占总份额10%以下的矿池中获得稳定收益,他们就没有什么动力使用大矿池了。

  对规模过于庞大的矿池进行分解,是比特币社区面临的最重要和最困难的任务。我的分析表明,短期刺激能够引起自发的分解,使得比特币的架构更加分布式的

  ,从而更加健壮和安全。

知识: 矿工