在不影响安全性的情况下实现性能最大化之间的权衡。
分片背后的概念很简单:网络验证器不需要每个事务通过一个验证器池,而是可以分为称为分片的子组,每个事务必须只通过其中一个分片。这是一个强大的思想,它允许网络根据验证器的数量进行扩展。
分片将网络划分为不同的验证子组,这意味着只有一小部分必须验证每个事务,而不是大多数验证程序。
但是,分片会带来新的风险。为了使网络对所有用户都安全,所有分片都需要满足拜占庭验证器限制,或者可以以恶意或任意方式操作的验证器的最大百分比。
在大多数网络中,恶意验证者人数超过1/3,共识实例从根本上说是不安全的。即使验证器整体设置在极限之下,也可能会损坏单个分片。例如,如果具有10%拜占庭验证器的网络被均匀地分成10个分片,而一半拜占庭验证器最终分成一个分片,则该分片将是50%拜占庭,因此整个网络将是不安全的。这被称为单个碎片接管攻击。
为了解决这个问题,网络必须以不能被游戏的方式(例如通过可验证的随机函数)随机地将验证器分配给分片,并确保验证器投票权足够均匀(例如通过上限),以便它们可以整齐地分成碎片。这些主题很吸引人,但超出了本文的范围。现在,我们假设这两个属性都是正确的,即将等权重的验证器随机分配给分片。我们还假设我们将所有验证器分配给分片,如下所述,这是很重要的,因为它确保了最大程度的经济实力来保护网络。
那么,关键问题是网络可以支持多少个分片?
理想情况下,我们会尽可能多地提高吞吐量。请注意,由于固有的开销,分片不能无限扩展,但一般来说,分片数量越多越好。例如,以太坊的分片可以产生100-1000倍的可扩展性增益,这可以对应于相似数量的分片。但性能显然是安全的第二重要因素,如果不可信,一百万个TPS是没有用的!
这个问题基本上是一个统计问题。不幸的是,我所看到的每个分片规范,包括以太坊,Dfinity和Zilliqa提出的规范,都使用了错误的统计假设,严重影响了分片网络的安全性。
在本文中,我们将概述这是一个风险,并说明我们如何正确分析这种风险。
权衡:性能与安全
直观地说,对于给定数量的验证器,碎片越多,任何单个碎片被破坏的风险就越大。例如,如果100个验证器中有10个是拜占庭式的,则不会破坏具有2个碎片的切分方案,因为任一分片中的最大拜占庭百分比为20%(10/50)。在另一个极端,如果每个有100个1个验证器的分片,我们知道10个分片肯定会受到损害。这是基本的权衡:性能与安全性。
让我们首先考虑更多限制。为此,我们使用N个验证器来参数化问题,其中K是拜占庭,并且拜占庭限制值为ɑ。拜占庭的所有验证器的分数是p = K / N.我们将整个N个验证器划分为S个分片,并为每个分片分配n = N / S个验证器。
如果p接近于ɑ,那么对于任何数量的分片,几乎肯定会有一个受损的分片。相反,如果p接近0,那么S可以相应地大。
每个分片的验证器数量n应足够大,以降低单个验证器以这种或那种方式倾斜余额的风险。同样,N应该足够大以减少这种类型的“chunkiness”。
如果我们知道每个分片轮次P(F)中一个或多个分片失败的概率,我们就可以量化网络的安全性。具体地说,平均失效年份等于预期失效前的分片轮数除以每年的分片轮数。除了一些小的情况,碎片被破坏的可能性总是非零的,但是我们可以使这个风险水平合理。平均每1000年发生一次故障的网络具有可接受的高安全级别,而预计每年发生一次故障的网络则不够安全。
现在关键问题是如何估计P(F)。正是在这里,其他分片规格都是不符合规格。
分片统计建模
结果表明,这个问题可以用标准统计数据进行分析。分片中的采样与超几何分布相匹配,超几何分布描述了k个成功的概率(拜占庭验证器),从n个抽头中抽出,而不从有限的n个大小的人群中替换为k个总成功。
请注意,这与前一节中针对第一个分片的精确参数化相匹配 - “success”是绘制拜占庭验证器,并且我们想知道在n绘制之后我们在一个分片中具有少于ɑ* n个拜占庭验证器的概率。
但是在第一块碎片之后会发生什么呢?
我们将从池中抽取n个验证器,假设k1是拜占庭。然后我们有一个新的有限总体大小为N-n和K-k1拜占庭验证器剩余。在采样分片后,有N-i * n个总验证器和K -(k1 + k2 + ... + ki)拜占庭验证器离开。 `很明显,随着我们继续采样,分布参数发生了显着变化,我们不能仅使用基本分布来估计所有分片的拜占庭验证器数量的概率。
这种精确的参数化没有得到很好的研究,现有的多变量超几何分布等概括并不完全符合我们的问题,因此我们需要做一些工作来计算至少一个碎片失效的概率。
错误1:二项式近似
当出现这个问题时,几乎每个人都会做的是转向超几何分布的二项式近似。二项分布描述了n次抽取中k次成功的概率,其中每次抽签的成功概率为p。使用p = K / N,上面定义的全局拜占庭分数,我们可以看出这与超几何分布匹配,不同的是样本是替换而不是替换。
事实证明,对于这个问题,二项式近似是非常不准确的。如果(1)N和K与n相比较大且(2)p不接近0或1,则二项分布仅是超几何分布的良好近似。这是有意义的。假设您正在分析从人口中抽取的10人样本中左撇子人数。如果您从主要城市的人口中抽样,那么下一个人采样的左手概率是相对恒定的,因此从样本到样本的p变化不大。相反,如果你是从一组15个朋友中抽样,其中3个是左撇子,p将在每次连续抽签时发生显着变化。对于鲁棒的分片方案,这两种情况都不能被认为是正确的。
强大的分片方案要求您对大多数(如果不是全部)验证器进行采样,这意味着n接近于N.换句话说,仅对一小部分人口进行抽样是不够的。这样做需要您显着扩展验证器的数量,或者将分片数量限制在远低于最大容量的范围内。前者总体上削弱了验证器的质量,而后者限制了潜在的性能。两者都使得在网络中具有给定比例的投票权的拜占庭验证器更容易通过随机机会产生大的影响,因为您只是对一小部分投票权进行抽样。
使用像二项分布这样的近似值需要证明理由,显然,这些妥协是不可接受的,因为它们降低了直接保护网络的经济能力。
因此,二项分布不是对分片失败概率的良好估计。它也不是一个保守的上界,因为它可能给出比正确的超几何分布更大或更小的估计。因此,使用这种错误假设的网络的安全保证和假设可能会受到损害。
使用错误二项式近似的项目
不幸的是,使用二项分布(及其CDF,即“累积二项式”)在分片方案中非常常见,甚至那些假定整个验证器组被采样的那些。
最值得注意的是,以太坊团队反复使用二项式描述抽样。
-
Vlad Zamfir
-
以太坊分片概述
-
Vitalik Buterin的可扩展性论文
在估算委员会选择和分片概率时,理论上的Byzcoin和OmniLedger规范以及相关的Elastico背后的团队也陷入了这个陷阱,他们的衍生项目,如Zilliqa也是如此。
Cardano大量使用二项式近似,最值得注意的是委员会选择无需替换。尽管它们采用了保守的Chernoff界限,但这种界限对于真正的超几何分布并不准确。其他错误地假设替换采样的是Multichain和CryptoTask。
错误2:未完全取样
第二个(也是更严重的)主要错误来自于假设第一个碎片(或组)中的失败概率分布表示任何碎片(或组)中失败的概率分布。换句话说,他们假设以下平等:
P(分片1中的失败)= P(所有分片中至少有一个失败)
很明显,这是荒谬的。任何碎片中失败的概率显然是碎片数量的函数。例如,如果失败在硬币翻转上看到尾部,则每次硬币翻转时至少一次失败的概率会增加。顺便说一下,这是二项分布本身的基础逻辑!
实际上,上一节中的所有示例也会出现此错误。如果任何分片的失败概率是p_f且是独立的(这是错误的二项式假设所要求的),则所有S样本的失败概率为:
P(至少一次失败)= 1-(1-p_f)^S≥p_f
即使项目未提交第一个错误并正确使用超几何分布,这也是一个问题。与二项式不同,连续的超几何样本不是独立的。从第一个到第二个到第n个分片的各种参数有显着变化,这意味着估计的不准确性随着分片数量的增加而增加。这个假设导致相对于真实分布的两个误差源!
例如,Dfinity的白皮书概述了他们的系统将副本(节点)划分为组G(每个组都没有替换,但可能在组之间发生重复),并且定义的安全性假设是每个组都是诚实的。此上下文与分片略有不同,但具有等效的安全性分析。然后,他们使用第一组的累积超几何分布(即CDF)求解最小组大小(组数的倒数)。 RapidChain论文(部分由Dfinity研究人员编写)在其时代安全性分析中犯了同样的错误。
虽然这种松懈在理论领域是可以接受的,在理论领域中,对所需节点的数量进行粗略的直觉是足够的,但对于实际部署来说,这是一个严重的风险。公共去中心化网络需要一种确定的方法,将碎片数量设置为随时间动态变化的节点数量的函数,这种计算的精度对网络的实际安全性有很大影响。
示例:以太坊
在他们的分片概述中,以太坊概述了他们的风险计算并报告了一些失败概率。他们得出结论,如果从大群体中采样(即,假设二项式近似是准确的),每个碎片的节点数量至少为150,则分片应该是安全的。
现在让我们假设二项近似确实是适当的,并且重点关注第二个错误对不完全抽样的影响。
在本例中,我们从无限总体(即替换-错误假设)中抽样150个节点,即40%的拜占庭,每个碎片的拜占庭极限为50%-正是其概率表(1,3)项的以太坊假设。这些样本是独立的,因为我们假设在这个例子中,采样是用替换来完成的。第一个(或任何其他)碎片违反限制的概率为0.82%。这与以太坊共享概述中报告的概率相匹配。但是对于10个碎片来说,任何一个碎片被破坏的概率上升到7.96%。对于100块碎片,是56.41%!
不可否认,以太坊给出的概率是第一个碎片。但澄清的脚注声称它对所有碎片的概率确实相当(或至少大致如此):
给出的概率是针对一个单一的碎片;然而,随机种子影响O(c)分片,攻击者可能会接管其中任何一个。如果我们想同时查看O(c)分片,那么有两种情况。首先,如果磨削过程受到计算限制,那么这个事实根本不会改变微积分,因为即使现在每轮有O(c)成功的机会,检查成功需要花费O(c)倍的工作量。其次,如果磨削过程在经济上受到限制,那么这确实需要更高的安全系数(将N增加10到20就足够了),但重要的是要注意攻击者在以利润为动机的操纵攻击中的目标是在任何情况下都增加他们对所有分片的参与,因此我们已经在调查。
将样本大小(以太坊页面中的N)增加20只会将失败概率降低10个碎片到5.09%,100个碎片降低到40.71%,仍然显然是不可接受的。这甚至不能解释错误地假设二项式而不是超几何分布的错误!
本文转载公众号:区块链研究实验室,专注区块链技术,产品社群,经济模型等全方位的知识体系输出,为大家带来不一样的社群学习体验。欢迎联系作者微信加入社群:csschan1120