28 个稳定版本 (7 个主要)

8.0.2 2023 年 2 月 9 日
8.0.1 2022 年 11 月 17 日
7.1.0 2022 年 10 月 24 日
7.0.0 2022 年 7 月 15 日
1.0.1 2021 年 6 月 28 日

#495密码学

Download history 2343/week @ 2024-04-22 1978/week @ 2024-04-29 2361/week @ 2024-05-06 3183/week @ 2024-05-13 3514/week @ 2024-05-20 2596/week @ 2024-05-27 4025/week @ 2024-06-03 2000/week @ 2024-06-10 1495/week @ 2024-06-17 1258/week @ 2024-06-24 1461/week @ 2024-07-01 1796/week @ 2024-07-08 2203/week @ 2024-07-15 2067/week @ 2024-07-22 1823/week @ 2024-07-29 1716/week @ 2024-08-05

7,843 每月下载量
32 个crate(21 个直接) 中使用

MIT/Apache

150KB
3K SLoC

BLST 阈值密码学 (blsttc)

一种基于配对的协作解密和签名阈值密码系统。

blsttc crate 提供了用于签名和加密消息的加密密钥方法,以及用于阈值签名和阈值加密的密钥集。

blsttc 是使用 blast (blst) 进行签名和验证速度优化的 threshold_crypto crate 的改编。

阈值签名方案在 Alexandra Boldyreva 的论文 Threshold Signatures, Multisignatures and Blind Signatures Based on the Gap-Diffie-Hellman-Group Signature Scheme 中描述。该论文将 Boneh-Lynn-Shacham 签名扩展到阈值设置。消息加密使用 Baek 和 Zhang 的方案。我们的实现基于 pairing 椭圆曲线库。

在网络环境中,消息被签名和加密,密钥和签名份额被分发到网络参与者。只有当至少有 threshold + 1 个节点合作时,才能解密和验证消息。

安全审计

由 Jean-Philippe Aumasson 完成了对 threshold_crypto官方安全审计。未发现可利用的安全问题,并解决了潜在改进。审计中提到的过时依赖项在提交 54026f5 中已更新。

注意:此库不尝试确保恒定时间操作,因此可能泄露可用于计时侧信道攻击的信息。

用法

Cargo.toml:

[dependencies]
blsttc = "0.4.1"

main.rs:

extern crate rand;
extern crate blsttc;

use blsttc::SecretKey;

/// Very basic secret key usage.
fn main() {
    let sk0 = SecretKey::random();
    let sk1 = SecretKey::random();

    let pk0 = sk0.public_key();

    let msg0 = b"Real news";
    let msg1 = b"Fake news";

    assert!(pk0.verify(&sk0.sign(msg0), msg0));
    assert!(!pk0.verify(&sk1.sign(msg0), msg0)); // Wrong key.
    assert!(!pk0.verify(&sk0.sign(msg1), msg0)); // Wrong message.
}

测试

使用以下命令运行测试

$ cargo test

示例

使用以下命令从 examples 目录中运行示例

$ cargo run --example <example name>

另请参阅分布式密钥生成测试。

应用详情

基本使用流程如下

  • 选择一个门限值 t
  • 创建一个密钥集
  • N 个秘密密钥份额分配给参与者
  • 发布公共主密钥

第三方现在可以向公共主密钥和任何一组 t + 1 参与者加密消息(但不得少于这个数量!)任何一组 t + 1 参与者可以协作解密它。此外,任何一组 t + 1 参与者可以协作签名消息,生成一个可以使用公共主密钥验证的签名。

在这个系统中,签名是唯一的,并且独立于生成它的参与者集合。如果 S1S2 是由两组不同的 t + 1 秘密密钥份额持有者生成的同一消息的签名,则两个签名都将有效且相等。这在某些应用中很有用,例如,消息签名可以作为在 t + 1 参与者同意公开之前,任何人都不知道的伪随机数。

在它的最简单形式中,threshold_crypto 需要一个可信的经销商来生成和分发秘密密钥份额。然而,可以生成密钥,使得只有相应的参与者知道他们的秘密。这个包包含了实现这种 分布式密钥生成 方案的基本工具。

该库的主要应用是在一个分布式网络中,必须容忍多达 t 个对抗性(恶意或故障)节点。因为需要 t + 1 个节点来签名或揭示信息,因此第三方可以信任消息代表网络的共识。

性能

基准测试功能位于benches 目录中。您可以使用以下命令运行基准测试

$ RUSTFLAGS="-C target_cpu=native" cargo bench

我们使用criterion基准测试库。

许可证

根据您选择的以下一项进行许可

任选其一。

贡献

有关贡献、测试和拉取请求协议,请参阅CONTRIBUTING 文档。

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献都应按上述方式双许可,不得附加任何额外条款或条件。

依赖关系

~5.5MB
~170K SLoC