比特币51%的攻击问题是最困难的挑战之一,也是最有价值的解决方案之一。比特币白皮书告诉我们,“只要诚实的节点共同控制的CPU功率大于任何合作的攻击节点组,系统就是安全的。”
但我们能做得更好吗?
比特币是一种经济系统。在谈到可能的攻击者时,再次提到白皮书:“不难发现,遵守规则比破坏体系和自己财富的有效性更有利可图,这些规则让他获得的新代币比其他人加起来还要多。”
然而,我们知道,并非所有参与者都是理性的。这些参与者有可能是国家资助的实体,拥有几乎无限的资金,或者是愿意投资/损失巨额资金以获得某种战略或其他利益的公司。
如果我们能够创造一种方式,让诚实的矿商达成分布式共识,即使面对恶意的多数派,也能扩大账簿,这将是比特币的一个巨大进步。
矿业垄断的危险
比特币的目的是提供一个分布式账本,支持未经许可的个人对个人(p2p)现金。51%的攻击是危险的,不仅因为它会造成重复消费,导致商家赔钱,还因为它可以摧毁整个系统。
由于大部分持续的hashpower,攻击者可以连续(或周期性)调用区块链重组(“reorg”),从而破坏网络的可靠性。在极端情况下,它们可以永远挖掘空块,并只在自己的块上扩展链,将所有其他块排除在外,导致链完全不可用。
以前解决这个问题的方法
Gavin Andresen提出,我们可以防止恶意的矿商发布需要包含优先事务的共识规则的空块。但这似乎是一个不完美的解决方案。资金充足的攻击者不仅肯定能够创建自己的事务,而且这通常也不能防止重新组织攻击。
ZenCash提出了一种针对延迟块的惩罚系统,在该系统中,攻击者的块的工作证明被一个惩罚因子所减少。虽然这类系统可以阻止某些攻击,但它们也有缺点。它们可能仍然允许深度重组,这会损害0-conf的可靠性。攻击者还可以通过同步的块攻击将此方案翻转到诚实的挖掘者身上。
在这种攻击中,恶意挖掘者会从相同的块高度秘密地挖掘2条有效链,并从不同的节点上同时广播它们。一些诚实的矿工会先得到A区,然后相信B区就是攻击点,而其他人会看到相反的情况。两组人会互相惩罚,可能永远不会收敛。
如果惩罚只适用于一定数量的块,那么大多数攻击者可以继续挖掘,直到它们再次拥有最长的链。
无效块
下一个合乎逻辑的方法是允许矿商简单地使看起来可疑的无效块,然后进行彻底的突破。当一个块无效时,从该块延伸出来的链是无效的。这是一次彻底的决裂。
然而,你如何确定什么是可疑的呢?
阈值悖论
识别恶意的重组块的一个简单尝试可能是设置一个时间限制,但正如我们将发现的那样,这是有问题的。
例如,如果链的顶端块高度为100,并且进来了一个高度为100的重复块,如果节点在相同高度的现有块之后的N秒内观察到该块出现,我们可能会说该块是无效的。
但是N应该是多少呢?假设没有网络或传播问题,大多数情况下块标头可以在大约一秒钟内广播到大多数节点。假设我们选择一个更大的值,例如15秒。那么也就是说任何在15秒后出现的内容都是无效的。
这听起来很简单,但是如果一个块恰好在15秒处出现呢?有些节点可能比其他节点早一点或晚一点获得它,因此一半的网络可能认为它是有效的,一半可能认为它是无效的。
这是一个矛盾的方面,因为无论你设置多大,这种情况仍然存在,当一个块正好落在所选的时间标记上时,它可能意外地分割链或被有意利用。直观上看,节点应该能够使用一些常识性设置来判断块是否来得太晚。
这种悖论可以用这样一个事实来解释,即设置会创建一个边界或“断层线”。
重组块深度(“自动检查点”)
下一个合乎逻辑的问题是,我们能否确定一个块的深度,超过了这个深度,就禁止重新组织。例如,任何深度超过4个块都可能是无效的。但这也遇到了阈值计时问题,因为如果尝试重组3块,而另一个挖掘器也在广播第4块,那么一些节点将认为它是有效的,而另一些节点将认为它是无效的,从而再次导致链分裂。
中本共识和拜占庭将军的问题
中本共识(Nakamoto Consensus)是一个术语,用来描述比特币使用最高的工作证明链来识别正确版本的账簿。它总有一个独特的、可衡量的、无可争议的数字来使各块达成共识。
此外,它还具有确定性,使得非挖掘节点可以简单且容易地遵循一致的决策。
拜占庭将军问题描述了一群将军,他们想要进攻一个城市,但是他们没有一个简单的方法来协调他们的进攻。在比特币中,我们可能会把每一个已解决的区块视为一个“将军”,其他部队可以效仿。因此,从事这项工作的矿工就被指定为有机会扮演将军角色的人。
我们开始意识到将工作证明作为分布式时间戳机制使用的天才,以及创建不依赖于工作量证明、权益证明或其他区块链协议。
寻找线索
如果区块链工作的基本思想是,挖掘人员一次解决一个块并扩展分类,那么我们希望识别并惩罚绕过该系统的不良行为。
比特币需要定期处理大量重组块,这种说法多少有些荒诞。大多数孤立块来自同一个社区。偶尔会出现一个2块孤立链。这几乎是闻所未闻的。更多的重组块只会因为软件错误而发生,而不是因为正常的网络活动而发生。
这些知识可以帮助我们处理大小无界的重组快;我们只需要能够在实际范围内处理它们即可。
另一个重要的考虑因素是,严格使用最长链规则允许新节点准确地看到发生了什么,并知道应该遵循哪条链。他们不需要知道重组快、后期块等等。因此,如果允许在线节点就正确的诚实链达成一致,那么放弃这方面可能是一种可以接受的折衷方案。
非完全分布式解决方案
如果我们设想一个简单的解决方案,不允许重组超过6个块,那么我们知道,与新块同时出现的6个块重组可以拆分链。不过,细心的矿商很容易发现并重新设定这种分裂。
这需要人为干预,或许还需要诚实的矿工之间的协调。因为它不是完全自动化的东西。
这可以作为一个实际问题的解决方案,但它不是一个完全分布式的解决方案。如果当前存在一组相互信任的诚实池,那么它是有效的。但在一个没有人能确定自己可以信任谁的环境中,这种情况在全球范围内是行不通的。
另一个非分布式解决方案是允许一组受信任池(可能是5个签名中的3个)使块无效。这可以通过节点观察重新组织发生的方式来实现; 。
这些都是目前的想法。最终,我们爱需要继续寻找完全分布式的解决方案。
比特币ABC 0.18.5补丁
比特币现金客户ABC 0.18.5使用惩罚和最大重组深度,这样一来,攻击既昂贵又困难。这不是一个完美的解决方案。如果交易所需要至少10个以上重组块的确认,破坏网络将比没有这个补丁更难。
这不应该是一个永久的解决办法,我们应该不断改进它。
跳出思维定势
很明显,51%的攻击不是一个容易解决的问题。但是,我们应打破常规的思维,来实现突破。
上面我们讨论了51%攻击的问题,以及这个为什么很难解决。在这里我想提出一个可能的解决办法。(免责声明:我没有花太多时间来分析这个问题,所以可能有一些明显的大缺陷。)
这个解决方案非常简单。节点将惩罚任何基于延迟尝试重新组织的链。以前已经提出了延迟惩罚和延迟证明工作方案。
从节点看到重组块的时间到节点再到相同块深度的前一个块的时间,每秒钟的时间将受到0.1%的惩罚。
惩罚适用于从重组块开始的整个链。
关于时间的平滑衰减就是这和解决方案的魔力所在。
未受影响的正常孤立块
目前,在正常情况下,当同时发现2个块时,每个节点都会遵守第一个节点看到的规则。在这种情况下,不会有多大变化。例如,如果一个节点在5秒后获得块,那么该链的代价是0.5%。当在任何一条链上发现下一个块时,它仍然是决定性的。
防止高深度的重组块
现在让我们进入另一个极端:假设攻击者等待10分钟并尝试重组块。“很明显恶这是恶意重组。在这种情况下,惩罚将变成60%。这意味着他们需要重组3个区块来克服1个区块,或者重组5-6个区块来克服2个区块。
如果重组攻击发生在1000秒,那么它的权重就为0%。其他在999秒内看到它的节点会给它一个非常小的重量,所以它很容易被超越。
中间地带?
在20%,30%,50%的情况下,也会受到一些处罚。这可能会创建一个竞争的情况,但只有在重组深度较浅的情况下才会发生。竞争很快就会结束,同样重要的是,攻击者不能欺骗诚实的节点,让它们互相攻击,因为它们会看到类似的惩罚。
Finalty
最后,我们回到中本共识。当比赛结束,并且最长的工作链证明最终超过攻击者链(不管多长时间),它将以最纯粹的意义最终确定下来。
重组证明
惩罚是通过对延迟的实时分析来应用的,但是重复的链工作可以通过发布(例如到块资源管理器)重复的工作块来证明。
接收块的时间将被节点和矿工看到,也可以被发布。同步的节点可以识别竞争条件,并等待它被解决。
评论
查看更多