
Biblioteca Rust pura para criptografia de chave pública RSA: geração de chaves, criptografia/descriptografia PKCS#1 v1.5 e OAEP, assinaturas PSS, além de importação/exportação de chaves.
Uma implementação de RSA portátil em 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: Se você encontrar um tempo de geração de chaves excepcionalmente lento ao usar
RsaPrivateKey::new, tente compilar em modo de release ou adicione o seguinte ao seuCargo.toml. A geração de chaves é muito mais rápida quando compilada com níveis de otimização mais altos, mas isso aumentará um pouco o tempo de compilação.[profile.debug] opt-level = 3
Atualmente na Fase 1 (v) 🚧
Haverá três fases antes que 1.0 🚢 possa ser lançado.
Esta crate recebeu uma auditoria de segurança da Include Security, com apenas uma descoberta menor que já foi resolvida.
Consulte os problemas de segurança em aberto em nosso rastreador de problemas para outros problemas conhecidos.
Notavelmente, a implementação de exponenciação modular não possui tempo constante, mas a variabilidade de tempo é mascarada usando ofuscamento aleatório, uma técnica comumente utilizada. Esta crate é vulnerável ao Ataque Marvin, que pode permitir a recuperação da chave privada por um atacante de rede (veja RUSTSEC-2023-0071).
Você pode acompanhar nosso trabalho na mitigação desse problema em #390.
Esta crate suporta Rust 1.85 ou superior.
No futuro, a MSRV pode ser alterada, mas isso será feito com um incremento de versão menor.
Licenciado sob uma das seguintes opções
à sua escolha.
A menos que você declare explicitamente o contrário, qualquer contribuição intencionalmente enviada para inclusão no trabalho por você, conforme definido na licença Apache-2.0, será licenciada duplamente como acima, sem quaisquer termos ou condições adicionais.