
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 RSA portable en pur Rust, avec des schémas de chiffrement et de signature spécifiés dans PKCS#1 v2.2 (RFC8017).
| Schéma | Objectif | Spécification |
|---|---|---|
| RSAES-OAEP | Chiffrement | RFC8017 §7.1 |
| RSAES-PKCS1-v1_5 | Chiffrement | RFC8017 §7.2 |
| RSASSA-PSS | Signatures | RFC8017 §8.1 |
| RSASSA-PKCS1-v1_5 | Signatures | RFC8017 §8.2 |
Le chiffrement PKCS#1 v1.5 est fourni uniquement pour des raisons de compatibilité avec les applications héritées. Préférez OAEP et PSS pour les nouvelles applications de chiffrement.
Consultez l'avertissement de sécurité ci-dessous pour connaître les vulnérabilités d'implémentation connues.
use rsa::{Oaep, RsaPrivateKey, RsaPublicKey};
use sha2::Sha256;
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, Oaep::<Sha256>::new(), &data[..]).expect("failed to encrypt");
assert_ne!(&data[..], &enc_data[..]);
// Decrypt
let dec_data = priv_key.decrypt_blinded(&mut rng, Oaep::<Sha256>::new(), &enc_data).expect("failed to decrypt");
assert_eq!(&data[..], &dec_data[..]);
Remarque : Si vous rencontrez un temps de génération de clés anormalement long 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 lors de la compilation avec des niveaux d'optimisation plus élevés, mais cela augmentera un peu le temps de compilation.[profile.debug] opt-level = 3
Actuellement en 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 un seul constat mineur qui a depuis été corrigé.
Consultez les [problèmes de sécurité ouverts] sur notre gestionnaire de tickets 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 du [masquage aléatoire], une technique
couramment utilisée. Cette crate est vulnérable à la Marvin Attack 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 pourra être modifiée, mais cela se fera avec une incrémentation de version mineure.
Sous licence selon l'une des deux
au choix.
Sauf mention explicite contraire, toute contribution soumise intentionnellement pour inclusion dans l'œuvre par vous, au sens de la licence Apache-2.0, sera sous double licence comme ci-dessus, sans conditions ni termes supplémentaires.