登录站点

用户名

密码

投资联盟 - 厦门天使投资人联盟

  • 分享

    比特币出了问题

    tstz 2013-11-20 23:37

    比特币出问题了。并且不是浅层的,而是根本性的在核心协议层上的麻烦。我们在这里不是在谈论一个简单的缓冲溢出,或者一个可以被轻松修补上的糟糕API设计;相反,这个问题是整个比特币工作原理所固有的。所有其他的基于比特币理念的加密货币或者方案,包括litecoinNamecoin、以及所有灵感来自比特币的其他货币,都出了问题。  比特币出了问题

    特别是在一份我们在arXiv上发表的论文中,Ittaly Eyal和我概述了一种攻击方式,通过这种攻击,少数的矿工就可以获得超出他们应得份额的收入,并且数字不断增长直到他们成了多数。当触及这一时间点时,比特币的价值主张就崩溃了:该货币被单个实体所控制;它不再去中心化;掌握控制权的实体可以决定谁能参与到挖矿中来,以及哪比交易可以被处理,并甚至能够随意回滚交易。这样的雪球般越滚越大的崩溃并不需要一个居心不良的邦德式的坏蛋来启动;它可以作为人们尝试通过挖矿的努力挣得更多的一点钱的共同努力的结果而发生。

    传统观点长期以来认为只要多数矿工是诚实的(这里说的诚实,我们是指他们尽职的遵守化名中本聪的那位提出来的协议。),比特币就能安全的抵抗成群的相互勾结的矿工的威胁。我们的论文证明那一说法是错误的。我们证明了,在当下,任何采用我们的攻击方法的节点群组都将成功挣得比他们应得份额更多的收入。我们还证明了一条新的可以让诚实的大多数的声明无效的底线:在最好的情况下,至少要有2/3的参与者节点是诚实的,才能成功抵抗我们的攻击。但取得这一2/3的底线在实践上是很困难的。我们描述了一个容易部署的对协议的实用补丁,只要3/4的矿工是诚实的,就可以抵御攻击。

    我们需要比特币社区的帮助以部署这一补丁以使得比特币生态系统能够变得更加强壮,至少可以低于算力低于全网算力25%这一阈值的攻击。但是,就算部署了我们的补丁,也还有一个问题:现在有矿池占据着超过25%的全网算力,并且,在过去曾经有矿池的算力占比超过了全网算力的33%。我们需要比特币社区意识到并共同努力以保证没有矿池能够超过那个阈值。整个系统会进入一个易受攻击的状态的可能性,将阻碍比特币更广泛的为人们所接受。

    如果想要一份对这种攻击手法的精确的全解析,你可以直接阅读这篇研究论文,尽管它可能有点洗练且枯燥无味。在这篇文章的余下部分,我们将为非铁杆参与者们勾勒出这个攻击手法,读完全文,任何人都应当能明白我们的攻击手法背后的直觉,添置装备以通过挖矿获得更高的收入,并获取掠夺这种货币所需要的工具。为了达到这一效果,我们需要一点点的关于比特币工作原理的背景知识。如果你对比特币挖矿熟悉,那么你可以跳过下一段对攻击原理的描述。如果你是一名对技术不感兴趣的比特币用户,你可以直接跳过到最后的关于影响的章节。

    区块链  比特币出了问题

    比特币成功背后的核心概念是一个用以维持一本全球性的总账的去中心化协议,它被叫做区块链。区块链记录着比特币地址之间的交易,追踪着每一个比特币转手的举动。这样的追踪确保了没有人可以双花(double-spend)一个币,因为总账使得一名用户是否发送出了比他挣得的更多的比特币变得太明显。比特币追踪的特别方式,也使得交易记录不可被变更;一旦一笔比特币交易被处理并收录进了区块链,攻击者就很难逆转那笔交易了,所以商户可以在有信心交易不会被逆转的情况下发出货物。

    协议通过一个叫做挖矿的流程来实现。简单讲,总账是由一条有序的区块所组成,每一个区块记录着一系列的交易。每个区块都包含了一个密码谜题,这是一个类似于CAPTCHA的难以计算的挑战。矿工自组织成一个松散的分布式网络,他们都同时在尝试在总账上添加一个新的块。为了做到这个,他们需要找到一个密码谜题的答案,谜题是由从总账初始到新区块被添加上去这段时间的内容所决定的。解决密码谜题是个艰难的工作;电脑必须尝试不同的值,并查看他们是否解决了新区块带来的密码谜题。有的人使用GPU来加速这一流程,同时还有其他人投资在了定制ASIC设备上以解决比特币密码谜题。

    当然,这一流程不是义务的,因为解决这些密码谜题耗费电力并需要冷却。为了让比特币变得切实可行,矿工们因为他们的辛勤工作而得到补偿。比特币矿工们通过两个机制获得补偿:他们拿走他们贡献给区块链的新区块里面记录着的交易的交易费,同时他们还拿走一整笔币。这一整笔的币就是新创造的比特币,新创造的币的数量基于一个随时间变化的公式。因此,“挖矿”就类似于挖金矿了——每隔一段时间,一名矿工就挖到了一个金块。密码谜题的难度是自动调整的以保证差不多每10分钟就有一个新区块添加到总账上,这保证了整个系统的比特币产出速率是可以被预测的,这也就阻止了通胀并且使得货币的供应更具可预测性。

    密码谜题是如此的高难度所带来的好处在于,攻击者想要修改总账变得很困难。比如说,有人想要从比特币商户那里买点东西,商家发货了,然后改变那个区块,这个任务非常的困难:他们需要为那个区块以及随后的每一个区块找到替代性的答案。难度在于,矿工的主体都会在总账的尾端上努力工作添加新的区块,所以一个攻击者在有限的资源情况下,不能指望会为所有的之前的区块找到替代性的答案并追赶上其他的矿工。

    现在的矿工们自组织成一个个叫做矿池的小组。一个矿池通常由一批共同合作的节点组成,他们不论什么时候发现新区块都把收入拿出来共享。矿池有点类似于旅馆的共享小费罐,一名矿工撞大运发现了一个密码谜题的答案并拿到一些收入,类似于一名为一大桌高额消费了的顾客提供服务的侍者。从任何给定矿工的角度来看,挖到矿这件事发生的频率相对不是那么频繁,共享这一流程则可以让矿工对于挖矿收入有更好的预测。

    攻击  比特币出了问题

    诚实的比特币协议假设所有的矿工采取的是一个良性的策略,他们快速并如实的分享挖到的每一个区块。直到现在,每个人都假设这是占优策略;没有其他的已知策略能够为矿工带来更高的收入。

    我们的文章证明存在着一个叫做“自私挖矿法Selfish-Mine”的替代性测量,可以使得矿池在伤害整个系统的风险之下获得额外的收入。在自私挖矿法中,矿工把他们的区块发现藏在他们自己的矿池中而不公开,并且在恰当的时候把隐藏着的区块向诚实的矿工们公开,以此迫使诚实矿工们的资源被浪费在最后不是区块链的一部分的区块上面。

    以下是它在实践中的实现方法。自私的矿工们就如普通矿工们一样的开始挖矿,工作以找到一个可以链到区块链末端的新区块。就像其他的矿工,他们偶尔会发现一个新的区块并领先于其他的诚实矿工。诚实的矿工会立刻公布这个新的区块并使得其他诚实矿工转到最新确立的区块链末端进行挖矿,而自私的矿工把这个区块藏了起来。

    从此开始,有两个事情可以发生。自私矿工可能再次走运,发现另一个区块而增加他们的领先程度。他们将领先其他的诚实矿工两个区块。他们继续把新发现的区块藏起来,并继续工作以扩大他们的领先优势。最后,诚实矿工快要赶上自私矿工的进度的时候,自私矿池公布了它的更长的区块链。结果就是所有的诚实矿工的工作都被抛弃了,并且自私矿工从他们之前的隐秘区块链中得到了收入。

    关于收入的分析从这里开始变得技术性了,研究我们在论文中提出的算法和状态机是唯一的公正的办法。但最后的结果是,总的来讲自私矿池通过他们在适当时机的公开(之前隐藏的区块),可以让诚实矿池做过的工作无效化。

    攻击的成功率,以及它所能产生的额外收入的数量,取决于自私矿池的规模大小。如果该矿池算力占比低于某一个阈值,它就不会成功。但在当前的实现(自私矿工可以即刻获得利润)之下,这样的阈值并不存在。我们提出的补丁如果被全局性的采用,可以把阈值提高到25%。并且,尽管可能还会有其他的补丁,但没有一个补丁可以把阈值提高到33%以上。也就是说至少要有2/3的比特币矿工是诚实的。以上所有的三个发现(0%、25%、33%)都比之前认为的可以保卫这种货币的50%要低得多。

    影响  比特币出了问题

    对比特币系统而言,自私挖矿测量有着极其深刻的影响:

    • 自私矿池的成员将比诚实的参与者拿到更多的收入:这意味着理性的利己的矿工(他们通常都在设备上投入了大量的金钱),将会想要加入自私矿工而不是继续遵守诚实策略。
    • 一旦开始并成功,自私矿池的规模将增大:没有任何机制可以对自私矿池施加压力以拆散他们。
    • 自私挖矿对比特币社区是有害的:自私矿工们把每个人都收入都拉低了。自私矿工可以发动攻击,以及一个自私矿池的规模将增长知道它控制了这一货币的事实,对于人们(比如说被比特币去中心化的特性所吸引的Winklevoss兄弟)来说具有相当的威慑力。
    • 这一攻击在当前对于任何规模的矿池都是可行的:任何人都可以在现在成功的发动这样的攻击,并且赚得超过他们应得的收入。
    • 在最好的情况下,比特币也要求至少2/3的矿工是诚实的:之前认为只要多数人是诚实的,比特币生态系统就是安全的。我们的分析说明那一想法是错误的。一个拥有超过全网算力33%的自私矿池,将总是可以挣得超过诚实矿工的收入。
    • 我们提出了一个可用的补丁,只要自私矿池的算力低于全网算力的25%,它就可以保护比特币网络抵御自私挖矿的攻击:这一补丁很容易部署。比特币社区采用它将是个不错的主意。
    • 现在存在着几个可以设想成功发动自私挖矿攻击的矿池:在当下,任何矿池都课程发起成功的攻击。用上我们的补丁之后,之后算力超过25%的矿池可以发动攻击,但现在已经存在着这个规模的矿池了。并且曾经存在过拥有超过33%全网算力的矿池。

     

    FAQ  比特币出了问题

    一些经常被问到的问题:

    • 当一个自私挖矿组织组成的时候,会发生什么?

    一旦出现了一群自私矿工,理性的矿工将更愿意加入他们以攫取更好的收入。并且他们的收入将随着组织规模的变大而变得更高。这使得攻击者可以快速的获得多数的算力,而在那个时候比特币去中心化的特性就崩溃了,因为攻击者获得了对所有交易的控制权。

    • 单个矿池控制这一货币的时候,比特币的价值会归零吗?

    不。这取决于掌握控制权的矿池如何运营这一货币。但在我们看来对比特币能否为人们所接受的最重要的去中心化特性就丢失了。这对比特币生态系统而言一点也不健康。

    • 这会影响X吗?X是另外一种加密货币。

    有可能。它影响着每一个从比特币的区块链概念中获得灵感的货币系统。这包括Litecoin、 PPcoin、Novacoin、Namecoin、Primecoin、Terracoin、Worldcoin、以及其他一堆拥有相似的全局总账概念的货币

    • 这里的核心发现是什么?

    我们是第一个发现比特币协议和激励机制不兼容的。协议可以为自私的人群所玩弄。并且一旦系统脱离了每个人都是诚实的欢乐模式,没有力量可以阻挡一个可以控制这一货币的真正的大型矿池的崛起。

    • 自私挖矿现在正在发生吗?

    我们没办法确定,但我们认为还没有。我们的论文是第一份公开研究替代性挖矿策略的文章。

    • 那两个阈值是什么情况?是不是2/3的节点必须是诚实的?还是说是3/4?为什么这两个阈值之间有差距。

    在当下,阈值是不存在的。部署了我们提出的补丁(使用并且容易部署)之后,阈值升到25%;也就是3/4的矿工必须是诚实的。可能有人能提出进一步提高阈值的补丁,但我们已经证明阈值不会超过33%。

    • 我们是否可以分辨自私矿池和其他的矿池?

    不容易。自私矿池可以通过使用一次性的地址来掩饰它的身份。并且尽管自私矿池揭露它之前隐藏的区块的时候,会看起来会有些不同,但分辨谁是真正的第一个发现区块的矿工很困难,因为几乎同时发生的挖到区块将会以不同的顺序抵达主机。

    • 把这一攻击手法公布于众会不会招致什么危险?

    保护这一系统抵御自私挖矿攻击的唯一途径就是让每个人改变他们当前的实现。所以我们只能通过公布这一潜在的攻击手法来保卫这一系统。我们选择了不自己发动这样的攻击,因为我们关心这一货币的长期可行性。

    • 比特币还可能是一个可行的货币吗?

    可能吧。我们已经证明只要自私矿工的算力低于某一个阈值,他们就不会成功。并且尽管目前这一阈值还不存在(因为不论规模大小的自私挖矿都将立马获得收益),我们已经提出了一个可以把阈值提高到25%的补丁。

    作者 Ittay Eyal 与 Emin Gün Sirer

你还不是该群组正式成员,不能参与讨论。 现在就加入