2个不稳定版本
0.3.0 | 2021年6月7日 |
---|---|
0.2.0 | 2021年3月25日 |
#2399 in 密码学
230 每月下载量
在 14 个crate(8个直接) 中使用
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]")时。
多线程性能
以下图表比较了Marlin证明者在执行[CHMMVW20]中的PC方案(左)和[MBKM19]中的PC方案(右)时,使用不同数量的线程的运行时间。
证明大小
我们比较了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