查看原文
其他

干货 | 覆写历史:概述长程攻击,Part-2:应对方法

Evangelos 以太坊爱好者 2019-12-11


覆写历史,Part-1




应对方法


在过去的数年中,有许多应对长程攻击的方法被提出。虽然他们都能对长程攻击提供一定的保护,然而并没有哪一种方法能够完全解决这一问题。因此,在应对长程攻击时,我们常常需要混合采用多种预防策略。


最长链原则

这是解决弱主观性的最简单的方案。在权益证明协议中,这种策略常常需要与其他手段混合使用以应对弱主观性,而在工作量证明协议中,仅仅采用最长链原则就足够了。

-主链时拥有区块数目最多的分支,在上图中黑色区块组成的分支即为主链-


根据这一原则,主链就是拥有区块数最多的那一条分支。随着时间推移,主链可能发生改变,区块也可能被重新组织。当有比主链更长的分支链出现时,区块链的重组就发生了。


移动检查点

检查点或者说移动检查点策略可以说是所有权益证明协议区块链中都用到的保护策略。它的简洁性和易用性使它成为权益证明协议区块链网络中除了最长链原则之外,一定会被采用的保护策略。

移动检查点的意义在于只有在区块链尾端的后 X 个区块可能会被重组。可能被重组的区块数目取决于协议实施的不同,比如像 Peercoin 那样的数月的跨度,以及像 NXT 那样数天的跨度。

-在本例中只有末端最后两个区块可能被重组。使用移动检查点之后,灰色的区块将不可篡改红色的区块分支由于试图重组不可篡改的区块(灰色块)而变得无效了。在上图中唯一可以被重组的只有紫色的区块。-


等等!如果攻击者可以重组后 X 个区块,那不还是长程攻击码?

前半段没错,你的确可以试图重组最后几个区块并且对系统造成一定的扰乱,可是这样的攻击已经属于其他的攻击范畴了。长程攻击指的是从创世区块开始发动的攻击。

对十分有限数量区块发动的攻击被称为短距离攻击或者行贿攻击(对数日到数月不等跨度的区块进行重组)。短距离攻击有着不同的激励动机、攻击手段、影响以及应对策略。虽然短距离攻击也是一个有趣的主题,但本文将不做讨论。

通过移动检查点,主链真正变得直到最后 X 区块之前都不可篡改。这听起来可能有些奇怪,通常大家都认为区块链是“不可篡改的账本”,但你是否怀疑过它真是这样的吗?事实令人大跌眼镜,并不是。

虽然没人能够篡改某个区块内的任何一笔交易,但是你可以制造一条分支链,订制你自己的区块,超越主链,重组区块,就这样,一条本不可篡改的区块链被你修改了。准确地说,这并没有篡改某一个区块,我们只是重新创造了区块链的历史,虽然先前的主链依旧是无法篡改的,但它所承载的区块已经毫无意义。系统中已经没有信任可言了。


密钥演进加密技术

接下来我们要讨论一些更复杂的应对策略,密钥演进加密技术是用来应对变节攻击的。在变节攻击的场景中,退休验证者手中的密钥虽然不能验证新区快了,但是他们能对旧有的区块进行签名。

使用密钥演进加密技术,更确切来说密钥演进签名技术(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% 以上的验证者都是恶意的,区块链系统就失败了),那么主链的区块密度总会比竞争的恶意分支链要更高。

根据这一原则,很轻易就能识别出主链并解决弱主观性问题。


结论


在本文中,我们探讨了权益证明中最有意思的一种攻击方式——长程攻击,并将其根据特点划分为三个子类。在讨论了简单攻击、变节攻击和权益流损三种攻击方式之后,我们同样列举了对应的保护策略。

尽管在工作量证明系统中最长链原则已经足够应对长程攻击问题,权益证明区块链仍然需要联合使用不用的策略来解决这一难题。在维护权益证明区块链安全性的过程中,我们需要混合采用移动检查点、情境感知交易、密钥演进加密技术和充裕法则来保证区块链的安全。

特别感谢 George Papakyriakopoulos 的合作研究,以及 Arseny Reutov 和 @firek1d 的校对工作。



阿剑按:文中提出的“充裕法则”确实是此前的材料没有见到过的,有新意,而且像“最长链规则”那样较为形式化。不过我想到一个问题:以文中描述的权益证明系统为例,要判断稀疏度,需要一个对时间的度量。这个时间量从哪里来?

(以上言论不代表 EthFans 观点,EthFans 期待听见不同的声音~)


原文链接: 

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


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


你可能还会喜欢:

干货 | 理解权益证明安全模型的原理

干货 | 基于权益的代币协议中的通货膨胀和参与度

干货 | 互操作性的区块链系统设计理念



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存