#素数 #数字 #生成器 #大数 #安全随机

glass_pumpkin

基于Rust的num-bigint和num-integer的密码学安全素数生成器

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密码学 类别中

Download history 599/week @ 2024-04-15 445/week @ 2024-04-22 338/week @ 2024-04-29 378/week @ 2024-05-06 520/week @ 2024-05-13 556/week @ 2024-05-20 846/week @ 2024-05-27 695/week @ 2024-06-03 634/week @ 2024-06-10 770/week @ 2024-06-17 621/week @ 2024-06-24 490/week @ 2024-07-01 434/week @ 2024-07-08 482/week @ 2024-07-15 642/week @ 2024-07-22 450/week @ 2024-07-29

2,131 每月下载量
18 个crate中使用了(8个直接使用)

Apache-2.0

45KB
710

玻璃南瓜

Build Status Build status [build status] Crate Docs Apache 2.0/MIT Licensed

适用于密码学生成大素数的随机数生成器。

目的

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方法

  1. 生成一个给定位长的随机奇数。
  2. 将候选数除以前2048个素数。这有助于消除某些通过Miller-Rabin测试但不是素数的情形。
  3. 使用费马定理测试候选数。
  4. 运行 log2(bitlength) + 5 个Miller-Rabin测试,其中一个是使用生成器 2
  5. 运行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方法的更强质数检查是一个选项,可以通过在primesafe_prime模块中使用的strong_check方法来实现。使用此crate生成的质数在使用密码学安全的随机数生成器时将通过Baillie-PSW测试。目前,prime::new()safe_prime::new()将继续使用之前描述的生成方法。

此crate是Hyperledger Labs Agora项目的一部分。

依赖项

~1–1.4MB
~25K SLoC