Glossario

Funzione di hash

algoritmo di hashfunzione digest

Una funzione di hash trasforma dati di lunghezza praticamente arbitraria in un digest di dimensione fissa.

Definizione

Una funzione di hash prende dei dati e calcola un valore di dimensione fissa chiamato hash, digest o impronta. Gli stessi byte in ingresso producono sempre lo stesso risultato, mentre anche una piccola modifica dell'input dovrebbe normalmente cambiare il digest.

L'hashing non è cifratura. Un digest non è pensato per essere decodificato o decifrato nel messaggio originale; serve per confrontare, identificare, verificare l'integrità e come componente di costruzioni crittografiche più ampie.

Proprietà crittografiche

Una funzione di hash crittografica è progettata per resistere ad attacchi di preimmagine, seconda preimmagine e collisione. In parole semplici, deve essere difficile trovare un input per un digest dato, trovare un input diverso con lo stesso digest di un messaggio scelto o trovare due input qualunque con lo stesso digest.

SHA-256, SHA-512, SHA-3 e BLAKE2 sono usati nei sistemi moderni. MD5 e SHA-1 compaiono ancora in checksum legacy, ma la loro resistenza alle collisioni è compromessa e non dovrebbero proteggere dati sensibili.

Usi e confusioni comuni

Gli hash sono spesso mostrati come stringhe esadecimali. Per esempio SHA-256 produce 32 byte, di solito scritti come 64 caratteri esadecimali. Confrontare un digest appena calcolato con un valore pubblicato e attendibile può indicare se i dati sono cambiati.

Un hash semplice non autentica chi ha creato i dati. Usa un HMAC o una firma digitale quando un attaccante può modificare deliberatamente il contenuto, e usa una funzione per password hashing come Argon2id o bcrypt invece di un hash veloce grezzo per memorizzare password.

Domande frequenti

No. Un hash è un digest unidirezionale, non testo cifrato. Si possono solo indovinare possibili input, calcolarne l'hash e confrontare i risultati.

Si sovrappongono in alcuni usi, ma non nella sicurezza. Una checksum rileva modifiche accidentali; un hash crittografico è progettato per resistere a determinati attacchi deliberati.

Possono usare algoritmi diversi o calcolare l'hash di byte diversi. Spazi, terminatori di riga, normalizzazione Unicode, codifica del testo e input come file o testo cambiano il risultato.

Vedi anche