
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.
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[..]);
Nota: Se riscontri un tempo di generazione delle chiavi insolitamente lento usando
RsaPrivateKey::new, puoi provare a compilare in modalità release oppure aggiungere quanto segue al tuoCargo.toml. La generazione delle chiavi è molto più veloce compilando con livelli di ottimizzazione più alti, ma questo 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 rilasciato.
Questa crate ha ricevuto un security audit da Include Security, con un solo riscontro minore che è stato successivamente affrontato.
Consulta gli open security issues nel nostro issue tracker per altri problemi noti.
In particolare, l'implementazione dell'[elevamento a potenza modulare non è a tempo costante],
ma la variabilità temporale è mascherata tramite random blinding, una tecnica
comunemente usata. Questa crate è vulnerabile al Marvin Attack che potrebbe consentire
il recupero della chiave privata da parte di un attaccante di rete (vedi RUSTSEC-2023-0071).
Puoi seguire il nostro lavoro sulla mitigazione di questo problema in #390.
Questa crate supporta Rust 1.85 o versioni successive.
In futuro l'MSRV potrebbe cambiare, ma verrà modificato con un incremento di versione minore.
Concesso in licenza secondo una delle seguenti
a tua scelta.
Salvo dichiarazione contraria esplicita, qualsiasi contributo intenzionalmente inviato per l'inclusione nel lavoro da parte tua, come definito dalla licenza Apache-2.0, sarà concesso in doppia licenza come sopra, senza ulteriori termini o condizioni.