Una funzione di hash (dall’inglese to hash, sminuzzare, mescolare) è un algoritmo matematico che riceve in input un dato di lunghezza arbitraria (che sia una singola parola o un intero file video) e restituisce in output una stringa alfanumerica di lunghezza fissa, detta digest (o semplicemente hash).
In ambito informatico e crittografico, una buona funzione di hash deve possedere proprietà imprescindibili:
- Determinismo: lo stesso input produce sempre esattamente il medesimo output.
- Effetto valanga: una minima variazione dell’input (anche un solo bit cambiato) stravolge completamente l’output, rendendolo irriconoscibile rispetto al precedente.
- Resistenza alla preimmagine (unidirezionalità): dato un hash in output, deve essere computazionalmente impossibile (o estremamente oneroso) ricostruire matematicamente il dato originale di input.
- Resistenza alle collisioni: deve essere estremamente improbabile trovare due input diversi che generino lo stesso output.
Queste caratteristiche rendono le funzioni di hash (come la famiglia SHA-256 o SHA-3) i pilastri della sicurezza informatica moderna. Sono impiegate per:
- Verifica dell’integrità: per assicurarsi che un file scaricato non sia stato corrotto o manomesso.
- Archiviazione delle password: nei database non si salvano le password in chiaro, ma solo i loro hash. Durante il login si ricalcola l’hash della password inserita per verificarne la corrispondenza.
- Strutture dati: nelle Hash Table, per accedere in tempo costante alle informazioni indicizzate.
- Blockchain: per concatenare i blocchi e garantire l’immutabilità della catena nel tempo.