用木桶理论拆解比特币/以太坊Layer2安全模型与风险指标
作者:Faust & 雾月,极客web3
导语:美国管理学家劳伦斯·彼得曾提出“木桶理论”,该理论认为,一个系统的整体性能,被其最薄弱的部分所限制。换言之,一个木桶能装多少水,由它最短的那块木板决定。这个道理虽然简单,却又常被忽视。以往对Layer2安全性的辩论,大多忽视了不同组件的优先级与重要程度,基本都集中在状态转换可靠性与DA问题上,却忽视了更底层更重要的要素,这样下来整套理论根基可能都站不住脚。所以,当我们对多模块的复杂系统展开探讨时,要先摸清楚哪块是“最短的木板”。
受到木桶理论的启发,我们做了系统分析之后发现,比特币/以太坊Layer2安全模型中的不同组件间,也存在明显的依赖关系,或者说某些组件的安全性要比其他组件的安全性更基础、更重要,即所谓“更短”。
对此,我们可以初步对主流Layer2安全模型中不同组件的重要程度/基础程度,进行如下优先级排序:
1. 合约/官方桥的控制权限是否被合理分散(多签控制权有多集中)
2. 是否有抗审查的提款功能(强制提款、逃生舱)
3. DA层/数据发布形式是否可靠(DA数据是否发布在比特币、以太坊上)
4. 是否在Layer1上部署了可靠的欺诈证明/有效性证明系统(比特币L2需要借助于BitVM)
我们应该适度吸收以太坊社区对Layer2的研究成果,避免李森科主义
相比于高度秩序化的以太坊Layer2体系,比特币Layer2犹如一片崭新的天地,这个在铭文热潮后显得愈发重要的新概念,在表现出崛起势头的同时,其生态体系却日渐混乱、趋于混沌,霎时间各种Layer2项目方层出不穷,有如雨后春笋。他们在为比特币生态带来希望的同时,却刻意隐瞒自身的安全风险,甚至曾有人扬言“否定以太坊Layer2,走比特币生态独特道路”,大有走极端主义路线的势头。
考虑到比特币与以太坊在功能属性上的不同,比特币Layer2在早期注定无法向以太坊Layer2对齐,但这并不能说明,我们应当彻底否定以太坊乃至模块化区块链界早有定论的行业常识(参考前苏联生物学家李森科,借意识形态问题,迫害西方遗传学支持者的“李森科事件”)。
恰恰相反,这些由“前人”花费巨大努力取得的评判标准,在得到了广泛认可后,早已表现出强大的说服力,刻意否定这些成果的价值,绝非理智之举。
在建设比特币Layer2的同时,我们应当充分认识到“西学东用”的意义,对以太坊社区的诸多结论进行适度的吸收与优化。但在借鉴比特币生态之外的观点时,我们有必要意识到其出发点的差异,并最终做到求同存异。
这就像是在探讨“西方人”与“东方人”的同与异。不管是西方的还是东方的,“人”这个后缀都表达了很多相似的特征,只是在对应“西方”和“东方”这种不同前缀时,会在细分特征上有所不同。
但归根结底,“西方人”和“东方人”之间注定存在重合,这就意味着,许多适用于西方人的东西,在东方人身上同样适用,许多适用于“以太坊Layer2”的东西,也同样适用于“比特币Layer2”。在区分比特币L2与以太坊L2的不同前,先理清两者之间的互通之处,或许是更为重要、更有意义之事。
秉着“求同存异”的宗旨,本文作者并不打算探讨“什么是比特币Layer2,什么不是”,因为这个话题争议过大,就连以太坊社区都没有就“哪些是以太坊Layer2,哪些不是Layer2”而达成客观一致的见解。
但可以肯定的是,不同的技术方案在为比特币带来扩容效应的同时,其安全风险各有不同,其安全模型中存在的信任假设,将是本文打算重点探讨的话题。
如何理解Layer2的安全性及评判标准
其实,Layer2的安全性不是一个新鲜的讨论点。甚至就连安全性这个词,也是一个包含了多个细分属性的复合概念。
此前EigenLayer创始人曾将“安全性”简单的细分为“交易不可逆转性(抗回滚性)、抗审查性、DA/数据发布可靠性、状态转换有效性”等4个要素。
(EigenLayer创始人曾就客户端验证/主权Rollup方案如何继承比特币主网安全性一事,表达了看法)
而L2BEAT和以太坊社区OG曾提出比较系统的Layer2风险评估模型,当然这些结论针对于智能合约型Layer2,而非主权Rollup、客户端验证等典型的非智能合约型Layer2。
虽然这并不100%适合比特币L2,但还是包含了值得肯定的诸多结论,其大部分观点已经在西方社区被广泛认可,也便于我们客观评估不同比特币L2的风险所在。
(Vitalik曾表示,由于Rollup方案在早期启动时无法达到理论上的完善度,所以必须借助于一些辅助手段提升安全性,而这些辅助手段被称为“辅助轮”,并会引入信任假设。这些信任假设就是风险)
那么安全风险都来自于哪里?考虑到当前,无论是以太坊Layer2还是比特币Layer2,很多都依赖于中心化的节点来充当排序器,或由少数节点组成侧链形式的“委员会”,这些趋于中心化的排序器/委员会如果不受限制,可以盗取用户资产并随时跑路,可以拒收用户的交易请求,导致资产被冻无法使用。这便涉及到前文EigenLayer创始人提到的状态转换有效性和抗审查性。
同时,由于以太坊Layer2依赖于ETH链上的合约进行状态转换验证和充提款行为验证,合约控制者(其实就是Layer2官方)若能快速更新合约逻辑,在其中掺杂恶意代码段(比如,允许某个指定的地址,把L1-L2充提款合约上锁定的代币全部转走),就可以直接盗走托管的资产。
这被归结为“合约多签分配问题”,而多签分配问题一样适用于比特币Layer2,因为比特币Layer2往往依赖于“公证人桥”,需要多个节点通过多签来放行跨链请求,所以比特币Layer2身上也存在多签如何合理分配的问题,我们甚至可以把它看作比特币Layer2身上最基础的“辅助轮”。
此外,DA问题也极为重要。如果Layer2不把数据上传到Layer1,而自行选用一些不可靠的DA发布场所,假如这种链下DA层(一般称为DAC数据可用性委员会)发生串谋,拒绝对外发布最新交易数据,数据扣留攻击将导致网络报废,并可能使得用户无法顺利提款。
L2BEAT对上述问题进行了总结,并归纳出了Layer2安全模型中几个核心的要素:
1. 状态验证/证明系统是否可靠(State Validation)
2 . DA数据发布方式是否可靠(Data Avalibility)
3. 如果Layer2网络故意拒收你的交易/停机,你能否将资产强制撤出Layer2(Sequencer Faliure、Proposer Failure)
4. Layer2相关合约-官方跨链桥的控制权,是否足够分散。如果权力比较集中,发生“监守自盗”时,用户能否有足够的时间去应急(Exit Window)
(L2BEAT上为不同Layer2项目设置的“风险要素展示图”)
Anyway,当我们分析Layer2安全隐患时,其实就是在探讨,Layer2网络内存在多少可能导致用户资产受损的场景,对于这些危险情况,Layer2系统又能否通过机制设计进行有效制约。如果某些恶意行为是无法杜绝的,我们又需要引入多大程度的“信任”,需要信任一个群体中的多少个体,需要依赖于多少“辅助轮”。
下文中我们将对通用的以太坊Layer2/比特币Layer2模型中,存在的风险要素进行分析(本文所谈及的对象不包含“状态通道”或“支付通道”,也不包括铭文索引协议,因为它们比较特殊)。并且我们会尝试探讨,哪些因素是Layer2安全模型中,更基础、更底层、更重要的,这些更为基础的短板,将是比其他短板更值得我们去重视的信任风险。
Layer2的木桶效应——短板都有哪些
最短的那块板——合约/官方桥的管理权
在这里,我们不妨用“木桶效应”分析Layer2安全问题,很容易看出,最短的一块木板就是上文有所提及的“合约可升级性”(主要针对以太坊Layer2),或者更进一步的说,是“官方跨链桥的管理权”(比特币和以太坊Layer2都适用)。
对于以太坊Layer2而言,只要Layer2官方可以在Layer1链上快速升级合约,理论上可以把L2官方桥充提款地址上锁定的Token盗走,无论其DA层或证明系统有多么可靠。
可以说,桥接合约的控制权限关乎整个系统的安危,它是整个Layer2乃至模块化区块链堆栈中最基础、最关键的部分。如果桥接组件/合约是可以在多签控制下更新迭代的,那我们就要在这里引入“信任假设”,假设Layer2合约/官方桥的控制者不会作恶。
(L2BEAT上对不同Layer2项目的合约升级延时有标注,大多数L2合约可以立即被控制者升级,如果合约控制者想盗取资产,或其私钥被黑客盗取,L2托管的用户资产必定遭殃)
不同于以太坊Layer2的是,比特币Layer2的桥基本不受Layer1上的合约控制,因为比特币本来就不支持智能合约。相对而言,以太坊Layer2的整个工作流程都高度依赖于Layer1上的合约,而比特币Layer2不能这么做。
(Starknet原理图)
这对于比特币Layer2而言,是避不开的问题,可以说既有好处也有坏处。目前看来,以太坊Layer2依赖合约实现的“去信任化的桥”,在比特币L2身上无法实现。这种“Trustless Bridge”需要在Layer1上部署专用合约,同时需要DA+欺诈证明/ZK证明系统的配合,本质类似于Orbiter那种“乐观桥”或Polyhedra这类ZK桥。
目前业界的主流观点是,若不考虑实践中可能存在的bug,仅考虑理论模型,乐观桥和ZK桥的安全级别基本是最高的一档,只要合约代码不包含bug,或者不能被恶意升级,基本就是去信任化的。
(乐观桥只需要做到,N个守望者中,有1个诚实,就可以保证安全,信任模型是1/N)
由于比特币Layer2没办法在Layer1上部署合约组件(这里不谈论闪电网络),它的官方桥基本都是少数节点组成的“公证人桥”,或者叫“多签桥”,这种桥的安全性,取决于多签/阈值签名的设置方式,需要引入较强的信任假设:假设这些公证人不会合谋,或者不被盗取私钥。
目前大多数基于公证人/阈值签名的桥,在安全性上无法与以太坊Layer2官方的“去信任化桥”相提并论(其前提是以太坊Layer2的合约不会发生恶意升级)。很显然,比特币Layer2网络托管的资产安全性,将会受制于其官方桥的安全性,或者说受限于多签桥的权力分散度,这是其第一处“辅助轮”所在。
由于以太坊Layer2官方桥相关合约的“升级权限”,往往也集中在少数几个多签控制者手上,如果多签控制者串谋,以太坊Layer2的桥也会出问题,除非其合约不可升级,或是受到了很长的延时限制(目前只有Degate和Fuel V1如此)。
(Degate每次合约升级,都会给用户预留30天的安全逃离期,这期间只要大家发现新版合约代码有恶意逻辑,就可以通过强制提款/逃生舱功能安全逃离)
关于“官方桥”这部分,以太坊Layer2和比特币Layer2的信任模型基本一致:需要信任多签的控制者不会串谋作恶,这组多签可以控制L2官方桥,要么更改其代码逻辑,要么直接放行无效的提款请求,最后的结果都是:用户资产可能被盗。
两者唯一的区别是,以太坊Layer2只要合约不恶意升级/升级窗口期足够长,其官方桥就是去信任的,但比特币Layer2无论如何都达不到这种效果。
第二短的板——抗审查的强制提款
如果我们假设,前文所说的合约多签/官方桥控制权问题可以无视,也就是这一层没有问题,那么接下来最重要的一层,必然是提款行为的抗审查性。
关于抗审查强制提款/逃生舱功能的重要性,Vitalik在几个月前的文章“Different types of layer 2s”中曾强调,用户能否顺利的把资产从Layer2撤回至Layer1,是一个非常重要的安全指标。
如果Layer2的排序器一直拒绝你的交易请求,或者长时间故障/宕机,你的资产将被“冻结”,什么都干不了。即便DA和欺诈证明/ZK证明系统可用,如果没有抗审查方案,这样的Layer2也是不够安全的,随时可以把你的资产扣住。
更何况,曾在以太坊生态盛极一时的Plasma方案,允许任何人在DA失效或欺诈证明失效时,安全的把资产撤出至Layer1。这个时候,整个Layer2网络基本报废,但你的资产仍有办法全身而退。显然,抗审查的提款功能,要比DA与证明系统更基础、更底层。
(以太坊基金会的Dankrad表示,Plasma在DA故障 / 用户无法同步最新数据时,依然可以让用户资产安全撤离)
部分以太坊Layer2,如Loopring和StarkEx、dYdX、Degate等,会在Layer1上设立一个抗审查的强制提款/逃生舱激活函数,以Starknet为例,如果用户在Layer1上提交的Forced Withdrawal请求,在7天窗口期结束时,未得到Layer2排序器响应,则可以手动调用freeze Request功能让L2进入冻结状态,激活逃生舱模式。
此时,排序器无法向L1上的Rollup合约提交数据,整个Layer2将冻结一年。然后,用户可以提交merkle proof,证明自己在Layer2上的资产状态,并在Layer1上直接提款(其实就是从官方桥的充提款地址中,把属于自己的等额资金拿走)。
很显然,逃生舱模式只能在以太坊这种支持智能合约的链上实现,比特币无法运行这么复杂的逻辑。换言之,逃生舱功能基本是以太坊Layer2的专利,比特币Layer2必须借助于一些额外的辅助手段,照猫画虎的模仿,这就是第二处“辅助轮”。
但单纯声明“强制提款请求”,要比直接激活逃生舱方便的多。前者只需要让用户在Layer1上向指定地址提交一笔交易,并在交易的附加数据中,声明自己想提交给全体Layer2节点的数据(这样可以直接绕开排序器,向其它Layer2节点传达请求)。如果“强制提款”长时间得不到响应,用户再去触发逃生舱模式,是一种比较合理的设计。
(参考资料:对Layer2而言,强制提款与逃生舱功能到底有多重要?
https://mp.weixin.qq.com/s/EheKZWDcJHYZ7vBZZPOMDA)
目前,已经有比特币Layer2团队打算模仿Arbitrum的强制交易实现方式,允许用户在比特币链上发布强制交易声明(Forced Transaction Envelopes)。这种方案下,用户可以绕开排序器直接向其它Layer2节点“传达心声”。如果排序器在看到用户的强制交易声明后依然拒绝其请求,将会被其他Layer2节点察觉并可能受到惩罚。
但问题在于,Arbitrum的强制交易功能,受益于其欺诈证明系统,可以惩罚一直无视用户交易的Sequencer/Proposer。但对于难以在Layer1上验证欺诈证明的比特币Layer2,会在这方面遇到一定挑战。(暂且不讨论BitVM)如果是主权Rollup这种安全级别与客户端验证并无太大差异的方案,我们很难严肃的评估其可靠性,可能要针对不同项目的实现细节进行评估。
当然,鉴于目前很多比特币Layer2以类似于侧链的形式运转,相当于实现了去中心化排序器,可以一定程度上解决抗审查问题。但这只是一种有效的辅助手段,肯定不是终极解决方案。
ps:现在的一些Layer2方案,如Validium等,在逃生舱的机制设计上并不完善,排序器发动数据扣留攻击/DA不可用时,可以让用户无法提款。但这归因于Layer2逃生舱设计的不完善,理论上来看,最优的逃生舱提款可以只依赖于历史数据,不需要对DA/新数据的可获得性产生依赖)
第三短的板:DA层数据发布的可靠性
DA虽然被称作数据可用性,但这个名词实际指的是数据发布,只是因为Vitalik和Mustafa在最初给这个概念起名字时,没有深思熟虑,才有了DA/数据可用性这种名不符实的叫法。
数据发布,顾名思义,说的是:最新的区块/交易数据/状态转换参数,能否被有需要者顺利接收到。在不同的链上发布数据,其可靠性都不一样。
(参考资料:对数据可用性的误解:DA=数据发布≠历史数据检索
https://mp.weixin.qq.com/s/OAM_l4Pe9Gphn8H55OZUtw)
西方社区普遍认为,比特币、以太坊等老牌公链,是最去信任的DA层。如果Layer2排序器在以太坊上发布了新的数据,任何人只要运行以太坊geth客户端,就能下载到这些数据并进行同步,几乎不会受到任何阻拦,这是凭借以太坊网络庞大的规模,和繁多的公开数据源来实现的。
值得一提的是,以太坊Rollup会强行要求排序器在Layer1上发布交易数据/状态转换参数,这一点是通过有效性证明/欺诈证明来保证的。
比如,ZK Rollup的排序器在Layer1上发布交易数据后,会触发合约逻辑生成一个datahash,而验证器合约要确认,Proposer提交的有效性证明和datahash有对应关系。
这等价于:确认Proposer提交的zk Proof和Stateroot,与Sequencer提交的Tx data,是关联在一起的,即New Stateroot=STF(Old Stateroot,Txdata)。STF就是state transition function状态转换函数。
这样可以保证将状态转换数据/DA强行上链,如果只提交stateroot和有效性证明,将无法通过验证器合约的verify。
关于DA数据发布与证明验证系统哪个更基础,以太坊/Celestia社区早已进行过充分讨论,普遍结论是:DA层是否可靠,要比欺诈证明/有效性证明系统的完备性更重要。比如说,Plasma、Validium、Optimium这类——DA层在以太坊链下、结算层在以太坊链上的方案,容易遭遇“数据扣留攻击”,就是指:
Sequencer/Proposer可以与ETH链下的DA层节点串谋,在Layer1上更新stateroot,但扣住状态转换对应的输入参数不发出来,让外人无法判断新的stateroot是否正确,成为“睁眼瞎”。
这种情况发生的话,整个Layer2网络相当于报废,因为这时,你根本不知道Layer2账本变成了什么样。如果是基于欺诈证明的Layer2(Plasma和Optimium),排序器可以随意改写任意账户下的数据/资产;如果是基于有效性证明的Layer2(Validium),虽然排序器不能随便改写你的账户,但此时整个Layer2网络成了黑箱,没人知道里面发生了啥,跟报废没区别。正因为如此,以太坊生态内的正统Layer2方案,基本都是Rollup,而Validium和Optimium往往不被以太坊基金会认可。
(参考资料:数据扣留与欺诈证明:Plasma不支持智能合约的原因
https://mp.weixin.qq.com/s/oOPZqIoi2p6sCxBdfUP4eA)
所以,DA层的可靠性/状态转换参数的可获得性,比欺诈证明/有效性证明系统的完备性更重要,更基础。对于比特币Layer2,,尤其是基于客户端验证模型的Layer2而言,即便没有在Layer1上设置欺诈证明/有效性证明验证系统,只要DA层照常工作,大家依然能知道L2网络是否出现错误的状态转换。
目前比特币主网难以验证 欺诈证明/有效性证明(此处不探讨BitVM),我们先假设比特币L2没有证明验证系统。理想状态下,如果L2排序器真的作恶,在结算层/BTC上发布一个与DA数据无关联的stateroot,它还是无法真正意义的盗取用户资产,因为它单方面提交的stateroot/状态转换结果,不会被诚实节点认可,到最后可能只是自嗨。
(此时,只要交易所和跨链桥等生态内周边设施提供方运行的节点不与排序器串谋,排序器就无法通过发布错误数据的方式来快速变现盗来的资产。之后,只要有1个诚实节点发现情况不对,在关键时刻发出警报,就可以通过社会共识来纠错。但社会共识本身的成本很高,无法即时生效)
如果是类似于侧链的模型,多数节点串谋执行恶意的状态变更,人们也可以很快发现问题。只要跨链桥、交易所这类第三方设施不认可错误的数据,Layer2/侧链的恶意控制者就无法成功套现,除非他说服别人与他在链上直接OTC。
(Viatlik曾在文章中指出,客户端验证是保证区块链网络安全的真正根基,Verify by yourself)
这里有一个很有意思的点,其实无论是以太坊Layer2,还是比特币Layer2,都可以做到“客户端验证”。但以太坊Layer2在“客户端验证”的基础上,借助Layer1和证明验证系统,保证状态转换的有效性,基本不必依赖于社会共识(前提是有成熟的欺诈证明/有效性证明系统)。
而比特币Layer2的“客户端验证”方案往往对“社会共识”有较强依赖,会带来相应的风险(对于比特币Layer2而言,这种安全风险基本可控,但还是可能导致某些人损失资产。对于以太坊Layer2而言,因为其官方桥需要证明系统的配合,如果证明系统不完善,排序器可以盗取用户资产并提到L1上跑路。当然,具体要看跨链桥组件怎么设计)。
所以说,一个能在Layer1上实现欺诈证明/有效性证明验证系统的Layer2,永远都要比单纯的“客户端验证”模型好的多。
PS:由于大多数采用了欺诈证明/有效性证明系统的比特币Layer2,无法让Layer1直接参与到证明验证流程,所以其本质仍然只是把比特币当做DA层,安全模型等价于“客户端验证”。
理论上来看,在Layer1上通过BitVM方案,可以在比特币链上验证欺诈证明,但这种方案工程落地难度很大,会遇到很大挑战。鉴于以太坊社区早已对基于Layer1的证明验证系统做出了特别多的讨论,已经人尽皆知,所以本文不打算对“基于Layer1的证明验证系统”进行赘述。
总结
经过简单的木桶模型分析,我们可以初步得出结论:主流的Layer2安全模型中,按照重要程度/基础程度,可以进行如下排序:
1. 合约/官方桥的控制权限是否被合理分散
2. 是否有抗审查的提款功能
3. DA层/数据发布形式是否可靠
4. 是否在Layer1上部署了可靠的欺诈证明/有效性证明系统
当然,我们并没有对闪电网络/状态通道及ICP生态的ckBTC、铭文索引协议等方案进行分析,因为它们与典型的Rollup、Plasma、Validium或客户端验证方案存在较大差异。由于时间关系,我们还难以对其安全性与风险要素进行审慎的评估,但考虑到它们的重大意义,日后相关的评估工作必将如期进行。
同时,对于铭文索引协议是否该被看作Layer2一事,诸多项目方之间存在严重的分歧,但毋论Layer2定义之事,铭文索引协议等新事物为比特币生态带来了充分的技术创新,并终将迸发出巨大的活力。