干货 | 权益证明 FAQ(完整版)

Ajian   |     |   3492 次阅读

编者按:本文原文为以太坊 GitHub 上的《Proof of Stake FAQ》。EthFans 曾经在 2016 年10月编发过中译本,那时候大家还将 Proof of Stake 翻译为“股权证明”。(见文末超链接)。物换星移,PoS 在中文社区中的译名随着认识的深入而变化,FAQ 原文也在持续更新。现在,我们发布新译本,供大家参考,对照。
译文也参考了旧版翻译,谨在此向旧版两位翻译 Nov 和 Max 表示诚挚的谢意。——2018.3.15
文档已更新,为方便阅读加入目录。——2018.3.16
新版翻译已全部更新完成。——2018.3.21

目录


什么是权益证明

权益证明(PoS)是一类应用于公共区块链的共识算法,取决于验证者在网络中的经济权益。在基于公共区块链的工作量证明(PoW)(如比特币和当前的以太坊用例)中,算法会奖励那些为了验证交易并创建新区块(即挖矿)解决密码难题的参与者。在基于权益证明的公共区块链(如以太坊即将实现的Casper协议)中,一组验证者轮流提议并票决下一个区块,而每位验证者的投票权重取决于其保证金额的大小(即权益)。权益证明的重要优势包括保障安全性、降低中心化危险以及提升能源效率

通常来说,权益证明算法如下所示。区块链会追踪一个验证者集,而任何持有该区块链的基础加密货币(对以太坊来说就是以太币)的人都可以通过发送一种将以太币锁定为保证金的特殊交易成为验证者。随后,创造并认可新区块的过程可通过当前所有验证者均可参与的共识算法来完成。

共识算法有很多种类,将奖励分配给参与共识算法的验证者的方式也有很多种,因此权益证明也有多种“风格”。从算法的角度来看,主要有两种:基于区块链的权益证明和拜占庭容错(BFT)型权益证明。

基于区块链的权益证明中,共识算法在每个时段内伪随机地选择一个验证者(例如,每10秒钟为一个时间段),赋予该验证者出块的权力,新创造的区块必须跟在之前的某个区块(通常是位于最长链的末端的区块)后面。因此,随着时间的推移,大多数区块会填加到同一条区块链上,使之不断增长。

拜占庭容错型权益证明中,虽然提议区块的权力会随机分配给验证者,但是决定哪一个区块是“合法的”要通过一个多轮过程来完成。每个验证者在每一轮都会给某个特定的区块投出一票,在这个多轮过程的最后,所有(诚实并联网的)验证者会就是否将这个区块添加到链上做出最终决定。要注意的是这些区块可能仍然链接在一起,其关键区别在于对一个区块的共识可以仅限于这个区块本身,与它后面的那条链的长度和大小无关。

权益证明相对于工作量证明有哪些优点?

详见《权益证明设计哲学》这篇长文。(编者注:中译本见文末)

简言之:

  • 不需要为了保护区块链而消耗大量电力(例如,比特币和以太坊预计每天要在共识机制的电力和硬件上耗费超过100万美元的成本)。
  • 由于权益证明避免了高电耗,就没有太多必要为了保持网络中参与者的积极性而发行很多新代币。从理论上来说,甚至有可能变为负发行量,其中一部分交易费被“烧掉(burned)”,因此供应量会逐渐减少。
  • 权益证明有助于实现更多采用博弈论机制设计的技术,从而更好地抑制中心化卡特尔式机构的形成,如果这种机构确实形成了的话,也能够阻止它们危害网络(如工作量证明中的自私挖矿)。
  • 降低中心化风险,因此规模经济不会造成太大问题。你不会因为负担得起更好的大批量矿机而获得与投入资金不成比例的收益,在PoS中,1000万美元投资带给你的收益就是100万美元投资的整整十倍。
  • 能够采用经济处罚,这让发动各种形式的51%攻击所要付出的代价比在工作量证明中高出许多——Vlad Zamfir说过这样一句话,大意是:“就好像如果你参与了51%攻击,你的ASIC矿场就会烧毁一样”。

权益证明将如何适应传统拜占庭容错研究?

拜占庭容错研究的一些基本成果适用于所有共识算法,不仅包括实用拜占庭容错算法等传统的共识算法,还有一切权益证明算法,以及经过适当数学建模的工作量证明。

这些关键性成果包括:

  • CAP定理(CAP theorem) ——“如果网络出现分区,你必须在一致性和可用性中选择一个,不能二者兼得。”直观一点来说很简单:如果网络一分为二,我在其中一半网络中发起交易“发送10枚代币给A”,在另一半网络中发起交易“发送10枚代币给B”,要么就是这个交易系统不可用,致使其中一个或两个交易无法处理,要么就是交易系统不一致,致使一半网络只会达成第一个交易,而另一半网络只会达成第二个交易。要注意的是CAP定理与可扩展性无关,它可以同样运用于分片系统和非分片系统。
  • FLP不可能定理FLP impossibility)——在异步环境中(即,即使在正常运行的节点之间,也无法控制网络延时上限),不可能创造出一种算法,在出现单个故障或不诚实的节点之时,确保能在任和特定的有限时间内达成共识。要注意的是这并非排除了 “拉斯维加斯(Las Vegas)”算法,该算法每轮都有一定的概率达成共识,因此在T秒内达成共识的概率会随着T的增加呈指数增长并向1趋近;这实际上是许多成功的共识算法都会使用的“应急之策”。
  • 容错范围——在DLS的这篇文章中,我们可以得知:(i)在部分同步的网络模型(即网络延时虽有上限,却不知上限值)中运行的协议可以容忍超过1/3的任意错误(即“拜占庭”错误);(ii) 在异步模式(即对网络延时没有范围限制)下的决定性协议不能容忍错误(虽然文章中没有提及随机化算法的容错率高达1/3);(iii)在同步模式(即网络延时保证会低于某个已知数)下的协议竟然能够实现100%的容错,不过在出错节点大于等于1/2时有一些限制条件。请注意值得我们注意的是“已验证的拜占庭(Authenticated Byzantine)”模型而非“拜占庭”模型;“已验证”在这里意味着我们可以在容错算法中使用公钥加密算法,该算法如今已经进行过了充分研究,而且成本很低。

经过Andrew Miller等人的严谨分析,工作量证明作为一种依赖于同步网络模型的算法符合整体蓝图。我们可以将网络模拟成由接近无穷数量的节点组成,每个节点代表很小单位的算力,单个节点在给定时间内创造一个区块的可能性很小。在这个模型下,假设不存在网络延时的话,协议有50%的容错率,实际观察到的情况是,以太坊的容错率为46%左右,比特币的容错率为49.5%左右。然而,如果网络延时等于区块生成时间的话,协议的容错率会下降至33%,并且随着网络延时接近正无穷,容错率不断向0趋近。

权益证明共识更为直接地适用于构建拜占庭容错共识,因为所有验证者的身份都是已知的(拥有稳定的以太坊地址),该网络还会跟进验证者的总人数。权益证明研究有两条总路线,一条着眼于同步网络模型,而另一条着眼于部分异步网络模型。“基于区块链的”权益证明算法几乎一直依赖同步网络模型,这些算法的安全性可以在这些模型中得到证明,形式上与证明工作量算法的安全性相似。还有一个研究方向是将部分同步网络中的传统拜占庭容错共识与权益证明联系起来,但是这个研究方向解释起来更为复杂;会在后续小节中详细介绍。

工作量证明算法和基于区块链的权益证明算法选择了可用性而非一致性,然而拜占庭容错型共识算法更青睐一致性;Tendermint 明确选择了一致性,Casper 采用的混合模型虽然偏向可用性,却又尽可能地实现一致性,让链上应用和客户端在任何时候都能感觉到强有力的一致性保障。

需要注意的是,Ittay Eyal 和 Emin Gun Sirer 在关于自私式挖矿的研究中,(取决于网络模型)对比特币挖矿的激励兼容性设定了25%和33%的界限(即只有网络窜谋不超过25%或33%,挖矿才能激励相容)。该研究与传统共识算法研究得出的成果毫无关系,后者不涉及及激励兼容性。

“无利害关系”问题是什么?如何解决?

在许多早期(基于区块链的)权益证明算法(包括 Peercoin)中,只为创造区块提供奖励,且没有惩罚措施。这就造成了不幸的结果,在出现多条区块链相互竞争的情况下,会激励验证者在每条链上都创造区块,以确保获得奖励:

在工作量证明中,这么做需要将算力一分为二,因此会影响收益:

因此,在之前的权益证明中,如果所有参与者都唯利是图,即使没有攻击者,区块链也可能达不成共识。在PoS中如果有攻击者的话,攻击者只需要拥有比无私节点(只在原链上下注)更多的算力,无需理会理性节点(在原链和攻击者的链上都下了注)。相比之下,在工作量证明中,攻击者必须拥有比无私节点和理性节点都要多的算力(至少也要对它们有威胁:参见 P + epsilon 攻击)

有人认为权益持有者为了“保护他们的投资价值”,会有动力去采取正确的行为, 只在最长的链上下注,然而这忽略了这种动力存在公地悲剧问题:每位个人利益相关者可能只有1%的概率成为“关键人物”(即攻击的成败与否取决于“关键人物”参与与否),因此(行贿者)说服他们参与攻击只需要他们代币的1%;因此,所需的贿赂加起来只会占所有保证金总量的0.5-1%。另外,该论点意味着任何零出错情况都不会维持在稳定均衡的状态,因为如果出错率为0,那每个人都不可能成为关键人物。

可以通过两个策略解决这个问题。这篇以“slasher”为题的文章从广义上描述了第一个策略,并由 Iddo Bentov 的这篇文章进一步发展。其中涉及到对在多条链上同时出块的验证者的惩罚措施,通过将惩罚证明(即两个冲突的已签名区块头)纳入区块链,之后再适当扣除有恶意行为的验证者的保证金。这改变了激励结构:

要注意的是,要让该算法有效运行,需要提前很久确定验证者集。否则,如果一个验证者拥有1%的权益,在存在A和B两个分叉的情况下,验证者有0.99%的概率会下注在A而非B上,或是在B而非A上,验证者能够同时在两条链上下注的概率只有0.01%。因此,验证者有99%的概率会实现双重权益:可能在A上下注,也可能在B上下注,只有两种选择都开放的情况下会在更长的那条链上下注。这只有在两条链上的每个区块都会进行相同的验证者选择之时才能避免,这就要求在分叉产生之前选好验证者。

该算法有自己的弊端,包括要求节点保持联网状态来保障区块链的安全,以及存在中程验证者窜谋的风险(比方说连续30名验证者中有25人联合起来,提前同意在之前的19个区块上发动51%攻击),但是如果这些风险被认为是可接受的话,那么这个策略还算有效。

第二个策略就是惩罚在错误的链上出块的验证者。也就是说,如果有A和B两条竞争链,那么如果验证者在B链上出块,并在B链上得到+R的奖励,但B链区块头可以包含在A链中(在Casper中这被称为“dunkle”),那么在A链上的验证者会遭到-F的罚金处罚(F可能等于R)。这改变了经济计算:

直觉上,我们可以把工作量证明中的经济模式复制到权益证明中。在工作量证明中,在错误的链上创造区块的行为同样会遭到惩罚,不过这种惩罚在外部环境中是隐性的:矿工必须花费额外的电力并且获得或租用额外的硬件。在权益证明中,我们只是让惩罚更明确。该机制的一大弊端是它给验证者带来的风险更多了一点(尽管这种影响会逐渐消除),不过它的一大优点是不需要提前知道验证者是谁。

这表明了基于区块链的算法是如何解决无利益关系问题的。拜占庭容错型权益证明算法目前是如何运作的?

拜占庭容错型(部分同步的)权益证明算法允许验证者通过发送一种或多种类型的签名信息对区块进行“投票”,并且详细说明了两种规则:

  • 确定条件——规定在什么样的情况下一个特定的哈希值可以被认为是确认值。
  • 惩罚条件——规定在什么情况下一个特定的验证者可以被认定是恶意行为者(例如,同时为多个冲突区块投票)。如果一个验证者触发了其中一条规则,所有的保证金都会被删除。

为了说明惩罚条件可以采用的不同形式,这里给出了两个例子(在下文中,“2/3的验证者”是“占保证金总数2/3的验证者”的简写,对于其它分数和百分比来说也是一样)。在这些例子中,应该将"PREPARE"和"COMMIT"简单理解为验证者可以发送的两种信息。

  1. 如果 MESSAGES 包含 ["COMMIT", HASH1, view]["COMMIT", HASH2, view] 形式的信息,其中由同一个验证者签署的 view 是相同的,但 HASH1HASH2 是不同的,那么该验证者就会受到惩罚。
  2. 如果 MESSAGES 包含 ["COMMIT", HASH, view1] 形式的信息,那么除非view1 = -1或是同时包含某个特定 view2["PREPARE", HASH, view1, view2] 形式的信息,且 view2 < view1 ,由 2/3 的验证者签署,那么下达COMMIT命令的验证者就会受到惩罚。

一组适宜的惩罚条件必须具备两大重要特点:

  • 可问责安全性——如果互相冲突的 HASH1HASH2 (也就是说 HASH1HASH2 是不同的,且互不为衍生值)是确定值,那么至少有1/3的验证者违反了某个惩罚条件。

  • 似乎合理的活性——除非有1/3以上的验证者违反了惩罚条件,只要有2/3以上的验证者就可以产生确定值。

如果我们拥有一组满足上述两大特点的惩罚条件的话,我们就可以激励参与者来发送信息,并且开始从经济确定性中受益。

“经济确定性”的一般概念是什么?

经济确定性的意思是一旦某个区块确定了下来,或者更普遍地说,一旦已经签署了足够的特定消息,在未来的任意时刻,想要让合法的历史记录包含冲突区块,只有在很多人愿意为此消耗大笔金钱的情况下才能实现。如果一个节点认为某个区块满足了该条件,就会有强大的经济保障来支持这个区块将成为所有人都认同的合法区块历史的一部分。

达到经济确定性有两种方式:

  1. 如果足够数量的验证者已经签署了“我同意在所有不包含区块B的链中损失X”这种形式的加密经济声明,就可以从经济上确定一个区块。这就向客户端保证了两种情况:要么(i) B是合法链的一部分,要么(ii)验证者通过消耗大量资金来误导客户端,使其相信是(i)的情况。
  2. 如果足够数量的验证者已经签署了支持区块B的信息,就可以从经济上确定一个区块。而且从数学角度可以证明,某种B' != B 的关系如果在相同的定义(条件)下也能达到确定性的话,验证者就会损失大笔金钱。如果客户端发现了这点,并仍旧验证了这条链,有效性加上确定性就是合法分叉选择规则中获得优先权的充分条件,那么就可以保证:(i) B是合法链的一部分, 或者(ii)验证者损失了大量资金生成出了一条同样达到了确定性的冲突链(分叉)。

实现确定性的两种方法源自非利害关系问题的两个解决方案:通过惩罚”验证错误区块“,以及惩罚”同时验证冲突区块“来实现确定性。第一种方法的主要优点在于更适合轻客户端而且更易于推断,而第二种方法的主要优点在于 (i) 更容易发现诚实验证者不会受到惩罚 (ii) 更有利于诚实验证者的不良因素。

Casper 遵循的是第二种方式,不过它有可能添加一个链上机制,能让验证者自愿选择签署第一种情况的确定性信息,因而可适用于更高效的轻客户端。

那么经济确定性与拜占庭容错理论有何关联?

传统的拜占庭容错理论假设除去部分差异大体会具有相似的安全性(safety)和活跃度(liveness)特点。首先,传统的拜占庭容错理论只需要在2/3的验证者是诚实的情况下就可以实现安全性。在这种模型下运作更为容易;传统的拜占庭容错试图证明的是“如果机制M出现安全故障,会有至少1/3的节点出了错”,然而我们的模型试图证明的是“如果机制M出现安全故障,会有至少1/3的节点出了错,即使你在发生故障时离线了,也能知道是那些节点发生了故障”。从活跃度角度来看,我们的模型更加容易,因为我们不需要证明网络将达成共识,只需要证明网络不会阻塞。

幸运的是,我们可以表明另外的问责要求并非特别难以实现;实际上,有了正确的“协议盔甲"(编者按:即协议的防御措施),我们可以将任意的传统型部分同步或异步拜占庭容错算法转化成问责型算法(accountable algorithm)。错误可以全部分为几类,每一类不是问责型(即如果你犯了可被抓住的那类错误,我们就可以为之制定惩罚条件)就是会与延迟混淆型(要注意即使是信息发送过早这样的错误也会与延迟混淆,通过调快所有人的时间并让没有过早发送的信息出现更高的延迟可以模拟出这一情况)。

何为“弱主观性”?

务必要注意,利用保证金确保“权益成本不为零”的机制确实改变了安全模型。假设保证金被锁定了4个月,而且之后可被取出。假设有人发起了一次51%攻击,10天内的交易都被重置。 由攻击者创造的区块可以作为不当行为证明(或是"dunkles")被导入到主链之中,验证者可以得到惩罚。然而,假设该攻击是在6个月之后发生的,那么即使这些区块肯定可以重新导入,但那时该恶意的验证者也能从主链上取回他们保证金,而不会遭受惩罚。

为了解决这一问题,我们引入了“区块回滚限制(revert limit)”——其规则是节点必须拒绝回滚比保证金被锁定时间更久的区块(按照上例来说就是4个月)。要注意的是这一规则不同于协议内的其它共识规则,因为这意味着节点可能会基于它们看到某些消息的时间而得出不同的结论。不同的节点看到某个信息的时间各有差异;因此我们认为这一规则是“主观的”(或者,熟知拜占庭容错理论的人可能会将其视为一种同步假设)。然而,此处所说的“主观性”是很弱的:为了让节点继续加入“错误”链,收到原始信息的时间必须晚4个月。只有两种可能性:

  1. 当一个节点第一次连接到区块链上之时。
  2. 如果一个节点已经离线4个月以上。

我们可以通过要求用户验证链外最新状态来解决第一个问题。用户可以通过询问他们的朋友、区块浏览器,以及有过互动的企业等,在这条链上找到最近一个他们所认为的合法区块哈希值。实际上,这个区块哈希值很可能只是他们用来验证这条区块链的软件的一部分;能够破坏软件中检验点的攻击者按理说也可以轻易破坏软件本身,即使再多的纯加密经济验证也不能解决这一问题。

要注意的是,只有当之前的利益相关者中的大多数联合起来攻击网络并创建另一条区块链来取而代之这种非常有限的情况下,上述这些才会成为问题;我们认为大多数时候仅有一条合法链可供选择。

还要注意的是,如果链上出现任何硬分叉,弱主观性设想也存在于基于工作量证明的区块链中。比特币已经通过 bitcoind 0.8.1 提前两个月完成了硬分叉,修复了让几类大区块失效的数据库问题,因而能让客户端处理 bitcoind 0.7 所无法处理的区块,为此必须提前两个月通知用户下载新版本的软件。这本身就是一种弱主观性设想,因为用户必须在这两个月期间“登录”并下载更新包,以便继续留在正确的链上。

此外,根据需要,社交验证可以通过几种途径实现自动化。一种是将其转化为自然的用户工作流程:BIP 70型付款申请可以包含最近的区块哈希值,而用户的客户端软件会在付款申请通过之前(或者进行任何链上交互之前)确保他们与卖方处在同一条链上。另一种是使用 Jeff Coleman 提出的通用哈希时间Universal Hash Time)。如果使用了该方案后,攻击链要想成功的话,就要在创建正当链的同时秘密生成,这就需要大多数验证者在这段时间内保持秘密共谋的状态。

弱主观性是否意味着权益证明链必须与工作量证明链“锚定”才能保证安全性?

简单来说,并不是。

展开讲讲?

在实践中,弱主观性本身是区块链安全性假设的一个很小的附加部分,并且绝对不需要基于工作量证明的外部来源信任来支持。要想知道为什么,考虑一种情况:弱主观性本身将降低区块链(系统)的安全性。在那样的世界里,强大的公司或者国家节点将有能力通过某种方式使得全社区相信区块哈希值 B 是区块 XXXYYY 的区块哈希值,即便当他们中的大多数看见并且将信息存储进他们自己的电脑中时,存储信息为:区块 XXXYYY 的区块哈希值为 A。但是出于某种原因,这种强大的节点不会有能力诱骗用户接收来自他们与下载客户端软件不同位置的信息。

此外,提倡的这种 “锚定” 机制,甚至都不安全。所有锚定证明了一个给定区块的 产生 时间 T' < T;但并没有证明该区块在那个时刻发布。因此,一个与 PoW 链锚定的 PoS 链能够被并行“开采”两条链的多数联盟轻易攻击:两个锚定,先发布一个,四个月之后再发布另一个。

为了避免这种情况,可以通过将一个 PoS 链的全功能 “轻客户端” 嵌入 PoW 链,这将拒绝“双-锚定”(攻击),但是这就要求 PoW 链必须具备足够的功能来实现该客户端(即,全功能的 PoS “轻客户端”),但目前现有 PoW 链都没有这种能力。

在权益证明中能够在经济上惩罚审查制么?

与回滚不同,审查证实起来更加困难。区块链本身不能直接分辨出“用户 A 尝试发送交易 X 但它被不公平地删掉了” ,“用户 A 尝试发送交易 X,但因为交易费不够而始终没有被打包到区块中” 和 “用户 A 从未发送交易 X” 三者之间的不同。还好,还有一些技术能让我们缓解审查问题。

第一,利用停机问题来抵御审查。在该方案的一个较弱的版本中,协议被设计为图灵完备的,这使得验证者甚至不能在不花费大量的算力执行该交易的情况下,判断该给定交易是否会导致意料之外的操作,从而会面临拒绝服务(DoS)攻击。这也是避免 DAO 软分叉的原因

在该方案的一个较强的版本中,交易能够在临近中期的某个时刻触发固定的效果。因此,用户可以发送相互影响多笔交易,和预测的第三方信息一起触发未来的某个事件,但验证者无法判断将要发生什么,等到交易已经被打包进区块链(且经济上确认),验证者想再阻止(事情发生)的时候就已经晚了;即使所有未来的相关交易都被剔除,验证者想要阻止的事情依旧会发生。该方案中需要注意的是,验证者依旧会尝试阻止所有交易,也许会尝试阻止所有没有包含能证明自己不会损坏系统证据的交易,但这意味着需要禁止非常大范围的交易,最终达到破坏整个系统的目的,这也造成验证者失去一部分资产(即,加密数字货币的价格会降低),他们的存款的价值也将会下降。

第二,由 Adam Back 在这里提出的,要求交易通过时间锁加密。因此,验证者将在不知道交易内容的情况下打包交易,并且交易只有在(被打包)之后内容才会自动显示,而此时再选择不打包该交易为时已晚。然而,如果验证者是足够恶意,他们能够仅包含拥有某种解密版本加密证明的交易(例如:ZK-SNARK);这将迫使用户下载新的(可解密的)客户端软件,但是攻击者很容易就能提供类似客户端软件方便下载。在博弈论模型中,用户是有动机配合的。

也许在权益证明背景下,最好的说法是,用户也可以通过安装包含硬分叉的软件更新来删除恶意验证者,这并不比安装一个软件更新使得他们的交易 “易于审查” 困难得多。因此,总之该方案还是有一定效果的,尽管它的代价是降低区块链交互性(注意!该方案必须是强制的才能生效;否则恶意验证者只需轻易地过滤加密交易而保留更快的非加密交易)。

第三种方案是将审查识别包含在分叉选择规则中。这个想法很简单。节点监视网络中的交易,如果他们观察到一笔交易在足够长的时间内包含足够高的费用,他们就会为不包含该交易的区块链打一个 “低分”。如果所有节点均遵循该策略,那么最终,包含了该区块的少数链会自动合并,所有诚实在线节点都将在其后挖矿。该方案最主要的缺点是离线节点仍将在主分叉后挖矿,且如果审查是临时的,离线节点又在审查结束后重新登录,那么这些离线节点会与之前的在线节点落到网络中不同的分支上。因此,该方案应该被看做是一种发生硬分叉时自动紧急处理的工具,其并不能在日常分叉地处理中发挥积极作用。

验证者选择机制是如何工作的,什么是“权益研磨(Grinding)”?

在任何基于区块链的权益证明算法中,都需要某种机制,来随机从当前活跃验证者集合中选择能够产生下一个区块的验证者。举个例子,如果当前活跃的验证者集合由持有40以太币的 Alice,持有 30 以太币的 Bob,持有 20 以太币的 Charlie 与持有 10 以太币的 David 组成,那么你想让 Alice 成为下一个区块的创建者的概率为 40%,而 Bob 的概率为 30% 等(在实践中,不仅要随机选择一个验证者,而是要(随机产生)一个无限验证者序列,只有这样如果 Alice 不在线的时候,就可以有其他人在过段时间替代她,但是这并没有改变问题的本质)。在非基于区块链的算法中,出于不同的原因也经常需要考虑随机性。

“权益研磨” 是一种攻击类型,在这种攻击中,验证者通过执行一些计算或者采取某些其他措施使得随机性更偏向他们(也就是说,让他们有更大概率成为产生下一个区块的验证者)。例如:

  1. Peercoin(点点币) 中,验证者可以“研磨”许多参数组合 ,并找到最有利的参数来增加它们的币产生合法区块的可能性。
  2. 在一个现已不存在的实现中,第N+1个区块的随机性取决于第N个区块的签名。这就允许验证者反复产生新签名,直到找到允许他们产生下一个区块的签名,从而永远掌握系统的控制权。
  3. 在 NXT 中,第 N+1个区块的随机性取决于产生第N个区块的验证者。这就允许验证者通过简单的跳过一次产生区块的机会来操纵随机性。这里的机会成本等于一个区块奖励,但是有时候新的随机数种子将在接下来的几十个区块中使得验证者获取多于平均值区块产生权的区块数。请参阅此处查阅更详细的信息。

(1) 和 (2) 很容易就能够解决;一般的方法是要求验证者提前将他们的代币抵押,并且避免使用会被轻易操纵的数据信息作为随机性的源数据。有几种主要的策略来解决类似 (3) 的问题。第一种是使用基于秘密共享确定性阈值签名的方案,并且让验证者合作产生随机数值。这些方案能够抵抗所有操纵(随机数数的行为),除非验证者中的大多数勾结起来一起作假(在某些情况下,根据具体实现,33%-50% 的验证者勾结才可以干涉操作,导致协议必须假设有 67% 的活跃诚实节点)。

第二种是使用加密经济方案,此类方案中,验证者提前提交信息(即先发布 sha3(x) ),之后必须在区块中发布 x ;然后将 x 添加到随机数池中。针对此类方案,有两种理论攻击方式:

  1. 在提交阶段操纵 x 。这是不切实际的,因为随机结果将考虑许多提交者的数值,只要有一个参与者是诚实的,那么输出结果就是均匀分布的。均匀分布与任意多的偏分布一起进行逻辑异或(XOR)的结果依旧是均匀分布的。
  2. 选择性避免发布区块。然而,该攻击将消耗一个区块奖励的机会成本,因为该方案中使得任何人都不能看到下一个区块以外的将来的验证者,所以这种攻击几乎不会提供超过一个区块奖励的收益。唯一的例外是,如果一个验证者故意轮空(跳过该区块的产生机会),队列中的下一个验证者该验证者的“子验证者”将是相同的验证者;如果这些情况变得很严重,那么我们可以通过明确的轮空罚款来进一步惩罚(这些行为)。

第三种方案是使用 Iddo Bentov的 “多数信号”,该方案中使用其他信号产生的前 N 个随机数的 bit-majority (众数位)来生成一个随机数(即如果大多数源数据的第一位是 1,那么结果的第一位是1,否则是0,如果大多数源数据的第二位是1,那么结果的第二位是1,否则是0,依此类推)。该方案的成本为 ~C * sqrt(N) ,其中 C 为下层(源)信号的产生成本。总之,因此,已经有许多已知的 “权益研磨”攻击的解决方案;这个问题更像是差分密码分析而不是问题,这个头疼的问题最终被权益证明的设计者们理解并知道如何去克服,它并不是一个根本的、无法避免的缺陷。

在 Casper 中 51% 攻击会造成什么结果?

“51% 攻击”的最基本形式就是简单的确定性回滚(finality reversion),即:验证者已经确认区块 A 之后,又确认了另一竞争区块 A';从而打破区块链的确定性保证。在这种情况下,就会同时存在两个相互矛盾的区块历史,将区块链分割开来,全节点将很乐意接受(译者注:如果区块链分割开来,他们获得的收益将会更大)。因此就需要社区出来协调,使得全社区专注于某一条分支挖矿,而忽略其他分支。

该协调工作将会在社交媒体上进行,通过区块浏览器提供商、企业和交易所之间的私密渠道,多种多样的线上论坛等等。选择分支的原则是 “第一个达到确定性的分叉就是真实的分叉”。另一种选择分支的原则是根据 “市场共识”:两个分叉链均可在短期时间内在交易所进行暂时交易,直到网络效应快速决定其中一条分支的价值大于其他分支。在这种情况下,“第一个达到确定性的链获胜”原则将会是市场选择的谢林点。这两种方法的结合很有可能在实践中得到应用。

一旦就“哪条链是真的”达成共识,用户(即验证者、轻节点和全节点的运营者)必须通过接口中一个特殊的操作手动将获胜区块的哈希插入到他们的客户端软件中,然后他们的节点将忽略掉其他链。无论哪条链最终获胜,都有证据立刻销毁至少 1/3 的验证者的存款。

另一种攻击方式是拒绝区块活性(liveness denial):一个算力大于等于34%的验证者联盟可以轻易拒绝添加更多的区块,而不必试图回滚区块。在这种情况下,区块永远不会被最终添加到区块链中。Casper 使用了一种混合(BFT类)共识,这样就可以使区块链依旧不断延伸,但是这将大幅降低(系统的)安全等级。如果长时间(例如,1天)没有区块被添加到区块链中(达成共识),就有以下几种选择:

  1. 该协议可以包含一个自动轮换验证者集合的功能。新验证者集合验证的区块会得到最终确认,但同时客户端会认为,新确认的区块在某种意义上很可疑,因为旧验证者集合很可能继续操作并确认其他区块。客户端在之后需要手动操作忽略该警告,因为很明显旧验证者集合不会再回到在线状态。将会有一条协议规则,规定在这种情况下,所有未参与共识过程的旧验证者,(系统)会对他们的存款收取大量的罚金。
  2. 使用硬分叉的方式添加新的验证者,并删除攻击者的余额。

在情况 (2) 中,分叉可能再次经过社交共识或可能经过市场共识进行协调(即新旧验证者集合分别确认的分叉在短时间内均可在交易所进行交易)。在市场协调的情况下,市场更倾向于选择 “好节点获胜” 的分支,该链中验证者已经证明他们具有很好的商誉(或者至少,他们更顺应用户兴趣),也因此该链对于应用开发者来说更有用。

请注意!这里存在一个社会协同与协议内自调整之间响应策略的范围,普遍认为应该尽可能大力推进自动解决方案,以便最小化同时发生 51% 攻击与社交层(以及类似于交易所的市场共识工具)攻击的风险。你可以设想一个实现 (1) 的节点,如果他们长时间没有收到新区快的提交信息,就会自动接受并转移到新验证者集合,这将减少社会协调的需求,但代价是这些节点虽然不再依赖社会协调,但是需要长期保持在线。在任何情况下,都可以设计出一个解决方案使得攻击者的保证金存款受到严重损失。

一种更隐蔽的攻击(方式)是屏蔽攻击,算力大于等于34%的验证者拒绝添加某个包含他们不喜欢的某些交易类型的区块,但区块链将继续运行,区块也会持续被添加到区块链中。这可能是一些温和的屏蔽攻击,只是用屏蔽的方法来干涉某些具体的应用(例如, 卡特尔联盟可以通过有选择性的屏蔽类似雷电网络或闪电网络中的交易信息,从而能够轻易地窃取货币),也可能是严重的屏蔽攻击,屏蔽所有交易。

有两种子情况。第一种是攻击者持有 34%-67% 的权益。这时,我们可以通过编程的方式使得验证者拒绝确认他们主观上认为明显在屏蔽交易的区块,因此就将这种攻击方式转化为更标准的 “拒绝区块活性”攻击。更危险的情况是攻击者拥有超过67%的权益。因为这个情况下,攻击者可以轻松的打包任何他们想打包的交易,并且可以拒绝在任何不包含这些交易的区块上继续挖矿。

为此,有两道防线。第一道,因为以太坊是图灵完备的,它天生能够在一定程度上抵抗审查,因为审查具有特定效果的交易在某种程度上与解决停机问题相似。由于存在 gas 上限,尽管“简单”的解决方法会暴露拒绝服务攻击的漏洞,但这并不是完全不可能的。

这种抵抗并不是完美的,有许多方法可以用于提升本方案。最有趣的方法是在协议内添加功能,使得交易能够自动地安排未来的事件,因为提前预测执行预定事件的结果以及由这些预定事件导致的事件结果是非常困难的。验证者可以通过模糊预定事件序列来存储他们的以太币,并由此将攻击者算力削弱到 33% 以下。

第二道,我们可以引入 “主动分叉选择规则” 的概念,在这个规则中,通过尝试与给定的区块链交互或者验证其是否在审查你,来决定给定区块链是否是有效的。最有效的方式是节点重复发送预定存储他们的以太币的交易,并在最后时刻取消该笔交易。如果节点检测到审查机制,他们就可以通过这笔存款进行跟踪,并集体加入验证池(译者注:即验证者集合),并且将攻击者算力稀释到 33% 以下。如果验证者联盟屏蔽他们的存款交易,那么运行该 “主动分叉选择规则” 的节点将不再承认该链是有效的;这将审查机构攻击瓦解成“拒绝区块活性”攻击,之后就可以通过解决其他“拒绝区块活性”攻击相同的方法来解决。

这听起来像是很大程度地依赖外部社会协调;不危险吗?

攻击 Casper 的成本非常高;正如我们所看到的,攻击 Casper 花费太高,保守估计的话,这将比直接在一条工作量证明的区块链中购买足够量的挖矿算力进行长期一遍又一遍进行 51% 攻击,直至系统无效的成本还要高。因此,以上描述的恢复技术仅能在非常极端的环境下使用;实际上,工作量证明算法的倡导者也普遍愿意在类似情况下采用社会协调的方案,例如,改变工作量证明算法。因此,我们无法证明,权益证明比工作量证明更需要社会协调(来维持系统正常运行)。

在实际中,我们更希望需要社会协调的次数趋近于0,因为(系统运行规则)让攻击者意识到,花费大量的金钱而使区块链下线 1 到 2 天是并不值得的。

难道边际成本趋近于边际收益(即MC => MR)意味着,所有具有给定安全等级的共识算法都是同样有效的(或者换句话说,都是同样浪费的)吗?

这个话题多次被提起,对此最好的解释可能就是 Paul Sztorc 的这篇文章。从本质上讲,如果你为人们创造了一种赚取 100美元的方法,那么他们就愿意花费 99.9 美元(包括他们自己的劳动力成本) 来获得它;边际成本接近边际收益。因此,该理论认为,任何给定区块奖励的算法,在为了得到该奖励进行的社会非生产性劳动的数量上,都是同样 “浪费” 的。

该理论有三个破绽:

  1. 仅仅说边际成本接近边际收益是不够的;人们还必须假设一个合理的机制,通过该机制,人们可以实际花费该成本。例如,如果明天我宣布我从今往后每一天都将从给定的 10 人列表中随机选出一个,给他 100 美元(使用我笔记本电脑中 /dev/urandom 作为随机性选择基础),那么这就使得其他任何人都没有机会花 99 美元来操纵该随机性。对于其他人来说,要么他们不在 10 人的列表中,那么他们无论做什么都没有机会获得这 100;要么他们在 10 人列表中,他们没有任何合理的方式来操纵我的随机性,然后他们就每天的预期收益是 10 美元(编者注:因为获得 100 美元的概率是10%;如果去操纵了这个随机性并假设其他人没有操纵,每日预期收益是 1 美元)。
  2. MC => MR 不单单意味着总成本接近总收益。例如,假设有一个算法伪随机地从一些非常大的集合中选出 1000 个验证者(每名验证者获得 1 美元的收益),你拥有 10% 的权益,所以平均得到 100。同时,你花费 1美元 将使得随机性重置(你也可以无限次重复该操作)。根据中心极限定理,你的收益的标准差是 10 美元,基于其他已知数学结果,N 个随机样本的最大预期收益略低于 M + S*sqrt(2 * log(N)) ,其中 M 为平均数, S 是标准差。因此,增加随机样本(即增加 N)的收益将急剧下降,例如,不增加样本的情况下你的期望收益是 100 美元,增加一个采样的预期回报为 105.5 美元,增加两个为 108.5 美元,增加三个为 110.3 美元,增加四个为 111.6 美元,增加五个为 112.6 美元,增加六个为 113.5 美元。因此,在增加五个样本之后就不值得再尝试了。持有 10% 权益的经济驱动的攻击者将低效地花费 5 美元来获取额外的 13 美元收益,尽管总收益达到 113 美元。如果机制的漏洞仅暴露出很小的机会,经济损失就会很小;并不是单一漏洞就会给整个 PoW 带来大规模经济浪费。这一点也与我们接下来讨论的资本锁定成本密切相关。
  3. 权益证明使用比工作量证明低得多的总奖励来保证安全性。

什么是资本锁定成本?

锁定X个以太币并不是毫无成本的;它(即锁定以太币的行为)意味着以太币持有者牺牲了其他的收益机会。现在,如果我拥有 1000 以太币,我可以随意使用这笔 “钱”;如果我将这笔“钱” 存起来,那么我将几个月不能再使用这笔钱。例如,这笔钱本身可以用来支付突如其来的意外支出,但如果锁定,将无法使用。在锁定时间内,我也失去了改变以太币在我的总代币中份额的自由(即无法流通);虽说我可以在交易所中通过做空相当于存款的金额的以太币来模拟出售以太币,但这本身的成本就包括了交易费和支付利息。有些人可能会说:这种由资金锁定造成的经济低效不正是在变相地向工作量证明靠拢吗?答案是否定的,因为上面 (2) 和 (3) 两个原因。

让我们首先从原因 (3) 开始。设想在一个模型中,权益证明的存款是无限期的,且(工作量证明中)ASIC是永久的,ASIC 技术是固定的(即不考虑摩尔定律 ),并且电力成本为 0 。假设均衡利率是每年5%。在工作量证明的区块链中,我取 1000 美元给一名矿工,之后矿工每年都要给我 50 美元的收益。在权益证明区块链中,我将购买价值 1000 美元的币,将它们存起来(即永远失去他们),在之后的每一年我都将获得 50 美元的收益。到目前为止,情况看起来是完全对称的(严格来说,即便是在这种情况下,权益证明区块链中,销毁币并不是完全社会性销毁,它使得别人的币更值钱,但我们可以暂时不考虑)。在这两种情况下,发起51% 攻击(即比网络中其他节点购买更多的硬件)的成本均增加了了 $1000。

现在,让我们依次对模型进行如下改变:

  1. 把摩尔定律考虑进去,则ASIC每 2.772 年贬值50% (即每年以25%连续复合叠加;我选这个数字只是为了计算方便)。如果我想维持相同的 “一次支付,受益终身” 的行为,我可以这么做:我将 1000 美元放到一个基金中,其中 167 美元将用于 ASIC,剩余 833 美元将用于投资,且利息为 5%;每年 41.67 美元的红利足够用于持续更新 ASIC 硬件(假设技术开发完全是线性的,再一次简化数学模型)。收益将下降到 每年 8.33 美元;因此,83.3% 的矿工将退出,直到系统恢复平衡,即每年可以赚 50 美元的时候才会回来。因此在 PoW 区块链中,发起51%攻击获取给定收益的成本下降了 6 倍。
  2. 电力加维护成本占挖矿成本的 1/3。这个1/3的估值根据的是最近的挖矿数据:Bitfury的一个新数据中心每 GH (1 G次 Hash 运算)消耗 0.06 焦耳,或者说 60 J/TH 或 0.000017 kWh/TH,如果我们假设整个比特币网络具有相同效率,我们每秒提供 27.9 kWh 的电力就能够得到 167 万 TH/s 的比特币哈希算力。中国的电费成本为 0.11美元/kWh ,因此每秒大约 3 美元,或者 说每天 260,000 美元 。比特币区块奖励加费用为 每个比特币 600美元(译者注:本文翻译时(2018年3月11日)每个比特币约 $9600) × 每个区块平均 13 个比特币 × 每天 144 个区块 = 每天 122 万美元。因此,电费本身就要占总成本的 23%, 我们可以粗略地估计日常维护需 10%,以提供 1/3 的持续净成本,以及 2/3 的固定成本分摊。这意味着你的 1000 美元基金中,只有 111 美元进入 ASIC,55 美元用于支付持续成本,833 美元将用于硬件投资;因此 攻击成本比我们的原始设置低了 9 倍。
  3. 而在权益证明中,存款是暂时的,并不是永久的。的确,如果我自愿永久持有权益,那么一切都不会改变。然而,我有选择性的取回一些我之前拥有的(权益);我可以在中期(比如说 4个月)的任意时刻退出。这意味着我愿意付出超过 1000 美元的以太币用于获得每年 50 美元的收益;也许在均衡状态下,这种投入可能是 3000美元。因此,在 PoS 区块链上进行攻击的成本上升了 3 倍,也因此在相同成本下,PoS 网络比 PoW 网络安全性高 27 倍。

以上的模型包含了大量的简化建模操作,然而还是展示了多种叠加因素是如何支持 PoS 协议,并使得 PoS 协议在安全性方面获得更高的收益。关于为什么这种多重因素论证的元观点更倾向于 PoS 的原因非常简单:在 PoW 中,我们直接使用物理规则运行。在 PoS中,我们可以用这样一种方式设计协议,让它具有我们想要的精确属性。简言之,我们能够自主优化物理规则。给我们 (3) 的 “暗门” 是安全模型的变种,特别是弱主观性的引入。

现在,我们来聊一聊边际/总计的区别。在资本锁定成本方面,这很重要。举个例子,设想你持有价值 100,000 美元的以太币。你可能会倾向于长时间长期持有大部分以太币;因此,甚至锁定价值 50,000 美元的以太币的成本对你来说几乎为零。锁定 80,000 美元会带来些许不便,但是 20,000 美元的喘息空间仍然给了你很大的操作空间。锁定 90,000 美元问题就更大一些,(锁定)99,000 美元是非常麻烦的;锁定全部 100,000 美元是十分荒谬的,因为这意味着你一丁点以太币都没有了,以至于你无法支付基本的交易费。因此,你的边际成本增长很快。以下是权益证明的情形与工作量证明的情形之间的区别:


(译者注:
- Marginal cost:边际成本
- Actual cost:实际成本
- Total cost:总成本
- Quantity:总量
- Inefficiency of work sacrifice:低效工作牺牲
- Inefficiency of liquidity sacrifice:低效流动性牺牲)

因此,权益证明的总成本远低于将额外的1 ETH 存入系统的边际成本与当前存储的以太币数量的乘积。

请注意,不幸的是,该论点的这部分并不能证明“安全发行量水平”会降低。它确实对我们有帮助,因为它表明即便我们的发行量非常低,权益证明的参与水平仍然足够;然而,这也意味着大部分收益将由验证者作为经济盈余获得。

权益证明中交易所是否会造成与工作量证明中矿池类似的中心化风险?

从中心化的角度来看,在比特币(译者注:原文作者所附链接已失效,译者根据https://btc.com/stats/pool 查看比特币矿池算力分布)和以太坊(译者注:原文作者所附链接已失效,译者根据 https://etherscan.io/stat/miner?range=7&blocktype=blocks 查看以太坊矿池算力分布)中,大约需要 3 个矿池联合起来就能发起 51% 攻击(作者在写本篇文章时,比特币中需要 4 个矿池联合,以太坊中需要 3 个)。在 PoS 中,如果我们假设,加上交易所的参与后总参与率达到30%,那么3个交易所即可足以发动 51% 攻击;如果参与率上升到 40%,那么所需要的交易所数量就会上升到8个。然而,交易所不能使用它们全部的以太币参与进来;原因是,它们需要处理用于取款(提币)的操作。

此外,PoS 中并不提倡 pooling(资金合并或池化),因为它有更高的信任需求——一个权益证明资金池可以假装被黑客攻击,摧毁它的参与者的存款,并利用此资金获取奖金。另一方面,即使需要信任,但不运行节点也能从代币上赚取利息,这对于许多人来说是很有吸引力的;总之,中心化的平衡是一种经验问题,在系统实际运行相当长一段时间之前,答案是不清楚的。在分片方案中,我们预计资金集中的动机会进一步减少,因为 (i) 对于变化的关注更少了,(ii) 在一个分片模型中,交易验证负载与投入资金多少成正比,因此资金池并不会直接减少基础设施成本。

最后一点需要说明的是,中心化在权益证明中比在工作量证明中的危害更小,因为有更多更低成本的方法从 51% 攻击中恢复过来;不需要切换到新的挖矿算法。

权益证明能应用在私链或者联盟链中么?

一般来说,是的;在私链、联盟链的设置中,任何权益证明算法均可用作共识算法。唯一的变化是,验证者集合的选择方式会有所不同:验证者集合最初是由所有人都同意的用户集合组成,之后将由验证者集合投票来增加新的验证者。


原文链接: https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ
作者: Maintained by Community, mostly by Vitalik Buterin
翻译&校对: 闵敏、林鹏 & Elisa


你可能还会喜欢:

一种权益证明设计哲学
干货 | 以太坊 Casper FFG Overview
干货 | 共识算法的比较:Casper vs Tendermint
Proof of Stake - 股权证明 系列1
Proof of Stake-股权证明 系列2
Proof of Stake-股权证明 系列3

 
1 人喜欢