Nella moderna crittografia le funzioni hash
hanno assunto un
ruolo fondamentale per la garanzia dell'integrità dei dati e l’autenticazione
dei messaggi. Una funzione hash prende in input un messaggio e restituisce
un output denominato codice hash, risultato hash, valore hash o semplicemente
hash.
|
|
|
Più in dettaglio, una
funzione hash h, a stringhe di bit di lunghezza arbitraria e finita, associa
stringhe di lunghezza fissata, n bit. La funzione
, con dominio D e codominio C tali che
, è del tipo molti-ad-uno. L’idea di base delle funzioni hash è che un valore hash
può servire come una immagine rappresentativa compatta (impronta digitale o
anche message digest) di una stringa di input, e può essere usato come se fosse
univocamente identificativo di quella stringa.
PROBLEMA DELLA FIRMA DIGITALE DEI MESSAGGI LUNGHI
Nella valutazione degli schemi di firme digitali è emerso il problema dei messaggi lunghi. Tutti gli schemi presentati sono in grado di firmare messaggi di lunghezza fissata:
RSA: messaggio di 512 bit
firma 512 bit;
DSS: messaggio di 160 bit
firma
320 bit.
Una soluzione banale consiste nel dividere il messaggio originale in blocchi e di firmare indipendentemente ogni blocco. Gli svantaggi di questo approccio sono:
Spazio: l’elevata dimensione della firma che cresce proporzionalmente al numero di blocchi del messaggio.
Tempo: il rallentamento della verifica della firma dato che questa operazione comporta l’interazione dell’algoritmo di verifica su tutti i blocchi del messaggio e, di conseguenza il calcolo ripetuto di operazioni complesse, quali ad esempio l’esponenziazione modulare.
Sicurezza: la possibilità che un nemico in ascolto capti il messaggio, selezioni ad hoc vari blocchi e li riproponga in un nuovo messaggio, automaticamente firmato, di significato diverso da quello originario.
|
|
|
L’uso di una funzione hash pubblica h fornisce una soluzione efficiente a tutti questi problemi. La strategia che potrebbe essere adottata da un utente A che intendesse firmare un proprio messaggio x di lunghezza arbitraria è la seguente:
1. Calcola z=h(x)
2. Firma il valore hash z costruendo y=
tramite la sua chiave privata
.
3. Trasmette all’utente B la coppia (x,y).
Una volta che il messaggio firmato è stato trasmesso sia il destinatario B che chiunque atro risultasse interessato alla verifica della firma effettua le seguenti operazioni:
1. Calcola z=h(x), mediante h() che è pubblica.
2. Verifica che y è la firma di z :
, mediante la chiave pubblica
di A.
La scelta di una funzione hash, che permetta di realizzare schemi di firme digitali per documenti di qualsiasi dimensione è un’operazione critica. Infatti, occorre assicurarsi che la funzione individuata non indebolisca la sicurezza dello schema di firma, fenomeno che si verifica quando la funzione produce facilmente collisioni. In tal caso è facile intuire che il nemico può trovare agevolmente più messaggi x, tali che h(x)=z per un certo z di cui conosce la firma, allora può costruire contraffazioni.
|
|
|
Una classe distinta di funzioni hash, chiamate "message autentication codes" (MAC) permette l’autenticazione di messaggi con tecniche a chiave simmetrica. Gli algoritmi MAC possono essere visti come funzioni hash che prendono due input funzionalmente distinti, un messaggio ed una chiave segreta e producono un output di dimensione fissata, con l’intento che diventi irrealizzabile in pratica produrre lo stesso output senza la conoscenza della chiave segreta. MAC può essere usato per fornire l’integrità dei dati e l’autenticazione dei dati originari di tipo simmetrico.
|
|