Le funzioni di Hash sono delle particolari classi di funzioni non invertibili, ovvero che non permettono di ritornare al dato di partenza.
L’utilità di questa classe di funzioni sono principalmente due:
- Permettono la conservazione sicura di informazioni di cui non abbiamo necessità di riavere in chiaro ma di cui è sufficiente fare un confronto fra il valore memorizzato ed il risultato della funzione di hash di un valore appena inserito. L’utilizzo più frequente si ha con le password, è possibile memorizzare in maniera sicura l’hash della password, l’autenticazione avviene per confronto fra l’hash memorizzato e l’hash calcolato sul valore immesso dall’utente al momento. La corrispondenza fra i due valori ci permette di dire che la password è corretta, pur non conoscendo il valore originale della password memorizzata, tuttavia un accesso abusivo al database degli utenti non permette di conoscere automaticamente le password memorizzate.
- Garantiscono l’integrità di un documento, infatti una alterazione in un qualsiasi punto di un documento comporta una importante alterazione del suo hash, questo permette di individuare rapidamente una sua alterazione.
La caratteristica che deve fornire un buon algoritmo di Hash è il bassissimo livello di collisioni, ovvero partendo da due input differenti arrivare al medesimo output, situazione che si potrebbe avere in alcuni casi, ma deve essere limitata.
Gli algoritmi più usati per calcolare l’hash sono: MD5, SHA1, SHA2.