Cos’è un hash
Un hash crittografico trasforma qualsiasi input in un’impronta di dimensione fissa. Cambia un bit dell’input e cambia tutto l’output; dato un output, non c’è un modo pratico di risalire all’input; ed è impraticabile trovare due input con lo stesso hash (per gli algoritmi ancora sicuri). Questo rende gli hash utili per verificare i download, rilevare modifiche, deduplicare dati e, con un salt e un algoritmo lento, memorizzare password.
| Algoritmo | Output | Stato | Uso oggi |
|---|---|---|---|
| MD5 | 128 bit (32 hex) | Rotto: le collisioni sono banali | Checksum legacy, chiavi di cache. Mai per la sicurezza. |
| SHA-1 | 160 bit (40 hex) | Rotto: collisioni dimostrate (2017) | ID degli oggetti Git (in sostituzione). Non per le firme. |
| SHA-256 | 256 bit (64 hex) | Sicuro | Il default: TLS, firma del codice, checksum dei download, Bitcoin. |
| SHA-384 | 384 bit (96 hex) | Sicuro | Dove si vuole un margine maggiore; subresource integrity. |
| SHA-512 | 512 bit (128 hex) | Sicuro | Più veloce di SHA-256 sulle CPU a 64 bit; hash delle password Linux (sha512crypt). |
HMAC
Un HMAC mescola una chiave segreta nell’hash in un modo specifico (RFC 2104) così che solo chi ha la chiave possa produrre o verificare il valore. È il meccanismo dietro i JWT HS256, le firme dei webhook (GitHub, Stripe), la firma delle richieste AWS e i codici TOTP. Un semplice hash(chiave + messaggio) non è sicuro per questo scopo; HMAC esiste per correggere la debolezza di length-extension di quella costruzione.
Verificare un download
- Trova il checksum pubblicato sulla pagina di download (spesso un file
SHA256SUMS). - Trascina qui il file scaricato, oppure esegui
sha256sum filein una shell. - Incolla il valore pubblicato nella casella di confronto. Una corrispondenza significa che il file è byte per byte quello pubblicato.
Un hash corrispondente prova l’integrità, non l’autenticità: se un attaccante può modificare il file può modificare anche il checksum accanto. Per l’autenticità serve una firma (GPG, Sigstore, minisign).
Password
Non memorizzare le password come hash SHA-256. Gli hash veloci si possono indovinare a miliardi al secondo su una GPU. Usa una funzione lenta, con salt e memory-hard progettata per questo: Argon2id, scrypt o bcrypt.
Domande
Quale hash dovrei usare?
SHA-256, a meno che tu non abbia un motivo specifico. È sicuro, supportato ovunque e veloce. SHA-512 è un po’ più veloce su hardware a 64 bit. MD5 e SHA-1 vanno bene solo per usi non di sicurezza come le chiavi di cache.
Un hash si può decifrare?
No. Un hash non è cifratura; non c’è chiave né inversa. Gli attaccanti invece indovinano gli input e confrontano gli hash, cosa che funziona per input corti o comuni (da qui le rainbow table) ed è il motivo per cui le password hanno bisogno di salt e hash lenti.
Perché il mio MD5 è diverso da quello sul sito?
Di solito per i fine riga (CRLF contro LF), un a capo finale, o una codifica del testo diversa. Calcola l’hash dei byte esatti: per un file, usa l’area di trascinamento invece di incollarne il contenuto.
Lo SHA-256 calcolato qui è lo stesso di sha256sum?
Sì, byte per byte. Lo strumento usa l’implementazione WebCrypto del browser per la famiglia SHA. Per il testo in input i byte sono la codifica UTF-8 di ciò che hai scritto.
Il mio file o la mia password vengono inviati da qualche parte?
No. L’hash viene calcolato in locale da JavaScript. Il sito non ha alcun componente lato server che potrebbe riceverli.