1 个不稳定版本
0.8.0 | 2023年11月22日 |
---|
2051 在 密码学 中排名
134 每月下载量
在 3 个crate中(2 个直接) 使用
66KB
983 行
lox-zkp:Lox使用的Schnorr证明(更新版)工具包
背景
此crate最初作为dalek-cyptography
的一部分创建,然后被fork到zkcrypto
,并更新以包括与zkcrypto的
zkp
crate兼容的dalek-cryptography
依赖项的fork。这些fork已经与上游的dalek-cryptography
crates不同步,这导致了依赖于zkp
和dalek-cryptography
crates的项目(如Lox)在依赖最新依赖项时出现不兼容性。此crate出于以下3个原因创建
- 将
zkp
crate与dalek-cryptography
依赖项更新 - 解决zkp crate中的一个问题
- 使能够通过具有正常工作的zkp依赖项将额外的lox crate发布到crates.io。
此crate具有使用ristretto255群实例化的Schnorr样式零知识证明的工具包。
它提供两个级别的API
-
一个基于
define_proof
宏的高级、声明式API,该宏提供了一个嵌入式DSL,用于以Camenisch-Stadler样式指定证明语句define_proof! { vrf_proof, // Name of the module for generated implementation "VRF", // Label for the proof statement (x), // Secret variables (A, G, H), // Public variables unique to each proof (B) : // Public variables common between proofs A = (x * B), // Statements to prove G = (x * H) }
这扩展为一个包含证明、验证和批量验证实现的模块。证明使用常时间实现,证明具有通过Serde导出的(内存安全)序列化和反序列化实现。
-
一个受Bellman启发的低级、命令式API,它为Schnorr样式语句提供约束系统。这允许在运行时可编程地构造证明语句。高级
define_proof
宏扩展为对低级API的调用。低级API包含在toolbox
模块中。
示例
如何使用API的示例可以在库的tests
目录中找到。
目前,示例包括
-
从CMZ'13指定的“具有10个隐藏属性的匿名凭证演示”证明。根据后端选择,生成的实现比该论文中报告的基准数字快20到40倍。
-
基于转录的签名和自动生成的VRF构造。这包括使用Merlin博客文章中描述的在线交互式组成示例来提供与对手方的链式签名。
-
使用底层约束系统API的示例。
使用和功能
要启用define_proof
宏,按照如下方式导入crate
#[macro_use]
extern crate zkp;
夜间功能
nightly
功能启用特定于夜间的功能。构建文档时需要此功能。
转录调试
debug-transcript
功能用于开发和测试,并打印出输入证明转录的数据日志。
自动生成的基准测试
define_proof
宏为生成的证明语句构建基准测试,但由于这些是在客户端crate中生成的(宏展开发生的地方),因此需要额外步骤才能启用。
要启用crate中的生成基准测试,请执行以下操作:
- 将
bench
功能添加到crate的Cargo.toml
; - 将
#[cfg_attr(feature = "bench", feature(test))]
添加到crate的lib.rs
或main.rs
,以启用Rust的仅夜间基准测试功能。
警告
此实现尚未准备好用于生产使用
虽然我预计1.0版本将主要与当前代码相同,但目前对证明没有稳定性保证,因此不应部署。
依赖关系
~2.3–3.5MB
~79K SLoC