38个版本

0.10.0-pre.22024年7月28日
0.10.0-pre.12024年2月6日
0.10.0-pre.02024年1月19日
0.9.6 2023年12月1日
0.0.0 2018年7月24日

⚠️ 问题报告

#42 in 密码学

Download history 418157/week @ 2024-05-03 457292/week @ 2024-05-10 474531/week @ 2024-05-17 461204/week @ 2024-05-24 509208/week @ 2024-05-31 482867/week @ 2024-06-07 454864/week @ 2024-06-14 475172/week @ 2024-06-21 430878/week @ 2024-06-28 463754/week @ 2024-07-05 475076/week @ 2024-07-12 484299/week @ 2024-07-19 502089/week @ 2024-07-26 495717/week @ 2024-08-02 528599/week @ 2024-08-09 552542/week @ 2024-08-16

2,173,038 每月下载
用于 1,378 个crate (331 个直接)

MIT/Apache

235KB
5K SLoC

RustCrypto: RSA

crates.io Documentation Build Status dependency status MSRV Project Chat

纯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 🚢 可以发布之前,将有三阶段。

  1. 🚧 使其工作
    • 素数生成 ✅
    • 密钥生成 ✅
    • PKCS1v1.5:加密 & 解密 ✅
    • PKCS1v1.5:签名 & 验证 ✅
    • PKCS1v1.5(会话密钥):加密 & 解密
    • OAEP:加密 & 解密
    • PSS:签名 & 验证
    • 密钥导入 & 导出
  2. 🚀 使其快速
    • 基准测试 ✅
    • 与其他实现比较 🚧
    • 优化 🚧
  3. 🔐 使其安全
    • 模糊测试
    • 安全审计

⚠️ 安全警告

此crate已通过 Include Security 进行了一次安全审计,只有一个小的发现已被解决。

有关其他已知问题,请查看我们问题跟踪器上的开放安全问题

值得注意的是,模幂运算的实现不是恒时性的,但使用随机遮蔽技术来掩盖时间变化性,这是一种常用的技术。 此crate易受Marvin攻击的影响,该攻击可能使网络攻击者能够恢复私钥(参见RUSTSEC-2023-0071)。

您可以在以下链接中查看我们缓解此问题的进展:#390

最小支持的 Rust 版本(MSRV)

此软件包支持 Rust 1.72 或更高版本。

将来 MSRV 可能会更改,但将通过增加小版本号来实现。

许可证

根据您的要求,可许可以下任一许可证:

任选其一。

贡献

除非您明确声明,否则任何有意提交以供包含在作品中的贡献(根据 Apache-2.0 许可证定义),都将按照上述方式双许可,不附加任何额外条款或条件。

依赖项

~3.5–4.5MB
~94K SLoC