45

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

 4 years ago
source link: https://ethfans.org/posts/security-and-scalability-in-committee-based-blockchain-sharding
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.

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

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

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

很多区块链引入或正在引入一些新的共识协议(其中很多项目都是由学术圈内人士发起的,因此这些项目也被戏称为 “教授币”,但这些教授们都不太理解可扩展性三难问题)。这些新的共识协议声称其支持的每秒交易处理量(TPS)比中本聪共识更高,但是我从未见过这些协议在 相同的硬件,网络以及攻击力 条件下与中本聪共识做比较。无一例外的,他们都是在网络容量巨大的超强云服务器下对共识协议进行基准测试,然后 “发现” 他们的共识协议可提供高于比特币(每秒 3~7 笔)的交易吞吐量。换句话说,这些链关注于分片的 垂直 可扩展性而不是 水平 可扩展性。

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

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

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

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

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

分片如何提供可扩展性

本节中,我将对安全且可扩展的分片区块链所需的特性提供一个比较直观的综述,这在论文“ Divide and Scale: Formalization of Distributed Ledger Sharding Protocols .”中有形式化证明。推荐阅读 Buterin 和文章作者在 Twitter 上的讨论

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

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

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

潜在的问题 2:如果分片的区块被隐藏,那么验证者就无法对此分片区块生成欺诈证明。因为一个委员会中的大多数就可签名认可一个块的有效性,勾结起来的大多数可以创建一个无效区块然后把数据扣住。诚实的验证者们必须全局地、挨个请求其他验证者提供分片区块。由于 “ 说-听错误等价 ”(译者注:即非单一可归因错误),验证者不会因为数据被隐藏时发出的错误警告而受到惩罚,这意味着在恶意条件下,所有的验证者将必须实时下载所有的分片区块——再一次,这又取消掉了分片的效果,回到了大区块模式中。那么,这个系统系统要扩展也可以,但代价就是牺牲安全性,因为作了所有分片委员会中都是诚实参与者占大多数的假设,而这个假设是不现实的。相对应的解决方案是数据可用性证明,事实上, 数据可用性证明 是最基本的数学元件,没有这个,分片区块链不能同时保持安全和可扩展性。

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

并不是这样的。

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

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

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

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

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

问题的根源在于 Eth 2.0 (以及其他基于委员会的分片区块链)将复杂性和安全性从共识层移到了p2p 网络层。因此,如果关于 p2p 网络容量的基本假设是不现实的,那么系统的任何安全性证明都是无意义的(截至本文撰写时,尚未有相关文章出现)。共识层的恶意行为可以被惩罚(例如罚没资金,也就是烧毁其货币),但网络层的恶意行为无从处罚。将区块链的安全性转移至后者,无疑让区块链在面对很弱的自适应敌手时也很脆弱—— 在世界第三次大战中肯定无法存活

共识开销

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

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

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

总结

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

感谢 Mikerah Quintyne-CollinsJames Prestwich 的评论。

原文链接: https://medium.com/@adlerjohn/security-and-scalability-in-committee-based-blockchain-sharding-58fab3901193

作者:John Adler

翻译&校对:haiki & 阿剑


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK