1.1.4 |
|
---|
#73 in #zk
2MB
38K SLoC
snarkos-marlin
marlin
是一个Rust库,实现了
对R1CS的预处理zkSNARK
具有
通用和可更新的SRS
此库最初是作为Marlin论文的一部分开发的。
概述
具有预处理功能的zkSNARK可以在任意计算中实现简洁验证,而不仅仅是结构化计算。非正式地说,在一个离线阶段,可以预处理所需的计算以生成其简要总结;随后,在在线阶段,此总结可用于检查与该计算相关的任何数量的论据。
本库中的预处理zkSNARK依赖于一个结构化参考字符串(SRS),它包含论证系统生成/验证论据所需的系统参数。本库中的SRS是<强>通用的强>,这意味着它支持(确定性地)预处理任何给定大小限制内的任何计算。SRS也是<强>可更新的强>,这意味着任何人都可以为其贡献新的随机数份额,这促进了现实世界的部署。
本库中的构建方法遵循在Marlin论文中引入的方法,通过结合两个要素获得具有通用和可更新SRS的预处理zkSNARK
- 一个<强>代数全息证明强>
- 一个<强>多项式承诺方案强>
第一个要素作为本库的一部分提供,是R1CS(许多论证系统支持的算术电路满足性的推广)的效率代数全息证明。第二个要素来自poly-commit
。有关评估细节,请参阅Marlin论文。
性能分析
这个库使用配置了性能分析基础设施,可以打印执行时间的详细跟踪。为了启用此功能,请使用以下命令编译:cargo build --features print-trace
。
基准测试
以下所有基准测试都是在algebra
库中实现的BLS12-381曲线上进行的,激活了asm
功能。基准测试在一台配备3.0 GHz Intel Xeon 6136 CPU的机器上运行。
与Groth16的运行时间比较
下图的图表比较了Marlin的索引器、验证器和验证算法在单线程执行中的运行时间与Groth16(在R1CS上使用特定SRS的预处理zkSNARKs的当前最佳状态)中实现的相应算法的运行时间。groth16
。我们评估Marlin的算法,当使用来自[CHMMVW20]的PC方案(表示为"M-AHP w/ PC of [CHMMVW20]"),以及来自[MBKM19]的PC方案(表示为"M-AHP w/ PC of [MBKM19]")时。
多线程性能
以下图表比较了当使用来自[CHMMVW20]的PC方案(左)和来自[MBKM19]的PC方案(右)时,Marlin的验证器在执行不同数量的线程时的运行时间。
证明大小
我们比较了Marlin与Groth16的证明大小。我们将Marlin SNARK实例化为来自[CHMMVW20]的PC方案,以及来自[MBKM19]的PC方案。
方案 | 字节大小的证明大小 |
---|---|
来自[CHMMVW20]的Marlin AHP | 880 |
来自[MBKM19]的Marlin AHP | 784 |
[Groth16] | 192 |
参考文献
Marlin:具有通用和可更新SRS的预处理zkSNARKs
Alessandro Chiesa, Yuncong Hu, Mary Maller, Pratyush Mishra, Noah Vesely, Nicholas Ward
EUROCRYPT 2020
依赖关系
~5–16MB
~182K SLoC