Security 6 Jul 2026 7 min di lettura

Cos'è un Checksum? MD5, SHA-1, SHA-256 Spiegati

Un checksum è una breve impronta digitale che ti permette di verificare se un file è stato modificato o corrotto. Capire quale algoritmo di hashing utilizzare — e dove MD5 non è più sufficiente — ti protegge da comuni errori di sicurezza.

Checksum guide: MD5, SHA-1, SHA-256 hash functions explained

Cos'è un Checksum?

Un checksum è una stringa a lunghezza fissa derivata da un frammento di dati eseguendolo attraverso una funzione hash. Il checksum agisce come un'impronta digitale: se anche un singolo bit dei dati originali cambia, il checksum cambia completamente. Questo rende i checksum utili per due cose:

  • Verifica dell'integrità — questo file è arrivato senza corruzione o manipolazione?
  • Identità — questo identico file (o frammento di dati) è uguale a un'altra copia?

Quando scarichi un software da un sito ufficiale, la pagina di download spesso mostra un hash MD5 o SHA-256. Dopo il download, calcoli l'hash del tuo file locale e lo confronti. Se corrispondono, il file è intatto.

Come Funziona una Funzione Hash

Una funzione hash crittografica prende un input di qualsiasi lunghezza e restituisce un digest a lunghezza fissa. Quattro proprietà definiscono una buona funzione hash:

  • Deterministica — lo stesso input produce sempre lo stesso output
  • Unidirezionale (One-way) — non puoi invertire un hash per tornare all'input originale (in tempi ragionevoli)
  • Effetto valanga (Avalanche effect) — cambiare un solo carattere nell'input cambia circa la metà dei bit dell'output
  • Resistenza alle collisioni — dovrebbe essere computazionalmente impossibile trovare due input diversi che producano lo stesso hash
Esempio — effetto valanga di SHA-256:
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("Hello") = 185f8db32921bd46d35e3a1a4e9a9b9c6a7e6a7d2d2c4e9d... (completamente diverso)

MD5 — Veloce, Familiare e Inadatto per la Sicurezza

MD5 (Message Digest Algorithm 5) produce un digest di 128 bit (32 caratteri esadecimali). È stato progettato nel 1991 ed è diventato l'algoritmo di checksum predefinito su Internet per circa due decenni.

Dove MD5 è ancora accettabile:

  • Controlli di integrità non legati alla sicurezza — verificare che un grande trasferimento di file non sia stato corrotto durante il transito
  • De-duplicazione — controllare se due file sono identiche (come pre-controllo rapido prima di un confronto byte per byte)
  • Chiavi di cache e ETags dove gli attacchi a collisione non sono una preoccupazione

Dove MD5 non è accettabile:

  • Archiviazione delle password — MD5 è estremamente veloce, il che rende banali gli attacchi brute-force tramite GPU. Sono ottenibili miliardi di hash MD5 al secondo con hardware consumer.
  • Firme digitali — gli attacchi a collisione di MD5 sono stati dimostrati in pratica. Possono essere creati due file diversi per avere lo stesso hash MD5.
  • Impronte digitali dei certificati — il medesimo problema di collisione si applica.
L'uso di MD5 per le password è una vulnerabilità critica. Se trovi md5($password) in codice legacy, sostituiscilo con password_hash() in PHP o bcrypt/Argon2 in qualsiasi altro linguaggio. MD5 non è un algoritmo di hashing per password — non è mai stato progettato per essere lento, e la lentezza è ciò che rende sicuro l'hashing delle password.

SHA-1 — Obsoleto

SHA-1 produce un digest di 160 bit (40 caratteri esadecimali). Ha sostituito MD5 come algoritmo consigliato alla fine degli anni '90 ed è stato ampiamente utilizzato in certificati SSL/TLS, sistemi di controllo versione e controlli di integrità dei file.

Nel 2017, il team Project Zero di Google ha dimostrato la prima collisione pratica di SHA-1 (l'attacco "SHAttered"), richiedendo circa 6.500 anni CPU equivalenti di calcolo. I principali browser e le autorità di certificazione hanno smesso di accettare certificati SHA-1 nel 2017. Git utilizza ancora internamente SHA-1 per gli hash dei commit, ma sono in fase di migrazione a SHA-256 come alternativa opzionale.

Per nuove applicazioni, non utilizzare SHA-1. Usa invece SHA-256 o SHA-512.

SHA-256 — Lo Standard Attuale

SHA-256 fa parte della famiglia SHA-2 progettata dalla NSA e pubblicata nel 2001. Produce un digest di 256 bit (64 caratteri esadecimali). Ad oggi, non esiste alcun attacco a collisione pratico contro SHA-256.

Usa SHA-256 per:

  • Verifica dell'integrità dei file (download di software, backup)
  • Firme digitali (certificati TLS, firma del codice)
  • Token di autenticazione basati su HMAC (HMAC-SHA256)
  • Blockchain e criptovalute (Bitcoin utilizza il doppio SHA-256)
  • Hash dei commit Git in modalità SHA-256
  • Firme JWT (JSON Web Token) quando si usa HS256 o RS256

SHA-256 è la scelta predefinita corretta per quasi ogni applicazione che necessita di un hash sicuro. In caso di dubbio, usa SHA-256.

SHA-512 — Quando ne hai Bisogno di Più

SHA-512 produce un digest di 512 bit (128 caratteri esadecimali). Fa parte della stessa famiglia SHA-2 ed è ugualmente sicuro. La principale differenza pratica:

  • Su processori a 64 bit, SHA-512 può essere effettivamente più veloce di SHA-256 perché l'algoritmo è ottimizzato per dimensioni di parola a 64 bit
  • Su sistemi e hardware a 32 bit, SHA-256 è più veloce
  • SHA-512 ha un output più grande, il che significa una maggiore archiviazione e trasmissione

Usa SHA-512 quando l'applicazione richiede un digest più grande o quando ti trovi su hardware dove SHA-512 ha un vantaggio di prestazioni. Per la maggior parte delle applicazioni web, SHA-256 è sufficiente.

Una Nota sull'Hashing delle Password

Nessuno degli algoritmi sopra indicati dovrebbe essere usato direttamente per l'archiviazione delle password. MD5, SHA-1, SHA-256 e SHA-512 sono tutti progettati per essere veloci — e la velocità è esattamente sbagliata per le password.

L'hashing delle password deve essere deliberatamente lento, in modo che un database rubato non possa essere violato rapidamente. Usa algoritmi di hashing delle password progettati appositamente:

  • bcrypt — è lo standard da oltre 20 anni, supportato in quasi ogni linguaggio
  • Argon2 (specificamente Argon2id) — vincitore della Password Hashing Competition (2015), consigliato per nuove applicazioni
  • scrypt — memory-hard, anche questa una scelta valida

In PHP: password_hash($password, PASSWORD_ARGON2ID). In Node.js: usa il pacchetto bcryptjs o argon2. Questi gestiscono automaticamente la generazione del sale e la regolazione del fattore di lavoro.

Come Verificare un Checksum di File

Quando scarichi un software e il sito fornisce un hash SHA-256:

Su macOS / Linux:
shasum -a 256 downloaded-file.zip
# confronta l'output con l'hash ufficiale
Su Windows (PowerShell):
Get-FileHash downloaded-file.zip -Algorithm SHA256

In alternativa, usa il nostro Generatore di Hash per incollare il contenuto del file o del testo e calcolare gli hash MD5, SHA-1, SHA-256 o SHA-512 direttamente nel tuo browser — nulla viene inviato a un server.

Genera MD5, SHA-256 e Altro

Calcola qualsiasi hash (MD5, SHA-1, SHA-256, SHA-512) da testo o contenuti di file direttamente nel tuo browser — senza caricamenti, senza server.