用木桶理论拆解比特币及以太坊的Layer2安全模型与风险指标
原文标题:《用木桶理论拆解比特币/以太坊 Layer2 安全模型与风险指标》
原文作者:Faust & 雾月,极客 web3 / 顾问:Kevin He(@0xKevinHe),新火科技技术 VP
导语:美国管理学家劳伦斯·彼得曾提出「木桶理论」,该理论认为,一个系统的整体性能,被其最薄弱的部分所限制。换言之,一个木桶能装多少水,由它最短的那块木板决定。这个道理虽然简单,却又常被忽视。以往对 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 定义之事,铭文索引协议等新事物为比特币生态带来了充分的技术创新,并终将迸发出巨大的活力。