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 在 密码学
7,843 每月下载量
在 32 个crate(21 个直接) 中使用
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
参与者可以协作签名消息,生成一个可以使用公共主密钥验证的签名。
在这个系统中,签名是唯一的,并且独立于生成它的参与者集合。如果 S1
和 S2
是由两组不同的 t + 1
秘密密钥份额持有者生成的同一消息的签名,则两个签名都将有效且相等。这在某些应用中很有用,例如,消息签名可以作为在 t + 1
参与者同意公开之前,任何人都不知道的伪随机数。
在它的最简单形式中,threshold_crypto 需要一个可信的经销商来生成和分发秘密密钥份额。然而,可以生成密钥,使得只有相应的参与者知道他们的秘密。这个包包含了实现这种 分布式密钥生成 方案的基本工具。
该库的主要应用是在一个分布式网络中,必须容忍多达 t
个对抗性(恶意或故障)节点。因为需要 t + 1
个节点来签名或揭示信息,因此第三方可以信任消息代表网络的共识。
性能
基准测试功能位于benches
目录中。您可以使用以下命令运行基准测试
$ RUSTFLAGS="-C target_cpu=native" cargo bench
我们使用criterion
基准测试库。
许可证
根据您选择的以下一项进行许可
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
有关贡献、测试和拉取请求协议,请参阅CONTRIBUTING 文档。
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献都应按上述方式双许可,不得附加任何额外条款或条件。
依赖关系
~5.5MB
~170K SLoC