
Bibliothèque Rust pure pour la cryptographie à clé publique RSA : génération de clés, chiffrement/déchiffrement PKCS#1 v1.5 et OAEP, signatures PSS, ainsi que l'import/export de clés.
Une implémentation portable de RSA en Rust pur.
use rsa::{Pkcs1v15Encrypt, RsaPrivateKey, RsaPublicKey};
let mut rng = rand::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[..]);
Remarque : Si vous rencontrez un temps de génération de clés inhabituellement lent lors de l'utilisation de
RsaPrivateKey::new, vous pouvez essayer de compiler en mode release ou d'ajouter ce qui suit à votreCargo.toml. La génération de clés est beaucoup plus rapide lorsque la compilation est effectuée avec des niveaux d'optimisation plus élevés, mais cela augmentera un peu le temps de compilation.[profile.debug] opt-level = 3
Actuellement à la phase 1 (v) 🚧
Il y aura trois phases avant que 1.0 🚢 puisse être publiée.
Cette crate a fait l'objet d'un audit de sécurité par Include Security, avec une seule constatation mineure qui a depuis été corrigée.
Consultez les [problèmes de sécurité ouverts] sur notre suivi de problèmes pour d'autres problèmes connus.
Notamment, l'implémentation de l'[exponentiation modulaire n'est pas à temps constant], mais la variabilité temporelle est masquée à l'aide d'[aveuglement aléatoire], une technique couramment utilisée. Cette crate est vulnérable à l'[attaque Marvin] qui pourrait permettre la récupération de la clé privée par un attaquant réseau (voir RUSTSEC-2023-0071).
Vous pouvez suivre notre travail sur l'atténuation de ce problème dans #390.
Cette crate prend en charge Rust 1.85 ou supérieur.
À l'avenir, la MSRV peut être modifiée, mais cela se fera avec un changement de version mineure.
Sous l'une ou l'autre des licences suivantes :
à votre convenance.
Sauf indication contraire explicite de votre part, toute contribution intentionnellement soumise pour inclusion dans l'œuvre par vous, telle que définie par la licence Apache-2.0, sera sous double licence comme ci-dessus, sans conditions ni termes supplémentaires.