#gcd #bulk #rsa-key #key-set #fastgcd

bin+lib bulk-gcd

快速并行批量 GCD 计算,用于在集合中查找弱 RSA 密钥

16 个版本 (稳定)

使用旧的 Rust 2015

2.2.0 2019 年 1 月 1 日
2.1.2 2018 年 12 月 20 日
1.0.7 2018 年 12 月 19 日
0.1.3 2018 年 12 月 16 日

#1202密码学

每月 45 次下载

MITLGPL-3.0+

18KB
368

bulk-gcd

Build Status Latest version Documentation License

本软件包提供了 D. Bernstein 提出的批量 GCD (最大公约数) 算法的实现。

为什么?

GCD 可以用于识别大量 RSA 密钥集中的弱密钥。这些集合由研究人员收集(例如,这篇论文)。为了找到弱密钥,必须在所有 RSA 模数(即每个 RSA 私钥相关的两个质数 PQ 的乘积)上执行成对 GCD 计算。然而,每次单独的 GCD 计算都需要相当多的时间,并且原始的成对过程扩展性不好 (O(n^2))。

而不是以蛮力方式执行此搜索,此模块采用了 D. Bernstein 的巧妙算法,该算法通过将所有其他模数的乘积与每个模数找到 GCD。通过引入乘积和余数树,计算成本变为对数而不是二次,从而显著降低了执行时间。

快速示例

extern crate bulk_gcd;
extern crate rug;

use rug::Integer;

let moduli = [
    Integer::from(15),
    Integer::from(35),
    Integer::from(23),
];

let result = bulk_gcd::compute(&moduli).unwrap();

assert_eq!(result, vec![
    Some(Integer::from(5)),
    Some(Integer::from(5)),
    None,
]);

使用 bulk-gcd

bulk-gcd 可在 crates.io 上获取。要在您的 crate 中使用 bulk-gcd,请将其添加到 Cargo.toml 中的依赖项。

[dependencies]
bulk-gcd = "^1.0.0"

您还需要通过将以下内容添加到 crate 根(通常是 lib.rsmain.rs)来声明它

extern crate bulk_gcd;

致谢

非常感谢 Michael Grunder 帮助我在 Rust 中实现线程。

依赖项

~24–32MB
~607K SLoC