Torna agli aggiornamenti
New releaseAug 7, 2026

rscrypto v0.8.0

Cripto Rust con zero dipendenze predefinite: BLAKE3, Ed25519/X25519, hash, MAC, KDF, AEAD e checksum con piena accelerazione SIMD/ASM

Condividi

rscrypto

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

rscrypto riunisce primitive crittografiche, hash crittografici e veloci, hashing di password e checksum dietro un unico modello di feature. SIMD e assembly vincolati alla piattaforma accelerano i backend Rust portabili senza una dipendenza di produzione da C/FFI, OpenSSL o librerie di sistema.

rscrypto è una crate di primitive, non uno stack TLS, un toolkit PKI, un key store o un'implementazione di protocolli.

Prestazioni misurate

Le affermazioni sulle prestazioni sono limitate a campagne esatte conservate e carichi di lavoro equivalenti. La campagna corretta di settembre 2026 contiene 19.614 casi completati, incluse le comparazioni corrette di ML-KEM e Argon2, ma non è stata curata alcuna scheda di valutazione aggregata sostitutiva. Le aggregazioni più vecchie che mescolavano entropia, preparazione delle chiavi, rappresentazione dell'output o lunghezze dei salt restano record storici e non sono affermazioni di prestazioni attuali.

La panoramica dei benchmark registra le campagne, i risultati specifici per piattaforma e i limiti rimanenti. I contratti di confronto definiscono carichi di lavoro equivalenti per ML-KEM e Argon2.

Garanzie

Le affermazioni di sicurezza falliscono in modo chiuso: prove mancanti o obsolete rimuovono l'affermazione anziché indebolire il controllo.

  • Le prove di correttezza combinano vettori NIST, RFC, upstream e Wycheproof con implementazioni separate, proprietà, test negativi e Miri.
  • I target di fuzzing esercitano le implementazioni di produzione attraverso confini di primitive, parser, macchine a stati e trait. I seed minimizzati vengono riprodotti come test, con una corsia separata per i sanitizer.
  • I test differenziali portabile-versus-accelerato coprono lunghezze, allineamenti, code, transizioni di stato, dispatch e comportamento di fallback sui target nativi.
  • Il harness constant-time inventaria le operazioni esatte in ct.toml e combina l'ispezione ottimizzata del binario linkato, le prove BINSEC per i kernel a forma fissa dichiarati e i test di timing DudeCT per i casi end-to-end dichiarati.
  • I proprietari dei segreti oscurano Debug e azzerano lo storage inizializzato al drop. Le regole di duplicazione variano per tipo: lo stato BLAKE2/BLAKE3 con chiave supporta Clone. L'inventario di proprietà elenca questi confini. I fallimenti di verifica sono opachi; le aperture AEAD fallite azzerano il plaintext non autenticato.

Un'affermazione constant-time esiste solo quando le prove per il target, la feature, il compilatore, il profilo e l'operazione richiesti passano. Il codice che sembra branchless non è trattato come prova.

Ispeziona le prove di test, il modello constant-time, il ciclo di vita dei segreti e il modello di minaccia.

La lacuna rimanente di revisione indipendente è un audit di sicurezza di terze parti. Il progetto attualmente non può finanziarne uno. Le prove automatizzate non sostituiscono tale revisione, quindi rscrypto non dichiara di essere sottoposto ad audit, validato FIPS 140-3, formalmente verificato o constant time come intera crate.

Segnala le vulnerabilità sospette tramite GitHub Private Vulnerability Reporting seguendo il processo descritto in SECURITY.md, non tramite una issue pubblica.

Installa solo ciò che usi

Build no_std minimale per SHA-2:

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

Stack completo di primitive con casualità del sistema operativo abilitata:

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

La feature predefinita è std; default-features = false la rimuove. 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 la selezione della build; Cargo.toml possiede 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);

Le API di hash supportano l'uso one-shot e in streaming. Flussi di lavoro eseguibili per AEAD, firme, RSA, ECDH P-256 e P-384, X25519, ML-KEM, hashing di password e introspezione del backend sono in examples/README.md.

Mappa delle primitive e delle feature

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

Il digest di accettazione WebSocket, solo per compatibilità, richiede websocket-sha1, che è escluso da full e da ogni altra feature ombrello.

Usa docs.rs per i tipi e i metodi esatti.

Piattaforme e dispatch

L'implementazione Rust portabile è l'autorità byte per byte. Il supporto dei target in fase di compilazione e, con std, le capacità della CPU rilevate a runtime selezionano i kernel SIMD o assembly idonei. L'accelerazione non supportata ricade sul Rust portabile.

La guida alle piattaforme spiega il catalogo dei target supportati, il dispatch, la copertura no_std e i limiti di portable-only.

Progetto

Le guide e gli esempi descrivono il codice sorgente di accompagnamento. Usa la versione corrispondente della documentazione API per una dipendenza pubblicata.

Leggi CONTRIBUTING.md prima di modificare il codice. Le modifiche pubblicate sono in CHANGELOG.md.

Licenza

Categorie