本文Hash(SHA1):9d281b7b88d436ab533d612603228ae34f224971

编号:链源Security Knowledge No.001

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

未来已来,以太坊扩容终章ZK Rollups解读

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

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

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

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

零知识证明

未来已来,以太坊扩容终章ZK Rollups解读

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

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

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

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

未来已来,以太坊扩容终章ZK Rollups解读

zk-SNARK

未来已来,以太坊扩容终章ZK Rollups解读

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

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

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

zk-SNARK在区块链中的应用

未来已来,以太坊扩容终章ZK Rollups解读

未来已来,以太坊扩容终章ZK Rollups解读

代表性应用一个是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 Rollups解读

未来已来,以太坊扩容终章ZK Rollups解读

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最终会赢得所有的用例。"

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

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