7 个不稳定版本
0.4.0 | 2020年7月28日 |
---|---|
0.3.2 | 2019年7月25日 |
0.3.1 | 2019年4月1日 |
0.3.0 | 2018年12月18日 |
0.0.0 | 2018年8月5日 |
#1019 in 加密学
571 每月下载量
用于 48 个 crate(18 个直接使用)
130KB
2.5K SLoC
threshold_crypto
基于配对的阈值密码系统,用于协作解密和签名。
“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]
threshold_crypto = { version = "0.4", git = "https://github.com/poanetwork/threshold_crypto" }
main.rs
:
extern crate rand;
extern crate threshold_crypto;
use threshold_crypto::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
参与者同意透露之前无人知晓的伪随机数。
在 simplest 形式下,threshold_crypto 需要 trusted dealer 生成并分配秘密密钥份额。然而,密钥可以生成,使得只有相应的参与者知道其秘密。此 crate 包含了实现此类 分布式密钥生成 方案的基本工具。
此库的主要应用场景是在一个必须容忍多达 t
个敌对(恶意或故障)节点的分布式网络中。由于需要 t + 1
个节点签名或透露信息,因此第三方可以相信消息代表了网络的共识。
文档
性能
基准测试功能保存在 benches
目录。您可以使用以下命令运行基准测试:
$ RUSTFLAGS="-C target_cpu=native" cargo bench
我们使用 criterion
基准测试库。
模拟密码学
为了加快依赖于 threshold_crypto
的 crate 的自动测试,提供了 use-insecure-test-only-mock-crypto
功能。 激活此功能将有效地禁用加密,并且仅在测试期间使用!基本上,底层的椭圆曲线将被小的有限域所取代,从而在执行中实现 10-200 倍的速度提升。生成的密钥可以轻易被破解,并且绝对不应该在生产环境中使用。
许可
根据您的要求,许可协议为以下之一:
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
有关贡献、测试和拉取请求协议,请参阅CONTRIBUTING 文档。
除非您明确声明,否则根据Apache-2.0许可证定义,您提交以包含在作品中的任何贡献,将双重许可,如上所述,无需任何附加条款或条件。
依赖项
~3.5MB
~71K SLoC