In crittografia e in informatica una funzione di hash è una funzione non invertibile che mappa una stringa di lunghezza arbitraria su una stringa di lunghezza predefinita. Le funzioni di hash sono funzioni one-way (difficilmente invertibili) per questo motivo esse vengono largamente utilizzate nell’ambito della sicurezza informatica, sono ad esempio impiegate nella creazione di firme digitali, oppure nel processo di memorizzazione dei dati sensibili (come le password degli utenti).

Al contrario di altri algoritmi di cifratura come DES, AES o RSA, un messaggio cifrato con un algoritmo di hash non può più essere decifrato.

Di seguito sono riassunte alcune caratteristiche che rendono le funzioni di hash particolarmente utili in diverse applicazioni pratiche:

  • Garantiscono l’autenticazione, permettono di accertarsi che il messaggio venga distorto o sostituito;
  • Garantiscono la firma, certificano l’identità del mittente e del ricevente;
  • Garantiscono confidenzialità, ovvero che il messaggio inviato non possa essere intercettato e decifrato da terzi.

Esprimiamo la generica funzione di hash in questo modo:
F(m) = hash

All’interno della precedente formula compaiono due variabili:

  • m , una stringa di lunghezza qualsiasi;
  • hash , una stringa di lunghezza costante, la lunghezza dipende dalla funzione crittografica utilizzata.

Una funzione hash ideale gode delle seguenti caratteristiche:

  • Deve essere computazionalmente intrattabile la ricerca di una stringa che dia un hash uguale ad un altro hash;
  • Deve essere computazionalmente intrattabile la ricerca di due stringhe che diano lo stesso hash. Dal momento che stringhe di lunghezza infinita vengono tradotte in stringhe di lunghezza finita è logico immaginare l’esistenza di numerose sovrapposizioni.

Vediamo un esempio di trasmissione di un messaggio dall’utente Alice all’utente Bob:

  1. Alice prepara il messaggio, prima lo cifra mediante un algoritmo di hash successivamente esegue la cifratura della stringa hash mediante un critto-sistema a sua scelta;
  2. Successivamente concatena la versione cifrata della stringa hash con il messaggio in chiaro e infine cifra il messaggio così ottenuto (usando lo stesso cifrario usato per l’hash, oppure un altro a sua scelta);
  3. Il risultato viene inviato tramite internet dove sarà soggetto agli attacchi di EVA;
  4. Bob riceve il messaggio e lo decodifica;
  5. Successivamente scompone il messaggio nelle sue due componenti, il messaggio in chiaro e il suo hash;
  6. Infine calcola l’hash del messaggio e lo confronta con l’hash ricevuto da Alice, in questo modo può accorgersi di un eventuale sostituzione.
Schema di trasmissione di un messaggio su una rete non sicura

Gli algoritmi di hash più famosi appartengono alla famiglia MD (es MD5) o alla famiglia SHA (es SHA-1).