#rsa #encryption #security #crypto

no-std rsa_ext

纯Rust RSA实现

3个版本

0.1.2 2022年11月30日
0.1.1 2022年11月30日
0.1.0 2022年11月30日

#1450 in 加密学

MIT/Apache

170KB
3.5K SLoC

RSA

crates.io Documentation Build Status minimum rustc 1.57 Project Chat dependency status

纯Rust实现的便携式RSA。

⚠️ 警告: 此crate已由第三方审计,但包含审计结果和自审计以来所做的更新的完整博客文章尚未正式发布。更多信息请见#60

示例

use rsa::{PublicKey, RsaPrivateKey, RsaPublicKey, PaddingScheme};

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, PaddingScheme::new_pkcs1v15_encrypt(), &data[..]).expect("failed to encrypt");
assert_ne!(&data[..], &enc_data[..]);

// Decrypt
let dec_data = priv_key.decrypt(PaddingScheme::new_pkcs1v15_encrypt(), &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. 🔐 让它更安全
    • 模糊测试
    • 安全审计

最小支持的Rust版本(MSRV)

本仓库中的所有crate都支持Rust 1.57或更高版本。在未来的最小支持版本中,Rust可以更改,但将通过小版本号升级来完成。

许可证

根据您的选择,受以下其中一项许可证的约束

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您故意提交以包含在本工作中的任何贡献,应如上所述双重许可,而无需任何附加条款或条件。

依赖项

~3.5MB
~70K SLoC