区块链:干货 | 基于委员会的分片区块链中的安全性和可扩展性_ETH2

本文旨在以一种简单易懂的方式,剖析分片区块链中安全性和可扩展性之间的紧张关系。文中探讨了基于委员会分片的必要性,并阐述了分片设计中可能存在的问题和权衡方案。

区块链的可扩展性三难困境

“可扩展性三难困境”理论认为我们无法创建能同时具备以下三点的区块链:1)运行全节点的开销低,2)交易吞吐量高,3)同时保持安全性。显而易见的是,单纯地增大区块大小会使得运行全节点的开销更昂贵。反之亦然:我们只需几提高部署全节点的目标要求,就可以在支持更高交易吞吐量的同时保持安全性。

很多区块链引入或正在引入一些新的共识协议。这些新的共识协议声称其支持的每秒交易处理量比中本聪共识更高,但是我从未见过这些协议在相同的硬件,网络以及攻击力?条件下与中本聪共识做比较。无一例外的,他们都是在网络容量巨大的超强云服务器下对共识协议进行基准测试,然后“发现”他们的共识协议可提供高于比特币的交易吞吐量。换句话说,这些链关注于分片的垂直?可扩展性而不是水平可扩展性。

我在上文要表达的意思就是:共识与可扩展性几乎是正交的。教授币的设计思路可能因为术语上的混淆而受到了影响,在分布式共识协议中,可扩展性?意味着延迟或者参与者的数量,而在区块链语境下,则是吞吐量。只要网络中的每个全节点都必须验证每笔交易,那么瓶颈就是交易的执行。不同的共识协议可能会提供其他有用的特性,例如较低的首次确认延迟和更快的敲定区块速度,但这些都不影响可扩展性。

所以,如果我们无法用一个崭新的共识协议来解决可扩展性三难困境...我们能怎么做呢?

还要提醒的是,共识节点的数量本身并不影响可扩展性。可扩展性三难困境的第一点常常被错误地指称为“去中心化”,但实际上有关的是运行全节点的成本,而不是共识节点的数量。例如,人们常常说EOS是围绕着21个验证者的中心化系统,因此具有高吞吐量,但这实际上是错误的——EOS之所以可扩展,是因为它的全节点有极高的硬件和网络要求。能够支持大量活跃参与者的共识协议当然是值得追求的,但是这并不会直接影响链的可扩展性。

分片:解决可扩展性三难困境

为解决可扩展性三难困境,区块链分片?似乎是比较有前景的方法。在分片系统中,对交易的执行不会在所有节点上完全重复。理论上,这种方法会随着分片数量的增加,对可扩展性提供一个常数因子的提升。当然,这只是在理论上,因为存在很多需要注意的地方!接下来的分析主要针对于?Eth2.0,因为我比较熟悉这块,但是这些分析应该适用于所有分片区块链。

分片如何提供可扩展性

本节中,我将对安全且可扩展的分片区块链所需的特性提供一个比较直观的综述,这在论文“

DivideandScale:FormalizationofDistributedLedgerShardingProtocols.”中有形式化证明。推荐阅读?

Buterin和文章作者在Twitter上的讨论。

上面我提到过,分片指所有的节点并不完全重复所有交易的执行。但是这到底是怎么做到的呢?如果每个节点都要验证每一条分片链,那就不是分片了——就像一条区块链,其区块是将所有的分片合在一起的大小,分片前后是一样的可扩展性。如果我们允许每个节点去选择分片,并负责验证所选分片内的每个区块,那么很弱的敌手也能轻松地对单个分片发动攻击。这样的话,某个分片上就有可能出现违反状态安全性的事情继而影响所有其它分片。

解决方法是验证者必须被?混洗到委员会中,每个委员会是所有验证者的一个子集。系统必须要知道混洗的结果以及赋予每个验证者的责任,从而可以在发生可证明的恶意行为时,追责并施加惩罚。其它方面的细节暂借不论,出块过程大概是:一个委员会在一段时间内生成区块并为该区块提供见证数据,然后该委员会内的验证者会被分别混洗到另一委员会中负责另一个分片。

潜在的问题1:如果验证者被分配至新的分片后,需要下载并执行他们上次离开这个分片后在这个分片上生成的所有区块,并同步至此分片的最新区块,那么分片没有提供可扩展性,本质上还是大区块。这可以通过两种办法来解决。首先,使用无状态客户端的概念,执行交易只需要一个状态根,每笔交易向状态数据库提供必要的证据。这样就不用?存储?大量的状态,但是为了确保提交至分片链的最新状态根是正确的,依旧需要处理所有的区块。其次,假设验证者将要去往的任意分片中都存在至少一个诚实参与者。只要有至少一个诚实参与者,就可以对提交的无效状态根生成错误性证明。

潜在的问题2:如果分片的区块被隐藏,那么验证者就无法对此分片区块生成欺诈证明。因为一个委员会中的大多数就可签名认可一个块的有效性,勾结起来的大多数可以创建一个无效区块然后把数据扣住。诚实的验证者们必须全局地、挨个请求其他验证者提供分片区块。由于“数据可用性证明是最基本的数学元件,没有这个,分片区块链不能同时保持安全和可扩展性。

这些潜在的问题解决了,看起来好像“为完全实现eth2所需的所有研究突破”都有了,为了实现用树莓派就可以跑全节点的可扩展且安全的分片链,只需完善实现细节就可以了。

并不是这样的。

分片中的网络通信:进退两难

有一个需要注意的问题在上文中没有列出,却非常关键。现存的一般方案都是在共识层进行分片区块的创建和验证,但却忽视了:区块里面到底包含了什么东西?答案似乎显而易见:交易。但是,用户需要有一种办法可以将交易数据传递给分片区块生产者。这正是问题所在:如果网络中的所有节点都需要下载所有的交易,那么分片在数据可用性吞吐量上将不会提供任何可扩展性。

有没有一种办法,可以在分布式网络中发送交易,又需要让每个节点都下载所有交易?方法有很多!使用一种gossip协议,比如?gossipsub,其中每个节点维护某个topic的一个本地?列表,包含节点正在监听的对等节点。有了这个列表,交易就可以通过网络,可靠地发送至那些对交易感兴趣,必须下载和共享对应交易的节点。问题解决了吗?并没有,因为这会让系统容易被攻击。

攻击方式如下:如果攻击者可以将每个验证者的ID和节点的IP地址对应起来,他们只需要让大部分不诚实的委员会成员,DoS攻击那些不勾结/拒绝受贿去攻击分片的验证者,就可以很轻易地破坏“至少一个诚实验证者”假设。尽管Eth2.0协议本身不要求验证者的IDs和IP地址进行绑定,gossip网络的异构网络拓扑并无隐私可言,对攻击者来说,在网络中散布节点并取交集以将节点的ID和IP对应起来是很容易的。为抵御这种攻击,同构的网络拓扑可能会安全些,但是正如上所述,因为所有的节点要下载所有的交易,那就没有可扩展性可言了。

可扩展区块链的网络层隐私保护工作,说好听一点是处在初级阶段。鉴于以太坊基金会先前并没有将网络层隐私作为Eth2.0开发的一个优先事项,我并不期待研究者们会在短期内认真地处理这个问题。这只是众多开放研究问题中的一个,在没有一个肯定的答案以前,安全并可扩展的分片区块链是不可能实现的。

问题的根源在于Eth2.0将复杂性和安全性从共识层移到了p2p网络层。因此,如果关于p2p网络容量的基本假设是不现实的,那么系统的任何安全性证明都是无意义的。共识层的恶意行为可以被惩罚,但网络层的恶意行为无从处罚。将区块链的安全性转移至后者,无疑让区块链在面对很弱的自适应敌手时也很脆弱——在世界第三次大战中肯定无法存活。

共识开销

前面一部分涵盖了交易的广播,但是还有另一部分数据需要在网络中传播:见证消息。Eth2.0似乎支持超级多的验证者——比基于PBFT的协议的数量多得多,因为在最坏的情况下,基于PBFT的共识协议的消息数量会随节点数量的增加呈平方级增加。那Eth2.0是如何实现这种奇迹的呢?

又是通过将复杂度从共识层转移到网络层来实现的。聚合签名的开销本来就很大,一些实用的方案,比如?Handel就依赖于显示地连接验证者的ID和IP地址。

简言之,共识节点的集合之所以能做得比传统PBFT协议所支持的更大,是因为见证消息是在?p2p网络层?聚合的。这个过程会有很高的通信复杂度,尚未出现一种协议,能够在恶意的网络环境以及较短的出块时间内,保证聚合起Eth2.0目标数量的验证者签名。

总结

基于委员会的分片需要无状态的执行,加上错误性证明和数据可用性证明。然而,当考虑到交易的传播,我们发现可扩展性只有将方案的安全性移到p2p网络层才可以实现,这对于抵御恶意对手方是很脆弱的。我们是否能跨越这个障碍依旧是一个开放的研究问题。

感谢?MikerahQuintyne-Collins?和?JamesPrestwich?的评论。

原文链接:?https://medium.com/@adlerjohn/security-and-scalability-in-committee-based-blockchain-sharding-58fab3901193作者:?JohnAdler翻译&校对:?haiki&阿剑

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

区块博客

[0:0ms0-6:683ms