Torna agli aggiornamenti
New releaseSep 3, 2026

rscrypto v0.9.0

Crittografia Rust senza dipendenze richieste: hash, checksum, MAC, KDF, hashing di password, AEAD, firme, RSA, scambio di chiavi, ML-KEM e ML-DSA. Rif. Rust portabile con backend SIMD e ASM.

Condividi

rscrypto

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

rscrypto è una libreria Rust di primitive crittografiche, hash, hashing di password e checksum. Un unico modello di feature le controlla tutte. Il Rust portabile è l'implementazione di riferimento. I backend SIMD e assembly la rendono più veloce sulle piattaforme supportate. Le build di produzione non dipendono da C, FFI, OpenSSL o librerie di sistema.

rscrypto fornisce solo primitive. Non è uno stack TLS, un toolkit PKI, un archivio di chiavi o un'implementazione di protocolli.

Installazione

rscrypto richiede Rust 1.100. Finché Rust 1.100 non è stabile, usa la beta 1.100 o una nightly più recente. Le build accelerate per POWER, IBM Z e RISC-V richiedono un compilatore nightly; le build portable-only supportano la MSRV dichiarata. Vedi Toolchain.

Build no_std minimale con solo SHA-2:

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

Tutte le primitive, con casualità dal sistema operativo:

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

La feature predefinita è std. Imposta default-features = false per rimuoverla. Abilita getrandom solo per le API che ottengono salt, chiavi, nonce o entropia per la generazione di chiavi RSA dal sistema operativo. La guida alle feature spiega come selezionare le feature. Cargo.toml definisce il grafo esatto delle feature.

Avvio rapido

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);

I tipi di hash supportano l'uso one-shot e in streaming. examples/README.md contiene esempi eseguibili per AEAD, firme, RSA, ECDH P-256 e P-384, X25519, ML-KEM, hashing di password e introspezione dei backend.

Primitive e feature

FamigliaPrimitiveFeature
ChecksumCRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMechecksums o una feature foglia
Hash crittograficiSHA-2, SHA-3, SHAKE, cSHAKE, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOFcrypto-hashes o una feature foglia
Hash velociXXH3-64/128, RapidHash V3-64fast-hashes o una feature foglia
MAC e KDFHMAC-SHA-2/SHA-3, KMAC128/256, Poly1305, HKDF-SHA-2, PBKDF2-HMAC-SHA-2macs, kdfs o una feature foglia
Hashing di passwordArgon2d/i/id, scrypt, record di password PHC limitatipassword-hashing o una feature foglia
Firme e RSAECDSA P-256/P-384, Ed25519, ML-DSA-44/65/87, SLH-DSA (tutti i 12 set FIPS 205, pure e HashSLH-DSA), firma, verifica, cifratura e generazione di chiavi RSAsignatures o una feature foglia
Scambio di chiavi e KEMP-256 ECDH, P-384 ECDH, X25519, ML-KEM-512/768/1024key-exchange o una feature foglia
AEADAES-GCM, AES-GCM-SIV, AES-SIV-CMAC, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128aead o una feature foglia

Le chiavi di firma e KEM importano ed esportano DER standard (PKCS #8 e SubjectPublicKeyInfo) per ECDSA, Ed25519, RSA, ML-DSA, ML-KEM e SLH-DSA.

Il digest di accept WebSocket esiste solo per compatibilità di protocollo. Richiede la feature websocket-sha1. Nessuna feature ombrello, incluso full, lo abilita.

Vedi docs.rs per i tipi e i metodi esatti. Le note di compatibilità API spiegano i tipi di output, i seed delle collezioni e i nomi dei metodi mantenuti. La guida alla resilienza crittografica spiega le ipotesi di sicurezza, i confini di migrazione e le evidenze da esaminare quando si sceglie una crittografia più forte.

Piattaforme e dispatch

L'implementazione Rust portabile definisce l'output corretto, byte per byte. Ogni backend accelerato deve produrre lo stesso output. In fase di compilazione, il target stabilisce quali backend sono disponibili. Con std, rscrypto rileva anche le feature della CPU a runtime e seleziona un backend. Se nessun backend accelerato è disponibile, viene eseguita l'implementazione portabile.

La guida alle piattaforme elenca i target supportati. Spiega anche il dispatch, il supporto no_std e i limiti di portable-only.

Garanzie

Un'affermazione di sicurezza esiste solo finché le sue evidenze passano. Evidenze mancanti o obsolete rimuovono l'affermazione; non indeboliscono mai un controllo.

  • Correttezza: vettori NIST, RFC, upstream e Wycheproof, implementazioni indipendenti, property test, test negativi e Miri.
  • Fuzzing: i target di fuzz eseguono il codice di produzione su primitive, parser, macchine a stati e confini dei trait. Gli input minimizzati vengono riprodotti come test. Una corsia separata li esegue con i sanitizer.
  • Backend: test differenziali confrontano ogni backend accelerato con il Rust portabile. Coprono lunghezze, allineamenti, code, transizioni di stato, dispatch e fallback sui target nativi.
  • Tempo costante: ct.toml elenca le operazioni esatte sotto test. L'evidenza combina l'ispezione dei binari ottimizzati linkati, le prove BINSEC per i kernel a forma fissa e i test di timing DudeCT per le operazioni end-to-end.
  • Segreti: i tipi che possiedono segreti nascondono il loro contenuto nell'output di Debug e cancellano la loro memoria inizializzata al drop. Le regole di copia variano per tipo; ad esempio, lo stato di BLAKE2 e BLAKE3 con chiave supporta Clone. L'inventario della proprietà dei segreti elenca ogni tipo.
  • Fallimenti: i fallimenti di verifica non dicono perché sono falliti. Un'apertura AEAD fallita cancella il testo in chiaro non autenticato.

Un'affermazione di tempo costante si applica solo al target, alle feature, al compilatore, al profilo e all'operazione coperti dalle sue evidenze. Il codice sorgente che sembra senza branch non è una prova.

Per i dettagli, vedi le evidenze dei test, il modello a tempo costante, il ciclo di vita dei segreti e il modello di minaccia.

rscrypto non ha avuto un audit di sicurezza di terze parti. Il progetto non può pagarne uno ora, e le evidenze automatizzate non lo sostituiscono. rscrypto non afferma di essere sottoposto ad audit, validato FIPS 140-3, formalmente verificato o a tempo costante come intero crate.

Segnala una vulnerabilità sospetta tramite GitHub Private Vulnerability Reporting. Segui il processo in SECURITY.md. Non aprire una issue pubblica.

Prestazioni

Categorie