- Per l'integrità, utilizzare SHA-256, SHA-512 o SHA-3; evitare MD5 e SHA-1.
- Per la crittografia: AES-256 su GCM/XTS; Serpent, Twofish e Camellia sono valide alternative.
- Password: Argon2id (≥19 MiB, 2 iter.) o scrypt/bcrypt ben parametrizzato.
- 3DES, RIPEMD-160 e SHA-1 sono deprecati: migrare ad AES e SHA-2/3.
Quando si parla di protezione dei dati, non tutto è uguale: codice y fare hashish Sono cose diverse con obiettivi diversi. In questa guida ti spiegherò, in modo chiaro e conciso, cosa sono. algoritmi di crittografia e hashing più sicuri, come sceglierli in base al caso d'uso e quali opzioni andrebbero evitate al giorno d'oggi.
Oltre a coprire i classici come AES, SHA-2 e SHA-3Vedrai perché. MD5, SHA-1 o 3DES Non sono più una buona idea, cosa mi consigli? OWASP per salvare le password e come controllare le integridad di file correttamente. E, poiché me lo hai chiesto, ti spiegherò anche quale usare "se la velocità non è importante", includendo cifrari come Camelia, Duepesci, Serpente o Kuznyechike hash come SHA-256, SHA-512, Whirlpool o Streebog.
Cos'è una funzione hash e cosa la rende sicura?
Una funzione hash trasforma un input di dimensione arbitraria in un riepilogo di lunghezza fissaPer uso crittografico, un buon hash dovrebbe essere deterministico, resistente a preimmagine seconda preimmagine già collisioni, oltre ad esporre il famoso effetto valangaUna modifica minima nell'input produce un risultato completamente diverso.
In una funzione ideale, i riepiloghi sono distribuiti in un uniforme e imprevedibile in tutto lo spazio di output, in modo che due input simili generino hash apparentemente non correlati. Sebbene l'ideale non esista, con dimensioni di output come 256 bit, Lo spazio possibile è gigantesco, il che provoca collisioni casuali computazionalmente irrealizzabile nella pratica corrente.
Importante: un hash è unidirezionaleNon può essere "decifrato". L'unico modo teorico per recuperare la voce è attraverso un attacco da parte di forza bruta o tramite dizionario, ed è qui che si spiega il motivo per cui le password devono essere trattate con funzioni e parametri specifici che le rendono lento per calcolare un aggressore.
Hash vs crittografia: non sono la stessa cosa
La crittografia è bidirezionaleConverte il testo in chiaro in testo cifrato e, con la chiave corretta, inverte il processo. L'hash è irreversibile e restituisce sempre un output di lunghezza fissaLa crittografia protegge il riservatezzaL'hash contribuisce integridad e funge da "impronta" dei dati.
Casi tipici: per trasmettere dati sensibili, si utilizza crittografia (ad esempio, HTTPS); per verificare se un file è stato modificato, un hashPer memorizzare le password non vengono utilizzati né la crittografia né SHA-256: vengono impiegati altri metodi. Password KDF come Argon2id, scrypt o bcrypt con parametri di costo.
Stato delle funzioni hash più comuni
- MD5 Genera 128 bit ed è ora inutilizzabile per scopi crittografici: si verificano collisioni pratiche. Attualmente, può essere utilizzato solo in applicazioni non critiche come rilevamento di corruzione accidentaleTuttavia, è consigliabile migrare verso alternative moderne perché la loro debolezza facilita gli attacchi da parte collisione intenzionale.
- SHA-1 Produce 160 bit ed è anche compromesso. La ricerca ha ridotto il costo di una collisione a circa 263 operazioni e nel 2017 è stata dimostrata la collisione pratica IN FRANTUMIIl suo utilizzo è sconsigliato nelle firme, nei certificati e in qualsiasi scenario di sicurezza reale.
- SHA-2 Questa è la famiglia raccomandata dal NIST per l'uso generale: SHA-256, SHA-512, oltre alle varianti troncate come SHA-224, SHA-384, SHA-512/224 o SHA-512/256Mantengono un'elevata resistenza alle collisioni e beneficiano delle ottimizzazioni di hardware, Anche se SHA-256 Di solito è del 20-30% in più lento rispetto a MD5 o SHA-1.
- SHA-3 (precedentemente Keccak) non è un "SHA-2 migliorato"; utilizza un costruzione in spugna ed è intrinsecamente resistente a attacchi di estensione della lunghezzaOffre varianti SHA3-224/256/384/512 ed estensioni di output variabile SHAKE128/256. La sua adozione è in crescita, sebbene SHA-2 rimanga dominante per prestazioni e supporto.
- Altri hash: RIPE®-160 Offre meno sicurezza contro le collisioni rispetto al moderno SHA-2 ed è considerato obsoleto per nuovi progetti; Mulinello y Streebog (GOST R 34.11-2012) esistono, ma al di fuori di ambienti specifici il loro ecosistema e le loro accelerazioni sono limitato rispetto a SHA-2/3.
Controllo dell'integrità dei file (esempi pratici)
La pubblicazione e la verifica di un hash consentono il rilevamento alteraciones o corruzione nel download, e per creare un collegamento per il download diretto È inoltre consigliabile pubblicare il valore SHA-256 ufficiale. Sebbene vedrete esempi che utilizzano MD5, la prassi consigliata oggi è quella di utilizzare il valore SHA-256 ufficiale. SHA-256 o superiore. In sistemi come Unix Puoi fare qualcosa del genere: sha256sum archivo.iso e confrontarlo con il valore ufficiale.
Se hai bisogno di automatizzare un processo, puoi concatenarlo comandiAd esempio, generando un pacchetto e il suo hash in una riga: tar cf - carpeta | tee paquete.tar | sha256sum -Il ricevitore verificherebbe con sha256sum -c utilizzando il valore pubblicato.
En Windows, PowerShell semplifica il calcolo con: Get-FileHash .\fichero.zip -Algorithm SHA256Ci sono anche comandi per Ispezionare gli attributi dei file e la crittografia in Windows. Evitare di usare MD5 o SHA-1 come "sigillo di integrità" in contesti di sicurezza, perché un aggressore potrebbe forzare le collisioni e ingannare il processo.
Quando usare l'hash e quando crittografare
Stati Uniti d'America hash Quando cerchi integrità, deduplicazione o indicizzazione rapida: verifica dei file, firme digitali (l'hash del messaggio è ciò che è firmato), tabelle hash nelle strutture dati o la generazione di identificatori univoci. Sono anche utilizzati in lista nera e firme di il malware.
Stati Uniti d'America crittografia Per la riservatezza: dati in transito (HTTPS, VPN), dati a riposo (dischi, database), backup e cellulareLa crittografia impedisce a terzi di leggere il contenuto senza l' chiave di decrittazione.
Archiviazione delle password: raccomandazioni KDF e OWASP
Per le password, non usare mai hash veloci di uso generale (MD5, SHA-1, SHA-256 "raw"). Utilizza password KDF con costo configurabile y sal casuale: Argon2id, scrypt o bcryptIl suo obiettivo è rendere più costosi gli attacchi brute-force e GPU/ASIC.
OWASP dà priorità Argon2id con, come minimo, 19 MiB di memoria, 2 iterazioni y parallelismo 1Se non è disponibile, suggerisci scrypt con N = 217, r = 8 yp = 1Come terza opzione, bcrypt con un fattore di costo intorno a 10-12 (o quello che ti dà circa 0,5 s sul tuo hardware).
PBKDF2 Rimane per i requisiti di conformità: è valido se si regolano iterazioni sufficientemente elevate (milioni), ma rispetto alle GPU/ASIC moderne ha prestazioni peggiori di scrypt o Argon2id a causa del suo basso costo della memoria.
Prestazioni dell'algoritmo hash
Gli hash generici sono progettati per essere Veloce ed efficiente, ideale per protocolli e verifiche, ma l'esatto opposto di ciò che stiamo cercando le passwordLa velocità effettiva dipende dall'input, dall'algoritmo, dal istruzione del processore e del parallelismo.
In scenari ad alto volume o in tempo reale, un hash troppo lento può diventare collo di bottigliaEcco perché distinguiamo tra funzioni veloci (SHA-256/512) e KDF lenti (Argon2id, scrypt, bcrypt) che introducono un costo di CPU e memoria deliberare.
Proprietà essenziali di un buon hashish
Oltre al determinismo e all'effetto valanga, l'hash deve essere resistente a preimmagine seconda preimmagine già collisioniE una dimensione minima di 256 bit, per resistere alla forza bruta attuale e ai margini futuri.
Sebbene a volte venga semplificato dicendo che "due input diversi non possono avere lo stesso hash", la realtà è che con output finiti le collisioni ciLa cosa importante è che sono difficili da trovare. Ecco perché MD5 e SHA-1 sono considerati rotto e SHA-2/3 rimangono la scommessa sicura.
Crittografia simmetrica e modalità: cosa usare oggi
Nella crittografia simmetrica, il riferimento è AES con le chiavi di 128/192/256 bit. La cosa critica non è solo l'algoritmo, ma il modo di funzionamento: evitare ECB, utilizzare modalità autenticate come GCM o, in immagazzinamento, XTS (ad esempio, per i dischi). Se si lavora in ambienti Windows, verificare anche il supporto hardware e il Sicurezza della crittografia BitLocker.
Altri cifrari: Camelia (standard ISO, buon profilo), Twofish y serpente (finalisti AES, ancora robusti), ChaCha20-Poly1305 (software estremamente veloce e molto sicuro). 3DES y DES sono rimasti indietro: anche il 3DES è limitato e sconsigliato da più standard.
Crittografia asimmetrica, firme e dimensioni delle chiavi
Per stabilire le chiavi e la firma si utilizzano i seguenti elementi: RSA y ECCCon RSA, utilizzare OAEP per la crittografia e PSS Per la firma; non "prenotare" mai RSA. Dimensioni: almeno RSA 3072 bit o ECC256 bit per un livello di sicurezza approssimativo di 128 bit simmetrici.
Vedrai anche Diffie-Hellman (inclusa la sua variante a curva ellittica) per lo scambio di chiavi e DSA/ECDSA per le firme. Nei protocolli moderni, la combinazione TLS Utilizza lo scambio asimmetrico e la crittografia simmetrica autenticata per bilanciare la sicurezza e performance.
Cosa scegliere se la velocità non è importante?
Se dai la priorità sicurezza/robustezza Per quanto riguarda la velocità, la scelta sensata è quella di optare per algoritmi consolidati e ben verificati, evitando "cocktail" non necessari. Nella crittografia simmetrica, optare per AES-256 con GCM (traffico) o XTS (disco). Camelia-256, serpente y Twofish Sono valide alternative.
Le cascate (AES-Twofish, Serpent-Twofish-AES, ecc.) raramente aggiungono valore reale e complicano l'audit e la conformità. Se il tuo modello di minaccia lo richiede, è meglio rafforzare le chiavi, la gestione degli IV, la rotazione e autenticazione di dati che concatenano cifrari a piacimento.
Su Kuznyechik (GOST): tecnicamente valido, ma con meno controlli internazionali. Usalo per conformità Se richiesto dalle normative russe; in caso contrario, utilizzare un bastoncino con AES/Camellia/Serpent. Nei flussi senza AES-NI, ChaCha20-Poly1305 È magnifico, anche se la velocità non è la tua priorità.
Per hash generali (non password): preferire SHA-512/256 o SHA-256 per ecosistema e supporto; SHA3-256 È eccellente se si desidera l'immunità all'estensione della lunghezza per progettazione. Mulinello y Streebog Sono validi, ma la loro adozione e accelerazione sono minori.
Per le password: Argon2id con ampia memoria (≥ 19 MiB), 2+ iterazioni e stretto parallelismo. Se non puoi, scrypt ben parametrizzato o bcrypt a un costo elevato. Questo è molto più efficace del "caricamento di bit" su un SHA generico.
Regola CA5350 (.NET): evitare algoritmi non sicuri
L'analisi del codice .NET avvisa (CA5350) se rileva 3DES, SHA-1 o RIPEMD-160perché offrono garanzie inferiori rispetto alle opzioni moderne. Sostituzioni rapide: TripleDES → AES; SHA-1/RIPEMD-160 → SHA-256/384/512.
Esempi canonici di correzione: di var h = SHA1.Create(); a var h = SHA256.Create();, Da RIPEMD160Managed.Create() a SHA256.Create(); e di TripleDES.Create() a new AesManaged()Inoltre, adatta le dimensioni delle chiavi e le modalità di sicurezza (GCM/XTS) in base alle esigenze.
Confronto rapido: crittografia vs. hashing
| Aspetto | Crittografia | Hash CBD |
|---|---|---|
| Direzionalità | Bidirezionale (reversibile con chiave) | Unidirezionale (irreversibile) |
| Scopo | riservatezza | Integrità/Identificazione |
| Produzione | Lunghezza variabile | Lunghezza fissa |
| Esempi | AES, ChaCha20, RSA, ECC | SHA-256, SHA-512, SHA-3 |
Attacchi e best practice da tenere a mente
Anche con algoritmi robusti, il implementazioni Sono importanti. Evita la BCE, convalida riempitivi correttamente (CBC è sensibile agli oracoli di padding), utilizza AEAD (GCM/ChaCha20-Poly1305), genera IV/nonce imprevedibili e diversi per messaggio e controlla sempre autenticità prima di decifrare.
Per le firme digitali, non firmare l'intero messaggio; firma il hashCon RSA, utilizzare OAEP per la crittografia e PSS per firmare; con ECDSA, si prende cura con amore del casualità dei nonce. E mantenere aggiornate le librerie e le configurazioni contro le nuove vulnerabilità.
SHA-2 e SHA-3 in modo un po' più dettagliato
SHA-256 Funziona con parole da 32 bit, 64 round e blocchi da 512 bit; SHA-512 con parole da 64 bit, 80 round e un blocco da 1024 bit, da qui le sue varianti troncate come SHA-512/256 che garantiscono una migliore resistenza all'estensione della lunghezza quando la potenza è ridotta.
SHA-3 Utilizza uno stato interno a 1600 bit e 24 cicli di permutazione; assorbe i dati con XOR e produce tutti gli output necessari (SHAKE). È molto flessibile e, sebbene nel software generico possa essere più lento SHA-2, con il suo design distintivo, garantisce diversità crittografica.
Note sulla generazione della casualità
Per la crittografia, utilizzare i font di casualità sicura del sistema (ad esempio, /dev/urandom, linguaggio CSPRNG). Evita generatori come rand () o MT19937 per chiavi, IV o salt: non sono resistenti alle previsioni e possono compromettere l'intero schema.
Per chiudere il cerchio, concentriamoci su un'idea pratica: scegliere standard verificati (AES-GCM/XTS, SHA-2/3), evita algoritmi con cronologia delle collisioni o chiavi brevi (MD5, SHA-1, DES/3DES) e per le password applica i moderni KDF come Argon2id o scrypt con parametri ben calibrati; se la velocità non è una priorità, aumenta senza timore i costi e la memoria, perché questo è il tuo miglior scudo contro gli attacchi offline.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.
