30 个版本 (7 个破坏性更新)
0.8.0 | 2022年2月11日 |
---|---|
0.7.9 | 2021年8月15日 |
0.7.6 | 2021年7月31日 |
0.2.1 | 2021年3月14日 |
#61 in #operating-systems
每月 247 次下载
在 15 个 crate 中使用 (3 个直接使用)
3.5MB
67K SLoC
snarkvm-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(实现于groth16
的R1CS特定SRS的预处理zkSNARK的当前最佳状态)相应算法的运行时间。我们评估了Marlin的算法,当实例化为来自[CHMMVW20]的PC方案(表示为“M-AHP w/ PC of [CHMMVW20]”),以及来自[MBKM19]的PC方案(表示为“M-AHP w/ PC of [MBKM19]”)时。
多线程性能
以下图表比较了当使用来自[CHMMVW20]的PC方案(左)和来自[MBKM19]的PC方案(右)执行时,Marlin证明者的运行时间。
证明大小
我们比较了Marlin与Groth16的证明大小。我们使用来自[CHMMVW20]和来自[MBKM19]的PC方案实例化Marlin SNARK。
方案 | 以字节为单位的证明大小 |
---|---|
Marlin AHP with PC of [CHMMVW20] | 880 |
Marlin AHP with PC of [MBKM19] | 784 |
[Groth16] | 192 |
参考论文
Marlin:具有通用和可更新SRS的预处理zkSNARK
Alessandro Chiesa,Yuncong Hu,Mary Maller,Pratyush Mishra,Noah Vesely,Nicholas Ward
EUROCRYPT 2020
依赖项
~4–16MB
~167K SLoC