18个版本 (8个稳定版)
1.7.0 | 2024年5月24日 |
---|---|
1.6.0 | 2023年5月24日 |
1.5.0 | 2022年10月19日 |
1.2.0 | 2021年9月28日 |
0.3.3 | 2019年2月19日 |
#237 在 密码学 类别中
2,131 每月下载量
在 18 个crate中使用了(8个直接使用)
45KB
710 行
玻璃南瓜
适用于密码学生成大素数的随机数生成器。
目的
glass_pumpkin
是一个密码学安全的随机数生成器,用于生成大素数。这个库受 pumpkin 的启发,但其目的是与Rust稳定版本一起使用。它还将512位限制降低到128位,因此可以生成和用于椭圆曲线素数域。它还公开了素数测试函数。这个crate使用 num-bigint 而不是 ramp
。我发现 num-bigint
在生成素数时与 ramp
一样快。平均而言,在现代硬件上生成素数需要不到200ms,安全素数大约需要10秒。
安装
将以下内容添加到您的 Cargo.toml
文件中
glass_pumpkin = "1.0"
示例
use glass_pumpkin::prime;
fn main() {
let p = prime::new(1024).unwrap();
let q = prime::new(1024).unwrap();
let n = p * q;
println!("{}", n);
}
您还可以提供 OsRng
并从中生成素数。
use glass_pumpkin::prime;
use rand::rngs::OsRng;
fn main() {
let mut rng = OsRng;
let p = prime::from_rng(1024, &mut rng).unwrap();
let q = prime::from_rng(1024, &mut rng).unwrap();
let n = p * q;
println!("{}", n);
}
素数生成
Primes
的生成类似于OpenSSL,但除了应用了来自 Prime and Prejudice 纸的一些建议外,还使用了Baillie-PSW方法
- 生成一个给定位长的随机奇数。
- 将候选数除以前2048个素数。这有助于消除某些通过Miller-Rabin测试但不是素数的情形。
- 使用费马定理测试候选数。
- 运行 log2(bitlength) + 5 个Miller-Rabin测试,其中一个是使用生成器
2
。 - 运行Lucas测试。
安全素数需要 (n-1)/2 也是素数。
素数检查
您可以使用这个crate来检查数字的素性。
use glass_pumpkin::prime;
use glass_pumpkin::safe_prime;
use num_bigint::BigUint;
fn main() {
if prime::check(&BigUint::new([5].to_vec())) {
println!("is prime");
}
if safe_prime::check(&BigUint::new([7].to_vec())) {
println!("is safe prime");
}
}
使用Baillie-PSW方法的更强质数检查是一个选项,可以通过在prime
和safe_prime
模块中使用的strong_check
方法来实现。使用此crate生成的质数在使用密码学安全的随机数生成器时将通过Baillie-PSW测试。目前,prime::new()
和safe_prime::new()
将继续使用之前描述的生成方法。
此crate是Hyperledger Labs Agora项目的一部分。
依赖项
~1–1.4MB
~25K SLoC