Funzione crittografica di hash

Da Wikipedia, l'enciclopedia libera.
Anche piccole modifiche ai dati di ingresso causano una notevole cambiamento dell'uscita: si tratta del cosiddetto effetto valanga.

In informatica una funzione crittografica di hash è un algoritmo matematico che trasforma dei dati di lunghezza arbitraria (messaggio) in una stringa binaria di dimensione fissa chiamata valore di hash, impronta del messaggio o somma di controllo, ma spesso anche con il termine inglese message digest. Gli algoritmi usati a questo proposito sono unidirezionali (one-way), quindi difficili da invertire, questo permette alle funzioni crittografiche di hash di trovare ampio utilizzo negli ambiti di sicurezza informatica come: nelle firme digitali, autenticazione dei messaggi oppure come per la crittografia delle credenziali private degli utenti nelle applicazioni web.

La funzione crittografica di hash ideale deve avere tre proprietà fondamentali:

  1. deve essere estremamente semplice calcolare un hash da qualunque tipo di dato;
  2. deve essere estremamente difficile o quasi impossibile risalire al testo che ha portato ad un dato hash;
  3. deve essere estremamente improbabile che due messaggi differenti, anche se simili, abbiano lo stesso hash.


Proprietà[modifica | modifica wikitesto]

La maggior parte delle funzioni di hash sono progettate per prendere in input una stringa di qualsiasi lunghezza e produrre in output un valore di hash di lunghezza fissa. Per resistere ad attacchi basati sulla crittoanalisi una funzione di hash deve avere le seguenti proprietà:

  1. resistenza alla preimmagine: dato un valore di hash h deve essere difficile risalire ai vari messaggi m con hash(m) = h. questa proprietà deriva dal concetto di funzione unidirezionale.
  2. resistenza alla seconda preimmagine: dato un input m1 deve essere estremamente difficile trovare un secondo input m2 tale che
    hash(m1) = hash(m2).
  3. resistenza alla collisione: dati due messaggi m1 ed m2 deve essere difficile che i due messaggi abbiano lo stesso hash (collisione).

Queste proprietà implicano che un eventuale attacco non permetta di rimpiazzare o modificare un messaggio senza conseguenze sul risultante valore di hash. Idealmente quindi dovrebbe essere impossibile per un avversario trovare due messaggi con sostanziali similitudini nel loro valore di hash oppure dedurre utili informazioni del messaggio partendo dal valore del suo hash. Quindi una funzione crittografica di hash deve essere il più possibile simile ad una funzione che genera valori casuali rimanendo comunque deterministica e semplice da calcolare. I codici a correzione errore o codici ciclici, ad esempio, non sono adatti come funzioni di hash crittografiche poiché lineari e quindi troppo facili da invertire.

Applicazioni[modifica | modifica wikitesto]

Verifica dell'integrità di un messaggio[modifica | modifica wikitesto]

Un'importante applicazione delle funzioni crittografiche di hash è nella verifica dell'integrità di un messaggio. Infatti grazie alle proprietà di queste funzioni è possibile verificare se sono stati compiute modifiche al messaggio confrontando il suo hash prima e dopo la trasmisione. Per questo motivo l'hash di un messaggio viene anche detto impronta digitale del messaggio.

Verifica delle password[modifica | modifica wikitesto]

Nelle applicazioni che necessitano autentificazione è troppo rischioso salvare le password di tutti gli utenti in chiaro, cioè su un file non cifrato, soprattutto nel caso in cui esso venga compromesso. Un modo per ridurre questo rischio è di salvarne l'hash di ogni password e confrontare quindi questi ad ogni autentificazione.

Proof-of-Work[modifica | modifica wikitesto]

Il proof-of-work è una misura economica per scoraggiare attacchi di tipo denial of service e altri abusi di servizio, come spam sulla rete, imponendo alcuni lavori dal richiedente del servizio, di solito intendendo tempo di elaborazione di un computer. Un sistema famoso, usato anche nella creazione di bitcoin, usa inversioni di hash parziali per verificare che il lavoro sia fatto.

Identificativo di File o Dati[modifica | modifica wikitesto]

Un'altra applicazione in cui queste funzioni sono utilizzate è l'identificazione di file. Le applicazioni che necessitano gestire grandi quantitativi di dati e file come: software di controllo di versione, reti peer-to-peer e database, utilizzano funzioni di hash per generare codici univoci per ogni file semplificando quindi la loro identificazione e ricerca. A questo scopo però la computazione richiesta dalle funzioni crittografiche di hash è un po' più elevata rispetto a quella delle funzioni di hash, per questo motivo si preferisce usarle in contesti dove la protezione dei dati ad attacchi è fondamentale.

Generazione di numeri pseudocasuali e chiavi di derivazione[modifica | modifica wikitesto]

Le funzioni di hash possono essere impiegate anche per la generazione di stringhe pseudorandom o per la derivazioni di chiavi e password da una singola chiave o password sicura.

Algoritmi di hash crittografico[modifica | modifica wikitesto]

Ad oggi esistono molte funzioni crittografiche di hash, anche se per alcune di esse è provato siano vulnerabili[senza fonte]. Anche se una funzione non è mai stata violata un attacco crittografico ad una sua variante andato a buon fine porta ad una perdita di fiducia e abbandonamento di quella funzione.
Le funzioni crittografiche di hash comunemente utilizzate in diversi standard e applicativi sono MD5 e SHA-1[senza fonte]. Nel 2005 sono stati individuati problemi di sicurezza relativi ad entrambi gli standard citati, in particolare si ritiene possibile che questi siano affetti da criticità matematiche tanto da rendere necessaria la ricerca di nuovi e più robusti schemi di hashing. Nel 2008 un attacco ad una debolezza di MD5 ha compromesso la sicurezza di Transport Layer Security[1]. Nel 2007 il National Institute of Standards and Technology ha indetto un concorso per la definizione della funzione di hash che avrebbe preso il nome SHA-3 e sarebbe stata soggetta allo standard FIPS[2].

Note[modifica | modifica wikitesto]

  1. ^ Alexander Sotirov, Marc Stevens, Jacob Appelbaum, Arjen Lenstra, David Molnar, Dag Arne Osvik, Benne de Weger, MD5 considered harmful today: Creating a rogue CA certificate, accessed March 29, 2009.
  2. ^ NIST.gov - Computer Security Division - Computer Security Resource Center