Gli hash sono formule matematiche che prendono una stringa di dati di lunghezza variabile, solitamente sotto forma di testo, e la convertono in valori numerici più brevi e di lunghezza fissa. Gli hash sono usati frequentemente nei database dei computer per rendere le ricerche più veloci ed efficienti. Sono anche utilizzati nella crittografia per garantire che le password non vengano compromesse e per autenticare le firme digitali, tra gli altri usi. Gli hash vanno anche sotto il nome di funzioni hash e possono anche essere considerati algoritmi.
Gli hash svolgono un ruolo importante nel facilitare le ricerche nei database. In un database composto da nomi, ad esempio, se un utente cerca “John Doe”, il computer dovrebbe abbinare tutti i caratteri nella ricerca a quelli di ogni voce del database. Ogni carattere del nome avrebbe 26 diverse possibilità — le lettere dell’alfabeto inglese — mentre anche la lunghezza variabile delle voci rallenterebbe la ricerca.
Al contrario, l’applicazione di una funzione di hash renderebbe la vita del computer molto più semplice. Trasformare ogni stringa di testo in una serie di numeri semplificherebbe la ricerca, perché il computer avrebbe solo dieci possibilità per controllare ogni carattere: cifre da “0” a “9”. La lunghezza fissa della serie numerica aiuta anche il computer a svolgere il proprio lavoro in modo più efficiente.
In un database a cui è applicata una funzione hash, tutte le voci hanno un numero univoco corrispondente. Questa è chiamata chiave hash. In questo caso, quando effettui una ricerca, il computer applica prima la funzione hash all’input che hai scritto, come “John Doe”. Ciò si traduce in un valore numerico, ad esempio “456789”. Il computer può quindi abbinare rapidamente questo risultato al tasto cancelletto corrispondente alla voce corretta.
Gli hash funzionano anche come firme digitali. Ad esempio, un mittente, Robert, desidera inviare un documento a qualcuno e il destinatario, Mary, vuole assicurarsi che il documento non sia stato manomesso durante il viaggio. Il mittente, Robert, deve solo eseguire il documento tramite una funzione hash, che risulta in un valore numerico. Robert quindi crittografa la chiave hash e invia il documento insieme alla chiave crittografata.
Mary riceve entrambi gli elementi e decifra la chiave hash. Ora può vedere il valore numerico risultante dal documento prima che fosse inviato. Per verificare che il documento nelle sue mani sia esattamente lo stesso, esegue il documento tramite una funzione hash sul suo computer. Infine, confronta entrambe le chiavi. Se sono uguali, il documento non è stato alterato durante il viaggio verso il destinatario.
Esistono molte diverse funzioni hash, ognuna con le proprie formule matematiche. Perché una funzione hash funzioni, deve ridurre al minimo qualsiasi collisione, che si verifica quando due voci del database hanno la stessa chiave hash. Anche le funzioni hash devono essere unidirezionali. Ciò significa che puoi produrre una chiave da una voce o un documento di database, ma non viceversa. In altre parole, non puoi “reverse-engineering” il documento originale dalla sua chiave hash.