
Biblioteca escrita íntegramente en Rust para criptografía de clave pública RSA: generación de claves, cifrado/descifrado PKCS#1 v1.5 y OAEP, firmas PSS, además de importación/exportación de claves.
Una implementación portable de RSA en Rust puro.
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: Si experimentas un tiempo de generación de claves inusualmente lento al usar
RsaPrivateKey::new, puedes intentar compilar en modo release o añadir lo siguiente a tuCargo.toml. La generación de claves es mucho más rápida cuando se compila con niveles de optimización más altos, pero esto aumentará un poco el tiempo de compilación.[profile.debug] opt-level = 3
Actualmente en la Fase 1 (v) 🚧
Habrá tres fases antes de que se pueda publicar 1.0 🚢.
Este crate ha recibido una auditoría de seguridad por parte de Include Security, con solo un hallazgo menor que desde entonces se ha abordado.
Consulta los problemas de seguridad abiertos en nuestro rastreador de incidencias para ver otros problemas conocidos.
Cabe destacar que la implementación de la exponenciación modular no es de tiempo constante,
pero la variabilidad temporal se enmascara mediante ofuscación aleatoria (blinding), una técnica
muy utilizada. Este crate es vulnerable al Marvin Attack, lo que podría permitir
la recuperación de la clave privada por parte de un atacante de red (consulte RUSTSEC-2023-0071).
Puedes seguir nuestro trabajo para mitigar este problema en #390.
Este crate es compatible con Rust 1.85 o superior.
En el futuro, la MSRV puede cambiar, pero se hará con un incremento de versión menor.
Licenciado bajo cualquiera de las siguientes opciones:
a tu elección.
A menos que indiques explícitamente lo contrario, cualquier contribución que envíes intencionalmente para su inclusión en el trabajo, según lo definido en la licencia Apache-2.0, se licenciará de forma dual como se indica arriba, sin términos ni condiciones adicionales.