Proof of Stake - 股权证明 系列3

月亮🌛   |     |   1082 次阅读

译者:Max
原文:https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-proof-of-stake

验证方选择机制如何工作,以及什么是“股份研磨”攻击?

对于任何基于链的股权证明算法,总是需要有一种机制来随机地从现有活跃的验证者集合中选择出创建下一个区块的那个验证者。例如,若当前活跃验证者集合包括拥有40以太币的Alice,30以太币的Bob,20以太币的Charlie,以及10以太币的David,那么Alice就有40%的概率成为下一个区块链创建者,Bob的概率是30%,以此类推(实际操作上,不会只随机选出一个验证者,而是一个验证者的无限序列。这样当Alice不在线的话,过一段时间就可以有其他人来取而代之。当这个细节并不改变问题的本质)。对于非基于链的算法,随机性的需求则是出于其他因素。

“股份研磨”是一种类型的攻击,就是说,恶意验证方通过某些计算或采取一些额外的步骤来影响随机性从而为其自身牟利。例如:

在点点币中,恶意验证方可以“磨”各种参数的组合,来找到对自己有利的参数,从而为自己提高合法区块中币产量。
在一个现已过期的实现中,第N+1个区块的随机性取决于第N个区块的签名。这就让恶意验证方可以重复产生新的签名,直到他们找到一个可以获得下一个区块的签名为止,从而可以永远控制了系统。
在NXT中,第N+1个区块的随机性取决于创建第N个区块的验证方。从而使得某个验证方可以跳过创建新区块的方式来操纵随机性。这里的机会成本等于一个区块的收益,但有时候新随机数种子会为验证方带在后面几十个区生产中带来高于平均数的收益。更详细的分析见此文。

(1)和(2)可以比较容易解决;一般方法是要求验证方在很早前就用他们的代币作抵押,并避免使用可被简单操纵的信息作为随机产生器的数据源。

我们可以使用几种主要策略来解决类似(3)的问题。第一种是使用基于“秘钥分享”或“确定性阈值签名”的方案,并要求所有验证方合作生成随机数。这些方法可以有效抵抗各种操纵,除非大多数验证方合谋作恶(但在某些情况下,取决于实现方式的不同,可以抵抗多至33~50%的验证方干扰系统的运行。也就是说,预计该协议可以有高达67%的活跃度)。

第二种是使用密码经济学方式,即所有验证方都提前很早地提交某个信息(如发布自己Sha3(x)的值),然后在区块里发布这个x;然后这个x就被添加到随机数池中。理论上,对于这种方法有2种攻击方式:

在提交的时候修改这个x。但这于事无补,因为随机的结果取决于多个参与方的值,而即使只有1方是诚实的,那么输出结果就会是均匀分布的了。而一个均匀分布的值与其他再多人为偏分布的值异或(XOR)后,仍是一个均匀分布的结果。
选择性的避免发布区块。然而,这种攻击的机会成本是一个区块的奖励,而因为这种方式避免了任何人可以预见除下一个以外的未来的验证方,因此,它几乎不会提供超过一个区块奖励的价值。唯一的例外就是,如果该验证方轮空,下一个验证方以及该验证方的第一个子验证方为同一个人;若这种情况至关重要,那么我们可以通过明确的轮空惩罚机制来惩罚轮空行为。

第三种方式是使用Iddo Bentov的“多数信标”法,即随机数的产生取决于前面N个随机数的“多数位”(即,结果的第一位是1,如果源数字中的第一位大多为1,否则为0;结果的第二位是1,如果源数字中的第二位大多为1,否则为0;以此类推)。这给出了~Csqrt(N)的所谓“开采成本”,C为潜在信标的开采成本。因此,总体来说,有很多种解决“股权研磨”的方法;此问题更多是一个“差分分析“而非“停机问题” - 一个对于股权证明设计者最终了解且已知如何解决的麻烦,而非一个根本性和无解的缺陷。

边际成本接近边际收益(MC=>MR)不就意味着,能够提供相同级别安全性的所有共识算法都是同样地有效吗(或者换一种说法,同样地浪费吗)?

这种观点被多次提起,或许对此解释得最清楚的就是Paul Sztorc此文。该观点简而言之,就是说如果你有办法让用户赚到100元,那么该用户就愿意花最多99.9元的成本(包括他们自己付出的劳力成本)来取得之;这就是所谓的边际成本接近边际收益。因此,这种理论认为,对于相同区块奖励的所有共识算法,对于为获得区块奖励而进行的社会非生产性活动的数量而言,会是同等地“资源浪费”。

这种理论有三个破绽:

  1. 我们不能简单地说,边际成本接近边际收益;还必须假定有一个合理的机制,就是有人能真正花费掉该成本。举个栗子,比如明天我宣布,从今以后我每天会拿出100元给从某个十人名单中随机选出的那个人(用我自己笔记本的/dev/urandom功能保证随机性),那么就根本不可能会有人愿意花99元来操纵这个随机性。因为,如果此人不在那份十人名单里,那么无论他怎么做都没戏;如果在那份十人名单里,那她也没有任何必要来操纵这个随机性,否则她每天最多就只能拿到10元(100-99,这里应该是1元吧)。
  2. 边际成本接近边际收益(MC=>MR)并不意味总成本接近总收益。举个栗子,假设有一个算法,是伪随机地从一个很大的集合中选取1000名验证者(每位验证者得到1元奖励)。如果你有10%股份,那么你平均可以获得100元。并且,花1元的成本你就可以强制随机机制重置(并且你还可以无限次这么操作)。基于中心极限定理,你奖励的标准差是10元,并基于其他已知的数学结果,N此随机采样的预期最大值是略小于 M + S * sqrt(2 * log(N)),其中M是平均数,S是标准差。因此,进行更多次尝试(即增加N)的回报会快速降低,如,0次重试的预期回报是100元,1次重试的预期回报是105.5元,2次108.5元,3次110.3元, 4次111.6元,5次112.5元,6次113.5元等。因此,5次重试后就不划算了(考虑到每次需要花1元的成本)。结果是,利益驱动型的攻击者,拥有10%的股份,虽然花5元成本只获得13元的额外收益,但是总收入却有113元。如果漏洞机制只暴露一些很小的机会,那么经济性损失就比较小;决然不会是说一个很小的漏洞召来整个工作证明级别的经济性浪费。这个点也会和我们下面要讨论的关于资金占用成本的讨论密切相关。
  3. 股权证明比工作证明要求的总奖励少得多。

什么是资金占用成本?

将X枚以太币锁定为押金是有代价的;这意味者这些以太币的持有者牺牲了其可选性。假设我现在有1000以太币,我就可以随意挥霍使用;如果我将其锁定为押金,那么这些以太币就会被锁定好几个月,而我就无法,例如,将这笔钱作为一个保障来支付突如其来的意外支出。我也无法在这段时间里,随意把这些以太币换成其他代币;我可以模拟卖出以太币,通过在交易所做空卖出和押金数量相当的以太币,当这么做会产生额外成本,包括交易手续费和支付利息。也许有人辩称:如此的资金占用低效不就是一种变相的经济性低效,和现有的工作量证明一样吗?回答是否定的,原因如上述(2)(3)。

我们先从(3)说起。假设这样一种模型,股权证明机制的押金为无限期,而(工作量证明机制的)矿机可以一直正常工作下去,矿机技术不变(即,不考虑摩尔定律)并且电费也是免费的。假设年基准利率为5%。在工作量证明机制的区块链,我花1000元,买矿机,那么矿机从此往后每年给我带来的回报就是50元。对于股权证明的区块链,我花1000元买币,然后把他们作为押金(也就是永远拿不回来了),也是从此往后每年获得50元的回报。目前为止,这2种情况看来是完全一样的(严格来说,即使如此,股权证明下我币的销毁(拿不回来)在社交上并不是完全有害的,因为它使得其他人的币更值钱了。当我们先不考虑这个)。对上述2总情况,此时51%攻击(即拥有比网络其余部分更多的硬件)的成本都是增加了1000元。

现在,让我们一步步修改我们的这个模型:

  1. 若考虑摩尔定律,矿机每2.772年贬值50%(即每年以25%复合叠加;选了方便计算的数字)。如果我还是希望能够达到“一次支付,终身收益”的效果,我可以这样做:我花1000元存入一个基金,该基金花167元买矿机,而降所剩的833元投资以获得5%的收益;那么每年41.67元的收益分红就足够用来支付矿机硬件更新的费用(为了计算方便,假设科技发展完全是线性的)。那么每年的回报就会降低为8.33元;因此,83.3%的矿工都会退出直到又重现回到每年可以获得50元的收益。因此,工作量证明的51%攻击成本降低了6倍。
  2. 电费加上维护费是挖矿成本的1/3。我们估计1/3这个数字是来源于最近的挖矿统计:Bitfury的一个最新的数据中心每个G计算力消耗0.06焦耳,即每T消耗60焦,折合0.000017千瓦每T,如果我们假设整个比特币的能耗与之类似,我们就可以推算出每秒消耗27.9千瓦,基于167万T的比特币算利。中国电费大约0.11美元每千瓦,折合3美元每秒,即26万美元每天。比特币每个区块奖励加上手续费是 每比特币600美元 * 每个区块13个比特币 * 每天144个区块产生 = 每天112万美元。因此电费一项就占总成本23%。那么我们可以大约摸估计维护费在10%,以便简洁地将1/3作为持续成本,2/3作为固定成本这么分。那么也就是说,对于这1000元的基金,只有111元可用来买矿机,55元来支付持续成本,833元作为硬件投资;因此攻击成本比原来设定的情况低了9倍之多。
  3. (股权证明的)抵押金是临时的,而不是永久性的。当然,如果我自愿一直抵押在那,那么结果是一样的。但是,我又获得了之前的选择权;我可以在某个时间段(如4个月)的任何时间退出抵押。这也就是说我或许愿意投入超过1000以太币来获得50的年回报;或许在某些情况下可以是类似3000个。因此攻击成本被提高了3倍,也就是说,股权证明机制相比工作量证明机制在同等成本下有高达27倍的安全性。

上述的是一个非常简化的模型,但是它说明了这些多重叠加的因素是如何非常有利于股权证明机制,使股权证明机制在安全性方面具有事半功倍的效果。为何由众多因素组成的这个总体论述如此一边倒的倾斜向股权证明的解释很简单:在工作证明中,我们直接在物理法则的基础上工作。在股权证明中,我们则能够通过设计把协议制定成为具备我们想要看到的性质-简而言之,我们能够优化物理法则使其为我们所用。使(3)变为可能的“隐藏暗门”是安全性模型的改变,特别是弱主观性概念的引入。

现在,我们可以讨论边际/整体的区别了。在资本占用成本中,此区别非常重要。比如,想象你有价值10万美元的以太币。你可能想要长期持有其中的大部分;因为占用价值5万美元的以太币的成本几乎为零。占用8万可能会稍稍有点不方便,但是2万应该仍然给你足够的操作空间。占用9万问题会大一些,9.9万问题很大,占用全部10万很荒唐,因为这意味着你连一点支付基本交易费用的以太币都没有了。因为,你的边际成本增加得很快。下图可以表达上述状况和工作证明条件下的状况之间的区别:

注意论述的这部分并不能转化为一个“安全发行量水平”会减小的证明。它对此确实有帮助因为它证明了即使我们把发行量维持在一个非常低的水平,股权证明的参与水平仍然可以相当可观。但是,这同样意味着收益的很大一部分做为经济剩余由验证者承担。

在股权证明中交易所会不会像在工作证明中一样带来中心化风险?

从中心化的角度来讲,比特币和以太坊的情况都是需要大约3个联合即可进行51%攻击(比特币是4,写这篇文章的时候以太坊是3)。在工作证明中,我们假设所有交易所有大概30%参与率,那么3个交易所就可以进行51%攻击;如果参与率增加到40%左右,那么所需交易所的数量上升为8个。但是,交易所将不能用它们所有的以太币参与;原因是它们需要考虑到存款提取的情况。

另外,在工作证明中集中资金是不受到鼓励的,因为它对信任要求要高得多-一个工作证明资金池可以假装被黑客黑掉,把参与者的押金毁坏,然后用此资金去获得奖励。另外一方面,无需运行一个节点就可以用自己的币赚取利息对,即便需要信任,许多人来说很有吸引力;总的来讲,平衡中心化的问题是一个实证问题,一个明了的答案直到系统运行足够长的时间之前很难出现。随着分片的出现,我们预计资金集中的动机会进一步减少,因为(i)对于变化问题进一步减小了,并且(ii)在分片模型中,交易验证量与资本投入成正比,因此资金池无法形成直接的结构性节约。

最后一点是:相比PoW,PoS中心化的危害更少。因为有更便宜的方式去恢复51%的攻击,所以没有必要切换新的挖矿算法。

 
3 人喜欢