以太坊CBC Casper协议被怼没用,同行评议惹争议

互联网 2019-01-15 22:34:13

以太坊协议研究者Vlad Zamfir联合其他作者于近期发布的《“最小CBC Casper协议”共识协议家族》论文,引来了Blockstack项目团队的关注,其首席执行官Muneeb Ali写下一篇《关于CBC Casper的同行评议》文章,批判以太坊CBC Casper协议从设计上就是错误的,而这篇文章也被MIT规划中的密码货币学术期刊收录为第一篇同行评议文章,可见其内容还是得到学术届承认的。

在这篇评议文章发布之后,CBC Casper的作者Vlad Zamfir连续发布了数条回应推文,显然他也非常在意这篇评议文章。

而他给出的回应是:

p2

“他们真正想要表达的是,我们没有在规范的现阶段展现出活性,这是我们一直要去实现的。
Muneeb和他的同事试图批判这篇论文,但是没有发现任何错误的地方,因此他们把注意力放到了论文中明显缺失的部分上。
论文的目的,归根结底,主要是分享安全性定义 :)”

那么,这篇评议文章到底说了些啥,以至于怼怒了Vlad Zamfir了呢?

请看以下译文:

长话短说:活性(Liveness)安全性(safety)是共识协议不可分割的两大属性。活性对于协议而言是一种保证,即使在协议遭遇失败时,其也会做一些有用的事情。 CBC Casper是一个共识协议家族,而它们在分析中遗漏了活性。丢弃掉两者之一,并不会使得协议的完成度达到50%,这只会让你几乎什么都得不到

密码货币生态正在快速发展,其致力于为基础计算机科学问题提供创新的技术解决方案。这些问题涉及了分布式系统、应用密码学和博弈论等。这些科学领域中的每一个,都有丰富的文献、同行评议过程,以及可用于加密协议的既定概念和术语。但到目前为止,由于各种原因,我们还没有看到密码货币行业出现健康的同行评议生态系统。

该行业的情况是,工程师为他们的项目发布独立(非同行评议)的白皮书,并且没有固定的渠道来获得关于技术工作的反馈。我们坚信,同行评议过程对生态系统是积极的,它能够提高技术工作的质量和准确性。我们的区块链工作已经得到了分布式系统社区的同行评议,并最终在USENIX’16上发表了一篇文章。虽然中本聪在发布比特币白皮书时可能没有收到同行评议,但对于过去几年出现的无数白皮书来说,没有同行评议的做法显然是错误的。一个诚实、有建设性的对话,在理论和实践上健全的研究建议,可以提高工作的质量和准确性,并帮助这个行业达到成熟。

明智的是,我们都应该共同努力,寻找解决根本问题的办法,这些问题阻碍我们广泛采用去中心化系统。

以太坊在建立开发者社区方面做得很好。以下是我们以公开审查的形式,对CBC Casper提出的建设性反馈。我们赞扬Vitalik和Vlad欢迎公众评议,他们和我们讨论协议细节,并就此评议的早期草稿提供反馈。我们希望他们也能够从我们的评议内容中得到有用的东西。

评议概述:

以太坊研究组织(Ethereum Research)最近发表了一篇题为《“最小CBC Casper协议”共识协议家族》的论文。以太坊网络在2017年遭遇了严重的可扩展性问题,从那以后,可扩展性研究成为了以太坊的一个重要课题。这是由以太坊本身的基本设计问题造成的(正如我在2016年预测的那样)。

仔细研究CBC Casper的论文后,我们可以发现一个主要的缺点,这不免让人怀疑该论文是否对共识协议和可扩展性努力作出了实质性贡献。

活性和安全性是密不可分的。

具体而言,这篇论文试图在不考虑活性的情况下,试图提供拜占庭安全性。然而,为了达成共识,活性和安全性是拜占庭容错协议不可分割的特性。正因为如此,我们认为,这篇论文所提出的方法基本是错误的共识协议设计。

正确性是一种保证,一旦一个决定达成,它将继续保持这种状态。而活性则保证协议即使在遭遇失败时,它也能够处理一些有用的交易。而没有活性保证,用户实际上无法使用协议做有用的事情,因为他们不知道何时可以考虑交易已经成功处理。例如,在比特币当中,用户需要知道何时他们能够认为一笔交易是被确认了。

而这篇论文试图在不考虑活性的情况下证明正确性,这是一个问题,因为没有活性来证明正确性,实际上并不实用,并且当你考虑活性的情况下,大多数困难的问题才会显现出来。而丢弃掉两者之一,并不会使得协议的完成度达到50%,这只会让你几乎什么都得不到。

此外,未能解决活性问题,也会导致实现拜占庭容错性的其他问题:

a) CBC Casper 只处理了拜占庭故障的一个子集,任何区块链网络都需要是拜占庭容错的,因为它是由相互不信任的节点组成的。节点可能由于任意原因而失败,包括来自节点方的恶意。而这篇论文仅讨论了其中一种失效类型:当节点“模棱两可”(equivocate)时发生的失败:即发送自相冲突的消息。然而,这样的故障只是错误行为的一个子集,还有其他故障会更难处理,这是这篇论文中没法解决的。例如存在恶意节点,其试图故意阻止共识(但并不是模棱两可的)。

b) CBC Casper没有具体说明其决策机制。论文中的示例协议依赖于一个“估计函数”,该函数在协议中的后果并不明确,并且在证明中没有被考虑。虽然我们从他们的例子中怀疑,该“估计函数”是用于为决策机制提供信息,但该论文并未讨论其后果,也没有考虑它们的正确性证明。因而,安全性证明不具备信息性,它在推理有用协议方面没有取得重大进展。大多数重要元素没有得到证实。

c)CBC Casper没有考虑其他与区块链共识相关的、难以解决的问题。示例包括协调区块链分叉、选择哪些分叉是有效的、如何检测和处理重组、从意外的分叉中恢复等等。这种遗漏是有问题的,因为确切地说,这些正是CBC Casper协议需要去解决的问题。对于如何解决这些问题,安全性证明不会提供帮助,因为这些本质上是活性属性,这些属性被遗漏在证明之外了。

论文中的证明,对于空属性集的情况下是有用的,一个空属性集可能是“安全”的,但对于实用协议而言这是无用的。

论文将拜占庭容错定义为“没有活性情况下的BFT安全,且只针对模棱两可的故障”,这是非常规的,并且我们认为,这样的共识协议设计从根本上就是错误的。

以下是更详细的技术评议工作:

完整的技术审查

这篇论文旨在为整个最小CBC Casper共识协议提供拜占庭容错共识安全性的证明。值得注意的是,论文试图在不考虑活性保证的情况下提供共识安全性证明。这是一个不寻常的目标,并且使得很难在所描述的协议家族中推断协议的正确性和有效性。这是因为,正如我们将要讨论的,活性是BFT协议的一个基本属性。一个具有小于某个故障节点阈值t的安全拜占庭容错协议,同时提供了正确性和活性,这意味着,论证其中的一项,而不管另一项,这是一种错误的方法。重要的是,协议提供活性的方式,会影响实现安全性的方法。在不考虑活性的情况下定义安全性,会使安全性在理论上更容易达成,但在实践中却不太适用。活性是一个必要的条件。

作为第一步,我们将简要描述什么是活性,以及它为什么是重要的。粗略地说,活性是指网络在某些部分没有出现故障时,那么就可以保证网络能够继续发展。在协议上取得进展很重要,因为为了使网络完成任何事情,它需要取得进展。例如,在比特币网络中,用户的交易被接受还是拒绝,这是非常重要的。如果没有进度保证,用户实际上不能对网络做任何有用的事情,因为他们不知道他们的交易是否会被成功处理。保证这种网络的进展是困难的,而BFT网络的设计、验证和正确性证明中的大部分复杂性,恰恰在于保证这种特性。由于Casper论文没有涉及这一特性,因此它没有在实用共识协议方面取得重大进展。

CBC Casper 论文实现了哪些,以及为什么没有活性,你就无法保证正确性

CBC Casper论文提供了协议家族的定义,其称为“最小CBC Casper”家族。CBC的意思是指“按结构纠正”(correct-by-construction)。一旦定义了协议家族,作者们就使用这些定义来证明:

  1. 这类系统中的节点,将共享共同的未来协议状态(面对容错级t);
  2. 后续决策将是一致的(因为它们共享未来的协议状态);
  3. 这会导致容错。

论文最后断言,他们已经“部分地指定了一个共识协议家族,并且表明该家族的每个成员都具有异步的、拜占庭容错共识安全性” (来自第五节)。

尽管论文作者正确地证明了其描述的协议家族的特性1和特性2,但他们没有在实践或理论上证明CBC Casper协议家族是拜占庭容错的。如上所述,共识安全性与活性是密不可分的。要了解为什么会出现这种情况,让我们看一个实现全局锁(mutex)的共识协议简单示例。

示例:判定锁 (Deciding Locks)

在此示例中,参与者只是尝试解析锁的持有者,而第一个声明锁的当事人就是所有者。假设参与协议的两个节点在完全相同的时间接收两个不同的消息,一个看到Alice在请求锁,另一个看到Bob在请求锁。请注意,即使没有任何模棱两可,这两个节点也将具有两个不同的协议历史记录。

现在,我们考虑在论文的安全性证明(第3节)中提到的两项已证明属性。首先,定理1表明,任何两个没有模棱两可的协议状态具有共同的未来。现在,定理3表明,对于在一个协议状态中决定的任何属性,其否定不能在没有任何模棱两可的情况下,在另一个协议状态中决定。这些定理对于锁的情况怎可能会成立?根据定理1,两个节点都没有模棱两可,因此它们必须共享未来。每个节点的协议状态都具有由Alice或Bob持有给定锁的属性,并且这些属性不能都是真的。因此,对于被定义为属性“Alice持有锁”的p,我们有状态s_1,其中p被确定,而状态s_2,其中没有p是被确定的(即,否定)。

我们怎样才能将其与论文中的正确性证明相协调?好吧,根据论文中给出的“判定”定义,这两个属性实际上都不是确定的。但是,我们如何才能知道某个给定属性是否已判定呢?这就是关于活性的一个问题,而不是论文中所定义的正确性。但是,任何实用协议的设计都需要回答这样一个问题:“属性何时是判定的?”,并且不能依赖于递归或崩溃的无限协议状态,因此,它从根本上影响关于正确性的决策,以及随后的正确性证明。在区块链中,如何回答这个问题,将告知有关冲突解决、分叉重组、链选择、挖矿算力等问题的决策。由于这个原因,同时对待活性和正确性是绝对必要的。

共识协议能够解决诸如“哪一方持有这个锁”的基本应用场景。而不能这样做的协议,实际上是没有用的。锁示例与区块链上的 token所有权类似(这些token是属于Alice还是Bob的?)。

活性具有比安全性更严的故障阈值

尽管CBC Casper论文中关于所有估计函数和任何故障阈值的安全性证明是对的,任何提供活性的验证行为,都必然会在故障阈值t上设置比安全证明所建议的更严的实际界限。我们的意思是,虽然验证者可以对所有估计量和任何t的共识值属性做出一致的决策,但它们只对更受约束的t范围内的有用属性这样做。论文并未对此进行讨论,但演示如下。

在考虑活性时,将应用两个附加约束,这些约束告诉我们更多关于CBC Casper协议实际可做什么:

-存在T_s,使得对于0<=t<=T_s<sum(W(v)),验证者不能保证一致性验证器决定共识值的有用性质的持久性。也就是说,存在一个低于 sum(W(v))的故障阈值,由此,对有用属性的决策,对于当事人来说,可能看起来与先前观察到的相反,它可以从共识决定变为非共识决定。

-存在T_l,使得验证者不能对0<=t<=T_l<sum(W(v))的共识值的有用性质作出额外的决定。也就是说,存在一个低于sum(W(v))的故障阈值,由此无论验证者做什么,都不能向关于共识值属性的一致决策集添加更多属性。

(注意,W(v)是验证者权重函数,而V中的v是验证者)。

虽然论文没有谈到这些阈值,但在推理CBC Casper协议在实践中可做什么时,它们仍然是很重要的。特别是,在BFT协议的环境中,T_sT_l严格小于sum(W(v)) 。要了解原因,请考虑CBC Casper中经典BFT二元决策问题的表述:

  1. 共识值是{0,1}
  2. 对于所有v,W(v) = 1;
  3. 协议状态对每个验证者从彼此验证者接收的验证消息序列进行编码(假设现在我们不能伪造,重放或任意延迟消息);
  4. 估计函数查看验证者的协议状态,并决定一个共识值是否是由V中的BFT验证者法定人数一致同意的(即对于共识值,至少有2f + 1的投票同意相同的属性);
  5. 需要活性论证的有用共识值属性,是“所有正确验证者决定c”,其中c是一个共识值;

根据安全性证明,我们可以预期,如果我们执行这个协议,那么在没有足够多故障的情况下,要么“所有正确的验证者决定0”为真,要么“所有正确的验证者决定1”为真,并且无论是哪个,都会在所有正确验证者在{0,1}上做出的共识决策集中。

然而,安全性证明所无法表明的是,给定这个公式,正确的验证者将只有在满足t的以下附加界限时,才能始终如一地确定此属性:

t <= T_s <= 1/3 * sum(W(v))<sum(W(v))
t <= T_l <= 1/2 * sum(W(v))<sum(W(v))

这些阈值远低于sum(W(v)),并直接遵循BFT协议上的已知界限。首先,如果超过1/3的副本出现了故障,BFT协议就不能取得进展。在CBC Casper术语中,这意味着,在超过1/3选票出现故障时,验证者不会一致地确定有用的属性。第二,如果一半以上的副本出现了故障,BFT协议不能保证它所做的决策是持久的。在CBC Casper术语中,这意味着从当事人的角度来看,任何先前观察到的对有用属性的共识决定,都不能保证在故障率高于1/2选票时保持不变。

这意味着,尽管安全性证明是正确的,但不考虑估计函数以及故障阈值,这就不具有效性。协议故障阈值的界限,是由协议的活性属性决定的,而不是安全性证明。如果没有活性证明,读者就不能从论文的定理中了解CBC Casper协议的实际行为。这使得安全结果变得微不足道。

结论

这篇论文声称证明了整个最小CBC Casper协议家族具有拜占庭容错安全性。然而,论文提供的定义和证明,既没有在理论上实现健全,也没有实际有用地处理拜占庭容错。我们认为,在没有活性的情况下就考虑正确性,是根本错误的做法。重要的是,目前尚不清楚Casper协议家族的定义,是否为区块链提供了任何有意义的安全保证,或者这种方法是否适用于扩容区块链。

鉴于论文所述,我们认为更准确地说法应该是,CBC Casper不具有拜占庭容错性,并且该论文的目的是为拜占庭安全故障子集提供理论证明。那么首先讨论这种有限理论证明(不同于拜占庭容错)是否有用将是有益的。我们认为,这种没有考虑活性而仅考虑安全性,以及仅讨论有限故障的一般方法是没有用的。

我们要感谢 Vlad和Vitalik孜孜不倦地回答了我们的问题,并澄清了某些概念,这些工作有助于这次评议。他们参与这次评议,表明他们愿意接受批评性反馈,我们对此表示赞赏。如果同行评议过程成为我们行业的规范,那将是一个很好的结果。我们当然愿意接受公众对我们的工作进行评议,并且我们可能偶尔还会对其他协议进行评议。

大家可以共同努力,以使去中心化计算愿景成为现实。

— Muneeb Ali, Jude Nelson和Aaron Blankstein

你怎么看?

相关资讯Relevent