Nervos 研究员张韧博士在 Master Workshop 中发表了题为「Lay Down the Common Metrics:
Evaluating Proof-of-Work Consensus Protocols'
Security」的主题演讲,该主题演讲自己是关于多个共识协议。基于可行性的考虑,张韧博士选取了 6 个共识协议在此作讲解。如下为咱们整理的演讲文字稿,供你们参考学习,可观看演讲视频。算法
在 Nakamoto 共识协议(Nakamoto Consensus 图片中简称 NC)中,为解决分叉问题,矿工们被要求在可能的状况下选择最长的链;在没有最长链时,矿工选择第一个接收到的区块加入到主链中。在发放奖励方面,主链区块会得到所有奖励,而孤块什么也得不到。安全
这样是否足够安全?网络
Nakamoto 共识的原始分析倾向于认为区块链自己具有完美的链质量,即低于全网 50% 算力的攻击者是没法修改区块链的。然而实际上攻击者彻底能够有很是高的成功率去修改区块链。异步
有三种攻击方式会修改区块链:自私挖矿(Selfish Mining)、双花(Double Spending)和审查攻击(Censorship Attack)。其中,自私挖矿的攻击者能够得到与其算力不成正比的、不公平的区块奖励。他们能够将挖矿算力集中起来去得到更高的相对区块奖励,从而破坏区块链的去中心化特性;在双花攻击中,攻击者能够逆转已确认的交易,将本身利益最大化;审查攻击状况下,攻击者阻止交易被确认,形成诚实矿工的经济损失。函数
自私挖矿工具
红色方块表示块被传播到网络的时间,而后橙色圆圈表示攻击者的区块,三角形表示被诚实矿工挖出的区块。攻击者很幸运地找到了第一个区块,但没有将其发布到网络上,而是选择了扣留这个区块。性能
当诚实矿工找到一个块时,攻击者会在这时候抢在诚实矿工以前广播以前扣留的区块,则以后全部的矿工都将在攻击者的区块而不是诚实矿工的区块上挖矿。学习
若是攻击者足够幸运,可以连续找到多个区块,那么攻击者就能够毫无风险地孤立一个诚实区块。在这种状况下,攻击者的的链变得更长,而且全网的算力会到它的链上挖矿。经过这种方式,攻击者成功地增长了在总体区块奖励中得到的相对比例。区块链
双花攻击ui
双花攻击与自私挖矿攻击很是类似,是经过秘密挖矿来得到额外奖励。如比特币中,按照惯例有 6 个区块确认交易后基本是彻底确认了。若是攻击者秘密地扣留了 6 个区块,并一次性将它们广播到网络中,他就可以在收到商品或者服务以后逆转这个交易。
审查攻击
审查攻击试图孤立全部不符合审查要求的块,即我要广播我要审查的这些交易,若是你不遵从个人命令,我会尽力孤立你的块。
下面咱们来讲说解决 Nakamoto 共识安全问题的两种方法。
第一大类咱们称之为「更佳链质量」协议。如图所示这一大类中有不少协议,这些协议声称它们能够提升链的质量。此次我将重点介绍「最小哈希平局打破协议(Smallest hash tie-breaking protocol ,简称 SHTB)」 和 「不可预测的肯定性平局打破协议(Unpredictable deterministic tie-breaking,简称 UDTB)」。
第二大类称为「抗攻击」(Attack-resistant protocols)协议。这些协议声称,他们能够在链的质量并不完美的状况下抵御攻击,所以他们不须要提升链的质量。
第一种是「所有奖励」(Reward-all)协议。这类协议给大多数最近作了工做量证实的以奖励, 符合要求的块不管如何都会得到奖励,如此攻击者没法进行自私挖矿攻击来迫使诚实矿工的奖励无效,从而攻击者没有动机进行自私挖矿攻击。
第二个被称为「惩罚」(Punishment)协议。这些协议将没收那些可疑的区块的奖励。惩罚规则但愿经过损失厌恶, 让全部人不得不遵照协议。
第三个被称为「幸运奖励」(Reward-lucky)协议。这些协议根据区块内容对某些幸运区块进行奖励,但愿这些幸运区块做为稳定网络的「锚点」。
接下来让咱们更深刻地了解这些协议。
首先咱们分析 「更佳链质量」这一类协议,首先是「最小哈希平局打破协议」。在这个协议中,每当有平局时,协议都要求全部矿工选择哈希最小的块,无论它首先接收的是谁。
第二个称为「不可预测的肯定性平局打破协议」。该协议规定,每当有平局时,每一个人都使用不可预知的肯定性伪随机函数来计算全部参与竞争链的顺序,而无论首先接收哪个块。不可预测的肯定性协议背后的原理是,因为攻击者没法预测他是否会以超过 50% 的概率赢得整块竞争,进行自私挖矿攻击是不明智的(所以不会选择这么作)。
对于抗攻击协议,我会从每种技术方法中选择一种协议来分析。对于「所有奖励」协议咱们来分析水果链。在水果链中,对两种不一样的产品使用了相同的挖矿程序。若是一个候选区块的哈希值最前面的 k bits 小于某个阈值,那么就判断它是一个块;若是某个候选区块的哈希值最后的 k bits 小于某个阈值,那么就判断它是水果。所以,当你运行哈希算法时,你可能会获得一个区块,也多是获得一个水果。
该协议和 Nakamoto 共识同样,遵循最长链原则,而且根据最早收到的区块打破平局。
对于全部抵抗攻击协议,咱们使用 Nakamoto 共识做为其分叉解决的规则。所以,当咱们分析他们的攻击抗性时,他们被置于同一规则下。
水果是嵌入在区块中的。你能够把水果想象成 Nakamoto 共识中的交易,这个交易只是被嵌入到了水果中。
每一个水果都有一个指针块,这是一个最近的块,水果矿工不会被孤立 。图中香蕉块的指针就是这样一个案例,若是指针块在主链中,则水果是有效的。若是指针块是孤块,就像图上的番茄同样,那么这个水果再也不是有效的水果。
还有一个额外的规则,即水果出块的间隔须要小于预约义的超时阈值。间隔定义为主区块和指针区块之间的区块高度差。
好比,香蕉的间隔就是 2,这是由于主区块比指针区块晚 2 个区块。所以有效水果得到全额奖励,而区块则没有得到任何奖励。
对于惩罚协议,咱们选择 DECOR 协议修改版本做为案例来说解。在咱们的修改版本中,咱们将其称为「奖励分配」(Reward-Splitting ,简称 RS)协议,顾名思义,奖励在全部相同高度的竞争区块之间平分。这个协议容许一个区块引用以前的孤块为叔块,若是其间隔是低于超时阈值的,那么这个叔块就是有效的(也会得到必定的奖励)。
这是在奖励分配协议中间隔的定义和水果链相似。不一样在于,在此协议中,间隔被定义为主区块和叔块的高度差,而不是主区块和指针区块的高度差。因此咱们不考虑区块的亲缘关系,只考虑该区块自己的高度。每一个区块奖励在相同高度的竞争区块和叔块之间平均分配。例如,在这个图中,区块 B 和区块 C 分别获得了一半的区块奖励,区块 A 和区块 D 则得到所有的区块奖励。
最后一个是子链。子链也是采用相同的挖矿程序,可是是两种不一样的产品。子链中的出块规则和比特币相同,若是候选区块的哈希低于某个特定阈值,那判断这个块有效。若是候选区块的哈希值大于块阈值但小于另外一个阈值,咱们将其视为弱块(Weak Block)。弱块也计入链长度,也执行交易确认的功能。可是,弱块不会收到任何块奖励。只有区块能得到块奖励。
我很是激动,由于下面咱们要一块儿设定一些衡量协议安全性的共同指标。你声称这是最安全的协议,你要向我证实它,就须要从这几个指标的维度来衡量你的协议有多安全。
在这个研究中共有四个指标,咱们来分析一下。
第一个指标咱们称之为链质量(Chain Quality),是指主链上诚实矿工的区块的最小百分比。在这个例子中,链质量是六分之三,由于主链中有六个区块,其中三个来自诚实矿工。
第二个称之为激励相容度(Incentive Compatibility),用来衡量对自私挖矿攻击的抗性,被定义为诚实矿工区块奖励的最小百分比。
在这种状况下,因为六个主链区块中有三个区块来自于诚实矿工,所以激励相容度是 50%。在 Nakamoto 共识中,这两个指标(指链质量和激励相容度)是相等的。可是,对于其余协议,这两个指标并不相同。链质量只是用来评估拜占庭敌手(也就是做恶节点),但激励相容度则把奖励也考虑在内。
第三个指标是另外一个攻击抗性的指标,称为「做恶收益」(Subversion Gain),衡量抗双花攻击的性能。它被定义为「平均每一个出块间隔可以得到的区块奖励加上双花奖励的最大值」。
在这种状况下,假设每隔 10 分钟能找到一个块,若是总共有 8 个块,那么总共须要 80 分钟(其中攻击者有 3 个块)。在这个例子里,平均每 10 分钟,攻击者得到 3/8 个区块奖励。双花奖励为 0,由于双花奖励须要连续孤立六个块。
由于在抗双花攻击中没有完整的百分比奖励,所以指标设定为「平均每一个出块间隔得到区块奖励的最大值」。在这张图上,没有双花攻击奖励,由于你须要连续出孤立至少 6 个区块才能得到双花奖励。
最后一个指标称为「审查敏感性」(Censorship Susceptibility),即由于拒绝审查者的要求,致使诚实矿工的奖励损失的最大百分比。由于若是我拒绝审查请求,攻击者将开始孤立个人区块。此指标用来衡量个人区块能够被孤立的百分比。在这个案例中,有 5 个诚实的块,其中 2 个是孤块,因此审查敏感性是 2/5。
如今咱们来看看评估结果。在此次分享中我分析了 5 个协议,咱们来看看第一个指标链质量。
咱们先定义一个变量 γ ,它是在平局状况下,在攻击者的链上挖矿的诚实矿工算力占全部诚实矿工算力的百分比。
若是 γ 等于零,那么全部诚实矿工的算力都会用在挖诚实矿工的链上,没有诚实矿工的算力在攻击者的链上挖矿。若是 γ 等于1,则全部诚实矿工的算力将在攻击者链上挖矿,而且没有人会在诚实矿工的链上挖矿。
这是是用来评估 Nakamoto 共识的通用参数。这里有五个状况,分别是在 γ = 0,0.5,1 状况下的 Nakamoto 共识、最小哈希平局打破协议(SHTB)和 不可预测的肯定性平局打破协议(UDTB) ,哪个是链质量最佳的?
在这五个协议中,最小哈希平局打破协议(SHTB) 和 不可预测的肯定性平局打破协议(UDTB) 仅关注如何打破平局。因此你并不能比 γ = 0 的平局的状况下的 Nakamoto 共识作的更好。由于当 γ = 0 的时候,全部的挖矿算力将会在诚实的链上。而且你不能比 γ = 1 的状况下的 Nakamoto 共识更差了,攻击者在这种状况下能够赢得全部的平局。
因此在剩下的三个协议里(SHTB、UDTB、γ = 0.5 的 Nakamoto 协议)哪个是表现最差的?实际上是最小哈希平局打破协议。那么对于剩下两个协议(UDTB、γ = 0.5 的 Nakamoto 协议)哪个更好呢?
我来揭开这个答案。γ = 0.5 的 Nakamoto 共识是更好的。为何?举例来讲,在不可预测的肯定性平局打破协议(UDTB)中,当一个攻击者找到了一个区块,可是此时诚实的矿工打包了这个区块而且先于攻击者将它广播了出去,那么有可能这个攻击者会计算伪随机函数并意识到若是他发布了他的区块,是没有人会继续在他的区块之上挖矿的,由于他在出块竞争的平局中失败了。那么这个攻击者可以作什么?
在 Nakamoto 共识中,攻击者注定会失败,由于最早收到的区块打破平局的规则,若是你不尽快把区块发布出去,没有人会在你的区块上面挖矿。可是在 UDTB 中则不一样,即便下一个区块都被挖出来了,攻击者仍是可以在这个区块之上继续挖矿,只要攻击者可以赢得下一个出块权,那么成功以后这个攻击者就可以在诚实矿工的区块以后同时发布两个区块。
若是这个伪随机函数代表攻击者赢得了出块竞赛,攻击者就能拿到出块奖励。由于 UDTB 容许一个称为“后发制人“的特殊攻击行为,所以 UDTB 的安全性会比 γ = 0.5 的 Nakamoto 共识更差。
那为何最小哈希平局打破协议安全性那么差?由于当攻击者找到一个区块而且这个哈希值的确很是小的时候,攻击者会有大约 99% 的可能性,不论其余人的哈希是多少,他都可以赢得这个出块权。不论我先广播哪个区块,我都能准确的预测出我可以赢得这个平局的可能性。这就容许攻击者在他足够幸运的时候可以发动扣块攻击。
当诚实的矿工找到下一个区块的时候,由于攻击者区块的哈希是足够小的,他有很高的可能性可以赢得出块权,所以他可以发布区块而且得到这个出块权。下一次当攻击者没有这么幸运的时候,他拿到的区块的哈希相对来讲比较大,攻击者可以发布这个区块并直接得到奖励。
下面是咱们研究更佳链质量协议的一些通常性结论。
当攻击者所占算力 α > 1/4 时,没有一个协议可以达到一个理想的区块链的质量。只要攻击者的算力超过了全网算力的 1/4,它的收益就可以比它按照算力份额计算的正常收益更高。
只要攻击者的算力超过了全网算力的 1/4 ,它的收益就可以比它按照算力份额计算的正常收益更高。
对于任何一个 α 的值,在 γ = 0 的状况下,没有一个协议在安全性上表现比 Nakamoto 共识更好。
可能对于某一特定状况,某个协议在安全性上会比 Nakamoto 共识更好,可是在总体上 Nakamoto 共识在安全性上是最好的。
这是为何?由于协议并不能区分诚实的区块和攻击者的区块。
为何协议不能区分这些区块?
这是由于信息的不对称。攻击者是基于全部可得信息来行动的,也就是说他知道他发布了多少个区块,有多少个扣留的区块,我何时发布这些区块等等,攻击者是都知道的。然而诚实的矿工仅基于有限的公开信息来行动。
这又是为何?
这是由于 PoW 的安全假设较弱。他们试图异步操做,规定全部的矿工只对很是有限的公开信息采起行动/进行操做。
那么如今咱们来针对 Nakamoto 共识、水果链、奖励分配(Reward-Splitting,RS)协议、和子链来分析一下他们攻击抗性,首先是激励相容性。
其中奖励分配协议(执行)表现最好,由于惩罚老是激励正确行为的最有效方式。子链表现最差。
水果链表现有时比 Nakamoto 共识好,有时更糟。子链容许攻击者使用无价值的弱区块来使诚实的区块失效。若是全部东西都是有价值的,那么攻击者扣留区块则是有风险的。可是弱区块自己毫无价值,攻击者能够扣留这个弱区块,而不会有失去区块奖励的风险。既然无风险,那么为何不尝试更大胆的扣留区块的行为?
更多的弱区块,协议行为越糟糕。因此更多的弱区块实际上使事情变得更糟。最好的状况就是不去使用弱区块。
当水果链的超时值小的时候,它的表现比 Nakamoto 共识差。攻击者可使用无用的区块使他的水果失效。这也有相似的问题出现,由于区块在水果链中没有任何奖励,因此攻击者没有发布区块的动机,由于扣留区块也并没有风险,结果是攻击者能够尝试更大胆的扣留区块行为。
结果是攻击者能够尝试更大胆的持有行为。
若是有更多的水果,那么状况会稍微好一点。有一个著名的 Newton-Pepys 问题,它是说一个几率问题,即
A. 6 个正常的骰子独立投掷,至少出现 1 个 6
B. 12 个正常的骰子独立投掷,至少出现 2 个 6
若是你掷 6 次骰子,获得 1 个 6 的几率比你掷 12 次骰子获得 2 个 6 的几率要大。
在水果链中有四种挖矿产品:诚实水果,诚实区块,攻击水果,攻击区块。
咱们能够将「攻击者比诚实矿工拥有 1 个超时区块」——即攻击者能够成功地孤立一些水果——看做是一个条件事件。此事件彻底独立于水果生成(fruit generation),由于它仅考虑区块。咱们能够把它做为 Newton-Pepy's 问题中的条件去看待——由于它是独立的,因此咱们能够直接把它扔掉。但当条件知足时,若是水果较少,则“攻击者有更多水果”的几率很是低。
更多的水果意味着更多的攻击者水果。由于攻击者是少数派,若是水果的总数更多,这意味着攻击者的水果的总占比会比实际上多一些。这里用赌博来作类比更好理解,由于咱们有更多的水果,这意味着当攻击者有更多的水果, 那么他就会更少参与赌博。 人们更愿意在没有什么可失去的状况下赌博, 但若是有更多的资本可能会失去, 他就不想赌, 这意味着更多的水果稍微有助于提升激励相容性。
接下来在攻击抵抗性中咱们分析攻击「做恶收益」,这个指标是越小越好的,如图所示,奖励分配协议优于 Nakamoto 共识,优于水果链,优于子链。
咱们分析了另外一个有趣的衡量方法,称为「做恶赏金」。咱们定义其为最低双花奖励,来研究激励误差。(也就是说,在双花攻击的奖励大于做恶赏金时,攻击者才有动力做恶)。( 图中右下角的表格,分别是 Nakamoto 共识和奖励分配协议在区块确认数 3 或 6 , α (攻击者算力占比在 0.1 ~ 0.4 的状况下,计算出来的做恶赏金)。
经过计算各个协议的「做恶赏金」能够发现,基本上能够零成本破坏水果链和子链,甚至能够尝试无奖励双花,由于毫无风险。
咱们能够看到,随着交易确认次数的增长,对于一个弱攻击者,做恶赏金的增加几乎呈指数增加。这意味着更多的交易确认确实有助于抵抗双花,可是对于强攻击者来讲效果就不那么明显了。
对于抗审查能力, 咱们计算全部的数字和排名以下:
对于小 α,也就是攻击者算力占比较低的状况下, 水果链是最好的, 而后是 Nakamoto 共识, 再而后是奖励分配协议和子链。
对于大 α,也就是攻击者算力占比较高的状况下,奖励分配协议变成了最好的, 而后是水果链, Nakamoto 共识, 和子链。
显而易见的是,对于水果链来讲, 若是你想使其余块无效, 要比其余协议要困可贵多, 由于它们是在多个条件下得到奖励, 即便你是孤块也是如此。
为何当 α 足够大的时候, 也就是攻击者算力占比较高的时候,奖励分配协议会比水果链更好呢?由于在水果链上, 间隔被定义为主区块和指针块之间的区块高度差。而在奖励分配协议中, 间隔被定义为主区块和区块自己之间的区块高度差。
所以在水果链中,若攻击者在长期的出块竞争中都获胜了,那么诚实的水果的奖励都会被拿走由于他们的指针块都被孤立了。也就是说若是你把他们的指针都孤立了,那么对他们来讲就玩完了。然而在奖励分发协议中,最后的几个诚实的区块仍是可以得到一些奖励。若是想要让诚实矿工失去全部奖励,将他们的指针孤立是不够的,你须要将大量连续的区块孤立起来才行。(这给攻击者增长了阻碍)。
这些图片可以说明这些问题。
在水果链中,若是你孤立了指针,那么你可以安心地得到全部的奖励。然而在奖励分配协议中,即便你在出块竞争中长期孤立了这些区块,可是这些区块仍是会指向回主链。由于关键关系并无考虑进去,这个区块仍会分走攻击者一半的出块奖励,这让它更能抵抗审查攻击。(由于就算被审查,诚实矿工仍是能得到一部分奖励。)
抵抗攻击协议的通用结论
下面谈一下研究中对于抵抗攻击协议的一些通用结论。
合理的设置更长的区块确认时间和更大的带宽会增长安全性。
有一个两难困境,咱们称为“奖励坏人,惩罚好人”的机制。这对于你们来有点颠覆对协议奖励的认知。由于在这里即便你分叉你仍然可以得到出块奖励,你分叉是没有风险的。因此这反而激励了攻击者去分叉和发动双花攻击。
在惩罚性协议中,由于审查攻击者不在意他们本身的出块奖励,你的惩罚规则反而给攻击者另外一个工具,来让诚实的矿工放弃出块奖励。
而对于幸运奖励协议,若是你不打破信息不对称,那么幸运并不意味着好。有时候幸运的块反而是坏的块,让事情变得更糟。
结论就是,想要解决全部的攻击,咱们须要在底层规则中超越奖励。(奖励规则并不能很好解决攻击的问题)
具体怎么作?我提出一些想法和你们讨论一下。
咱们不该该设计一个太复杂、太难分析的协议。咱们须要设计一个设计者可以分析的协议。简单就是好的,复杂是安全的敌人。
仅针对单一攻击策略的安全性分析是很危险的。对于不少协议来讲,它们的设计者通过模拟说他们的协议可以抵抗某种特定的攻击方式,可是这样的协议却启发了攻击者去研究其余的攻击策略。仅针对单一攻击动机的安全性分析也是很危险的。
攻击者可能会着眼于短时间利益,长期利益或者损害其余矿工的利益。为了抵抗某一种攻击,你就可能启发了攻击者基于另外一个目标发动另外一种形式的攻击。在你的模型中你须要考虑到全部不一样动机的攻击者。
因此为了可以在质量和攻击抵抗中作的更好,你须要阅读这篇论文,可是由于我尚未准备好将这篇论文公之于众,所以你须要来找我要这篇论文。
而有心的你,必定会找到张韧博士的联系方式……