1. 引言
前序博客有:
- Spartan: zkSNARKS without trusted setup学习笔记
- Spartan: zkSNARKS without trusted setup 源代码解析
- Signatures of Correct Computation 学习笔记(本文称为PST承诺方案)
- Groth16 学习笔记
- ZCash bellman版本 Groth16代码解析
Testudo为Cryptonet团队开源的R1CS ZKP系统,其开源代码见:
- https://github.com/cryptonetlab/testudo(Rust)
Testudo借助Spartan+Groth16,定位为实现具有更小setup的高效SNARK(其Prover为near linear-time)方案,实际代码实现时的3个核心组件为:
- 1)sumcheck-based方案:在微软https://github.com/microsoft/Spartan的基础上,使用arkworks进行了修改,使用Groth16来验证sumchecks。
- 2)改进版的PST承诺方案:为 Signatures of Correct Computation 学习笔记 中pairing-based多变量承诺方案(即multilinear多项式承诺方案)的快速版本,具有square-root trusted setup。
- 3)Groth16层:使用Groth16来验证sumchecks。
其中:https://github.com/nikkolasg/ark-blst 中封装了支持GPU版本的快速arkworks blst库。
Testudo的主要特点为:
- 为near linear-time prover SNARK,Prover会运行:
- N \sqrt{N} N次size为 N \sqrt{N} N的multi-exps运算,对应约为 O ( N ∗ λ / log ( N ) ) O(N*\lambda/\log(N)) O(N∗λ/log(N))次group运算,其中 λ > > log ( N ) \lambda>>\log(N) λ>>log(N) for security。
- Small & Universal setup:其trusted setup具有square-root size,即:对于size为 N N N的某R1CS,其trusted setup size为 O ( N ) O(\sqrt{N}) O(N)。对于大电路来说,可将trusted setup size由GB级压缩为MB级。
- Very fast prover:以data-parallel computations为例,比现有最快的Groth16实现(即Bellperson)还要快,快约5倍。
- Small Proofs & Fast Verifier:具有constant size proofs和constant size verification time。
- Use R1CS:当前最流行的电路表达方式,从而具有如下优势:
- 使得Testudo可复用已有的R1CS代码
- 无需以不同的算术化方式重写电路
以size为
2
25
2^{25}
225的多项式为例,Testudo中所实现的multilinear多项式承诺方案要比现有的arkworks实现 快:
以size为
2
20
2^{20}
220的subcircuit重复
128
=
2
7
128=2^7
128=27次,对应size为
2
27
2^{27}
227电路约束,与size为
2
27
2^{27}
227的Bellperson R1CS约束电路性能对比为:
参考资料
[1] Protocol Labs 2023年4月5日 twitter Testudo
[2] 2023年3月博客Testudo: Efficient SNARKs with Smaller Setups