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 次下载
18KB
368 行
bulk-gcd
本软件包提供了 D. Bernstein 提出的批量 GCD (最大公约数) 算法的实现。
为什么?
GCD 可以用于识别大量 RSA 密钥集中的弱密钥。这些集合由研究人员收集(例如,这篇论文)。为了找到弱密钥,必须在所有 RSA 模数(即每个 RSA 私钥相关的两个质数 P
和 Q
的乘积)上执行成对 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.rs 或
main.rs
)来声明它
extern crate bulk_gcd;
致谢
非常感谢 Michael Grunder 帮助我在 Rust 中实现线程。
依赖项
~24–32MB
~607K SLoC