38个版本
0.10.0-pre.2 | 2024年7月28日 |
---|---|
0.10.0-pre.1 | 2024年2月6日 |
0.10.0-pre.0 | 2024年1月19日 |
0.9.6 | 2023年12月1日 |
0.0.0 | 2018年7月24日 |
#42 in 密码学
2,173,038 每月下载
用于 1,378 个crate (331 个直接)
235KB
5K SLoC
RustCrypto: RSA
纯Rust的RSA实现。
示例
use rsa::{Pkcs1v15Encrypt, RsaPrivateKey, RsaPublicKey};
let mut rng = rand::thread_rng();
let bits = 2048;
let priv_key = RsaPrivateKey::new(&mut rng, bits).expect("failed to generate a key");
let pub_key = RsaPublicKey::from(&priv_key);
// Encrypt
let data = b"hello world";
let enc_data = pub_key.encrypt(&mut rng, Pkcs1v15Encrypt, &data[..]).expect("failed to encrypt");
assert_ne!(&data[..], &enc_data[..]);
// Decrypt
let dec_data = priv_key.decrypt(Pkcs1v15Encrypt, &enc_data).expect("failed to decrypt");
assert_eq!(&data[..], &dec_data[..]);
注意: 如果在使用
RsaPrivateKey::new
时遇到异常缓慢的密钥生成时间,您可以尝试以发布模式编译或添加以下内容到您的Cargo.toml
。使用更高的优化级别构建时,密钥生成会更快,但这会略微增加编译时间。[profile.debug] opt-level = 3
如果您不想为所有依赖项开启优化,您可以为
num-bigint-dig
依赖项进行优化。这应该会带来大部分的速度提升。[profile.dev.package.num-bigint-dig] opt-level = 3
状态
目前处于第1阶段(v) 🚧
在 1.0
🚢 可以发布之前,将有三阶段。
- 🚧 使其工作
- 素数生成 ✅
- 密钥生成 ✅
- PKCS1v1.5:加密 & 解密 ✅
- PKCS1v1.5:签名 & 验证 ✅
- PKCS1v1.5(会话密钥):加密 & 解密
- OAEP:加密 & 解密
- PSS:签名 & 验证
- 密钥导入 & 导出
- 🚀 使其快速
- 基准测试 ✅
- 与其他实现比较 🚧
- 优化 🚧
- 🔐 使其安全
- 模糊测试
- 安全审计
⚠️ 安全警告
此crate已通过 Include Security 进行了一次安全审计,只有一个小的发现已被解决。
有关其他已知问题,请查看我们问题跟踪器上的开放安全问题。
值得注意的是,模幂运算的实现不是恒时性的,但使用随机遮蔽技术来掩盖时间变化性,这是一种常用的技术。 此crate易受Marvin攻击的影响,该攻击可能使网络攻击者能够恢复私钥(参见RUSTSEC-2023-0071)。
您可以在以下链接中查看我们缓解此问题的进展:#390。
最小支持的 Rust 版本(MSRV)
此软件包支持 Rust 1.72 或更高版本。
将来 MSRV 可能会更改,但将通过增加小版本号来实现。
许可证
根据您的要求,可许可以下任一许可证:
任选其一。
贡献
除非您明确声明,否则任何有意提交以供包含在作品中的贡献(根据 Apache-2.0 许可证定义),都将按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~3.5–4.5MB
~94K SLoC