Voltar às atualizações
New releaseSep 3, 2026

rscrypto v0.9.0

Criptografia em Rust sem dependências obrigatórias: hashes, checksums, MACs, KDFs, hashing de senhas, AEADs, assinaturas, RSA, troca de chaves, ML-KEM e ML-DSA. Referência portátil em Rust com backends SIMD e ASM.

Compartilhar

rscrypto

Crates.io Docs.rs MSRV 1.100.0 License: MIT OR Apache-2.0

rscrypto é uma biblioteca Rust de primitivas criptográficas, hashes, hashing de senhas e checksums. Um único modelo de features controla todas elas. O Rust portátil é a implementação de referência. Backends SIMD e assembly tornam-na mais rápida em alvos suportados. Builds de produção não dependem de C, FFI, OpenSSL ou bibliotecas do sistema.

rscrypto fornece apenas primitivas. Não é uma stack TLS, um toolkit de PKI, um armazenamento de chaves ou uma implementação de protocolo.

Instalação

rscrypto requer Rust 1.100. Enquanto o Rust 1.100 não for estável, use o beta 1.100 ou um nightly mais recente. Builds acelerados para POWER, IBM Z e RISC-V requerem um compilador nightly; builds portable-only suportam a MSRV declarada. Consulte Toolchain.

Build no_std mínimo apenas com SHA-2:

[dependencies]
rscrypto = { version = "0.11", default-features = false, features = ["sha2"] }

Todas as primitivas, com aleatoriedade do sistema operacional:

[dependencies]
rscrypto = { version = "0.11", features = ["full", "getrandom"] }

A feature padrão é std. Defina default-features = false para removê-la. Ative getrandom apenas para as APIs que obtêm salts, chaves, nonces ou entropia de geração de chaves RSA do sistema operacional. O guia de features explica como selecionar features. O Cargo.toml define o grafo exato de features.

Início rápido

use rscrypto::Sha256;

let one_shot = Sha256::digest(b"hello world");

let mut hasher = Sha256::new();
hasher.update(b"hello ");
hasher.update(b"world");

assert_eq!(hasher.finalize(), one_shot);

Os tipos de hash suportam uso one-shot e streaming. O examples/README.md tem exemplos executáveis para AEAD, assinaturas, RSA, ECDH P-256 e P-384, X25519, ML-KEM, hashing de senhas e introspeção de backend.

Primitivas e features

FamíliaPrimitivasFeature
ChecksumsCRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMechecksums ou uma feature folha
Hashes criptográficosSHA-2, SHA-3, SHAKE, cSHAKE, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOFcrypto-hashes ou uma feature folha
Hashes rápidosXXH3-64/128, RapidHash V3-64fast-hashes ou uma feature folha
MACs e KDFsHMAC-SHA-2/SHA-3, KMAC128/256, Poly1305, HKDF-SHA-2, PBKDF2-HMAC-SHA-2macs, kdfs ou uma feature folha
Hashing de senhasArgon2d/i/id, scrypt, registos de senha PHC limitadospassword-hashing ou uma feature folha
Assinaturas e RSAECDSA P-256/P-384, Ed25519, ML-DSA-44/65/87, SLH-DSA (todos os 12 conjuntos FIPS 205, pure e HashSLH-DSA), assinatura, verificação, encriptação e geração de chaves RSAsignatures ou uma feature folha
Troca de chaves e KEMsP-256 ECDH, P-384 ECDH, X25519, ML-KEM-512/768/1024key-exchange ou uma feature folha
AEADsAES-GCM, AES-GCM-SIV, AES-SIV-CMAC, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128aead ou uma feature folha

As chaves de assinatura e KEM importam e exportam DER padrão (PKCS #8 e SubjectPublicKeyInfo) para ECDSA, Ed25519, RSA, ML-DSA, ML-KEM e SLH-DSA.

O digest de aceitação WebSocket existe apenas para compatibilidade de protocolo. Requer a feature websocket-sha1. Nenhuma feature guarda-chuva, incluindo full, a ativa.

Consulte docs.rs para tipos e métodos exatos. As notas de compatibilidade da API explicam tipos de saída, seeds de coleções e nomes de métodos retidos. O guia de resiliência criptográfica explica pressupostos de segurança, fronteiras de migração e as evidências a rever ao escolher criptografia mais forte.

Plataformas e dispatch

A implementação Rust portátil define a saída correta, byte a byte. Todos os backends acelerados devem produzir a mesma saída. Em tempo de compilação, o alvo define quais backends estão disponíveis. Com std, rscrypto também deteta features da CPU em tempo de execução e seleciona um backend. Se nenhum backend acelerado estiver disponível, a implementação portátil é executada.

O guia de plataformas lista os alvos suportados. Também explica o dispatch, o suporte no_std e os limites de portable-only.

Garantia

Uma afirmação de segurança existe apenas enquanto as suas evidências passarem. Evidência ausente ou desatualizada remove a afirmação; nunca enfraquece um gate.

  • Correção: vetores NIST, RFC, upstream e Wycheproof, implementações independentes, testes de propriedades, testes negativos e Miri.
  • Fuzzing: os alvos de fuzz executam o código de produção em primitivas, parsers, máquinas de estado e fronteiras de traits. As entradas minimizadas são reproduzidas como testes. Uma lane separada executa-os com sanitizers.
  • Backends: testes diferenciais comparam cada backend acelerado com o Rust portátil. Cobrem comprimentos, alinhamentos, caudas, transições de estado, dispatch e fallback em alvos nativos.
  • Tempo constante: ct.toml lista as operações exatas em teste. A evidência combina inspeção de binários ligados otimizados, provas BINSEC para kernels de forma fixa e testes de temporização DudeCT para operações end-to-end.
  • Segredos: os tipos que possuem segredos ocultam o seu conteúdo na saída de Debug e limpam o seu armazenamento inicializado ao serem descartados. As regras de cópia variam por tipo; por exemplo, o estado de BLAKE2 e BLAKE3 com chave suporta Clone. O inventário de propriedade de segredos lista cada tipo.
  • Falhas: as falhas de verificação não indicam por que falharam. Uma abertura AEAD falhada limpa o texto simples não autenticado.

Uma afirmação de tempo constante aplica-se apenas ao alvo, features, compilador, perfil e operação que as suas evidências cobrem. Código-fonte que parece sem ramificações não é prova.

Para detalhes, consulte a evidência de testes, o modelo de tempo constante, o ciclo de vida dos segredos e o modelo de ameaças.

rscrypto não teve uma auditoria de segurança por terceiros. O projeto não pode pagar por uma agora, e a evidência automatizada não a substitui. rscrypto não afirma ser auditado, validado FIPS 140-3, formalmente verificado ou de tempo constante como crate completo.

Reporte uma vulnerabilidade suspeita através do GitHub Private Vulnerability Reporting. Siga o processo do SECURITY.md. Não abra um issue público.

Desempenho

Categorias