Le righe delle impronte hanno la forma «ALGORITMO hash» così può copiarle nelle note di rilascio o nei manifest di download.
Generatore di hash — ogni algoritmo spiegato da zero
In una frase: una funzione di hash crittografica è un frullatore a senso unico — prende un numero qualsiasi di byte e li comprime in un'impronta di lunghezza fissa, in modo che lo stesso input dia sempre la stessa impronta, ma l'impronta non dice nulla su come ricostruire l'input. Questa pagina ne esegue undici interamente nella scheda del browser.
Ogni algoritmo qui sotto è spiegato con gli stessi quattro passaggi: che cos'è in parole semplici, l'intuizione di come funziona senza formule, se va ancora usato oggi, e gli errori che le persone commettono più spesso.
MD5
Che cos'è. MD5 (1992) comprime qualsiasi input in un'impronta a 128 bit (32 caratteri esadecimali). È stato progettato per essere veloce sui computer degli anni '90, e lo è ancora — ed è proprio per questo che è ancora ovunque: pagine di download di software, cache di deduplicazione dei file, chiavi di database legacy.
Come funziona, intuitivamente. L'input viene tagliato in blocchi da 64 byte. Ogni blocco viene mescolato in uno stato rotante a 128 bit quattro volte di seguito (quattro turni di mescolamento leggermente diversi), e dopo l'ultimo blocco lo stato viene stampato come digest. Il mescolamento è costruito con addizioni, rotazioni e ricerche in tabella — economico allora, economico oggi.
Va usato? Per checksum in cui nessuno sta cercando di imbrogliarla — rilevare un download corrotto, trovare file duplicati — sì, segnala ancora perfettamente la corruzione. Per tutto ciò che è avversariale, no: dal 2004 i ricercatori possono costruire in pochi secondi due file diversi con lo stesso MD5, e nel 2008 ci sono state contraffazioni reali di certificati che usavano collisioni MD5. Lo tratti come un numero di serie, non come una serratura.
Errori comuni. Usare MD5 per le password (troppo veloce — veda il Generatore di hash per password per ciò che va usato invece); fidarsi di un file perché «l'MD5 coincide» quando l'attaccante ha pubblicato anche l'MD5; e incollare l'intera riga MD5 (file) = hash invece del solo hash — il riquadro di verifica qui sopra accetta entrambi.
SHA-1
Che cos'è. SHA-1 (1995, NSA) produce un digest a 160 bit (40 caratteri esadecimali). Per vent'anni è stato l'hash di integrità predefinito di Git, dei certificati TLS e delle firme PGP.
Come funziona, intuitivamente. La stessa ricetta della famiglia di MD5 ma con uno stato a 160 bit, 80 turni di mescolamento per blocco da 64 byte e un insieme più ampio di operazioni. I turni extra servivano a rendere il frullatore più difficile da decifrare per ingegneria inversa.
Va usato? No, per tutto ciò che è avversariale. La rottura teorica è diventata pratica nel 2017, quando Google ha prodotto due PDF diversi con gli stessi valori SHA-1 (l'attacco SHAttered, a circa 6500 anni-CPU). Git memorizza ancora gli oggetti sotto SHA-1, ma lo considera solo un identificatore, e da allora ha aggiunto il rilevamento delle collisioni. Per il nuovo lavoro usi SHA-256 o SHA-3.
Errori comuni. Credere che 160 bit «siano ancora abbastanza lunghi» — la rottura riguarda la struttura interna, non la forza bruta; e confondere RIPEMD-160 con SHA-1 perché entrambi sono lunghi 40 caratteri esadecimali (il riquadro di identificazione qui sopra li distingue).
SHA-2: SHA-256, SHA-384 e SHA-512
Che cos'è. La famiglia SHA-2 (2001, NSA) è il cavallo di battaglia del controllo di integrità moderno. SHA-256 dà 256 bit (64 caratteri esadecimali), SHA-512 dà 512 bit, e SHA-384 è SHA-512 con il risultato troncato a 384 bit — utile quando un protocollo impone un tag più corto.
Come funziona, intuitivamente. I blocchi da 64 byte (o da 128 byte per le varianti a 512 bit) vengono piegati in uno stato di 8 parole tramite 64 (o 80) turni di passaggi di addizione, rotazione e mescolamento. A differenza di MD5, la pianificazione allunga prima ogni blocco in un buffer espanso, ed è ciò che ha sconfitto il tipo di attacco che aveva rotto MD5 e SHA-1. Una curiosità utile da sapere: sulle CPU a 64 bit SHA-512 è più veloce di SHA-256, perché elabora il doppio dei dati per turno con aritmetica a 64 bit.
Va usato? Sì — SHA-256 è la risposta predefinita oggi per i checksum dei file, la firma del codice e le impronte dei certificati, senza alcuna rottura pratica nota dopo due decenni di analisi. Usi SHA-384/512 quando vuole un margine maggiore o quando la piattaforma li esegue più velocemente.
Errori comuni. Usare SHA-256 da solo per le password — è un hash veloce, e la velocità è il nemico in quel caso (usi bcrypt/scrypt/Argon2id); e confondere la lunghezza del digest con la robustezza per la resistenza alle collisioni in contesti avversariali — la lunghezza stabilisce solo il tetto.
SHA-3 (SHA3-256 / SHA3-512) e Keccak-256
Che cos'è. SHA-3 (2015, standardizzato dalla proposta Keccak di Bertoni, Daemen, Peeters e Van Assche) è il terzo standard di hash del NIST. Non condivide nulla con gli interni di SHA-2 — è stato scelto proprio per essere un backup indipendente nel caso in cui SHA-2 dovesse cadere.
Come funziona, intuitivamente. Invece di mescolare blocchi in un piccolo stato, Keccak «assorbe e rilascia» ripetutamente: l'input viene assorbito bit per bit in una spugna a 5×5×64 bit, l'intera spugna viene rimescolata da una permutazione fissa (24 turni di operazioni bit a bit sull'intero stato), poi i bit del digest vengono spremuti fuori. L'immagine della spugna è l'intera idea: i bit di capacità non vengono mai emessi, e sono ciò che rende la funzione a senso unico.
Keccak-256 contro SHA3-256. Differiscono per esattamente un byte di padding. La proposta originale del team Keccak completava l'ultimo blocco con 0x01; il NIST ha cambiato il padding standard in 0x06 (separazione di dominio usata con Keccak dell'epoca SHA-2). Ethereum ha adottato il padding originale, quindi il suo «keccak256» differisce dallo SHA3-256 standard per ogni input. Questa pagina offre entrambi, selezionabili separatamente.
Va usato? Sì — come scelta principale quando la policy richiede un algoritmo non SHA-2, oppure ovunque l'ecosistema già lo usi. Errori comuni: presumere che SHA3-256 e Keccak-256 siano intercambiabili (non lo sono — confronti le due righe che questa pagina produce per lo stesso input); e presumere che «SHA-3» sostituisca SHA-2 — entrambi sono sicuri, SHA-2 resta quello più diffuso.
RIPEMD-160
Che cos'è. RIPEMD-160 (1996, il consorzio europeo RIPE di accademici, rafforzato da Dobbertin, Bosselaers e Preneel) produce 160 bit. È un disegno interamente europeo, deliberatamente indipendente dalla famiglia SHA progettata dalla NSA.
Come funziona, intuitivamente. Ogni blocco da 64 byte viene elaborato da due linee parallele di 80 turni con costanti e quantità di rotazione diverse; alla fine le due linee e lo stato precedente vengono combinati. La struttura a due binari era il modo dei progettisti per resistere agli attacchi differenziali che stavano rompendo altri hash degli anni '90.
Va usato? In pratica sopravvive soprattutto dentro altri sistemi: gli indirizzi Bitcoin fanno l'hash delle loro chiavi pubbliche con RIPEMD-160(SHA-256(pk)), le vecchie chiavi OpenPGP lo offrono come opzione di hash, ed è l'hash tradizionale dei pezzi BitTorrent v1 accanto a SHA-1. Non ha un attacco di collisione pratico, ma la dimensione di 160 bit gli dà il margine di sicurezza più piccolo di questa pagina. Per un uso autonomo nuovo preferisca SHA-256 o SHA-3.
Errori comuni. Credere che le due linee parallele lo rendano «due volte più forte» — la dimensione dell'output è ciò che limita la resistenza alle collisioni; e confonderlo con SHA-1 (stessa lunghezza di 40 caratteri esadecimali; il riquadro di identificazione elenca entrambe le possibilità una accanto all'altra).
BLAKE2b-512 e BLAKE2s-256
Che cos'è. BLAKE2 (2013, Aumasson, Neves, Wilcox-O’Hearn e Winnerlein) è un hash progettato per la velocità del software: BLAKE2b è destinato a piattaforme a 64 bit con output fino a 512 bit, BLAKE2s a piattaforme a 32 bit con output fino a 256 bit.
Come funziona, intuitivamente. Discende dal finalista SHA-3 BLAKE, il cui nucleo è una permutazione con chiave presa in prestito dal cifrario a flusso ChaCha: una matrice 4×4 di parole viene rimescolata alternando passaggi di mescolamento per colonne e per diagonali — come mescolare una griglia prima dall'alto verso il basso, poi lungo le diagonali — per 12 (BLAKE2b) o 10 (BLAKE2s) turni per blocco. Poiché quei passaggi si mappano molto bene sulle istruzioni della CPU, BLAKE2 è spesso più veloce di MD5 pur offrendo una sicurezza paragonabile a SHA-3.
Va usato? Sì — è un disegno moderno e non rotto, popolare nel software sensibile alle prestazioni (integrità dei pacchetti in alcuni ecosistemi, storage indirizzato per contenuto, deduplicazione dei backup) e come MAC veloce. In questa pagina, BLAKE2b-512 dà i digest più lunghi e BLAKE2s-256 l'opzione moderna compatta.
Errori comuni. Pensare che «più veloce significhi più debole» — BLAKE2 è più veloce per progetto, non perché taglia gli angoli; e non rendersi conto che BLAKE2 accetta anche una chiave (diventando un MAC) o una stringa di personalizzazione — questa pagina lo usa sempre in modalità semplice senza chiave.
Leggere i riquadri di Verifica e Identificazione
Verifica. Il riquadro di verifica normalizza qualsiasi cosa incolli — maiuscole o minuscole, due punti ogni due cifre, un prefisso sha256=, l'involucro in stile BSD SHA256 (file) = hash, una riga GNU md5sum con il nome del file dopo l'hash, eventuali \r\n residui — poi ricalcola ogni algoritmo selezionato sul suo input attuale (testo o il file scelto) e segnala ogni algoritmo che corrisponde. Una corrispondenza verde significa «questi byte sono esattamente ciò che l'editore ha sottoposto ad hash»; il rosso significa che nessuno degli algoritmi selezionati lo ha prodotto — provi a selezionarne altri, oppure controlli se l'incolla è stata troncata.
Identifica. Il riquadro di identificazione non calcola alcun hash; legge la forma della stringa. La lunghezza restringe i candidati: 32 caratteri esadecimali potrebbero essere MD5, 40 potrebbero essere SHA-1 o RIPEMD-160, 64 potrebbero essere SHA-256 / SHA3-256 / Keccak-256 / BLAKE2s-256, 96 SHA-384, 128 SHA-512 / SHA3-512 / BLAKE2b-512. I prefissi rivelano gli hash di password ($2a$/$2b$/$2y$ bcrypt, $argon2id$, $scrypt$, $6$ sha512crypt, $1$ MD5-crypt) — sono una specie diversa (veda il Generatore di hash per password) e questa pagina non li calcola di proposito. Una stringa con +, / e = la cui lunghezza è multipla di 4 è più probabilmente dati codificati in Base64 che un digest esadecimale; lo strumento la decodifica e riporta la lunghezza in byte che corrisponderebbe.
Che cosa può dirle l'identificazione e che cosa no. La lunghezza e l'insieme di caratteri sono impronte del formato, non una prova dell'algoritmo: due stringhe di 64 caratteri esadecimali possono provenire da SHA-256 oppure da SHA-512 troncato. L'identificatore ordina le possibilità; il riquadro di verifica è quello che dimostra a quale algoritmo corrispondono davvero i suoi byte.
Tutti e undici in un colpo d'occhio
| Algoritmo |
Digest |
Introdotto |
Digest di «The quick brown fox jumps over the lazy dog» |
| MD5 | 128 bit | 1992 | 9e107d9d372bb6826bd81d3542a419d6 |
| SHA-1 | 160 bit | 1995 | 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 |
| SHA-256 | 256 bit | 2001 | d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 |
| SHA-384 | 384 bit | 2001 | ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1 |
| SHA-512 | 512 bit | 2001 | 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 |
| SHA3-256 | 256 bit | 2015 | 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 |
| SHA3-512 | 512 bit | 2015 | 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450 |
| Keccak-256 | 256 bit | prima del 2015 | 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15 |
| RIPEMD-160 | 160 bit | 1996 | 37f332f68db77bd9d7edd4969571ad671cf9dd3b |
| BLAKE2b-512 | 512 bit | 2013 | a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918 |
| BLAKE2s-256 | 256 bit | 2013 | 606beeec743ccbeff6cbcdf5d5302aa855c256c29b88c8ed331ea1a6bf3c8812 |
Ogni digest nella tabella sopra è prodotto dai motori di questa stessa pagina — selezioni tutti gli algoritmi, prema Esempio e confronti. Le righe di SHA-3, Keccak, RIPEMD-160 e BLAKE2 provengono dal kernel crypto-shared.js ospitato in proprio, usato da tutti gli strumenti crittografici di questo sito.
Domande frequenti
Quale riquadro devo considerare affidabile per un download? Il riquadro di verifica, con SHA-256 selezionato — la maggior parte degli editori oggi firma con SHA-256 o SHA-512. Il riquadro di identificazione si limita a nominare candidati; non dimostra mai nulla sul suo file.
Perché Keccak-256 è nell'elenco? Perché Ethereum, Swarm e alcuni sistemi di registro hanno standardizzato il padding precedente allo standard. Se verifica un keccak256 di Ethereum deve usare quella riga, non SHA3-256.
Due input diversi possono condividere un digest? In teoria sì — infiniti input si mappano in un insieme finito di digest (principio dei cassetti). In pratica, trovare una coppia del genere prima della fine dell'universo è ciò di cui tratta la «resistenza alle collisioni», e ogni algoritmo qui sopra tranne MD5 e SHA-1 regge ancora.
Gli hash sono cifratura? No. La cifratura è reversibile con una chiave; un hash è un frullatore a senso unico. Nulla di questa pagina può essere «decifrato» tornando al suo testo — ed è una caratteristica, non un limite.