LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > 区块链分片尚未解决的问题(上)

区块链分片尚未解决的问题(上)

2020-01-14 币须内容矿池 来源:区块链网络

在系列的第一部分,我们为区块链分片提供了动机,并讨论了一些核心概念。 在这篇文章中,我们将讨论分片的一些更高级的方面,包括它尚未解决的两个最大的挑战: 数据可用性数据有效性

介绍

分片链的核心思想是,大多数参与者操作或使用网络不能验证块在所有的分片。 因此,每当任何参与者需要与特定碎片交互时,他们通常不能下载和验证碎片的整个历史。

然而,分片的分区方面提出了一个重要的潜在问题: 如果不下载和验证特定碎片的整个历史,参与者就不一定能够确定它们交互的状态是某个有效的块序列的结果,而这些块序列确实是碎片中的规范链。 一个问题,不存在于一个非分片区块链。

我们将首先提出一个简单的解决方案,这个问题已经提出了许多协议,然后分析这个解决方案可以如何打破和什么尝试,以解决它。

所谓的简单解决方案

数据有效性的天真解决方案如下: 假设整个系统有数千个验证器,其中不超过20% 的验证器是恶意的或以其他方式失败(例如无法在线生成一个块)。 那么如果我们抽取200个验证器样本,在实际应用中超过1/3失败的概率可以假设为零。

1/3是一个重要的门槛。 有一系列协商一致的协议,叫做 BFT 协商一致的协议,保证只要少于1 / 3的参与者失败,不管是撞车还是违反协议,协商一致就会达成。

对于这个诚实的验证器百分比的假设,如果当前碎片中的验证器集合为我们提供了一些块,那么朴素的解决方案假设该块是有效的,并且它建立在验证器开始验证时认为是该碎片的规范链的基础上。 验证器从以前的一组验证器中学习了规范链,这些验证器基于相同的假设,建立在规范链的前端的块之上。 通过归纳,整个链是有效的,而且由于在任何时候都没有生成分叉的验证器集合,因此朴素的解决方案也肯定当前链是碎片中的唯一链。

如果我们假设验证器可以自适应地损坏,那么这个简单的解决方案就不起作用,这并不是一个不合理的假设(请参阅此处了解更多关于自适应损坏的信息)。 在一个有1000个分片的系统中自适应地损坏一个分片比损坏整个系统要便宜得多。 因此,协议的安全性随着分片数的增加而线性下降。 为了确定一个块的有效性,我们必须知道在历史上的任何时刻,系统中没有任何碎片有大多数的验证器相互勾结; 对于自适应的对手,我们不再有确定性。 正如我们在前一部分中所讨论的,合谋验证器可以执行两种基本的恶意行为: 创建分支和生成无效块。

通过将块交叉链接到信标链,可以解决恶意分叉问题,信标链的设计通常比碎片链具有更高的安全性。 然而,生成无效块是一个更具挑战性的问题。

数据有效性

假设在这个块 b 中,1000个令牌是由 Alice 凭空造出来的。 然后,恶意参与者在 b 上生成有效的块 c (在某种意义上,c 中的事务应用正确) ,模糊无效的块 b,并发起一个到碎片2的交叉碎片事务,将这1000个令牌转移到 Bob 的帐户。 从这一刻起,不正确地创建令牌驻留在一个完全有效的块环链在碎片 # 2。

一些简单的方法可以解决这个问题:

用于 Shard # 2的验证器,以验证事务从其中启动的块。 即使在上面的示例中,这也不会起作用,因为 c 块看起来完全有效

对于 Shard # 2中的验证器,用于验证启动事务的块之前的大量块。 当然,对于接收分片验证的任意数量的块 n,恶意验证器可以在它们生成的无效块上创建 n + 1有效块

解决这个问题的一个有前途的想法是将碎片排列成一个无向图,其中每个碎片与其他几个碎片相连,并且只允许相邻碎片之间的交叉碎片交易(例如 Vlad Zamfir 的碎片交易就是这样工作的,类似的想法也用于嘉手纳的 Chainweb)。 如果不是邻居的分片之间需要跨分片事务,则通过多个分片路由此类事务。 在这种设计中,每个分片中的验证器都需要验证分片中的所有块以及所有相邻分片中的所有块。 考虑下面的一个图形,它有10个碎片,每个碎片有4个邻居,跨碎片通信不需要两个以上跳数:

2号碎片不仅验证了自己的区块链,而且验证了所有邻居的区块链,包括碎片1号。 因此,如果碎片 # 1上的恶意参与者试图创建一个无效的块 b,然后在它上面构建块 c 并发起一个跨碎片事务,这种跨碎片事务将不会通过,因为碎片 # 2将验证碎片 # 1的整个历史,这将导致它识别无效的块 b。

虽然腐蚀一个碎片不再是一个可行的攻击,腐蚀一些碎片仍然是一个问题。 在下面的图中,一个同时腐蚀 Shard # 1和 Shard # 2的对手用一个无效块 b 中的资金成功地执行了一个交叉 Shard 事务到 Shard # 3:

碎片 # 3验证碎片 # 2中的所有块,但不验证碎片 # 1中的所有块,并且无法检测恶意块。

正确解决数据有效性有两个主要方向: 渔民和计算的密码证明。

渔夫

第一种方法背后的思想如下: 无论何时,为了任何目的(例如与信标链的交叉链接或交叉分片事务)而在链之间传递块头时,都会有一段时间,在这段时间内,任何诚实的验证程序都可以提供块无效的证据。 有各种各样的结构可以非常简洁地证明块是无效的,因此接收节点的通信开销远小于接收一个完整块的通信开销。

使用这种方法,只要碎片中至少有一个诚实的验证器,系统就是安全的。

这是目前被提议的协议中占主导地位的方法(除了假装问题不存在)。 然而,这种方法有两个主要缺点:

质疑期需要足够长的时间,以便诚实的验证程序能够识别出已经生成的块,下载它,完全验证它,并准备在块无效时提出质疑。 引入这样一个时期将大大减缓跨分片交易的速度

该挑战协议的存在为恶意节点发送带有无效挑战的垃圾邮件提供了一个新的攻击载体。 这个问题的一个显而易见的解决方案是让挑战者存入一些返回的标记(如果挑战有效的话)。 这只是部分解决方案,因为对手可能仍然有利于用无效的质疑向系统发送垃圾邮件(并烧毁存款) ,例如阻止诚实的验证程序进行有效的质疑。 这些攻击被称为 Griefing 攻击

渔夫的两个问题都没有一个令人满意的解决方案,但是严格来说,使用渔夫仍然比有一个无效块被定稿的可能性要好。

—-

编译者/作者:币须内容矿池

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...