Funzioni hash di crittografia
Le funzioni hash sono estremamente utili e compaiono in quasi tutte le applicazioni di sicurezza delle informazioni.
Una funzione hash è una funzione matematica che converte un valore di input numerico in un altro valore numerico compresso. L'input per la funzione hash è di lunghezza arbitraria ma l'output è sempre di lunghezza fissa.
Vengono chiamati i valori restituiti da una funzione hash message digest o semplicemente hash values. La seguente immagine ha illustrato la funzione hash -
Caratteristiche delle funzioni hash
Le caratteristiche tipiche delle funzioni hash sono:
Fixed Length Output (Hash Value)
La funzione hash converte i dati di lunghezza arbitraria in una lunghezza fissa. Questo processo è spesso indicato comehashing the data.
In generale, l'hash è molto più piccolo dei dati di input, quindi a volte vengono chiamate funzioni hash compression functions.
Poiché un hash è una rappresentazione più piccola di dati più grandi, viene anche denominato digest.
La funzione hash con output a n bit è indicata come n-bit hash function. Le popolari funzioni hash generano valori compresi tra 160 e 512 bit.
Efficiency of Operation
Generalmente per qualsiasi funzione hash h con input x, il calcolo di h (x) è un'operazione veloce.
Le funzioni di hash computazionalmente sono molto più veloci di una crittografia simmetrica.
Proprietà delle funzioni hash
Per essere uno strumento crittografico efficace, si desidera che la funzione hash possieda le seguenti proprietà:
Pre-Image Resistance
Questa proprietà significa che dovrebbe essere difficile dal punto di vista computazionale invertire una funzione hash.
In altre parole, se una funzione hash h ha prodotto un valore hash z, dovrebbe essere un processo difficile trovare qualsiasi valore di input x che abbia hash a z.
Questa proprietà protegge da un utente malintenzionato che ha solo un valore hash e sta cercando di trovare l'input.
Second Pre-Image Resistance
Questa proprietà significa che dato un input e il suo hash, dovrebbe essere difficile trovare un input diverso con lo stesso hash.
In altre parole, se una funzione hash h per un input x produce un valore hash h (x), allora dovrebbe essere difficile trovare qualsiasi altro valore di input y tale che h (y) = h (x).
Questa proprietà della funzione hash protegge da un utente malintenzionato che ha un valore di input e il suo hash e desidera sostituire un valore diverso come valore legittimo al posto del valore di input originale.
Collision Resistance
Questa proprietà significa che dovrebbe essere difficile trovare due diversi input di qualsiasi lunghezza che risultino nello stesso hash. Questa proprietà viene anche chiamata funzione hash senza collisioni.
In altre parole, per una funzione hash h, è difficile trovare due diversi input x e y tali che h (x) = h (y).
Poiché la funzione hash sta comprimendo una funzione con una lunghezza hash fissa, è impossibile che una funzione hash non abbia collisioni. Questa proprietà di assenza di collisioni conferma solo che queste collisioni dovrebbero essere difficili da trovare.
Questa proprietà rende molto difficile per un utente malintenzionato trovare due valori di input con lo stesso hash.
Inoltre, se una funzione hash è resistente alle collisioni then it is second pre-image resistant.
Progettazione di algoritmi di hashing
Al centro di un hashing c'è una funzione matematica che opera su due blocchi di dati di dimensioni fisse per creare un codice hash. Questa funzione hash fa parte dell'algoritmo di hashing.
La dimensione di ogni blocco di dati varia a seconda dell'algoritmo. Tipicamente le dimensioni dei blocchi vanno da 128 bit a 512 bit. La figura seguente mostra la funzione hash:
L'algoritmo di hash coinvolge i round della funzione hash sopra come un cifrario a blocchi. Ogni round accetta un input di dimensione fissa, tipicamente una combinazione del blocco di messaggi più recente e l'output dell'ultimo round.
Questo processo viene ripetuto per tutti i round necessari per eseguire l'hashing dell'intero messaggio. Lo schema dell'algoritmo di hashing è illustrato nella figura seguente:
Da allora, il valore hash del primo blocco di messaggi diventa un input per la seconda operazione di hash, il cui output altera il risultato della terza operazione e così via. Questo effetto, noto comeavalanche effetto dell'hashing.
L'effetto valanga si traduce in valori hash sostanzialmente diversi per due messaggi che differiscono anche per un singolo bit di dati.
Comprendi correttamente la differenza tra la funzione hash e l'algoritmo. La funzione hash genera un codice hash operando su due blocchi di dati binari a lunghezza fissa.
L'algoritmo di hash è un processo per l'utilizzo della funzione hash, che specifica come verrà suddiviso il messaggio e come vengono concatenati i risultati dei blocchi di messaggi precedenti.
Funzioni hash popolari
Vediamo brevemente alcune popolari funzioni hash:
Message Digest (MD)
MD5 è stata la funzione hash più popolare e ampiamente utilizzata per diversi anni.
La famiglia MD comprende le funzioni hash MD2, MD4, MD5 e MD6. È stato adottato come Internet Standard RFC 1321. È una funzione hash a 128 bit.
I digest MD5 sono stati ampiamente utilizzati nel mondo del software per fornire garanzie sull'integrità del file trasferito. Ad esempio, i file server spesso forniscono un checksum MD5 precalcolato per i file, in modo che un utente possa confrontare il checksum del file scaricato con esso.
Nel 2004 sono state trovate collisioni nell'MD5. È stato segnalato che un attacco analitico ha avuto successo solo in un'ora utilizzando il cluster di computer. Questo attacco di collisione ha prodotto MD5 compromesso e quindi non è più raccomandato per l'uso.
Funzione di hash sicuro (SHA)
La famiglia di SHA comprende quattro algoritmi SHA; SHA-0, SHA-1, SHA-2 e SHA-3. Sebbene dalla stessa famiglia, ci sono strutturalmente diversi.
La versione originale è SHA-0, una funzione hash a 160 bit, pubblicata dal National Institute of Standards and Technology (NIST) nel 1993. Aveva pochi punti deboli e non divenne molto popolare. Più tardi nel 1995, SHA-1 è stato progettato per correggere presunti punti deboli di SHA-0.
SHA-1 è la più utilizzata tra le funzioni hash SHA esistenti. È impiegato in numerose applicazioni e protocolli ampiamente utilizzati, inclusa la sicurezza Secure Socket Layer (SSL).
Nel 2005, è stato trovato un metodo per scoprire le collisioni per SHA-1 entro un lasso di tempo pratico, rendendo dubbia l'occupabilità a lungo termine di SHA-1.
La famiglia SHA-2 ha altre quattro varianti SHA, SHA-224, SHA-256, SHA-384 e SHA-512 a seconda del numero di bit nel loro valore hash. Nessun attacco riuscito è stato ancora segnalato sulla funzione hash SHA-2.
Sebbene SHA-2 sia una forte funzione hash. Sebbene notevolmente diverso, il suo design di base segue ancora il design di SHA-1. Quindi, il NIST ha richiesto nuovi progetti di funzioni hash competitivi.
Nell'ottobre 2012, il NIST ha scelto l'algoritmo di Keccak come nuovo standard SHA-3. Keccak offre molti vantaggi, come prestazioni efficienti e buona resistenza agli attacchi.
RIPEMD
Il RIPEMD è l'acronimo di RACE Integrity Primitives Evaluation Message Digest. Questo insieme di funzioni hash è stato progettato da una comunità di ricerca aperta e generalmente noto come una famiglia di funzioni hash europee.
Il set include RIPEMD, RIPEMD-128 e RIPEMD-160. Esistono anche versioni a 256 e 320 bit di questo algoritmo.
Il RIPEMD originale (128 bit) si basa sui principi di progettazione utilizzati in MD4 e si è scoperto che fornisce una sicurezza discutibile. La versione RIPEMD a 128 bit è arrivata come una rapida sostituzione della correzione per superare le vulnerabilità del RIPEMD originale.
RIPEMD-160 è una versione migliorata e la versione più utilizzata nella famiglia. Le versioni a 256 e 320 bit riducono la possibilità di collisioni accidentali, ma non hanno livelli di sicurezza più elevati rispetto a RIPEMD-128 e RIPEMD-160 rispettivamente.
Whirlpool
Questa è una funzione hash a 512 bit.
È derivato dalla versione modificata di Advanced Encryption Standard (AES). Uno dei progettisti era Vincent Rijmen, un co-creatore dell'AES.
Sono state rilasciate tre versioni di Whirlpool; vale a dire WHIRLPOOL-0, WHIRLPOOL-T e WHIRLPOOL.
Applicazioni delle funzioni hash
Esistono due applicazioni dirette della funzione hash in base alle sue proprietà crittografiche.
Archiviazione password
Le funzioni hash forniscono protezione all'archiviazione delle password.
Invece di memorizzare la password in chiaro, quasi tutti i processi di accesso memorizzano i valori hash delle password nel file.
Il file Password è costituito da una tabella di coppie nel formato (id utente, h (P)).
Il processo di accesso è illustrato nella figura seguente:
Un intruso può vedere solo gli hash delle password, anche se ha avuto accesso alla password. Non può né accedere utilizzando hash né derivare la password dal valore hash poiché la funzione hash possiede la proprietà di resistenza pre-immagine.
Controllo dell'integrità dei dati
Il controllo dell'integrità dei dati è un'applicazione più comune delle funzioni hash. Viene utilizzato per generare i checksum sui file di dati. Questa applicazione fornisce garanzia all'utente sulla correttezza dei dati.
Il processo è illustrato nella figura seguente:
Il controllo dell'integrità aiuta l'utente a rilevare eventuali modifiche apportate al file originale. Tuttavia, non fornisce alcuna garanzia sull'originalità. L'attaccante, invece di modificare i dati del file, può cambiare l'intero file e calcolare tutti insieme nuovi hash e inviarli al destinatario. Questa applicazione per il controllo dell'integrità è utile solo se l'utente è sicuro dell'originalità del file.