10

干货 | 论权益和共识(上)

 4 years ago
source link: https://ethfans.org/posts/on-stake-and-consensus-by-Andrew-Poelstra
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

论权益和共识

曾汨   |   14. Dec, 2020   |   425 次阅读

注:本文档已于 2015 年 3 月进行了大量修改。旧版本可以在 https://download.wpsoftware.net/bitcoin/old-pos.pdf 找到。

2009 年,中本聪创造了比特币 [Nak09]。比特币是一种互联网货币系统,可以实现点对点的数字代币转账。为确保所有人就代币所有权达成共识,中本聪采用了一种可由所有网络参与者复制并验证的公共账本。为了避免单点故障,该账本采用一种动态成员多方签名(dynamic membership multiparty signature,DMMS)[BCD+14] 机制来证实(authenticated),即,在每次 “心跳” 时对整个账本历史执行一次高成本计算(但是验证成本很低)。

不同于传统的数字签名,DMMS 中没有 “可伪造性” 的概念(there is no notion of “forgeability” for a DMMS)。每个 DMMS 的创建成本都很高(在比特币中,需要消耗高昂的电力成本),并且,这种行为可以得到账本上增发的新货币作为奖励。由于这些新代币必须得到其他人的认可才有用,参与者会受到激励来共同扩展“真正的账本”,而非自行创建账本 1。(译者注:此处的 “认可” 一词原文为 “recognize”,也就是说它的原意可能并没有那么多 “社会共识” 的暗示,其本身可以有严格的技术含义:如果你没有收到一个区块,你就不会认可由这个区块发行的货币。)

由于比特币的 DMMS 在计算和热力学 [Poe14a] 方面成本非常高,人们已经提出了其它更为经济环保的方案。最常被提议的方案是 PoS(权益证明),它是一种低成本的分布式共识机制。正如 Andrew Poelstra [Poe14b] 在 2014 年所言,PoS 是不可行的,但还是涌现出各种形式的 PoS 方案。与此同时,各种论坛上经常有人声称 Poelstra 的论点是 “虚假” 或 “错误” 的,尽管他们从来没有提出任何有说服力的反例或错误。此外,也有人给出了中肯的意见,认为 Poelstra 的这篇论文写得晦涩枯燥。由此可见,这篇论文还有许多不足之处。虽然 Poelstra 没有发现他的前作有任何不准确之处,但是他准备借此机会进一步地正式阐述他的论点。

相比 Poelstra 撰写论文时,人们对比特币共识的科学认识已经有了巨大进步 [MLJ14, BMC+15] 。

本文旨在更新 Poelstra 的论文,阐明比特币所解决的问题,PoS 背后的设计原理,以及 PoS 之类的机制无法在比特币的信任模型中产生分布式共识的原因。

注 1: 为了确保所有参与者都可以看到 “真正的账本”,我们需要一个同步网络:所有(有效)数据都能在一定的时间长度 λ 内到达所有参与者,而且网络心跳时间比 λ 长得多。如果没有同步网络,分布式共识的难度会大得多。(经常被人引用的一个结论是,使用确定性算法是不可能实现分布式共识的 [FLP85];但使用概率算法就可以很容易避免这一问题,因此在共识系统的设计难度上没有很多讨论。本文档的旧版本错误地引用了这一结论,以为这一点使得所有分布式共识机制在异步网络中都不可能达成共识,感谢 Dominic Williams 指出了这一点。)

2. 分布式共识

在讨论比特币对于分布式共识问题的解决方案之前,我们首先要理解这个问题的本质。分布式共识(比特币系统所使用的术语)是一种彼此之间缺乏信任的参与方之间达成的共识(即,全局一致 global agreement)。这些参与方都是匿名的,而且在系统建立时并不一定存在。正如 Poelstra 在其论文中所解释的那样:

就密码学货币而言,仅在交易的时间顺序上达成分布式共识就足够了,即,就 “第一个转移特定资金的交易达成共识”。这样可以确保整个网络都认可新的资金所有者。

之所以需要达成这种共识,是为了防止 重复花费 问题(double-spending)。在所有去中心化数字货币机制中,都有可能出现付款方将同一笔资金发送给两个不同的人的情况,而且这两笔交易看起来都是有效的。因此,收款方需要能够确保没有发生冲突,或者在有冲突的情况下,网络会认可其交易为正确版本。就交易顺序达成分布式共识可以实现这一目的:在发生冲突的情况下,每个人都认可第一笔交易是有效的,其余交易是无效的。

(数字货币的其它问题,如权限和防伪,相对来说比较容易,可以通过传统密码学解决。)

重点是,我们应该意识到,尽管分布式共识是个难题,但是普通共识更加容易,经过了更深入的研究,而且使用受信任且可识别的签名方可以将效率提高数万亿倍。因此,(即使是在有限条件下)引入了受信任方的密码学货币都应该考虑的一点是,其新型信任模型是不是能帮助降低达成共识的难度。对更高效的、具备受信任方的共识机制感兴趣的读者可以研究一下。

3. 动态成员多方签名(Dynamic Membership Multiparty Signatures)

比特币的账本是公开可用的,比特币网络中的所有参与者都可以验证账本上每笔交易的有效性。然而,由于账本在根本上属于历史记录,密码学无法辨别真伪,必须要有人来证明账本,而且其他人必须相信这个人不会签署错误的历史。

最早的数字现金系统都由单个非匿名者签署所有交易 [Cha83]。然而,这样不仅为系统引入了单点故障风险,而且可以让签署方(以及任何可以通过权力或武力来胁迫该签署方的人)审查交易或发起重复花费。虽然我们可以采用盲签名(具体参见 [Cha83])来防止审查制度,但是无法防范单点故障和重复花费问题。多方签名或许有可以解决后面两个问题,但是所有签名方难以同时遭到胁迫与所有签名方必须得到所有参与者的信任这两个要求是相互冲突的。非匿名性也意味着,特定攻击者总能持续攻击系统。

比特币的解决方案是完全去掉固定且可识别的签名者。比特币的账本由一组被称为矿工的签名者验证,他们不向其它参与者公开自己的身份,或许还可以零成本进入或退出系统。矿工通过叫做 “挖矿” 的过程来生成签名。在挖矿过程中,他们会共同为连续的、由交易数据组成的区块生成 工作量证明 [Bac02]。

在本节中,我们将解释挖矿是如何运作以及如何提供验证的。

3.1 匿名世界里的鉴别(authentication)

密码学数字签名机制的运作原理如下。签名方生成 “签名” 和 “验证” 密钥对(s,v),并将 v 连同其姓名一起发布在某个公共渠道上。该签名方可以根据给定消息 m 生成签名 σ,任何人都可以验证 σ 的有效性。也就是说,将 v,m 和 σ 输入验证算法,如果签名是有效的,总是会输出 1。

为了安全起见,传统数字签名必须具备抗伪造性,即,任何计算能力有限的攻击者伪造签名的概率都微乎其微。具体而言,“伪造” 指的是(攻击者)能在下列游戏中胜出:

  1. 签名者将验证密钥 v 交给攻击者。
  2. 攻击者将消息 m_i 发送给签名者,并收到这些消息的有效签名 σ_i。攻击者可以多次重复该操作。
  3. 攻击者生成一个新的消息 m 连同一个基于 m 的有效签名 σ。

这种安全性被称为 选择明文攻击下的不可伪造性(existential unforgeability under chosen-message attack),是密码学文献中的常见标准。

【在多方签名机制中,每个签名者都有一个验证密钥。只有签名者(或者说签名密钥)的 “可采信子集” 生成的签名才有效。在定义安全性时,上述游戏经过了修改,允许攻击者请求(并获取)签名密钥,只要该攻击者获得的密钥无法组成 “可采信子集” 即可。】

可以看出,验证算法使用验证密钥 v 来验证签名,并通过这种方式来验证签名者的 “身份”。由于任何人都可以创建密钥对,若想签名具有价值,必须通过公共记录将验证密钥与签名者的真实身份联系起来。如果出现失信行为(签署无效历史),失信方会被问责。

这样来看,身份鉴别并不适用于签名者匿名且不固定的系统。事实上,我们还不清楚 “身份鉴别” 在这类系统中能发挥什么作用!如果任何人都能以匿名方式生成签名,就无法区分诚实的签名和不诚实的签名、真实的历史和虚假的历史。那么上述安全性定义就丧失了意义,因为攻击者可以自由加入签名者集,并 “伪造签名”2

为了解决这一问题,比特币采用了另一种安全模型。在该模型中,所有参与者都平等,但是他们会在经济激励下保持诚实。在下一部分,我们将介绍该安全模型。

注 2: 正如我们在第四部分所见,如果是密码学货币,匿名参与方就有可能锁定保证金,并通过某种机制在无需确认任何人的身份的情况下,惩罚失信行为者。这实际上就是权益证明。然而,密码学货币离不开共识,因此 “如果是密码学货币” 这个前提导致我们在这里无法使用权益证明,否则就会陷入循环推理。我们会在下一部分解决这个问题。

3.2 为 DMMS 定义安全性

就 DMMS 而言,所有参与方都是平等的;无法通过让 “敌手” 仅拥有不完全知识(incomplete knowledge)来获得安全性。因此,我们使用以下三部分定义了 DMMS。这些部分都不同于传统签名的密钥生成算法:

  • 使用代价函数 c 来追踪算法的执行并输出 “代价(cost)” t ∈ TT,其中 TT 是某个 “代价域”。该函数必须是线性的,因为连续运行两个算法的成本是它们各自成本的总和。
  • 随机化算法 AttemptSign 将消息 m 作为输入,输入签名 σ。输入任何消息 m,该算法的代价都应该是 1。
  • 确定性算法 Verify 将消息 m、签名 σ 和目标代价 T 作为输入,输出 0 或 1。

当且仅当 Verify(m, T, AttempSign(m)) = 1 对所有属于 TT 的 T 都有 1/T 的概率成立,则我们说该 DMMS 是正确的(correct),这个概率是由 AtemptSign 算法来保证的;当且仅当任意多项式算法 AA 实现 Verify(m, T, A (m)) = 1 的概率都不超过 1−(1−1/T)t,则我们说这样的 DMMS 是安全的(secure)(其中 t 是算法 A 的执行代价)。

换言之,安全的 DMMS 指的是没有比重复执行 AttemptSign 更好的签名算法(从创建验证签名的意义上来说)。

我们简要论证了我们的安全性定义。为了实现动态成员集合,我们不能让参与成本过于昂贵,也不能让已有签名者通过显而易见的手段或经济因素排斥新加入的签名者。这就意味着,签名过程应该是 “可分割的”,既不需要也不激励签名者之间进行任何通信。也就是说,花两倍长的时间运行一个签名算法应该与在同样的两个硬件上并行运行该签名算法的成功概率一样高。在极端情况下,这意味着最好的签名算法应该由对单一基础步骤的重复、独立执行来组成,这是由定义推导出来的。

3.3 挖矿机制作为一种 DMMS

比特币挖矿采用的是基于哈希函数的工作量证明算法 hashcash [Bac02]。这是一种使用随机数神谕模型(random oracle model)的 DMMS [BR93]。作为一种计算模型,随机神谕是指,该模型把哈希函数当成一个 “随机数神谕” ,或者说真随机函数 3,其输出都是纯然随机的,而且只有通过该函数才能计算出来。

虽然随机数神谕模型的使用引起了很多争议 [Gre11],但是有力的实证证据证实了它可以用来保障安全性。下文中,H 指的是输入可多达 256 位的哈希函数,它被当成是一个随机数神谕。

比特币的 DMMS 如下:

  • 代价函数给出执行中调用随机数神谕的次数。

  • AttemptSign 将消息 m 作为输入,并输出随机数 σ ∈ {0,1} 256。

  • Verify 将签名 σ 、消息 m 和目标 T 作为输入。仅当 H(m || σ) < 2256/T 时,输出 1。

不难看出,在随机数神谕模型中,没有比重复运行哈希函数更好的创建有效签名的方法。

注 3:该模型是完全不现实的,因为真正的随机函数,比如,以 512 位为输入,256 位为输出,则平均需要 2512·256 位来表示(其整个输入输出集),已经超过了目前已知的表达极限。

3.4 没有世界时间

请注意,在上一部分,我们将哈希函数调用的数量作为我们的代价函数,它与计算次数大致成正比,而计算次数又与散热量大致成正比。最后,散热量与创建这些签名的经济和环境成本大致成正比。

一个显而易见的问题是,我们是否可以采用 “成本更低” 的代价函数?尤其是,为什么我们不能直接使用时钟时间?为什么我们使用 DMMS 对区块进行签名来创建区块链,而非直接按照时间顺序对交易进行排序来解决共识冲突?

答案是,分布式系统中缺少明确定义的时钟时间。网络延迟限制了信息的传播速度。根据狭义相对论可知,如果是几乎同时发生的事件,不同的观察者无法就其时间顺序达成共识。

如果只是这个问题,那么要求每笔交易之间间隔几秒钟即可(如果相互冲突的交易之间间隔太短,这两个交易都会被拒绝;但是等到每笔交易完成几秒钟后,所有参与方就能确保不会发生这种情况)。但是,实际情况会更加糟糕,原因有两点:

  • “网络延迟” 在恶意环境中无法得到限制。攻击者或能使用拒绝服务攻击(denial-of-service measures)来任意降低系统速度,并通过其它方式对网络进行物理分区。

用相对论来说,这意味着无论将等待时间设为多久,都无法确保参与者不会与网络中的其他参与者类空分离(spacelike separated)。

  • 新加入网络或最近离线的用户需要访问历史数据。但是,没有办法可以事后验证交易发生的顺序,因此在出现交易冲突的情况下,用户无法保证他们收到的交易是先发生的。

3.5 来自 DMMS 的共识

既然我们已经了解了 DMMS,并解释了为什么比特币的 hashcash 是一个安全的算法,接着来思考如何通过 DMMS 实现分布式共识。

我们的主张是,通过 DMMS 实现分布式共识是有可能的。

我们首先需要通过我们的代价函数(单调函数)来衡量(a)某种无法一次为多个消息创建签名的稀缺资源,和(b)创建签名所需的平均时间。(为了实现去中心化,这种稀缺资源可能需要被永久消耗,就像在比特币系统中那样,让挖矿的边际成本在资本成本中占主导。Poelstra 支持这一观点 [Poe14a],但是 John Tromp 并不认同 [Tro14]。)

以比特币为例,我们的代价函数的定义是 “哈希函数调用的次数”。我们主张,该函数实际上用来衡量计算签名所需消耗的能源,并且得到了 Landauer limit 的论证 [Lan61]。从物理学上来说,所谓的能源,就是任意不可逆的位操作所需消耗的最低热量。通过计算 sha256 计算中涉及的不可逆位操作的数量,(至少从原则上来说)我们可以为创建一个比特币 DMMS 所需消耗的能源量设定下限。

代价函数也可以用来衡量创建签名所需的时间,因为每单位时间只能消耗一定量的能源,除非你去制造黑洞(black hole)(即,不让签名乃至任何信息以可用的形式提取出来)。当然了,在现实生活中,比特币矿工不会在接近黑洞极限的情况下操作,而且所需时间取决于挖矿硬件的速度。随着挖矿硬件的改进,以及同时在线的硬件数量增多,创建 DMMS 所需的时间减少。在比特币中,目标代价会根据这一情况进行调整,将创建每个签名所需的时间保持在 10 分钟左右 4

注 4:鉴于 3.4 中提到的无世界时间,读者可能会想知道如何准确调整时间。实际上,时间戳是由矿工插入区块的,而且确实没有任何方法可以防止矿工弄虚作假。比特币可以抵御不实时间戳导致的较小目标偏离,并且也禁止了目标(译者注:即难度)过快地发生变化。因此,想要制造大幅的目标偏离是非常昂贵的,而且有可能遭到不配合的矿工的阻挠。关于更多讨论,请参阅 [Poe14c, Section 6.3]。

那么,有了一个可以通过代价函数来衡量稀缺资源的安全 DMMS,我们该如何获得共识历史?首先,我们假设网络是同步的,因此(绝大部分)参与者可以在一定时间 λ 内获得所有有效数据。我们将交易历史分割成一系列区块,其中每个区块都包含一系列交易,以及前一个区块的密码学承诺(commitment) 5。每个有效区块必须拥有一个已经设定好目标的 DMMS,且目标使得创建区块所需的时间比 λ 长的多 (这样一来,在同一个共识历史上工作的矿工都知道哪个区块是最新的,而且区块创建者也不会因为优先知道最新区块而占据很大优势)。需要明确的是,每个 DMMS 的目标代价是由系统规则定义的,不由矿工决定。

注 5:承诺(commitment)是一种密码学对象,由某个秘密数据计算得出,但是不会泄漏该数据,因此该数据在事后无法修改。抗碰撞哈希函数就是一例:给定数据 x,你可以先发布 H(x)(H 是哈希函数),之后再公开 x。验证者可以使用公开的值计算 H(x),来确认这个值是否与原始值相同。

网络参与者的运作方式是:首先考虑以同一个创世块(已硬编码到系统中)开头的所有有效区块分支。(由于每个区块都包含前一个区块的承诺,结果会形成以创世块为根的有向非循环图,这些区块分支就是图中的路径。)然后计算每个区块上的 DMMS 的目标成本总和得出每条区块分支的重量。最重的区块分支会被视为 “真实的” 历史。

在创建区块时,矿工根据自己的意愿选择交易,并加入一个特殊的 “奖励交易” 用来将其它交易的费用以及网络定义的补贴分配给自己,再加上(他所认为的正统链上的)最新区块的承诺,然后计算 DMMS。如果另一名矿工创建并发布了一个区块,矿工就会相应地更新他们的 “真实历史上的最新区块”,并在自己所挖的区块中改变承诺以适配这种变化。计算出一个 DMMS 之后,他们会把这个完成的区块公布到网络中。

我们主张这样就能形成一个共识的历史,是说整个网络会渐进地对到底哪些区块是真实历史的一部分(而哪些不是)达成共识,而且不一致只会发生在最近的历史中。具体的论述可见 Miller 和 La Viola Jr. [MLJ14](我们这篇文章中可度量耗能程度 DMMS, 在那篇文章中的表述是 “moderately-hard puzzles”),但我们这里附上一个不那么正式的论证。

因为网络是同步的,区块传输的时间大大短于区块生产的时间,所以所有参与者都能迅速认识到最重的历史。

我们还进一步认为,网络中的大部分参与者都会参与生产能延伸真实历史的 DMMS。一个优雅且正确的理由是由 Vitalik Buterin 提出的 [But15]:因为 “奖励交易” 当且仅当其区块属于真实历史才会被大家接受,所以对每一个矿工来说,纳什均衡就是服从绝大多数 6

注 6:也是在同一篇文章里,Buterin 说:“要是你已经厌烦了 PoS 的反对者老是跟你引用 Andrew Poelstra 写的这篇文章(即 [Poe 14b]),请尽情链上本文,作为还击。” 不太清楚他这么说是什么意思;自始至终,无论在哪儿,他都没能驳倒本文的主张:除了消耗一种系统外的资源,没有别的产生共识的办法。

要想改变 “真实历史”,攻击者必须产生另一个权重更大(即目标开销更大)的历史(这样的另类历史版本可以定义为从当前的历史最新顶端向后回溯 N 个区块处产生的一个分叉)。他具有的资源比正在延伸真实历史的矿工团体要少,因为那个矿工团体才是多数。所以,他在网络中能胜出的概率是小于 1 的(因为在任意给定时间段里,网络中延伸真实历史的尝试次数都多过他延伸自己的另类历史的尝试),而且,要想让自己的历史超过真实历史,他还必须胜出 N 次以上。如果胜出一次的概率是 P < 1,那他胜出 N 次的概率就是 PN,N 足够大这个概率就小到可以忽略不计了。

(这里的论证是很弱的,因为只考虑到了一个攻击者要连续不断地胜出,没有考虑到出块难度会调整;难度的调整会使得攻击者在重新制造旧区块时速度可以比网络制造新区块更快。笔者在这里主张,没有任何根据地主张,这些都不是严肃的问题,只是乏味的问题。)

3.6 不使用 DMMS 的共识

是否一定要使用 DMMS 才能打造分布式的共识机制呢?到目前为止这还是一个开放问题。笔者的猜测是 “不是”。更具体一点来说,简单改变比特币协议,用 “优惠券” 来奖励那些以更低难度挖出未来区块的矿工 [BDC+14, 章节 6.1] 不太可能破坏共识机制,但这种模式显然不符合我们上述的 DMMS 定义。

4. 权益证明

有了比特币的共识机制作为基础,我们来分析一下当前最流行的替代方案,权益证明(Proof of Stake)*。*PoS 的描述见 [Poe14b]:

有了现代密码学之后,“ ‘信息’ 本身即是物理上真实且具有价值的东西”  这一观念便摆脱了哲学系的教室,进入到真实的商业世界。我们都非常熟悉安全的通信所支撑的经济活动:谈判意见、合同、交易、买单和命令,都能发到互联网公网上而无需担心伪造和拦截。我们也都清楚,如果秘密数据遗失或被盗会带来什么样的经济后果。
到了 2009 年 1 月,密码学货币诞生 [Nak09],有价信息的概念就变得更加具体。你可以在公开的通信媒介中持有和交换一种同质化(fungible)的价值储存物,仅仅只需使用密码学方法(无需物理的安全设施)来防止欺诈和盗窃。人们不仅可以说 “这把加密密钥值 1 万美元,因为假使它暴露,我们就会损失这么多金钱”,还可以说 “这把密钥值 1 万美元,但里面的价值是可以分拆的,你可以拆出 20 美元发给别人,自己留着剩余的部分”。
有这些背景知识,权益证明其实很好理解。一个权益证明就是一个对所有权的密码学证明。在密码学货币中,权益证明不仅能够证明一笔货币的所有权,还可以证明这笔钱满足一些特征(比如,这笔钱是被锁定的、无法花用的,直到某些条件被满足才会解锁)。
具体来说,证明资金锁定在一种稀缺且实验性的密码学货币上,可以视作证明了其人对该项目的成功有浓厚的兴趣。用户可以用提供锁定的权益来证明自己对项目的持续存在(及可持续发展)有兴趣。

也就是说,权益证明是这样一种观念:我们可以使用密码学证明,而不是像朗道尔极限(Landauer limit)这样的物理学理论,来证明某些计算是非常昂贵的。

4.1 权益证明 vs DMMS

使用 “纯粹的权益证明” 来生成对一种密码学货币的历史的共识,这种思路其实是预设了:有可能创造出一种近似 DMMS 的签名方案 7,其代价函数度量的是该种币本身的数量。这在原理上听起来很简单,我们再次引用 [Poe14b]:

在一个足够有表现力(sufficiently expressive)的账本上,货币的持有者可以锁定他们的货币一段时间,以租借在密码学上可验证的 “权益(stake)”。需要推进共识历史时,每一个权益持有者都为延伸的内容(区块)签名,而不是为这些内容附加工作量证明。出于实践上的方便,一般来说,每次出块都会随机选出权益持有者中的一小部分,来负责出块;而且,要让区块获得合法性(validity),也只需要这个小团队中的大多数同意就行。这些被选中的权益持有者可以获得奖励,而且一段时间后,只要他们愿意,就能解锁自己的权益。
这里的观念是,与其让控制历史的经济代价高不可攀,权益持有者们有激励对每一个区块达成一致,因为(a)他们都是随机挑选出来的,不太可能相互勾结;(b)即使他们可能相互勾结,也不想搞崩整个系统(例如,签署相互冲突的历史就会导致这个结果);(c)他们资本有限,无法造成巨大的破坏。因为上述理由,下一个被随机选出的权益持有者团体可能只会选择在一个他们认为可靠的历史上出块。

注 7:权益证明方案并不总被尝试设计成无过程性的(progress-free,亦即无论你此前做了什么,都不会影响你下一次尝试的成功率),所以并不都能成为正确的或者安全的 DMMS。但是,其根本宗旨仍然是 “让制造历史非常昂贵,并奖励那些参与正确历史的人”,所以我们继续以成本这个视角来观察。

该文已经稍微把事情复杂化了:在真实的权益证明系统中,往往只需要一个签名者认可,而不需要绝大部分的认可。

这里的问题是,要想恰到好处地定义出一种能够度量(以某种货币的形式)锁定权益数量的代价函数,先得有这种货币的共识历史。如果只能达到 “存在某段历史,其中这些币都是锁定在一起的” 的程度,则虽然最终的 DMMS 可能定义得很清楚,但其代价函数不再是度量稀缺的东西,而本文 3.5 节的结论也就都不成立了。

当然,稀缺可以通过惩罚那些签署多个历史的权益持有者来塑造。举个例子,如果系统使用 Schnorr 或者 ECDSA 签名方案,且权益持有者在签名时仅能选择一个特定的 nonce,则他们要签署多个历史时,就必然会用到同样的 (key, nonce) 对来签发两条消息,而这会使得他人能用几何求解出他们的私钥。但是,这样的设计还是不能阻止权益持有者们 “研磨(grinding)” 区块(不断尝试不同的区块),仅发布那个能使他们在下一个区块继续担任出块者的区块 8,这样不断重复就能完全掌控整个区块链。这就是 “权益研磨” 攻击的一个例子。下文我们可以看到,权益研磨只是一个更普遍问题的一个特例而已。

总的来说,一次性签名方案可以防止权益持有者发布相互冲突的历史(前提是攻击者对自己会丢的币估价更高,而不能从自己导致的混乱中得到更多),但一次性签名无法防止权益持有者偷偷地制造相互冲突的历史。

注 8: 注意,随机数必须由区块链本身来决定,因为它就是大家要共识的唯一对象。所以 PoS 矿工可以用权益研磨来扭曲系统。使用多个区块或者久远的区块来决定随机数并不能解决这个问题,无论哪一种方案,都有某一方能够操纵它。

4.2 零成本的模拟(Costless Simulation)

终极来看,问题在于,为提出一条权益签名而锁定的币,仅存在于这些币所属的区块链上(coins bonded against a stake signature only exist within the blockchain to which those coins belong)。这就意味着,只要某些团体能以低廉的成本创建区块链,这样的团体就会创建多条区块链,然后选择较为偏向他们利益的那一条。

如果每个人都能便宜地创建历史,那系统就会崩溃。锁定权益的用意正在于,让 “便宜创建历史” 的权限仅对那些愿意长期持有这种货币的人开放,而且可以假设,对这些人来说,这个系统意义重大,以至于不可能去攻击它。但是,因为没有全局时间(对那些新加入网络的人,也没有全局历史),那就根本没有办法把 “最近” 才开始持币的人与 “一直” 持币的人区分开来。对一个权益证明系统来说,在历史中的任何一个时间点,都有一组签名密钥可以转让货币、锁定和解锁权益、签名区块。可以假设,在真实世界里的某一刻,系统创建出一个新区块的时候,在这一刻,一些密钥对应着所有权。但是,真实世界的时间会继续流转,而这个区块会变成静态之物,所有与它相关的签名密钥也会一起变成静态的。

我再说一遍:在真实的时间里,区块链会变得越来越长,权益会解锁,币会被用来交换别的产品和服务,而那些密钥,即使误用会导致持有者损失价值,也会变得毫无意义。但对于一个不可更改的区块链来说,区块的密钥的含义(meaning)永远不能发生改变。

因为在一个权益证明系统中,部分密钥就决定了未来,这就导致了一个问题。无论什么人,只要能获得这些密钥(可能是自己把币清仓了的用户,或是跟她买到了私钥或者捡到了她的私钥的人;用户不善于长期保存私钥,尤其是那些他们觉得自己再也用不上的私钥!),就有能力分叉这个网络,或者创造出另一个历史;新用户并不能分辨出哪个是真的、哪个是伪造的。

要点在于,即使权益持有者要锁定(具有高昂市场价值的)一大笔资金,而且一旦不遵守协议就会损失所有资金,这种威慑力在用户解锁自己的权益之后也会消失,而解锁或早或晚总会到来(无论是从系统外部看还是从系统内部看),而且在当下(这个区块)也必然无法确定权益会在什么时候(哪个区块)解锁。所以,免费的历史,或者说 “零成本的模拟”,是没法通过锁定由系统内部定义的价值来防范的。

4.3 “长程” 攻击 vs. “短程” 攻击

如果你要求权益持有者必须长时间绑定权益,而且使用久远以前(以区块计)的区块产生选择签名者的随机性,那就可以让上述的攻击者必须重写很长一段时间的历史。常常有人说,这样就能 “防止短程攻击”。

很清楚的是,这还是没有解决零成本模拟问题;毕竟,只要创建历史本身很容易,那无论创建多长的历史分支都很容易。不过,支持者们常常说,有一个诚实签名者创建的历史,这条链积攒的区块数量也正对应着现实世界里的较长时间,而对这段历史的任何修改都会与参与者们所铭记的这段历史相冲突。因此,大家可以检测到并意识到这是一场攻击,然后拒绝掉它。

如果软件能正确实现这里的规则,那确实是没什么问题的了,但它改变了比特币这类系统所用的信任模型。那些新加入网络的参与者会遭遇多种历史,而且也不再能够仅凭自己就辨认出哪个是真的;他们需要询问网络中已有的参与者(可能是他们的朋友,家人,声誉卓著的大企业、公开的网站,等等)哪个历史才是真的。这就不是一种分布式共识机制了!这是另一类共识机制,虽然能在始终在线的对等节点间去中心化地形成,但新加入网络的用户和长期离线的,就必须信任某些人了。这种模型对于法律上的压力、对 “被信任” 实体的攻击和网络攻击,自然都是非常脆弱的。

4.4 其他考量

再次引用 [Poe14b]:

另外,这种可以控制未来签名者人选(甚至控制整个权益持有者集合,可通过控制进入区块的交易实现)的能力会带来严重的后果。甚至不必由处心积虑的攻击者来动手,任何时候有权出块的签名者都有激励将大家导向一个他本人会有更多权益(也因此能获得更多奖励)的历史,使系统趋向中心化。他们可以通过扭曲未来区块对签名者的选择来实现,或者更隐蔽地,可以审查那些最终会扩大权益持有者群体的交易。

5. 结论及后续研究

本文描述了 DMMS 机制如何能产生一种分布式的共识机制。虽然 DMMS 连带着一些经济上的要求,足以形成共识,但它可能不是必需的。开放问题包括减少这些经济上的假设(或者证明这些要求是不可消除的),以及确定哪些条件是分布式共识的必要条件。

我们还分析了 DMMS 的一种替代品,权益证明。我们证明了,仅靠系统内的资源,权益证明是无法形成分布式共识的,因为它要依靠自己尝试形成的历史来执行惩罚。


原文链接: https://download.wpsoftware.net/bitcoin/pos.pdf
作者: Andrew Poelstra
翻译&校对: 闵敏 & 阿剑


你可能还会喜欢:

分布式共识的工作原理,Part-1

为什么我不喜欢权益证明( PoS )

区块链与机械时钟的演化

Icon wechat

微信扫一扫
分享至朋友圈

</article


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK