2 个版本
0.1.1 | 2024年7月3日 |
---|---|
0.1.0 | 2024年5月22日 |
#1125 in 加密学
190KB
3K SLoC
Triptych
Triptych 零知识证明系统的 Rust 实验性实现。
概述
Triptych 是一种零知识证明系统,旨在作为可链接环签名使用。这种结构允许签名者针对任意验证密钥集签署消息。成功验证签名意味着签名者知道与某个验证密钥相对应的签名密钥,但不会透露是哪一个。它还会生成一个链接标签;如果任何两个已验证签名具有相同的链接标签,则它们是使用相同的签名密钥生成的。但是,无法确定与链接标签相关联的签名密钥,也无法确定相应的验证密钥。
Triptych 证明具有很好的扩展性,其大小仅以对数方式随验证密钥集的大小增加。共享相同验证密钥集的证明也可以批量高效验证以节省时间。
更正式地,设 G
和 U
为 Ristretto 群的固定独立生成元。设 N = n**m
,其中 n, m > 1
是固定参数。Triptych 证明系统协议是以下关系的 sigma 协议,其中 M
是一个包含群元素的 N
向量
{M,J; (l,r) :M[l] =r*G,r*J=U}
可以使用 Fiat-Shamir 变换来生成一个可以绑定任意消息到会话的非交互式协议。这产生了可链接环签名。
此库还支持并行证明功能。
实现说明
此实现做出了几个有见地的选择
实现尽量减少依赖,并且对 no_std
友好。
默认启用了几个功能
rand
:增加额外的证明功能,提供加密安全的随机数生成器serde
:通过serde
添加证明序列化和反序列化std
:添加相应的依赖功能
底层曲线库根据CPU功能检测选择算术后端。使用夜间编译器可以扩展后端集,并可能提供更好的性能。您可以使用基准测试来检查性能:要么使用cargo bench
,要么使用cargo +nightly bench
。
证明支持一个自定义的序列化格式,旨在高效且规范。此功能有一个关联的fuzzer,可以使用夜间编译器运行:cargo +nightly fuzz run proofs
。
警告
虽然这个实现是考虑到安全的,但目前它是实验性的,不适合生产使用。
依赖项
~4.5–6.5MB
~143K SLoC