#zk-snarks #commitment

无std ark-marlin

Marlin预处理zkSNARK库

2个不稳定版本

0.3.0 2021年6月7日
0.2.0 2021年3月25日

#2399 in 密码学

Download history 193/week @ 2024-03-15 159/week @ 2024-03-22 184/week @ 2024-03-29 96/week @ 2024-04-05 109/week @ 2024-04-12 111/week @ 2024-04-19 101/week @ 2024-04-26 94/week @ 2024-05-03 84/week @ 2024-05-10 90/week @ 2024-05-17 85/week @ 2024-05-24 85/week @ 2024-05-31 53/week @ 2024-06-07 71/week @ 2024-06-14 67/week @ 2024-06-21 31/week @ 2024-06-28

230 每月下载量
14 个crate(8个直接) 中使用

MIT/Apache

120KB
2K SLoC

Marlin

marlin 是一个Rust库,它实现了一个

针对R1CS的预处理zkSNARK
具有
通用和可更新的SRS

此库最初是作为Marlin论文的一部分开发的,并遵循MIT许可证和Apache v2许可证发布(见许可证)。

警告:这是一个学术原型,特别是尚未经过仔细的代码审查。此实现尚未准备好用于生产使用。

概述

具有预处理功能的zkSNARK实现了任意计算的简洁验证,而不仅仅是结构化计算的验证。非正式地说,在离线阶段,可以预处理所需的计算以生成其简短摘要;随后,在在线阶段,可以使用此摘要来检查与此计算相关的任何数量的参数。

此库中的预处理zkSNARK依赖于结构化参考字符串(SRS),它包含论证系统生成/验证参数所需的系统参数。此库中的SRS是通用的,这意味着它支持(确定性)预处理任何给定大小限制的计算。SRS也是可更新的,这意味着任何人都可以向其中贡献新的随机数份额,这有助于实际部署。

此库中的构造遵循Marlin论文中引入的方法,通过结合两个成分获得具有通用和可更新SRS的预处理zkSNARK

  • 一个 代数全息证明
  • 一个 多项式承诺方案

第一种成分是作为本库的一部分提供的,是一种高效的R1CS(许多论证系统支持的算术电路可满足性的推广)代数全息证明。第二种成分来自poly-commit。下面提供了评估细节。

构建指南

该库在Rust编译器的stable工具链上编译。要安装Rust的最新版本,首先按照这里的说明安装rustup,或者通过您平台的软件包管理器。安装完rustup后,通过执行以下命令安装Rust工具链

rustup install stable

之后,使用cargo(Rust的标准构建工具)构建库

git clone https://github.com/arkworks-rs/marlin.git
cd marlin
cargo build --release

该库包含一些单元和集成测试。使用以下命令运行这些测试

cargo test

最后,该库使用了用于打印执行时间详细跟踪的剖析基础设施。要启用此功能,请使用以下命令进行编译:cargo build --features print-trace

基准测试

以下所有基准测试都是在ark-bls12-381库中实现的BLS12-381曲线上进行的,且激活了asm功能。基准测试在一台搭载3.0 GHz Intel Xeon 6136 CPU的机器上运行。

与Groth16的运行时间比较

以下图表比较了Marlin索引器、证明者和验证算法在单线程执行中的运行时间,与在groth16中实现的Groth16(预处理zkSNARKs在R1CS上的当前最佳状态)算法的运行时间。我们评估Marlin的算法,当实例化为[CHMMVW20]中的PC方案(表示为"M-AHP w/ PC of [CHMMVW20]"),以及[MBKM19]中的PC方案(表示为"M-AHP w/ PC of [MBKM19]")时。

Indexer Prover

Verifier

多线程性能

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

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] PC的Marlin AHP 880
带有[MBKM19] PC的Marlin AHP 784
[Groth16] 192

许可证

您可以选择以下任一许可证来许可此库。

除非您明确表示,否则您提交给此库的任何贡献都将根据上述许可证(如Apache v2许可证中定义)双重许可,没有任何额外的条款或条件。

参考文献

Marlin:具有通用和可更新SRS的前处理zkSNARKs
Alessandro Chiesa,Yuncong Hu,Mary Maller,Pratyush Mishra,Psi Vesely,Nicholas Ward
EUROCRYPT 2020

致谢

本研究得到了以下支持:工程与物理科学研究委员会(EPSRC)的资助;谷歌教师奖;加州大学伯克利分校的RISELab;以及以太坊基金会和Interchain基金会的捐赠。

依赖项

~5–16MB
~179K SLoC