# Cardano如何保护自己免受51%的攻击

**URL:** <https://forum.cardano.org/t/cardano-51/108352>\
**Category:** 教育支持\
**Created:** [30 September 2022 03:27 UTC](https://forum.cardano.org/t/cardano-51/108352 "2022-09-30T03:27:37Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![JayHao](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.cardano.org/jayhao/32/50958_2.png) [@JayHao](https://forum.cardano.org/u/JayHao)\
**Post date:** [30 September 2022 03:27 UTC](https://forum.cardano.org/t/cardano-51/108352/1 "2022-09-30T03:27:37Z")

</div>

> **[How Cardano protects itself from 51% attack? | cexplorer.io](https://cexplorer.io/article/how-cardano-protects-itself-from-51-attack)**
>
> Cardano’s PoS works in many ways very similarly to Bitcoin’s PoW. You may be surprised to learn that when a blockchain forks, Cardano applies the longest chain rule similar to Bitcoin. It doesn't take

Cardano的PoS在许多方面的工作与比特币的PoW非常相似。你可能会惊讶地发现，当一个区块链分叉时，Cardano应用与比特币类似的最长链规则。创建一个PoS区块不需要很多能量，所以在Cardano协议中一定有一些额外的规则。让我们解释其中的一些，并展示这些规则如何保护Cardano免受51%的攻击。

TLDR  
Cardano使用最长的链规则，与比特币的规则相似。  
Plenitude规则是用来对付长距离攻击的。  
如果用于签署区块的私钥被抹去，试图覆盖区块链的历史是不可能的。  
协议是关于规则的  
一个区块链是一个区块链。网络将新的区块添加到链的末端。偶尔，两个区块可能由两个（或更多）独立节点同时产生。这个事件被称为分叉。它意味着两个新区块紧随前一个区块。需要一些规则来确保一个区块是赢家并永远留在区块链中，而另一个区块则被丢弃（永远成为孤儿）。你可以在下图中看到分叉的情况。要生产下一个区块的节点必须在A区块或B区块之间做出选择。

在比特币网络中，区块池（区块生产者）可以选择A区块或B区块，无论它更喜欢哪一个。如果其中一个区块是由一个想增加另一个区块的池子创造的，它就会选择它的区块，因为它想从中获得奖励。这个池子不能在两个区块上继续下去，因为它将不得不分割哈希率。它不会这样做，因为另一个池可能会更快地添加下面的区块。分割哈希率会降低PoW抽奖的成功机会。一旦下一个区块被添加，哪条链更长将是显而易见的。下一个区块池知道该在哪条链上构建，因为它可以应用最长链规则。

在下面的图片中，你可以看到蓝色的链更长。对资金池来说，尝试在蓝色链上再添加一个区块是有利的，因为红色链在较长的时间段内不太可能主张自己。没有一个资金池运营商事先知道谁会成功添加一个新的区块以及它将遵循哪条链。从博弈论的角度来看，假设每个人都会理性行事并选择蓝色链是很有利的。

如果任何节点想找出哪个版本的区块链是正确的，它可以根据PoW工作来做。第一次连接到网络的节点也可以依靠PoW工作。

在Cardano网络中，生产一个新的区块是很便宜的（无成本模拟的现象，或者说没有任何风险）。这也适用于较长系列的区块。因此，理论上，一个节点可以快速而廉价地跟踪A和B两个区块。如果每一个随后产生区块的节点也这样做，可能很难确定哪个链是正确的。

Cardano节点不会为增加一个新的区块而相互竞争。相反，一个被称为可验证随机函数（VRF）的现代密码学函数被用来抽出一个赢家。在卡拉诺网络中，时间被划分为槽。在每个槽中，每个节点使用VRF函数来获得VRF输出。比方说，它是一个数字。如果这个数字小于某个阈值（该阈值来自赌注大小），该节点就是赢家，并获得生产新区块的权利。

偶尔，同一槽位的两个（或更多）节点可能获得生产区块的权利。两个有效的区块可以同时创建，类似于比特币网络。这种情况被称为槽位战。Cardano有一个简单的规则来决定哪个区块将成为一个较长链的一部分。两个竞争区块A和B的VRF输出被相互比较。赢家是由具有较小VRF输出的节点产生的区块。  
 ![hG8B7eQcpVDr8m41KX5sG0R5gQMxAp8fvMOmh9UAsDNdfRVRLHQS7SuQn-cg150QNZbxA2zNz7YAOfyudUMxSvLVWxgY7DE2Y1CFOzgwIbgO5cJ09hbXDKM-XoaYsZVhlfDioWZ7jbeyahn3VwxL0rwfb-tSdSlY0TTqQg8PBww3c580dQAkZfgONQ](https://us1.discourse-cdn.com/flex023/uploads/cardano/original/3X/e/8/e8dbb33bd4eca5fd2b5456b5ec4b161569cd56b8.png)  
尽管协议规则清楚地表明哪条链被认为是更长的（蓝色的那条），你可以在上面的图片中看到，节点在两条链上都增加了一个新的区块。从视觉上看，似乎有两条链的长度相等。节点可以这样做，因为创建区块不需要任何成本。是什么阻止了节点的这种行为呢？它是一种声誉。一旦一个池子有这样的行为，就会被社区认为是企图攻击网络的行为。这个池子会失去它的声誉，利益相关者会把ADA币委托给其他地方。下一个诚实的节点可能只会在正确的链上添加一个新的区块，所以无论如何，欺诈性的链最终会成为孤儿。

必须要提到积极激励的重要性。一个资金池运营商可以廉价地添加区块，但如果它对网络运营和声誉产生负面影响，ADA币的价值将下降。运营商将获得更低的美元价值奖励。网络的正常运行和良好的声誉符合所有人的利益。  
 ![p9NL22PZdabiuB6Oijhd9PLghQ99F4FU-CRPuZ6IWrr2UNIBtc3IiUyNn1CbOnpPmUuTDaduZJnk7YOywzbpSuP71B8D5EJ3QUVIXifgwlsDDSRvk4dk-TWqDMwBzy4VdcBlxpMsukzb71HF7b_s_OQEuehwqhSMik7Qi9s8F6E9dMdB4RcJAErEXQ](https://us1.discourse-cdn.com/flex023/uploads/cardano/original/3X/1/8/184f0459128f67e776ec6416501bede72fc54355.png)  
每个节点都看到了分叉，当它要添加一个新的区块时，它根据分叉之后的区块中的VRF输出来决定。这些规则使我们很容易推断出正确的链应该走哪条路。在进一步分叉的情况下，该规则将以完全相同的方式适用。

随机性决定了获得创建新区块权利的节点。可能发生的情况是，攻击者连续几次获得了这个权利。因此，理论上他可以将多个区块添加到欺骗性链（红色链）中。结果是，红色链在短时间内（几个槽）会更长。一旦诚实的节点获得了生产区块的权利，它将向正确的，即蓝色的链上添加区块。从长远来看，蓝色链将永远获胜。  
 ![image](https://us1.discourse-cdn.com/flex023/uploads/cardano/original/3X/3/d/3d99afdd1336119a17d01f0180be5c86657a6e23.png)  
正如你所看到的，一个现代的加密函数和一个简单的规则被Cardano协议用来取代PoW网络中的抽签系统。比特币没有定义一个规则来决定在分叉的情况下选择哪个区块来继续。链的长度是一样的，所以最长的链规则不能被应用。一个区块只是由一个池子选择，对于下一轮，最长的链规则可以被应用。

Cardano协议明确定义了在分叉产生后，哪条链被认为是最长的。最长规则可以在任何一轮中使用，不存在资金池可以选择它更喜欢的区块的情况。从理论上讲，可以说每一个新的区块都是自动完成的。不存在哪条链会成为赢家的问题。VRF输出总是清楚地宣布正确的（最长的）链，除非出现两个相同的VRF输出，这是不可能的。

如果攻击者创建了一个长的替代链，比如说从Genesis区块开始，会发生什么？这相对容易，因为正如我们所说，创建一个区块不需要任何成本，所以有可能创建整个区块链。不要担心。有一个额外的规则。

Cardano如何保护自己免受长距离攻击  
长距离攻击对于PoS网络来说，代表了与PoW网络中51%攻击大致相同的机制。攻击者的目的是制造一个较长的链，将区块链改写成对攻击者有利的。长距离攻击不是从几个区块前开始的，而是要在链的历史上更远的地方（即甚至几万个区块）进行攻击。这给PoS网络带来了问题，因为重写一条很长的链不需要工作证明。

在远程攻击中，攻击者试图创建他自己的整个区块链的链，并希望将其作为正确的链（主链或最长的链）来执行。他通常会秘密地做这件事，然后在合适的时间发布他的版本。攻击者之所以可能尝试这样的事情，主要是为了试图重组区块或增加奖励。这是因为备用链可能包含与原始主链不同的区块或交易。

这种类型的攻击是可能的，因为有一种现象叫做弱主观性。这个术语来自于新的或长期断开连接的节点的 “盲目性”，这些节点被迫决定区块链的哪个分支是正确的。当一个节点被插入网络时，它只能确定初始区块（创世区块），因为这是唯一一个被普遍认同的区块。每个人都可以在任何区块链探索器中找到创世区块。当一个节点需要同步时，它可以收到所有当前发布的替代链（以同一创世区块开始的多个链）的列表。节点必须能够可靠地、正确地确定哪条链是正确的。

必须说，在线节点不会受到这种攻击，因为他们知道到某个时间点，哪个分支最后被同意为主要分支。在线节点没有理由改写历史，如果这意味着改写数百或数千块的历史。因此，这种攻击的成功率相当有限。正在进行的共识可能不会受到远程攻击的影响，因为该协议主要受最长链规则的制约。

不同的PoS协议使用不同的规则来防止这种类型的攻击。对于Cardano来说，它甚至更加复杂，因为它没有割裂，所以它不能像以太坊那样直接惩罚攻击者，拿走他的币。对于Cardano，和比特币一样，网络共识的参与者因为做了正确的事情而得到报酬。没有收到奖励是一种惩罚，所以动机是积极的。在以太坊的情况下，参与者因做正确的事情而获得报酬，但他们也可以因做错事情而受到积极的惩罚。换句话说，他们可以陷入巨大的经济损失，而这种损失不会由市场波动造成。

让我们看看攻击者如何尝试对Cardano进行远程攻击。

首先，需要注意的是，攻击者在欺骗链的开始阶段所能创建的区块数量是有限的。即使在其私有的欺骗链上，攻击者也不能比在真正的主链上更快地签署区块。一个有效的区块必须包含VRF证明。攻击者受到其股权大小的限制（假设他没有占多数），这限制了可创建的有效区块的数量。

如果攻击者有，比方说，只有20%的股份，他只能在欺骗链的初始阶段创建20%的区块。问题是，主链（80%的股权）可能包含更多的有效区块（这是很有可能的，但有些槽点可能会错过区块）。在下面的图片中，蓝色的链是主链。攻击者正试图创建一条红色的链。

攻击者试图在他的链上假装其他节点没有生产区块，并且他正在逐渐获得更高的利益，因为只有他在获得奖励。因此，他可以生产越来越多的区块，并最终达到一个状态，即他是唯一一个定期生产区块的人（甚至像通常那样每20秒一次）。因此，理论上他可以创造最长的链（比主链更长）。

在开始时，欺骗链几乎是空的。随着时间的推移，它的密度逐渐变大。因此，攻击需要大量的区块。

我们稍后会看到，为什么攻击者在这一点上已经失败的攻击。在此之前，我们先看一下什么可以增加攻击者成功的机会。值得一提的是，攻击者可能有机会获得其他资金池运营商的私钥。这将使他能够在欺骗链中创建多个欺诈性但有效的区块。如果攻击者获得了其他两个资金池运营商的密钥，并且他们每个人都有10%的股份，那么攻击者将拥有总共40%的股份。攻击者会有更好的成功机会，因为他的链从一开始就会更密集。但与主链相比还是不够密集。

理论上，资金池运营商有可能备份用于区块生产的私钥，并可以将其提供给攻击者以换取金钱。例如，攻击者可以贿赂其他资金池运营商。或者，当区块生产者决定离开这个行业时，他们可能愿意出售私钥。攻击者也有可能设法窃取这些密钥。这两种情况在大规模的情况下都不太可能，但也有可能。

Cardano网络的安全性随着区块生产者的数量而增加。让我们补充一下，要想获得仍在活动并从协议中获得奖励的资金池运营商的私钥将更加困难。

注意，攻击者只能在欺骗性的链上签署旧的区块。如果被贿赂的运营商已经倒闭，他就没有新的私钥了。理论上有可能说服多个资金池运营商参与创建一个欺骗性的链。其动机是，运营商可以获得更高的回报。这种攻击类似于51%的攻击，因为它需要一个超级多数的股权。

攻击者（或更多的攻击者）可以通过留在主链上作为一个活跃的区块生产者来增加执行欺骗性链的机会。每当他有机会生产一个新的区块，他就放弃这个机会。这个槽位仍然是空的，没有其他人可以生产区块。主链上的区块会逐渐稀疏，而欺骗链上的区块则会在最后变得密集起来。

请注意，攻击者不会得到主链上的奖励，因为他故意不生产区块。他的赌注会减少。攻击者可以在市场上购买硬币，但这使得攻击的成本更高。

让我们探讨一下Cardano是如何防御远程攻击的。Cardano协议不能仅仅依靠最长链规则。幸运的是，另一条规则被定义为Plenitude规则。如果在短时间内发生分叉，最长链规则仍然适用。然而，一旦分叉发生的时间较长，就会应用Plenitude规则。

Plenitude规则通过短时间内区块的密度来确定哪条链是正确的。根据该规则，节点会查看位于分叉后的几个槽位。换句话说，该规则只考虑长链的初始部分。在这个部分有更多有效区块的链将被选择为正确的链。链的其他部分的区块数量并不重要。

该规则是基于这样的假设：攻击者不能在分叉后立即形成许多区块，因为他没有足够的股权来这样做。正如我们上面所显示的，欺骗性链在开始时几乎是空的。

简单地说，这两条规则足以让Cardano节点始终识别哪个链是正确的。它对分叉后的短链应用最长的链规则，对长链应用丰度规则，同样是在分叉后。大多数时候，Cardano只需要最长的链规则。Plenitude规则只在攻击的情况下使用。

密钥演化签名  
密钥演变签名（KES）是另一个有助于保护Cardano免受攻击的加密工具。KES密钥被区块生产者用来签署新区块。KES密钥在几个纪元后定期过期。

使用的是前向安全签名方案的想法。该机制是基于攻击者无法伪造过去的签名的想法。有可能保持相同的公钥，但一次又一次地创建新的私钥。因此，旧的私钥可以被抹去，并由新计算的私钥取代。

因此，没有人能够再次用被抹去的KES密钥签署区块。如果攻击者破坏了当前用于签署区块的密钥，他只能从现在开始使用这个密钥来签署区块（以及之前的几个区块），但不能签署（遥远的）过去的区块。这使得攻击者不可能改写历史。更准确地说，当签名密钥被删除时，不可能对已经创建的区块进行签名。我们假设区块生产者不会有意保留他们的KES密钥。

有一种叫做量子一次性签名的密码学结构，它允许私人密钥被用来签署一个区块（或其他任何东西）一次，而且只有一次。如果这个概念可以在Cardano中实现和使用，这将意味着攻击者不能创建私人链，并使用过去已经使用过一次的私人密钥签署区块。换句话说，运营商可以保留私钥，但它们对攻击者没有任何价值。

结论  
没有任何保护机制是100%有效的，如果在攻击中投入足够的资源，它就可以成功。去中心化网络对51%攻击的易感性是一个固有的特点。脆弱性是对去中心化的一种税收。如果在能源和ASIC硬件上投入足够的资源，就可以在PoW网络中创建一个更长的链。在PoS网络中，攻击者只有获得足够数量的私钥，才有机会实施类似的攻击。游泳池运营商是专家，知道他们必须将密钥保存在不连接到互联网的硬件设备上。所以攻击者只有机会获得 "热 "钥匙，而不是 "冷 "钥匙。随着Cardano网络的日益去中心化，攻击的机会大大减少了。很明显，持有钥匙的独立区块生产者越多，攻击就越困难。如果密钥被删除，远程攻击基本上是不可能的，需要使用暴力攻击（使用巨大的计算能力）。

攻击者还有一种方法如何对Cardano进行51%的攻击。他可以尝试在公开市场上购买ADA币的数量，这将使他在网络共识中占据主导地位。然而，这种攻击在经济上是非常昂贵的，超过了对比特币51%的攻击成本。我们认为这种攻击几乎是不可能的，但它却是一个有效的攻击载体。

在比特币网络中，有一些池子，自从这个概念被发明以来就一直存在。同样的情况也在Cardano网络中重复出现。如果一个池子运营商做得很好，他们没有理由离开这个行业，参与攻击。可以肯定的是，老的资金池会保留很长一段时间，新的资金池会逐渐出现。每一个新的单池运营商都会增加Cardano网络的安全性。
