侧链并不具备广大的以太坊社区所期待的安全性。
引言
Layer-2对以太坊的重要性与日俱增,而且已成共识。
但是,“Layer-2”是个不精确的标签。有些人说起“Layer-2”时,仅仅指的是“不在以太坊Layer-1”。但实际上,方案到底怎么跟以太坊Layer-1交互,是非常重要的。同属“Layer-2”名目下的不同方案,特性可以有天壤之别。可以争议“Layer-2”应该专指具备特定属性的某些东西。不过,这不是我这里要讲的主题。
我在这里要讨论的是侧链的属性。
侧链的基本含义是:由一组验证者,把一条链的最新状态提交给一个智能合约,如此推进的一类系统。这些检查点可被一个桥接合约使用,以支持用户的存款和取款。一般来说,在该组验证者之间也会有一个领袖选举流程,来决定某时某刻由谁来创建侧链区块;例如PoA权威证明算法和PoS算法。
侧链在以太坊生态中也扮演着重要的角色。在研究人员还未开发出更好的方案之前,它们是可扩展性和可用性的临时解决方案。像xDai这样的产品,也点出了大家对更好的用户体验的需求,并使之扩散了开来。
但是,侧链并不具备广大的以太坊社区所期待的安全性。这不是说永远不该使用侧链这种方案。如果人们完全知情,但是愿意用,那是他们自己的选择,也可能是值得的。但如果人们是不知情的,那就危险了。本文是希望提供一些信息。如果每个人都已经完全知晓了这些特性,那我这再写一篇也无伤大雅。但如果这文章能帮助大家意识到自己的误解,那就算做了好事了。
那么侧链到底缺少了哪些安全特性?几乎所有的侧链,都不能够提供:
审查抗性终局性资金所有权保证如果这些特性你全都要,那你可能得另找方案来代替侧链了。当然,也有可能在维持侧链核心架构的前提下改进具体方案在这些维度上的表现。
我觉得开放性的讨论对大家都有好处。
显然,侧链的审查抗性比区块链要弱。不然,那也根本不需要区块链了。但这里我们挖得再深一些。
如果某条侧链有N个验证者,而只要有M个验证者一致同意就可以审查任意一笔交易,那么只需要(N-M)个验证者联合起来,就可以审查一个区块。这就导致了一个有趣的两难:要让审查交易变得更难,就会让审查区块变得更简单。因为审查交易和审查区块都是糟糕的事情,所以侧链就在根本上不能获得强健的审查抗性。
这种担忧在使用PoS时也依然存在,甚至按权益来计算出块权重会让它变得更糟糕,因为达成阈值的独立实体数量可能会更低。
数据可得性保证
假设只要(N-M)个验证者就可以创建一个区块。再假设所有其他验证者需要拥有整个状态的数据才能够验证新状态。那么,只要(N-M)个验证者是恶意的,他们可以:
创建一个新区块拒绝与诚实验证者共享区块数据本质上就是将N-(N-M)=M名诚实验证者移出了共识过程,因此完全掌控了整个系统这种情况发生的可能性有多大呢?显然需要更具体的细节才能下结论,但我们可以这样开始思考:一个理性的验证者,要跟其他人共享数据的激励在哪里呢?在传统的权威证明机制中,不这样做可能对声誉有损。但是,其实声誉机制也很难起作用,因为实际上并没有办法证明数据被扣起来了,除非其他人把所有数据都放到了链上。觉得这个解决方案听起来像是optimisticrollup?没错,就是如此。这也意味着,带有更好安全性的侧链,本质上就“退化”成了optimisticrollup。
在大多数侧链方案中,验证者可以因为自己的工作而获得某种形式的支付。对于诚实的验证者,奖励会在N个验证者之间共享。对于不诚实的验证者,同样多的奖励只会在N-(N-M)=M个验证者之间共享,所以验证者完全有激励不跟其他人分享更新后的状态。
在这里,有一个根本性的难题:很难辨别数据可得性攻击。对于诚实验证者来说,很难分辨出,到底是有人发动了攻击,还是自己遇到的同步问题。
假设状态转换的流程如下:
state1=>state2=>state3
而每一次的转换都需要一些交易在已有的状态上生效从而改变状态。而终局性就是说,交易一旦生效,就不能撤销。
侧链的检查点,经过侧链验证者的共识之后发送到以太坊区块链上,并根据以太坊的共识机制被固化下来。有些人可能因此就认为,侧链的终局性等同于以太坊的终局性;要回滚侧链的区块,你也需要回滚以太坊的区块。但这完全搞错了。
因为终局性是说不能回滚交易,不是说不能用新状态来替代旧状态。只要(N-M)个验证者同意,他们可以执行如下的状态转换:
state1=>state2=>state1
侧链资金所有权保证
假设现在的state1={Alice:1000,Bob:0}。即Alice有1000块,而Bob啥也没有。那如果Bob是恶意的,而且控制着POA验证者中的绝大多数,他可以怎么做?
他可以执行一个状态转换,state1=>state2,而state2={Alice:0,Bob:1000}。也就是偷走Alice所有的钱并交给Bob。
因此,侧链的防御就减弱为,不会有(N-M)个验证者同意去执行这样的非法状态转换。
这已经是众所周知的事,但我认为还是有必要提醒大家。你对一条侧链的信心,只能是相信验证者中的大多数不会干这样的事情。对侧链的大部分安全分析都应该关注这一点。
可能还是有某些人你可以在某种程度上信任他们。就像我们中的许多人都中心化的服务提供商。有时候这种牺牲是值得的。重要的是,你得清楚这是一种权衡。
使用治理程序作为防御手段的问题
有一种说法是:”我们可以使用治理程序来解决上面提到的所有问题“。这种方法是有缺陷的,因为整个系统会退化为一个治理流程。这种说法格外使我担心的一个理由是,它意味着侧链的其他属性是剧院。举个例子,如果治理流程才是防范上述问题的最终手段,那也就意味着,什么PoS、PoA,统统都不重要。系统的治理流程才是真正的PoA。而且,很明显,对系统的治理流程,同样可以发动一模一样的攻击。
侧链的特性在哪里可能特别有用?
除了侧链的一些附加属性,比如更快的区块时间,确实有一些场合,是侧链的特点可以大放异彩的。比如:
你就是想要N-M个验证者就能执行任意状态转换。希望有一个高级控制权限的企业应用就是一个例子。M=0,且N个验证者可以执行任意状态转换的情况。例如,一个四方参与的游戏。不过问题是,1个验证者就可以关停这条链。结语
曾经,侧链是在保持一定水平的以太坊可组合型和互操作性的前提下,唯一可用的方案。现在,随着别的一些Layer-2扩展方案的成熟,是时候考虑侧链如何与其他方案更好地结合了。
有一些属性,很适合让侧链加以整合:
实现不收费的大规模迁移,保证用户不会因为费用而被卡住,无法退出。将领袖选举机制替换为其他具备更强审查抗性的方案需要协调器来处理链上两个状态的差异。加入错误性证明来防止非法的状态转换。随着optimisticrollup和optimisticVM技术的成熟,项目的权衡范围也会改变,因此,现在是反思侧链属性及其相关取舍的好时机。
文:以太坊爱好者
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。