随着越来越多的高调区块链试图从工作证明协议转换过来,利益证明协议成为人们关注的焦点。他们中的许多人探索混合系统(POW/POS)的选择,而其他人则致力于纯POS实现。
而Proof of Stake协议的最大威胁之一是远程攻击。
在我对这个主题的研究中,我发现有关远程攻击的信息很少,很多时候都会产生误导。即使深入学术论文,有时我也无法理解这个攻击组的本质。下面你会发现我试图抵御远程攻击。
简而言之,长程攻击就是攻击者创建了一条从创世区块开始的长区块链分支,并试图替换掉当前的合法主链。该分支上可能存有和主链不同的交易和区块,所以这种攻击又被称 替换历史攻击或历史覆写攻击。
对于本文的其余部分,术语long range、alternative history、alternate history、history revision将交替使用。
远程攻击之所以存在的主要原因是一个被称为弱主观性的概念。
弱主观性(Weak Subjectivity)
该术语用于描述影响区块链网络的新节点的问题以及在大量时间离线后联机的节点。在线节点不受弱主观性的影响。
当一个新节点添加到网络时,始终会与创世块有一定联系。这是所有节点作为第一个节点接受的唯一块。与创世块一起,该节点将被呈现该区块链的所有当前发布的分支。不幸的是,节点将无法立即告知哪个分支是主链。
这同样适用于长时间离线的节点。在某个时间点上,这些节点知道哪个分支是主链,但在离线之后,它们不再清楚那个是主链。
在线节点实时跟踪和监控区块链。除非一个分支合法地成为主链,否则不能欺骗他们接受另一个分支作为主链。
示例区块链,绿色区块为Genesis区块,紫色表示孤立/分支,黑色区块为主链
如您所见,上面的区块链快照有许多不同的分支。其中一些比其他的长。
我们将在本文中讨论的第一个规则是最长的链规则。根据这条规则,主链永远是块数最多的分支。在需要物理资源来生成区块的工作块链的证明中,最长的链规则是确定分支中投入了多少工作量的一个很好的方法。
POW弱主观性(POW Weak Subjectivity)
在工作证明区块链中,我们基于这样的假设:除非网络受到51%的攻击,否则不可能有来自创世块的竞争分支。对于分支,为了达到主链的长度,需要大量的计算能力投入。对于PoW区块链,最长链规则足以抵消弱主观性。
在Proof of Stake协议中,最长的链规则不足以确定主链。这是因为我们称之为无成本模拟的概念。
权益证明协议采用验证人和一种被称为“权益”的虚拟资产来保障网络的安全。权益证明区块链网络中没有矿工,也不再需要任何人消耗算力来计算无用的哈希难题。整个网络构建在对验证人的信任之上,相信他们由于对特定某条链的投资而一直会为这条链记账。
验证者仅仅是从交易池中取交易,打包到区块中,然后广播出去,仅此而已。所以说,无代价模拟就是几乎不消耗算力资源来创建一条从创世区块开始的长分支链的能力。
多个分支具有相同长度的POS区块链示例
任何到网络的新节点都将显示区块链的多个分支,并且许多分支可以具有相同的长度。 通过无成本模拟和弱主观性,最长链规则受到挑战。 仅仅确定区块链的主链是不够的。 远程攻击利用这两个概念。
长程攻击
到目前为止,有三种不同类型的远程攻击。大多数出版物通常将前两种情况混为一谈,即简单腐败(simple Corruption)和变节攻击(Posterior Corruption),或者只接受变节攻击(Posterior Corruption)作为这些攻击的唯一案例。不幸的是,我没能为第一个案例找到更具描述性的名称。
总而言之,我们有以下案例:
Simple(简单攻击)
Posterior Corruption(变节攻击)
Stake Bleeding(权益流损)
攻击者通过回溯至创世区块并分叉整条区块链的行为来进行长程攻击。这条新的分支将覆写和主链完全不同的区块历史(或是部分)。一旦这条人造的恶意分支长度超过主链,它就会取代主链,成功上位。
从最简单的远程攻击案例开始,我们将构建更复杂的场景。在我们的示例中,我们有一个带有3个验证人的验证器池,Bob,Alice和Malory,他们都拥有相同股份33.3%。
关键细节:关于验证人及其股份关系的信息都存储在Genesis区块。
SIMPLE
第一种情况是指对Pos协议的简单实施。 在这种情况下,节点不检查块时间戳。
在POS协议的正常循环中,每个验证人都有机会验证区块。
示例区块链的快照,每个验证器都有相同的选举机会
Malory决定执行远程攻击并创建区块链的另一个分支。Malory回到创世区块,并开始创建分叉区块链。
由于验证人的信息都位于Genesis区块内,Malory将无法以比主链更快的速度生成区块。Maloy只能以相同的速率生成块。在所有这些条件下,Maloy想要超越主链的唯一途径就是提前生产区块。
在Maloy的分支链中,当选的机会与其他分支链相同。“括号”块是空区块。 Malory分支的当前长度是2个区块。
三点表示多个空区块。 Malory为了与主链竞争,她必须提前计算区块。 上面的区块链快照中,两个分支都有5个区块。
Malory将不得不伪造时间戳,并且由于她是该分支中唯一的活跃利益相关者,因此可以这样做。在节点不考虑时间戳的实现中,两个分支都是有效的,节点将无法发现Malory的把戏。
Posterior Corruption(变节攻击)
假设更改时间戳的伎俩已经失效了, Malory 明白为了实现长程攻击她必须另辟蹊径。她要在相同的时间帧数内生成比主链更多的区块。由于她产生区块的概率是写死的,她得好好想想了。
如果她也可以使用Bob的生成区块呢?这会增加她与主链竞争的机会,但为什么Bob会同意这一点呢?这是介绍验证人轮换概念的好时机。
验证者应当可以选择退出,并且区块链系统在某些情况下能轮换更替验证者或是把验证者移除出系统。
为了便于我们的讨论,假设 Bob 决定在第10000块之后退出区块链系统。Bob 提走了他质押的权益,兑现之后度假去了。在当验证人的时候,Bob 使用了保管私钥的最优方法。而当他在系统中不再持有任何权益时,就没有必要再那么小心翼翼地保管私钥了。
关键细节:即使Bob不再能够签署新的区块(他不再是验证人),他也能够再次签署前10000个区块。如果他在另一个分支中的前10000个区块上签名,这非常有用。
由于Bob没有任何利害关系,因此他对攻击系统没有任何阻碍作用。
这种攻击有两种可能的情况:
Malorys盗取Bob的私钥;
Malorys贿赂Bob,Bob加入了这次攻击;
既然Bob的私人密钥可供Malory使用,Malory可以作为Bob签署有效的块,从而增加了她成功超越主链的机会。这种攻击被称为变节攻击。
Bob加入Malory的长程攻击。 现在分分支更具竞争力,超越主链的机会更大
如上图所示,Bob的区块不再是空的,而Malory的分支与主链的竞争更加激烈。这种长程攻击可以通过使用关键的进化密码技术和移动的检查点来对抗。有关缓解技术的更多详细信息将在本文档的后面部分介绍。
Stake Bleeding(权益流损)
邪恶的 Malory 又决定对区块链发动攻击了,这一次她打算使用权益流损攻击。和上文中提及的初始场景条件一致,Malory一方面是主链上的验证者,一方面密谋着从创世区块开始构建自己的分支链。问题又来了,当产生分支链时,Malory 能被选作为区块验证者的概率和在主链上是一致的。要记得所有验证者的初始信息在创世区块中早已经固定写死了。在自己的分支链没有超过主链长度之前,Malory是不会把分支链广播发布出去的。
Malory 在本地制造分支链(虚线表示)并且不广播此链
这一次Malory为了增加攻击的成功率,开始拖延主链的正常运行。如果Malory持有的权益占比足够多,这种行为可能会演变为一次活性冻结攻击(Liveness Denial Attack)。每当 Malory 被选举为主链上的区块验证者时,她都会跳过该块,放弃自己的区块验证的身份。这并不意味着别的验证者会替代她的工作,相反,在该区块位置处,不会有新的区块加入到主链中。这是 Malory 精心设计用于拖延主链出块的策略。
Malory 在主链上放弃了验证区块来让自己的分支链更有竞争力
这样会导致 Malory 不能从系统中获得区块验证的奖励,以至于她的权益占比将不断减少,所有正常进行区块验证的节点都将从系统中获得区块奖励和交易费。在这次攻击中,我们假设验证的奖励由他们所占的权益比例来进行分配。
另一方面在自己的分支上,Malory是唯一的验证者,每当有机会被选作区块验证者时,她都会生成区块。在这种场景下,Malory会想尽办法增加他的权益占比。此外,她会从主链上复制交易并在自己的分支链上广播出去。这样做能增加她所获得的交易费用,并且增加她的权益占比。
通过采用这样的策略,一方面拖延主链的出块速度,一方面在分支链上尽可能广播更多的区块,Malory最终可以在自己的分支链上获得绝大部分的权益,并且比主链更快地产生区块。一旦她的分支链长度超过了主链,她就将发布最后一笔交易,将自己的权益交易给其他的验证者,并且紧接着广播发布自己的分支链。
Malory 一方面在分支链上增加着权益占比,一方面在主链上由于废弃区块不断地损失权益
你可以看到这样的攻击远远比前文中提到了两种攻击更加复杂。它引入了我两种新的概念,一是用于拖延主链正常出块的活性冻结,另一个则是从主链中复制交易信息出来。
值得留意的是,这样的攻击只能针对非常长区块时间的区块链来实施。根据研究,持有 30% 权益的攻击者在长约 6 年的区块链上才能发动这种攻击(由于无代价模拟,构建一条这样长度的分支链其实是十分迅速且不费力的)。
权益流损攻击可以通过采用移动检查点的策略来应对。充裕法则(Plenitude Rule)同样可以用来判断那一条分支是恶意的。
应对方法
在过去的几年里,人们研究了各种缓解技术。尽管它们都提供了某种保护来抵御远程攻击,但它们都不是一种有效的缓解技术。因此,需要结合使用这些方法来应对此类攻击。
最长链原则
这是解决弱主观性的最简单的方案。在Pos协议中,这种策略常常需要与其他手段混合使用以应对弱主观性,而POW协议仅使用这种技术就可以对抗弱主观性。
主链时拥有区块数目最多的分支,在上图中黑色区块组成的分支即为主链
根据此规则,主链是具有最大块数的分支。 主链可以不时变化,可以重组块。 当链的另一个分支变得比主链长时,将发生链的重组。
移动检查点
检查点或者说移动检查点策略可以说是所有Pos协议区块链中都用到的保护策略。它的简单性和易实现性使其成为在POS驱动的区块链中实施的第一种缓解技术之一,当然是在最长的链规则之后。
移动检查点背后的想法是,只能重新组织链中最新的x个块。可重组块的数量取决于协议的实现,其范围从一个月的块(如peercoin)到几天或几小时的块(如nxt)。
在本例中只有末端最后两个区块可能被重组。使用移动检查点之后,灰色的区块将不可篡改。红色的区块分支由于试图重组不可篡改的区块(灰色块)而变得无效了。在上图中唯一可以被重组的只有紫色的区块。
等等!如果攻击者可以重组后 X 个区块,那不还是长程攻击码?
前半段没错,你的确可以试图重组最后几个区块并且对系统造成一定的扰乱,可是这样的攻击已经属于其他的攻击范畴了。长程攻击指的是从创世区块开始发动的攻击。
对十分有限数量区块发动的攻击被称为短距离攻击或者行贿攻击(对数日到数月不等跨度的区块进行重组)。短程攻击具有不同的激励、执行方法、影响和缓解技术。尽管短程攻击很有意思,但本文不讨论这些攻击。
通过移动检查点,主链真正变得直到最后 X 区块之前都不可篡改。我知道这听起来很奇怪,你习惯将区块链称为“不变的分类账”,但你有没有想过它是否真的是这样??事实是,事实并非如此。
您可能无法从一个块中更改事务,但是您可以分支链、构建自己的块、绕过主链、重新组织块和TAA DAA,您只是修改了不可变链。准确地说,我们没有修改任何块,只是创建了另一个历史记录。前一个主链即使仍然不变,也不再有效。它不再拥有任何来自系统的信任。
密钥演进加密技术
接下来我们要讨论一些更复杂的应对策略,密钥演进加密技术是用来应对变节攻击的。在变节攻击的场景中,退休验证者手中的密钥虽然不能验证新区快了,但是他们能对旧有的区块进行签名。
使用密钥演进加密技术,更确切来说密钥演进签名技术(KES),当前区块验证者能在区块签名后马上销毁掉使用过的密钥。
利用不断演进的密钥以及旧有密钥不可回溯的特点,如果 Bob 想要为另一条分支进行签名,他并不能重新从创世区块开始使用他的密钥(因为他已经在主链上使用过该密钥了)。
这种策略还在试验阶段,仍需要很多相关研究来保证以上密钥演进加密技术的假设能顺利实行。
情境感知交易(Context-Aware Transactions)
区块链的每一个区块在区块头中都包含了上一个区块的哈希值,这是用以识别区块所属分支的标识。利用情境感知交易,我们能进一步延伸这个概念,在每一个交易中也记录上一个区块的哈希值。
这样一来,每一个交易都和特定的区块以及特定的分支联系起来。由于交易中已经保存了当前分支链的索引,它就不能被有效地复制到其他的分支中(除非这个索引也存在于其他链中)。
Jeff Coleman 曾经在通用哈希时间中深入地讨论了情境感知交易的工作方式, 通用哈希时间也是情境感知交易的其中一种。
Malory 把紫色分支中的交易拷贝出来使自己的分支链长得更快,然而该交易是和 Bob 的区块联系着的。Malory 的分支(红色)会因为不连续而被诚实的节点拒绝同步。
这种策略能用来阻止长程攻击。应用情境感知交易,攻击者无法从主链向分支链拷贝交易。虽然它不能完全防止长程攻击,但的确给长程攻击带来了巨大的阻碍。
攻击者被迫只能完全地创造不一样的历史交易数据。即使他们完成了攻击,也不会太轻巧。
充裕法则(Plenitude Rule)
充裕法则是又一种应对长程攻击的成熟策略。这种策略基于探查存在竞争关系的不同分支中区块的稀疏程度。
创世区块中写死的验证者权益大小
攻击者无法操控他们的初始权益占比。假定所有分支都从同一个创世区块开始,如果攻击者在创世区块中写死的权益为 20% ,那在所有的分支上均以 20% 开始。
在长程攻击中,攻击者在开始时被选作验证区块的概率十分之小,而随着不断验证区块并获得区块奖励,他的权益占比也越来越大。验证者的权益越多,他被选中出快的概率也越高。现在我们要做的是找到这个加速阶段。
直到 X 点之前区块链的状态图。在任意给定的分支链上验证者都有着同样的出块概率。
在恶意节点积攒足够多权益来加速分支链出块之前,剩余诚实的验证者负责了 80% 的出块任务(在本例中)。根据这一信息,我们就能看到,哪一条分支链出的块只是其它链的一部分(一条分支在给定位置有 80% 到 100% 的概率出块,而另一个分支在给定区块位置只有最多 20% 的概率出块)。(校对注:即在权益流损攻击中,由于 M 在主链上拖延出块,所以主链上出块几率为 80-100%,但在分支链上,由于只有 TA 自己出块,所以出块几率最高为 20%)
恶意分支在第一部分的区块十分稀疏的示意图
在上图中我们能看到权益是如何累积的。位于上面的时恶意分支,在头两部分的区块要远远比最后一部分更为稀疏。而在另一条分支中,我们能看到在所有的部分中,区块始终平滑的产生。
出现空块并不意味着验证者是在刻意阻延区块链(像上图中的 Alice)。有时由于该时间段内没有交易,区块就会是空的。
在第三部分,上面那条分支链积攒了足够多的权益,使得区块的密度大大提高。
在 X 时间之后 Malory 分支链上的权益持有情况
在该时间点后,攻击者的权益在自己的分支链上会继续增多,而诚实验证者的权益占比会不断降低。在分支链上区块会更频繁地出块,并最终超过主链。
充裕原则旨在检测分支的区块密度自产生起到一段时间后区块密度显著改变的异常表现。假设恶意验证者总是少数的(当 34% 以上的验证者都是恶意的,区块链系统就失败了),那么主链的区块密度总会比竞争的恶意分支链要更高。
根据这一原则,很轻易就能识别出主链并解决弱主观性问题。
结论
在本文中,我们探讨了权益证明中最有意思的一种攻击方式——长程攻击,并将其根据特点划分为三个子类。在讨论了简单攻击、变节攻击和权益流损三种攻击方式之后,我们同样列举了对应的保护策略。
尽管在工作量证明系统中最长链原则已经足够应对长程攻击问题,权益证明区块链仍然需要联合使用不用的策略来解决这一难题。在维护权益证明区块链安全性的过程中,我们需要混合采用移动检查点、情境感知交易、密钥演进加密技术和充裕法则来保证区块链的安全。
评论
查看更多