
Libreria Rust pura per la crittografia a chiave pubblica RSA: generazione di chiavi, cifratura/decifratura PKCS#1 v1.5 e OAEP, firme PSS, più importazione/esportazione di chiavi.
Un'implementazione RSA portabile in puro Rust, con schemi di cifratura e firma specificati in PKCS#1 v2.2 (RFC8017).
| Schema | Scopo | Specifica |
|---|---|---|
| RSAES-OAEP | Cifratura | RFC8017 §7.1 |
| RSAES-PKCS1-v1_5 | Cifratura | RFC8017 §7.2 |
| RSASSA-PSS | Firme | RFC8017 §8.1 |
| RSASSA-PKCS1-v1_5 | Firme | RFC8017 §8.2 |
La cifratura PKCS#1 v1.5 è fornita solo per compatibilità con applicazioni legacy. Preferire OAEP e PSS per le nuove applicazioni di cifratura.
Vedere l'avviso di sicurezza di seguito per le vulnerabilità note dell'implementazione.
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[..]);
Nota: Se si riscontra un tempo di generazione delle chiavi insolitamente lento durante l'uso di
RsaPrivateKey::new, è possibile provare a compilare in modalità release o aggiungere quanto segue al proprioCargo.toml. La generazione delle chiavi è molto più veloce quando si compila con livelli di ottimizzazione più elevati, ma ciò aumenterà leggermente il tempo di compilazione.[profile.debug] opt-level = 3
Attualmente alla Fase 1 (v) 🚧
Ci saranno tre fasi prima che 1.0 🚢 possa essere rilasciata.
Questo crate ha ricevuto un audit di sicurezza da Include Security, con un solo rilievo minore che è stato successivamente risolto.
Consultare le [issue di sicurezza aperte] sul nostro issue tracker per altri problemi noti.
In particolare l'implementazione dell'[esponenziazione modulare non è a tempo costante],
ma la variabilità temporale è mascherata tramite il [blinding casuale], una tecnica
comunemente utilizzata. Questo crate è vulnerabile al Marvin Attack che potrebbe consentire
il recupero della chiave privata da parte di un attaccante di rete (vedere RUSTSEC-2023-0071).
È possibile seguire il nostro lavoro sulla mitigazione di questo problema in #390.
Questo crate supporta Rust 1.85 o superiore.
In futuro la MSRV potrà essere modificata, ma ciò avverrà con un incremento di versione minore.
Concesso in licenza secondo una delle seguenti
a propria scelta.
Salvo diversa indicazione esplicita, qualsiasi contributo intenzionalmente inviato per l'inclusione nell'opera da parte dell'utente, come definito nella licenza Apache-2.0, sarà concesso in doppia licenza come sopra, senza termini o condizioni aggiuntivi.