Le
funzioni hash sono particolari funzioni che permettono di dare
a un messaggio un’impronta digitale tale da identificarlo univocamente.
In altre parole creano una stringa associata al messaggio da spedire e per il
quale, una volta applicata la funzione, non dovrebbe essere più possibile
ritornare al testo originale.
Quindi, il valore hash h(M) è una rappresentazione non
ambigua e non falsificabile di un messaggio M,
facile da calcolare e tale da comprimere il messaggio stesso.
Una delle sue maggiori applicazioni si ha nell’utilizzo delle
firme digitali: se si deve firmare un messaggio di grosse dimensioni,
si firma il suo hash, in modo da avere un messaggio più piccolo. Permettono,
inoltre, di avere integrità dei dati: ad esempio, a
un certo tempo T si computa l’hash di un file M, H
= h(M) e, successivamente, per controllare se il file è stato modificato
si calcola h(M’) e si verifica se H = h(M’). Quindi
h(M) è l’impronta digitale del file.
In generale, le funzioni hash vengono sfruttate anche in tanti altri scenari, ad esempio nella realizzazione di servizi di timestamping (marcatura temporale di documenti digitali), o nella realizzazione del MAC (Message Authentication Code), per dare autenticità ai messaggi.
Tra le principali proprietà delle funzioni hash ricordiamo che: sono facili da calcolare, godono della proprietà di sicurezza forte (è computazionalmente difficile trovare 2 messaggi diversi con lo stesso valore hash), godono della proprietà di sicurezza debole (dato M, è computazionalmente difficile trovare M’ tale che h(M) = h(M’)), e sono One-way, cioè, dato y è computazionalmente difficile trovare M tale che y = h(M).
Per poter costruire una funzione hash si possono comporre più funzioni hash, oppure si possono usare modelli per funzioni hash iterate o, ancora, si possono usare tecniche basate su cifrari a blocchi.
Le principali funzioni hash presenti attualmente sono:
Tra le altre ricordiamo: HAVAL, FFT-hash I, FFT-hash II, MDC-2 basata sul DES.