干货 | 覆写历史:概述长程攻击,Part-1:攻击

Ajian   |     |   1892 次阅读

1.jpg

随着越来越多高知名度的区块链项目尝试从工作量证明协议转变为权益证明协议,当下权益证明协议备受瞩目。许多项目正探索采用混合协议(PoW/PoS)的共识,而其余的则准备完全转移到权益证明协议上来。

长程攻击(Long Range Attack)则是权益证明协议中最大的威胁之一。由于权益证明协议有弱主观性并且能进行无代价模拟,这种攻击比在工作量证明协议中更为危险。

在研究长程攻击的过程中我发现,有关参考资料一方面十分稀缺,一方面常常带着很多误导性的见解。即使查阅专业的学术论文,许多文章也不能正确地解读这种攻击。在下文中我将带着大家好好捋一捋什么是长程攻击。

简而言之,长程攻击就是攻击者创建了一条从创世区块开始的长区块链分支,并试图替换掉当前的合法主链。该分支上可能存有和主链不同的交易和区块,所以这种攻击又被称 替换历史攻击历史覆写攻击

下文中长程攻击、替换历史攻击和覆写历史攻击含义一致。

长程攻击之所以存在,是由于弱主观性。

弱主观性

弱主观性指的是区块链网络中的新节点或是长期离线的节点加入到网络中时会遭遇到的问题,保持在线状态的节点并不会受弱主观性的影响。

当一个新节点加入到网络中时,总需要人为地为它提供一个创世区块。这个区块是独一无二被大家共识为首区块的区块。设置好创世区块后,节点接着就会收到当前区块链上所有公开的分支。那么问题来了,节点并不能分辨出哪些分支是从属于主链的。

长期离线(例如数月)的节点也会遭遇相同的问题。虽然之前节点已经同步了相当长的主链,但是在长时间的离线之后,它们也无法分辨究竟哪一个新的分支从属于主链。

而保持在线状态的节点则总能及时地监控并同步主链。除非其它分支链篡位成功成为了合法主链,否则保持在线状态的节点不可能接受其他分支作为主链。

2.png

-区块链示例,绿色区块表示创世区块,紫色区块表示孤块或分支,黑色区块表示主链-

如图所示,整个区块链上的确有许多不同的分支,并且长度不一,主链可能是他们中任意的一支。

本文首先要讨论的原则是最长链原则 。根据这一原则,主链总是拥有区块数目最多的链。由于在工作量证明区块链中需要现实的算力资源来生产区块,因此链长度可以有效地反映出分支上凝聚的工作量,最长链原则也就是说凝聚了最多工作量的分支便是主链。

工作量证明的弱主观性

在工作量证明区块链中我们基于这样一个假设,除非遭遇了 51% 攻击,不可能有其它从创世区块开始并与当前主链存在潜在竞争关系的分支链。而对于一个企图篡位的分支链,要达到当前主链那样的长度,必然耗费巨量的算力。所以对采取工作量证明协议的区块链,最长链原则已经足够解决弱主观性问题了。

无代价模拟

权益证明协议中,由于无代价模拟 ,最长链原则并不能成为判断主链的依据。

权益证明协议采用验证人和一种被称为“权益”的虚拟资产来保障网络的安全。权益证明区块链网络中没有矿工,也不再需要任何人消耗算力来计算无用的哈希难题。整个网络构建在对验证人的信任之上,相信他们由于对特定某条链的投资而一直会为这条链记账。

这就使得在权益证明区块链中,再也不需要浪费算力来挖矿了。在实际区块链中,虽然还是需要微乎其微的一定算力来出块,但已经可以被称为无代价过程了。验证者仅仅是从交易池中取交易,打包到区块中,然后广播出去,仅此而已。所以说,无代价模拟就是几乎不消耗算力资源来创建一条从创世区块开始的长分支链的能力。

3.png

-多条相同长度的权益证明协议区块链分支示意图-

任何加入到权益证明区块链的新节点都会接收到多条分支链,其中很大一部分长度也相同。由于无代价模拟弱主观性 ,仅仅依凭最长链原则不足以判断哪一条是主链。长程攻击恰恰利用了权益证明协议区块链的这两个特点。

长程攻击

目前总共有三种不同类型的长程攻击。许多研究常常把简单攻击和变节攻击这两种混淆,或者误认为长程攻击仅有变节攻击这一种。权益流损则是最近(2018 年)才开始得到研究的一种长程攻击类型。

很抱歉我不能给第一种攻击类型一个更准确的描述称谓,所以本文将沿用在权益流损的研究论文中对这一攻击的命名——简单攻击。

总的来说,攻击分为以下三类:

  1. 简单攻击(Simple Attack)
  2. 变节攻击(Posterior Corruption)
  3. 权益流损(Stake Bleeding)

正如引言所述,攻击者通过回溯至创世区块并分叉整条区块链的行为来进行长程攻击。这条新的分支将覆写和主链完全不同的区块历史(或是部分)。一旦这条人造的恶意分支长度超过主链,它就会取代主链,成功上位。

让我们先从长程攻击中最简单的例子开始谈起,由浅入深构建更复杂的攻击场景。在本例中,整个验证池中有三个验证者,即 Bob,Alice 和 Malory。简单起见,设定他们的初始持权数额均为 33.3% 。

关键细节:创世区块中记录了验证者和它们各自的持权信息

简单攻击

第一个例子是权益证明协议区块链的简版,在这种场景下,节点不会去检查区块时间戳。

在权益证明协议正常的一轮周期内,每一个验证者都有机会验证区块(即出块)。

4.png

-案例区块链示意图,各验证者被选上验证区块的概率相等-

Malory 决定实施一次长程攻击,并且创建了一条分支链。她回溯到创世区块,开始生成她的分支链。

既然验证者的信息已经保存在了创世区块中,Malory 就不能比主链更快地生成新区快,支链上的出块速度和主链一致。在这种情况下,Malory 如果要升级她分支链并篡位主链的唯一途径就是提前产生区块。

5.png

-在 Malory 的分支链上,她被选作区块验证者的概率和在其他链上是相同的。上图中括号里的区块是缺失的,当前 Malory 分支链上只有两个区块-

6.png

-三个点代表多个缺失的区块。为了超过主链区块数,她必须提前生成区块。在上面的区块链示意图中,两个分支的链长度均为 5 -

Malory 将必须伪造时间戳,并且由于她是这条分支链的唯一活跃持权验证人,这样做并没有什么风险。在不验证时间戳的权益证明协议区块链中,所有的分支链都是有效的,而且没有节点能识破 Malory 的伎俩。

变节攻击

假设更改时间戳的伎俩已经失效了, Malory 明白为了实现长程攻击她必须另辟蹊径。她要在相同的时间帧数内生成比主链更多的区块。由于她产生区块的概率是写死的,她得好好想想了。

如果她也能利用 Bob 产生的区块呢?如果可以的话,这能增加 Malory 覆写主链的成功率,但 Bob 怎么会同意的?这时候就该引入一个名为验证者轮换的概念。

如果所有验证者都是固定不变的,那是不公平的。一个权益证明系统虽然一定要从某个写死的初始状态启动,但为了系统的公平性,验证者必须是轮换更替的。

验证者应当可以选择退出,并且区块链系统在某些情况下能轮换更替验证者或是把验证者移除出系统。

为了便于我们的讨论,假设 Bob 决定在第10000块之后退出区块链系统。Bob 提走了他质押的权益,兑现之后度假去了。在当验证人的时候,Bob 使用了保管私钥的最优方法。而当他在系统中不再持有任何权益时,就没有必要再那么小心翼翼地保管私钥了。

7.jpg

- Bob 退出了区块链系统-

关键细节:虽然 Bob 不再能对新区快签名验证了(他已经不是一个验证人了),他依然能够对前 10000 个区块进行再次签名。如果他想要在别的分支上签名验证前 10000 块区块,这是十分有用的。

既然 Bob 在系统中没有任何质押的权益,他就没有任何负向激励不对区块链发动攻击。

Malory 于是有如下两种场景实施攻击:

  1. Malory 黑了 Bob ,盗取了他的私钥
  2. Malroy 贿赂了 Bob,后者也加入到攻击中来

现在 Malory 已经取得了 Bob 的私钥,她能像 Bob 一样验证签名一些区块,这增加了分支链区块数超过主链的可能。我们称这样的攻击为 变节攻击

8.png

- Bob 加入了 Malory 的长程攻击。现在这条分支链显然更具竞争力了,并且它取代主链的概率也更高了-

既然 Bob 已经加入了攻击,那么每当他在 Malory 的分支链上被选作记账人时,他也会产生一个区块。正如上图所示,Bob 的区块就不再缺失了,Malory 的支链也因此更有机会篡位成功。

这种类型的长程攻击可以使用密钥演进加密技术(Key-Evolving Cryptography)和移动检查点技术(Moving Checkpoint)来应对。关于应对措施的进一步阐述会在本文后面的章节中呈现。

权益流损

长程攻击的第三种类型被称为权益流损

邪恶的 Malory 又决定对区块链发动攻击了,这一次她打算使用权益流损攻击。和上文中提及的初始场景条件一致,Malory一方面是主链上的验证者,一方面密谋着从创世区块开始构建自己的分支链。问题又来了,当产生分支链时,Malory 能被选作为区块验证者的概率和在主链上是一致的。要记得所有验证者的初始信息在创世区块中早已经固定写死了。在自己的分支链没有超过主链长度之前,Malory是不会把分支链广播发布出去的。

9.png

-Malory 在本地制造分支链(虚线表示)并且不广播此链-

这一次Malory为了增加攻击的成功率,开始拖延主链的正常运行。如果Malory持有的权益占比足够多,这种行为可能会演变为一次活性冻结攻击(Liveness Denial Attack)。每当 Malory 被选举为主链上的区块验证者时,她都会跳过该块,放弃自己的区块验证的身份。这并意味着别的验证者会替代她的工作,相反,在该区块位置处,不会有新的区块加入到主链中。这是 Malory 精心设计用于拖延主链出块的策略。

10.png

- Malory 在主链上放弃了验证区块来让自己的分支链更有竞争力-

这样会导致 Malory 不能从系统中获得区块验证的奖励,以至于她的权益占比将不断减少,所有正常进行区块验证的节点都将从系统中获得区块奖励和交易费。在这次攻击中,我们假设验证的奖励由他们所占的权益比例来进行分配。

另一方面在自己的分支上,Malory是唯一的验证者,每当有机会被选作区块验证者时,她都会生成区块。在这种场景下,Malory会想尽办法增加他的权益占比。此外,她会从主链上复制交易并在自己的分支链上广播出去。这样做能增加她所获得的交易费用,并且增加她的权益占比。

通过采用这样的策略,一方面拖延主链的出块速度,一方面在分支链上尽可能广播更多的区块,Malory最终可以在自己的分支链上获得绝大部分的权益,并且比主链更快地产生区块。一旦她的分支链长度超过了主链,她就将发布最后一笔交易,将自己的权益交易给其他的验证者,并且紧接着广播发布自己的分支链。

11.png

- Malory 一方面在分支链上增加着权益占比,一方面在主链上由于废弃区块不断地损失权益-

你可以看到这样的攻击远远比前文中提到了两种攻击更加复杂。它引入了我两种新的概念,一是用于拖延主链正常出块的活性冻结,另一个则是从主链中复制交易信息出来。

值得留意的是,这样的攻击只能针对非常长区块时间的区块链来实施。根据研究,持有 30% 权益的攻击者在长约 6 年的区块链上才能发动这种攻击(由于无代价模拟,构建一条这样长度的分支链其实是十分迅速且不费力的)。

权益流损攻击可以通过采用移动检查点的策略来应对。充裕法则(Plenitude Rule)同样可以用来判断那一条分支是恶意的。


覆写历史,Part-2:应对方法


原文链接: https://blog.positive.com/rewriting-history-a-brief-introduction-to-long-range-attacks-54e473acdba9
作者: Evangelos Deirmentzoglou
翻译&校对: 安仔 Clint & 阿剑

本文由作者授权 EthFans 翻译及再出版。


你可能还会喜欢:

干货 | 权益证明 FAQ(完整版)
观点 | 权益证明,私钥攻击与无法伪造的奢侈
干货 | Vitalik:Casper 的过去、现在和未来

 
1 人喜欢