10 个版本

0.11.4 2023年12月8日
0.11.3 2023年10月5日
0.11.2 2023年9月12日
0.10.2 2021年10月18日
0.1.0 2019年3月17日

#31 in 密码学

Download history • Rust 包仓库 81517/week @ 2024-04-22 • Rust 包仓库 62643/week @ 2024-04-29 • Rust 包仓库 61398/week @ 2024-05-06 • Rust 包仓库 72522/week @ 2024-05-13 • Rust 包仓库 69572/week @ 2024-05-20 • Rust 包仓库 84860/week @ 2024-05-27 • Rust 包仓库 75900/week @ 2024-06-03 • Rust 包仓库 61283/week @ 2024-06-10 • Rust 包仓库 64833/week @ 2024-06-17 • Rust 包仓库 75886/week @ 2024-06-24 • Rust 包仓库 68326/week @ 2024-07-01 • Rust 包仓库 66768/week @ 2024-07-08 • Rust 包仓库 84163/week @ 2024-07-15 • Rust 包仓库 85887/week @ 2024-07-22 • Rust 包仓库 75336/week @ 2024-07-29 • Rust 包仓库 85409/week @ 2024-08-05 • Rust 包仓库

333,381 monthly downloads
用于 894 crates (37 直接使用)

BSD-3-Clause

240KB
3K SLoC

schnorrkel

Schnorrkel 在 Ristretto 压缩 Ed25519 点上实现 Schnorr 签名,以及相关的协议,如 HDKD、MuSig 和可验证随机函数 (VRF)。

Ristretto 大致实现了 Mike Hamburg 的 Decaf 论文的第7节,为 Ed25519 曲线的2-torsion free点提供作为素数阶群。 (相关)

我们采用 merlin类型特定的哈希方法 策略,并具有良好的领域分离。这些方法封装了 Mike Hamburg 的 STROBE128 构造,后者基于 Keccak。

在实践中,我们所有的方法都消耗一个 merlin::Transcript,开发人员可以通过向特定上下文构建器提供数据轻松创建。但我们同时也支持 &mut merlin::Transcript,正如 merlin 包所偏好的。我们将在未来利用这一点,以更好地使 schnorrkel 符合 dalek 生态系统中的零知识证明工具。

我们根据Dimitrios Papadopoulos、Duane Wessels、Shumon Huque、Moni Naor、Jan Včelák、Leonid Rezyin和Sharon Goldberg在"Making NSEC5 Practical for DNSSEC"(使NSEC5对DNSSEC实用)中的模型来构建VRF本身。我们注意到,Trevor Perrin提出的V(X)EdDSA签名方案基本上与NSEC5结构相同。此外,VRF支持单个签名者合并使用相同密钥对生成的多个VRF输出,这与Alex Davidson在"Privacy Pass - The Math"(隐私通行证 - 数学)和Alex Davidson、Ian Goldberg、Nick Sullivan、George Tankersley和Filippo Valsorda在"Privacy Pass: Bypassing Internet Challenges Anonymously"(隐私通行证:匿名绕过互联网挑战)中提到的"DLEQ Proofs"(DLEQ证明)和"Batching the Proofs"(批处理证明)部分相类似。

除了某些简单的顺序VRF构建之外,我们目前仅支持Schnorr多签名的三轮MuSig,因为所有其他Schnorr多签名都有一定的问题。在未来,我们应该开发如5.1节第21页https://eprint.iacr.org/2018/417中提到的mBCJ等安全方案,尽管mBCJ本身是通过拥有证明来工作的,而一个线性化变体听起来更适用。

还有C、JavaScript和Python的局部绑定。

依赖项

约2-3.5MB
约75K SLoC