1.1.4 2020年8月27日

#73 in #zk


用于3个crate(2个直接使用)

GPL-3.0许可证

2MB
38K SLoC

snarkos-marlin

Crates.io Authors License

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]")时。

Indexer Prover

Verifier

多线程性能

以下图表比较了当使用来自[CHMMVW20]的PC方案(左)和来自[MBKM19]的PC方案(右)时,Marlin的验证器在执行不同数量的线程时的运行时间。

Multi-threaded scaling of Marlin AHP with the PC scheme from [CHMMVW20] Multi-threaded scaling of Marlin AHP with the PC scheme from [MBKM19]

证明大小

我们比较了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