一个易于理解的零知识证明定义:
你在上小学。老师是Verifier,而你(学生),是Prover。你如何证明你知道解二次方程的公式?那需要数学考试。
老师会随机给你10道与二次方程有关的问题,如果你已经掌握了,你可以全部作答。在这个过程中,你不会记住或写下精确的公式,但老师可以简单地验证你对二次方程的理解。
事实上,这就是Tartaglia and Cardano 两人争论谁是形如 x 3 + b x = c x^3+bx=c x3+bx=c三阶方程解决方案的方面人。两人都不想告诉对方其各自的共识,但是通过随机问题集,在不泄露其各自knowledge的情况下很容易进行验证。
零知识证明的用途是什么?其用途是,整个过程节省了算力,压缩了区块链上的空间,同时也保留了隐私,符合区块链的不可信任和加密性质。
区块链领域的“zk”通常并不是真正的零知识证明,但是通常是有效性证明(validity proof)。
在当前的区块链世界中,zk可以说是最前沿和最佳的解决方案,用于扩容(没有zk的有效性证明validity proof)和隐私(真正的zk)。zk广泛应用于Tornado.cash、ZCash、zkSync、zk.money、Filecoin和Mina。
当前的技术方案主要分为2大类:
STARK中的“S”代表的是Scalable,意味着待证明的statement具有repeated structure。
而SNARK支持任意电路,可对电路进行预处理来实现succinct proof。
SNARK的技术实践更占主导地位,STARK在生产中主要被StarkWare大规模采用。以下是它们之间的比较:
就meme而言,STARK要优于SNARK(STARK有:权力的游戏、漫威宇宙、星球大战和星际迷航等)。
若说以太坊2.0的未来是SNARK,那么以太坊3.0的未来将是STARK。总的来说,STARK的优势主要有:
但是,STARK生成的proof要更大一些。由于类似WASM的一些限制,在构建时可能需要额外的操作(但本例使用SNARK)。作为Plonky2的一部分,Mir之前在Starky中进行了一次AIR-based STARK 实践(Plonky2和Starky之间的关系很复杂……)。不过个人认为,可以通过各种方法优化STARK proof大尺寸的问题,但算法本身的时间复杂度很难进一步压缩。
这些零知识证明技术可结合使用来构建更强大的应用。如,Polygon Hermez使用SNARK来验证STARK的正确性,从而当该proof finally settled时可减少gas费。
总之,SNARK和STARK两者都是很赞的零知识证明技术,各有优势,结合潜力更大。
之前提到的Tornado.cash 和 zk.money均为仅支持transfer操作的零知识证明应用,并不支持通用计算。类似地,这些应用程序只有比特币的功能,远不及以太坊(Ethereum)的图灵完整性和DApp生态系统(比特币上的智能合约并不适用)。
zkVM是一种虚拟机,通过零知识证明来保证安全和可验证的可信度。zkVM只是一台机器——输入旧的状态和程序,并以可信的方式返回新的状态。它允许所有应用程序都被赋予零知识证明的超级能力。
Miden在ETH Amsterdam的演讲 以一张图很好的解释了zkVM究竟是什么:
zkVM的优势有:
zkVM的劣势有:
主要有3种类型的zkVM,括号内为其相应的指令集:
以下为这些zkVM类型的对比,源自 Miden在ETH Amsterdam的演讲 :
大多数的零知识证明开发生态都支持开发者使用Cirom库(和snarkyjs)或其它新创建的语言(Leo或Cairom,有一些奇怪的限制)来进行zk DApp开发,但是,这并不如在以太坊上使用Solidity来得直观易学。
此外,还有很多项目,如zkSync/Scroll,或Polygon旗下的多个项目,都试图在开发自己的zkEVM或zkVM。
EVM全称为Ethereum virtual machine,可认为是运行智能合约的执行环节。
多年来,不同的区块链都试图是EVM兼容的,以可访问以太坊的开发生态,为此,派生出了EVM兼容性、等价性、以及一些其它定义:
zkEVM定义为:
EVM兼容的且零知识证明优化的虚拟机,可保证程序、操作、输入和输出的正确性。
为实现通用计算的zkEVM,主要有2大困难需解决:
个人认为,zkEVM的存在是对以太坊生态的翻新和修补并增加其繁荣的一种方式,而zkVM的存在不一定是对以太坊的增强,但也具有更大的潜力。
StarkNet的Cairo VM可能不是完美的zkVM,但它不仅仅是对EIP层级的功能扩展,可想像性要多于EVM或zkEVM:
相比于zkEVM,zkVM:
不过zkVM的一个小而致命的缺点在于,若zkVM不支持(Solidity语言层级的)EVM兼容性,则其很难像EVM那样拥有完善而成熟的Web3开发生态。
zkVM可能是更大的趋势,允许EVM的垂直优化成为EVM生态系统的水平扩展,超越了EVM的限制。
如果有一个通用的zkVM,它支持所有编程语言来编写智能合约,不仅仅是Solidity,不仅仅是Cairo,而是Rust,C++,Go,在零知识证明的情况下运行,会怎么样?(Stellar尝试过,但是失败了)
有zkVM了,为何还需要zkEVM?
现有的zkVM,如:
Nervos具有RISC-V VM,但其并未使用零知识证明技术。
优化的解决方案为:构建WASM或RISC-V zkVM,可完美支持Rust/Go/C++,甚至Solidity(zkSync可帮助实现)。若存在这样的通用zkVM,那它将是zkEVM杀手。
Web3的开发者仅占所有开发者的约0.07%,这就意味着Solidity开发者的数量要低于0.07%,Cairo和Leo开发者的数量更少。而完美的zkVM目标几乎是100%的开发者,任何开发者可 以 任何语言来获得完美的零知识运行环境。
如果Web3和Crypto可统治世界,我不认为EVM生态系统会占据所有开发者的100%,而是所有开发者会慢慢地转变为Web3和Crypto开发者。这就是通用zkVM的优点。
Native zkEVM为区块链的未来。
通用zkVM为Web3的未来。
[1] zk, zkVM, zkEVM and their Future
[2] Zero-Knowledge Proofs: STARKs vs SNARKs