科普 | ZK rollup 与 Validium 对比
最近,DeversiFi 上线了由 StarkEx 交易引擎支持的新版本交易所。这是一项令人震惊的技术成果,可以大幅提高密码学货币交易所的安全性。它还标志着一个历史性转折点:这是 STARKs(不带受信任初始化设置的简洁化零知识证明) 首次在生产环境中得到应用。
我们先来了解一下背景信息。StarkEx 采用的是二层扩容方案 Validium ,所有交易的有效性都强制使用零知识证明技术来证明,数据可用性则被放到了链下。如此可以防止 Validium 的资金被盗,因为每次从某个用户的账户进行价值转移都必须得到该用户的授权。
Validium 的机制与 zkRollup 非常相似,唯一的区别在于 zkRollup 具备链上数据可用性,而 Validium 仅具备链下数据可用性。因此,Validium 的吞吐量会高得多—— 但这是有代价的。
StarkEx Validium 的运营者可以冻结用户资金
“可以摧毁某个事物的人必定控制着它。”——《沙丘》(弗兰克·赫伯特著)
由于不具备 zkRollup 那样的链上数据可用性保障,Validium 的运营者(或者更具体一点,数据可用性管理者)可以拒绝让任何用户转移资金。
具体做法是:运营者在用户不知情的情况下对其默克尔状态进行小小的改动。由于缺少这一信息,用户便无法创建默克尔证明来证明他们对账户的所有权。
如上图所示,如果运营者篡改了账户 d3 ,账户 d1 的所有者在生成账户所有权证明时就会缺少节点 m 的信息。
有没有什么方法可以防止 Validium 中的数据扣留攻击?这个问题在 2016 年 Plasma 的概念诞生时就已经经过了广泛讨论,并且最终得出了 zkRollup 这一研究成果。如果我们试图通过非 Rollup 方案以免信任的方式来保障数据可用性,这会导致 Validium 丧失大部分竞争优势。
虽然这一问题无法得到彻底解决,但是 StarkEx 通过引入许可型数据可用性委员会缓解了这一问题。每一次状态更新必须由达到特定人数的 DAC 成员签名,以此表示 DAC 确实收到了数据。在 StarkEx 中,DAC 有 8 位成员(成员人数太多会影响整个系统的活性)。他们都是受到法律监管的知名组织。按理来说,他们不太可能会滥用自己的权力。
矛盾的是,知名度高、信誉良好、处在强大法律权威监管之下正是这些组织的致命弱点。一种可能发生的失控情况是:运营者被要求执行 KYC/AML(了解客户身份信息/反洗钱)措施,并且有义务冻结有 1 万美元交易史的账户内的所有资金(可能会永远冻结)。
我们挖得越深,就会越发觉得有趣。StarkEx 设有验证者合约升级机制。该机制允许运营者立即(没有延迟)将新一个新的验证者添加到验证者合约上。这一机制不能让任何旧逻辑失效——例如,你不能删除用户签名检查,但是它能添加其他限制条件(就 Solidity 而言,你可以将这些限制条件理解成 require() 语句)。
这是一个很棒的安全性功能:如果在 StarkEx 的 STARK 电路逻辑中发现有任何限制条件缺失,StarkEx 可以在不引入任何新漏洞的情况下迅速修复。但是,这个功能可以被滥用,成为隐藏的审查后门。简而言之,StarkEx 运营者随时都可以在合约逻辑上部署扩展程序,在不预先警告用户的情况下引入黑名单。这一点在 StarkEx 的文档上没有明确说明,但是执行新规则似乎不需要经过 DAC 的同意。
如果你将 StarkEx 看作是一个完全去中心化的交易协议,那其实是不太对的。你就想象成 Vitalik Buterin 拥有一个可以立即冻结任意以太坊账户的开关就好了。另一方面,如果你将 StarkEx 视为密码学货币交易所的安全增强功能(创建者当然会这么做),那就很对,没啥问题。
StarkEx Validium 的运营者可以抢走用户资金
我们来拓展一下思维实验。假设出于某种原因(很有可能是运营者无法控制的情况),一些用户的资产现在被冻结了。用户在 StarkEx 中的资金能够被没收吗?
事实上,这种情况是有可能发生的。
就像其他很多密码学项目一样,StarkEx 也实行最先进的升级机制。在新版本部署之前,用户会提前 28 天收到通知,不喜欢这个版本的用户可以退出。
那些资产已经被冻结的用户除外。
宽限期结束后就可以部署新的合约逻辑,被冻结的资金会交由指定参与方托管。遗憾的是,被冻结资金的用户根本没法反抗。
还有合理的担忧是,升级通知期本身可能不够久,不足以让每个不同意升级版本的用户及时退出(也就是所谓的 “挤兑退出” 情况)。不过,这个问题是常见的合约可升级性问题,不是 Validium 特有的。
2020 年 7 月 6 日版本更新:Justin Drake 谈 Validium 上的密码学经济攻击
在后续讨论中,Justin Drake 指出 Validium 的数据可用性方法可能会导致意料之外的攻击界面:如果数据可用性委员会(DAC)中有一定数量的成员的签名私钥泄漏(这些私钥需要在线、保证能响应,因此保护起来非常困难),攻击者可以将 Validium 转化成只有他们自己知道的状态,从而冻结所有资产,然后对用户进行勒索。
从理论上来说,合约升级机制应该可以减轻这种攻击。Validium 的运营者可以启动新版本的部署,等到 28 天的升级通知期过后,状态就会还原到上一个已知状态。资金会被锁定一个月(这当然会产生很高的成本),但是如果 DAC 拒绝协商,攻击者一分钱都拿不到。
然而,事实证明,攻击者有办法强迫运营者在损失所有资金还是让攻击者双花之间做出决定。我们可以通过以下这个例子来阐述:
想象一下,你可以黑入 ATM 系统,并在取款完成后删除整个银行数据库。你可以只从自己的账户中取款,但是整个数据库被删除后操作细节也会丢失。
银行员工可以在一个月之内通过复杂的流程来恢复数据库。但是,由于他们不知道取款者是谁,在还原到上一个检查点之时你的账户余额也会被恢复,即,你的取款额也会被恢复!
当然了,双花的金额不能超过攻击者的账户余额。但是,也可以构建一个免信任型合约,向暗网上某个邪恶的巨鲸借到必要的资金,做到这点非常容易。这就留给我们的读者当思维练习了。
从这个攻击中,我们可以看出 Validium 的安全性模型与权威证明网络(PoA)的比较相似。事实上,PoA 网络有 20 个节点,需要超过 51% 的签名者签名,而 Validium 有 8 个节点,需要所有签名者签名。相比之下,PoA 网络比 Validium 更安全。
zkRollup 的数据可用性可以保护用户资金不被没收、审查和黑客攻击 —— 但是会降低吞吐量
只要有至少一个以太坊全节点在线,zkRollup 的用户就可以了解 rollup 的状态。
zkRollup 的具体运作方式是:对于每个 zkRollup 区块来说,改变状态所需的信息必须作为以太坊交易的调用数据提交 —— 否则,zkRollup 智能合约将拒绝进行状态转换。zkRollup 上的状态转换需要消耗少量 gas ,gas 成本会随交易数量呈线性增长。
借助手上的默克尔树数据,被审查的用户可以直接将自己的资金从主网上的 zkRollup 合约中取出。他们只需要提供默克尔证明来证明他们对账户的所有权即可。因此,链上数据可用性可确保没人(包括 zkRollup 运营者在内)可以冻结或没收用户的资金。
链上数据可用性可能会限制吞吐量 —— zkRollup 目前在以太坊上每秒可以处理的交易量上限是 2000 ,而 StarkEx Validium 声称其每秒交易处理量可达 9000 + 。这一差异在决定两种技术的应用场景上起到了重要作用。例如,zkRollup 尤其适用于增加去中心化密码学支付的可扩展性(VISA 的全球平均每秒交易处理量为 2000 )以及对免信任性有严格要求的不可篡改型智能合约;另一方面,Validium 可能更适用于传统的高频交易或对免信任性需求较低的游戏。
结论
我们已经阐述了 zkRollup 和 Validium(StarkEx)在运作上的相似之处,以及二者的主要区别(链上和链下数据可用性)对于我们如何理解它们以及在哪些应用场景下使用它们的重要性。通过比较二者的不同,我们可以看出 zkRollup 是完全免信任的去中心化扩容协议,而 Validium 在吞吐量和风险预测方面更像是托管式 PoA 系统,不过它在安全性上有了很大的提高。
每一项降低信任需求并增强用户对资产控制权的技术发展都是在推进个体赋能。为了继续前进,我们总是需要做出权衡取舍。
然而,在密码学社区中,越来越多的人认为,区块链技术已经过了 “不要作恶” 的阶段,现在正是往 “无法作恶” 阶段迈进之时。我们可以通过自主托管、抗审查性、隐私性和消除单点故障来实现这一目标。这些想法构成了我们正在努力构建的系统的基础价值观。
完全免信任型可扩展性的时代已经到来。让我们等待 Matter Labs 的官宣吧!
感谢 Lasse Clausen、Christopher Heymann、James Prestwich、John Adler、Haseeb Qureshi、Alex Evans 和 Howard Wu 对本文的校对和宝贵意见。
Scan QR code with WeChat