zk-SNARK并不是一种具体的算法,准确的说,它是一个协议,那就意味着它有多种实现,这些实现统称为 zk-SNARKs,注意这个s。因此,当我们提到 zk-SNARKs的时候,代表着属于zk-SNARK系的各种算法集合
作为程序员,关键的是需要选择可用的zkSnark库,那么有哪些主要的zkSnark实现呢:
Groth16
这个是比较传统的zkSnark算法,也就是需要trusted setup的算法,比如我们查看rust的zkSnark库时,https://crates.io/crates/zksnark,会发现它标注了:
zksnark v0.0.2
An implementation of zkSNARK using groth16
它具有高效的证明生成和验证性能,并被广泛应用于许多区块链和加密项目中。成了很多zkSnask算法的对标,人们常常和它进行比较,评价算法的优劣。
Fractal
Fractal 是一种具有高度优化的 SNARK 算法,特别适用于处理大规模计算。它利用多项式插值和快速傅里叶变换等技术,实现了高效的证明和验证。
Halo&Halo2
这个算法是一种基于递归证明的 SNARK 构造,它通过递归拆分和组合解决证明大小随复合次数线性增长的问题。Halo 具有高效的证明和验证性能,并在复杂计算和大规模应用中表现出色。
被PSE和scroll项目使用。
Marlin
Marlin 是一种基于多项式插值和低次多项式抽样的 SNARK 算法。它通过使用低次多项式来近似高次多项式,实现了紧凑且高效的证明
Plonk
PLONK(Permutation-Based Linear and Non-linear Knowledge)是一种基于置换的 SNARK 构造。它使用置换技术来减少证明的大小和验证的复杂度,具有紧凑且高效的特性。
需要注意的是,并不是所有zkSnark算法实现,都像Groth16一样需要trusted setup。
除了zkSnarks系列,还有其他的零知识证明系统,比如Bulletproofs,Sonic, zkStark等,百花齐放。
各种算法之间大致的对比,引用一个图供参考,并无权威结论:

Ref
- https://medium.com/coinmonks/comparing-general-purpose-zk-snarks-51ce124c60bd
发表回复