1 个不稳定版本

0.8.0 2023年11月22日

2051密码学 中排名

Download history 6/week @ 2024-03-11 3/week @ 2024-03-18 16/week @ 2024-03-25 40/week @ 2024-04-01 4/week @ 2024-05-06 6/week @ 2024-05-20 24/week @ 2024-06-03 32/week @ 2024-06-10 46/week @ 2024-06-17 32/week @ 2024-06-24

134 每月下载量
3 个crate中(2 个直接) 使用

CC0 许可证

66KB
983

lox-zkp:Lox使用的Schnorr证明(更新版)工具包

背景

此crate最初作为dalek-cyptography的一部分创建,然后被fork到zkcrypto,并更新以包括与zkcryptozkp crate兼容的dalek-cryptography依赖项的fork。这些fork已经与上游的dalek-cryptography crates不同步,这导致了依赖于zkpdalek-cryptography crates的项目(如Lox)在依赖最新依赖项时出现不兼容性。此crate出于以下3个原因创建

  1. zkp crate与dalek-cryptography依赖项更新
  2. 解决zkp crate中的一个问题
  3. 使能够通过具有正常工作的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.rsmain.rs,以启用Rust的仅夜间基准测试功能。

警告

此实现尚未准备好用于生产使用

虽然我预计1.0版本将主要与当前代码相同,但目前对证明没有稳定性保证,因此不应部署。

依赖关系

~2.3–3.5MB
~79K SLoC