ZK-Rollups:基于零知识证明的 layer 2 扩容方案

与欺诈证明[ 1 ]不同, Zk-Rollup 采用的是有效性证明,利用零知识证明确保交易的有效性,在数据上链前就通过零知识证明对数据进行验证,先证明这个交易是没有问题的,然后再把更新后的状态,对交易的证明以及压缩后的交易数据传到主链上,以此确保对应数据在链上的有效性和资金的安全性。

Zk-Rollup 的安全性依赖于密码学原理,它的一个主要优点是不需要挑战期[ 2 ]。

目前 Zk-Rollup 的通用计算能力较差,已经上线的版本大多只能实现转账和特定的应用场景,对开发人员不友好。现在有些最新的 Zk-Rollup 方案研究与通用 EVM 兼容的L2扩容方案,如果成功的话意义还是很大的。

Zk-Rollup 更符合加密世界的风格,通过密码学原理来证明交易的正确性而不是等着别人举报不正确的交易。

零知识证明

零知识证明是密码学概念,也被人称作零泄密证明,由证明者和验证者组成。

证明者需要运行在专门的硬件上,是去信任化的,也就是说系统的安全性不需要假设证明者是值得信任的,或者说假设它们所运行的硬件是值得信任的,因为数学上没有办法伪造假的零知识证明。

验证者不需要专门的硬件,任何节点都可以运行,通俗地说,证明者从系统的输入中创建证明,验证者检查确认证明者上传的是真实的计算结果而不需要重新再计算一遍。

用一句带有哲学意味的话来说就是,我如果想证明某个比特币账户是我的,我想要证明我知道这个账户的私钥,但是不能够把私钥告诉给别人。(私钥签名,公钥验证)    

zk-SNARK

区块链中用的比较多的是 zk-SNARK,这是一种特殊的零知识证明,要求是非交互性(之前零知识证明验证比特币的例子就不是非交互性,要改成非交互性的话就是我发布一个转账交易,把账户上的币转到另一个账户就可以了,这样所有节点都可以验证这个比特币账号是我的,对于区块链场景来说,证明者只需要把消息发布到区块链上,所有节点都可以验证,不需要与证明者交互,这种验证者叫做 Public Verifier)和简洁性(只需要几百个字节,即使原始输入很大,生成证明也是很小的)。    

缺点是证明者产生证明的工作量是很大的,转账的时候发起一个匿名的转账交易需要几秒钟的时间,而验证这个交易的合法性只要几毫秒。

zk-SNARK 需要进行信任设置,要求初始化时随机产生一组所有成员共享的公共参数,初始化时用到的随机源必须要销毁掉,如果泄露的话安全体系就崩溃了,有恶意的攻击者可以制造出假的证明,为了避免这个风险,zk-SNARK 的初始化过程是多方参与的,只要其中任何一方销毁了初始化时用到的随机源,系统就是安全的。

zk-SNARK 在区块链中的应用

    

代表性应用一个是 Zcash,另一个是 Filecoin,这两个项目并不是L2,这里只是用它们说明一下 zk-SNARK 的应用场景。

Zcash 用 zk-SNARK 来隐藏交易信息,交易双方的身份和交易金额,Zcash 可以在不知道 sender.address、receive.address、iuput.value、out.value 的情况下验证交易的合法性。这跟比特币是很不一样的,比特币的每笔交易都要说明币的来源,说明这个币是从之前的哪个交易里来的,这样才能证明我们花到的这个币是合法的,不是凭空捏造出来的。对于 Zcash 来说只要通过数学的方法证明你花掉的币是当前系统中存在的某个合法的币就行,不用说明具体是哪一个,这样就没法追踪币的来源了。

Filecoin 是迄今为止部署规模最大的 zk-SNARK 网络,每天生成几百万个零知识证明。Filecoin 的矿工通过存储数据来获得出块奖励,需要定期证明它们在存储所承诺的数据,这些矿工是 zk-SNARK 协议里的证明者,需要提供两类证明,复制证明[ 3 ]和时空证明[ 4 ]。

复制证明只有一次,当用户和存储提供者最初达成存储交易的时候,存储提供者需要证明它们确实存储了用户的数据,时空证明需要定期提供,用于证明存储提供者随着时间的推移继续存储原始数据,存储提供商首次同意为客户存储数据时需要质押相应的代币 File,如果在协议期间提供商未能提供时空证明,将会受到处罚,可能失去质押的 File 代币。

zk-SNARK 技术的优点在于生成的证明很短,节省网络带宽,验证速度快,Filecoin 并没有实现真正意义下的隐私计算,zk-SNARK 只是用于 Filecoin 的共识机制,并没有用于用户数据,到目前为止几乎所有的 zk-SNARK 电路都是专用集成电路,也就是根据不同的应用专门定制的零知识证明技术,以太坊的智能合约是图灵完备的,zk-SNARK 技术目前还无法实现通用智能合约。

ZK-Rollup 代表项目    

ZK Rollup 有两个代表性的项目,zkSync 和 STARKWARE。

zkSync

zkSync 使用 zk-SNARK 的零知识算法,安全性依赖于初始化信任设置(由包括以太坊创始人V神在内的一些参与者一起制定一个随机数,要求至少有一个参与者是诚实的,那么这个系统才可以被证明是安全的)。

在 EVM 兼容方面,zkSync 有一个编译器可以把智能合约转换成 zkEVM 支持的操作码来实现 Solidity 兼容。  

在数据可用性上,zkSync 提供了两种数据可用性方案,用户可以选择将数据上链(也就是存储在L1的链上或者说存储在以太坊上以获得更高的安全性,同时需要支付比链下高一些的 gas 费),用户也可以选择将数据存储在链下(可以更大限度地扩容,进一步节约 gas 费,但是会牺牲一部分去中心化和安全性)。也就是说 zkSync 同时支持链上,链下两种数据存储模式,有人认为链下数据不是真正意义上的L2,因为L2要保证和L1一样的安全性,如果数据存储在链下,可用性跟L1是有差别的,如果存储在链下的云服务提供商处,那么跟去中心化的理念背道而驰,如果存在 IPFS 那样的去中心化存储里,那么仍然没有办法保证数据的可用性(存在 IPFS 里跟存在以太坊上是不一样的),以太坊比特币这样的区块链,保存在上面的数据是不会丢失的,但是 IPFS 并不保证不可篡改性。

StarkWare

目前市场上最主流的两种生成零知识证明的系统分别是 zk-SNARK 和 zk-STARK。

zk-Sync 采用的是 zk-SNARK,StarkWare 是基于 zk-STARK 证明的密码学技术。zk-STARK 这项技术由 StarkWare 团队发明,可以看作是 zk-SNARK 技术的升级版本,能够让区块链具备更强的可扩展性,采用该算法的区块链底层允许开发人员将链上的交易数据以及部分数据的存储转移到链下来解决,链下批量处理后的数据可以打包生成一个 STARK 证明,将证明发送到链上后可以供任何利益相关方验证真伪。STARK 跟 zk-Sync 使用的 SNARK 相比有三个主要优势,第一个优势是透明性,指这个系统运行无需信任设置,而 SNARK 证明是需要进行信任设置的,使用 zk-SNARK 必须进行强制性的初始信任设置,如果初始设置的参与方是不诚实的,那么可以创造出虚假证明伪造交易,而 zk-STARK 不需要外部的信任设置,它通过随机公共验证可以防止任何一方破坏或修改参数,这个优势有多少实际价值还不清楚。(肖老师认为这个优势意义不大)    

第二个优势是扩展性, StarkWare 宣称 zk-STARK 降低了计算复杂度,生成 STARK 证明的速度比 SNARK 更快,不过这个说法有一定的争议。

第三个优势是抗量子攻击,理论上说 zk-STARK 使用抗冲突的哈希函数提高了抵御量子攻击的能力,这个优势意义不大。

STARK 的劣势在于它的技术远没有 SNARK 成熟,普及率也不行,StarkWare 这个公司的优势在于技术团队极其小,包含 STARK 和 SNARK 这两个技术的发明人,缺点就是社区生态还差得很远,这也跟 STARK 的普及率不足有关。

另外一个问题是 EVM 的兼容性,以太坊的 EVM 是图灵完备的,而 STARK 如果要实现图灵完备就很难做到跟 EVM 兼容,以太坊的智能合约语言 Solidity 要转换成 STARK 兼容的格式是很复杂的,所以说 StarkWare 团队创建了一种特定的编程语言 Cario 来运行由 STARK 支持的程序,Cario 这种语言的学习成本比较高,而且不兼容 EVM,导致以太坊上现有的 Dapp 很难迁移过来,这也是 StarkWare 生态不容易做起来的原因之一。从另一个方面来看,采用一门全新的语言也有好处,没有历史包袱,可以实现一些以太坊无法做到的功能。

在数据可用性方面,StarkWare 提供了两种数据可用性方案,StarkWare 有一个 Voluation 系统,允许用户自主选择每笔交易是采用链上数据可用的 Rollup 方案还是采用链下数据可用的 validium 方案。

validium 方案的数据可用性委员会由一些有声望的加密实体组成,从数据安全性角度来讲,数据存储在链上是最安全的,缺点是代价比较高,适合资金量比较大,实时性要求不高的情况;数据存储在链下会牺牲一定的安全性,优点是代价小,适合资金量比较小,实时性要求高的应用场景,比如说:GameFi。    

名词解读

欺诈证明:在分布式系统中,欺诈证明用于检测和纠正不正确的状态更新,通常在 Optimistic Rollups 中使用,假设大多数操作是正确的,但提供了一种机制来挑战和纠正错误的操作。

挑战期:挑战期是一个指定的时间窗口,允许验证者检查并确认状态更新的正确性,这在确保系统的安全性和公平性方面至关重要。

复制证明:复制证明表明某个数据在某个时间点确实被存储在指定的位置,并且复制了多份。

时空证明:时空证明是一种结合空间(存储)和时间(持续存储)的证明机制,表明某个数据在一段时间内持续被存储。

结语

2021 年 1 月份,以太坊创始人V神说道:"短期内 Optimistic-Rollups 会因为 EVM 的兼容性胜出,ZK-Rollups 更有可能在一些简单的交易之类的用例中胜出,从中长期来看,随着 zk-SNARK 技术的改进,ZK-Rollups 最终会赢得所有的用例。"

链源科技是一家专注于区块链安全的公司。我们的核心工作包括区块链安全研究、链上数据分析,以及资产和合约漏洞救援,已成功为个人和机构追回多起被盗数字资产。同时,我们致力于为行业机构提供项目安全分析报告、链上溯源和技术咨询/支撑服务。

感谢各位的阅读,我们会持续专注和分享区块链安全内容。