
Reine Rust-Bibliothek für RSA-Public-Key-Kryptografie: Schlüsselerzeugung, PKCS#1-v1.5- und OAEP-Ver-/Entschlüsselung, PSS-Signaturen sowie Schlüsselimport/-export.
Eine portable RSA-Implementierung in reinem Rust mit Verschlüsselungs- und Signaturverfahren, die in PKCS#1 v2.2 (RFC8017) spezifiziert sind.
| Verfahren | Zweck | Spezifikation |
|---|---|---|
| RSAES-OAEP | Verschlüsselung | RFC8017 §7.1 |
| RSAES-PKCS1-v1_5 | Verschlüsselung | RFC8017 §7.2 |
| RSASSA-PSS | Signaturen | RFC8017 §8.1 |
| RSASSA-PKCS1-v1_5 | Signaturen | RFC8017 §8.2 |
Die PKCS#1 v1.5-Verschlüsselung wird nur aus Kompatibilitätsgründen mit Legacy-Anwendungen bereitgestellt. Für neue Verschlüsselungsanwendungen sollten OAEP und PSS bevorzugt werden.
Siehe die Sicherheitswarnung unten für bekannte Implementierungsschwachstellen.
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[..]);
Hinweis: Wenn Sie bei der Verwendung von
RsaPrivateKey::newungewöhnlich langsame Schlüsselgenerierungszeiten feststellen, können Sie versuchen, im Release-Modus zu kompilieren oder Folgendes zu IhrerCargo.tomlhinzuzufügen. Die Schlüsselgenerierung ist deutlich schneller, wenn mit höheren Optimierungsstufen gebaut wird, allerdings erhöht dies die Kompilierzeit ein wenig.[profile.debug] opt-level = 3
Derzeit in Phase 1 (v) 🚧
Es wird drei Phasen geben, bevor 1.0 🚢 veröffentlicht werden kann.
Dieses Crate hat ein Sicherheitsaudit von Include Security erhalten, mit nur einem geringfügigen Befund, der inzwischen behoben wurde.
Weitere bekannte Probleme finden Sie in den [offenen Sicherheitsproblemen] in unserem Issue-Tracker.
Insbesondere ist die Implementierung der [modularen Exponentiation nicht konstantzeitig],
aber die Zeitvariabilität wird durch random blinding maskiert, eine häufig verwendete
Technik. Dieses Crate ist anfällig für den Marvin Attack, der die
Wiederherstellung privater Schlüssel durch einen Netzwerkangreifer ermöglichen könnte (siehe RUSTSEC-2023-0071).
Sie können unsere Arbeit zur Behebung dieses Problems in #390 verfolgen.
Dieses Crate unterstützt Rust 1.85 oder höher.
In Zukunft kann die MSRV geändert werden, dies wird jedoch mit einer Erhöhung der Minor-Version erfolgen.
Lizenziert unter einer der folgenden
nach Ihrer Wahl.
Sofern Sie nicht ausdrücklich etwas anderes angeben, werden alle Beiträge, die Sie absichtlich zur Aufnahme in das Werk einreichen, im Sinne der Apache-2.0-Lizenz wie oben dual lizenziert, ohne zusätzliche Bedingungen oder Konditionen.