Algoritmi di hash spiegati: MD5, SHA-1, SHA-256, SHA-512
Risposta rapida
MD5 e SHA-1 sono danneggiati e non devono essere utilizzati per scopi sensibili alla sicurezza. SHA-256 è l'impostazione predefinita attuale per controlli di integrità, firme e blockchain. SHA-512 è più veloce su CPU a 64 bit e viene utilizzato dove si desiderano digest più lunghi. Utilizza il nostro generatore di hash per calcolare uno qualsiasi di questi nel tuo browser; utilizzare File Hash per verificare l'integrità del file.
Introduzione
Una funzione hash crittografica accetta un input di dimensione arbitraria e produce un digest di dimensione fissa che è deterministico, veloce da calcolare, impossibile da invertire, resistente alle collisioni e sensibile alle valanghe (una modifica di un bit altera circa la metà dei bit di output). MD5 (128 bit), SHA-1 (160 bit), SHA-256 (256 bit) e SHA-512 (512 bit) sono le quattro funzioni hash più comunemente riscontrate, ma le loro proprietà di sicurezza differiscono notevolmente.
Passo dopo passo
-
Comprendere le proprietà di una funzione hash
Un buon hash crittografico è deterministico (lo stesso input produce sempre lo stesso output), output di dimensione fissa, veloce da calcolare, impossibile da invertire (resistenza pre-immagine), impossibile trovare due input con lo stesso output (resistenza alle collisioni) e valanghe (una piccola modifica dell'input capovolge circa il 50% dei bit di output).
-
Conoscere le dimensioni del digest
MD5 produce 128 bit (32 caratteri esadecimali). SHA-1 produce 160 bit (40 caratteri esadecimali). SHA-256 produce 256 bit (64 caratteri esadecimali). SHA-512 produce 512 bit (128 caratteri esadecimali). Digest più lunghi riducono la probabilità di collisione ma aumentano le dimensioni di archiviazione.
-
Scopri perché MD5 e SHA-1 non funzionano
I ricercatori hanno riscontrato attacchi pratici di collisione contro MD5 (2004) e SHA-1 (2017, attacco SHAttered). Le collisioni consentono a un utente malintenzionato di creare due input diversi con lo stesso hash, violando le firme digitali e le autorità di certificazione. Nessuno dei due dovrebbe essere utilizzato per la sicurezza.
-
Scegli l'algoritmo giusto
Per i controlli di integrità dei file in cui la velocità conta più della sicurezza, MD5 o SHA-1 sono ancora comuni. Per qualsiasi utilizzo sensibile alla sicurezza (password, firme, certificati, blockchain), utilizzare SHA-256 o SHA-512. Per l'archiviazione delle password, utilizza un KDF lento come bcrypt, scrypt o Argon2, mai raw SHA-256.
-
Calcola e verifica gli hash
Utilizza Hash Generator per eseguire l'hashing del testo con qualsiasi algoritmo o File Hash per calcolare l'hash di un file locale. Confronta il digest risultante con un valore noto per verificarne l'integrità: una differenza di un solo bit significa che il file è stato danneggiato o manomesso.
Esempi
MD5 di "ciao" (128 bit, 32 caratteri esadecimali)
Ingresso: hello
Produzione: 5d41402abc4b2a76b9719d911017c592
SHA-256 di "ciao" (256 bit, 64 caratteri esadecimali)
Ingresso: hello
Produzione: 2cf24dba5fb0d30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Effetto valanga: un cambio di personaggio
Ingresso: ciao contro Ciao
Produzione: SHA-256('hello') avvia 2cf24dba... mentre SHA-256('Hello') avvia 185f8db3... — completamente diverso nonostante la modifica dell'input di un bit
Problemi comuni
- Utilizzo di MD5 o SHA-1 per l'hashing delle password: entrambi sono veloci e non funzionanti, rendendo banali gli attacchi di forza bruta e Rainbow Table. Utilizza invece bcrypt, scrypt o Argon2.
- Confondere l'hashing con la crittografia: l'hashing è unidirezionale e irreversibile; la crittografia è bidirezionale. Non puoi "decifrare" un hash: puoi solo confrontare gli hash.
- Ignorando gli attacchi di estensione della lunghezza: MD5, SHA-1, SHA-256 e SHA-512 sono tutti vulnerabili agli attacchi di estensione della lunghezza se utilizzati come MAC. Utilizza HMAC-SHA256 per l'autenticazione dei messaggi.
- Confronto degli hash con == invece di un confronto a tempo costante: le fughe di tempo consentono agli aggressori di recuperare gli hash byte per byte. Utilizza un confronto in tempo costante nel codice di sicurezza.
Suggerimenti
- Il valore predefinito è SHA-256 per i nuovi sistemi: è veloce, ampiamente supportato e non ha alcun attacco di collisione pratico a partire dal 2026.
- Per l'archiviazione delle password, utilizza bcrypt con un fattore di lavoro pari a 12+ (o Argon2id con 64 MB di memoria), mai raw SHA-256, che è troppo veloce rispetto alle GPU.
- Quando verifichi i download dei file, confronta sia il nome dell'algoritmo che il digest: un hash SHA-1 non ha senso se l'editore intendeva solo SHA-256.
- Utilizza il nostro strumento File Hash per calcolare SHA-256 di file di grandi dimensioni localmente senza caricarli: trasmette il file tramite Web Crypto API.