#public-key #schnorr #bitcoin #encryption-key #private-key #multisignature #musig

musig2

适用于比特币的 MuSig2 多签名协议的灵活 Rust 实现

11 个版本

0.0.11 2024 年 3 月 20 日
0.0.10 2024 年 3 月 20 日
0.0.5 2024 年 2 月 29 日
0.0.4 2023 年 11 月 28 日
0.0.3 2023 年 10 月 30 日

#1619 in 魔法豆

Download history 153/week @ 2024-03-13 410/week @ 2024-03-20 21/week @ 2024-03-27 43/week @ 2024-04-03 5/week @ 2024-04-10 26/week @ 2024-04-17 72/week @ 2024-04-24 27/week @ 2024-05-01 124/week @ 2024-05-08 68/week @ 2024-05-15 33/week @ 2024-05-22 55/week @ 2024-05-29 114/week @ 2024-06-05 210/week @ 2024-06-12 243/week @ 2024-06-19 135/week @ 2024-06-26

每月下载量:741
dlctix 中使用

Unlicense 许可

220KB
3.5K SLoC

MuSig2

该软件包提供了一种灵活的 Rust 实现 MuSig2,这是一个优化后的数字签名聚合协议,在 secp256k1 椭圆曲线上。

MuSig2 允许相互不信任的各方共同签署数据,并将它们的签名聚合为一个单一的聚合签名,该签名无法区分是由单个私钥生成的。该组共同控制一个 聚合公钥,只有当组内所有人都合作时才能创建签名(即 N-of-N 多签名方案)。MuSig2 优化以支持仅通过 两次网络通信往返 的安全签名聚合。

具体来说,此软件包实现了 BIP-0327,用于创建和验证符合比特币共识规则的签名,但该协议是灵活的,可以应用于任何 N-of-N 多签名用例。

⚠️ 测试版状态 ⚠️

此软件包处于测试版状态。最新版本是 v0.0.x 版本号。预期会有破坏性更改和安全修复。一旦此软件包稳定,我们将标记并发布 v1.0.0

概述

如果您还不熟悉 MuSig2,合作签署的过程如下

  1. 所有签署者相互分享他们的公钥。该组计算出一个 聚合公钥,他们共同控制。
  2. 第一轮签名中,签名者之间生成和分享随机数(随机数)。这些随机数既有秘密版本也有公开版本。只有公开的随机数(也称为PubNonce)应该被分享,而相应的秘密随机数(也称为SecNonce)必须保密。
  3. 一旦每个签名者都收到了其他每个签名者的公开随机数,每个签名者就会使用他们的秘密密钥和秘密随机数为一条消息创建一个部分签名
  4. 第二轮签名中,签名者之间分享他们的部分签名。可以验证部分签名以追究行为不当的签名者的责任。
  5. 一组有效的部分签名可以聚合成一个最终签名,它只是一个普通的Schnorr签名,在聚合的公钥下有效。

背骨选择

这个包不直接实现椭圆曲线点数学。相反,我们依赖于两个信誉良好的库之一

可以使用其中之一。默认情况下,此包更喜欢依赖libsecp256k1,因为这是任何地方都可以找到的最经过验证和公开信任的secp256k1曲线数学实现。但是,如果您需要纯Rust实现,则可以安装此包而不使用它,并使用纯Rust的k256包代替。

cargo add musig2 --no-default-features --features k256

如果同时启用了k256secp256k1功能,则我们默认使用libsecp256k1绑定进行实际数学,但仍然提供特制实现,以便此包与k256互操作。

此包使用secp及其类型在内部表示椭圆曲线点(例如公钥)和标量(例如私钥)

根据启用的此包的功能,在以下类型和更高级类型(例如secp256k1::PublicKeyk256::SecretKey)之间实现转换特制。通常,我们的API可以接受或返回任何可以转换为等效的secp表示的类型,尽管调用者也可以直接使用secp

文档

请访问docs.rs查看完整的API文档和用法示例。

依赖项

~6.5MB
~76K SLoC