Funzione crittografica di hash: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Aggiunta del paragrafo "Grado di difficoltà"
Riga 23:
 
È importante precisare però che, pur possedendo una funzione in grado di soddisfare tutti questi criteri, si può ancora andare incontro a delle proprietà indesiderate. Le funzioni crittografiche di hash attualmente usate sono vulnerabili agli attacchi di lunghezza-estensione: dati ''hash(m)'' e ''len(m)'', ma non ''m'', scegliendo un appropriato ''m''', un attaccante può calcolare ''hash(m'' || ''m'), dove'' || indica la concatenazione. Questa proprietà può essere utilizzata per rompere gli schemi di autenticazione ingenui basati sulle funzioni hash. La costruzione di [[HMAC]] lavora su questi tipi di problemi.
 
'''<big>Grado di difficoltà</big>'''
 
Nella crittografia pratica, con il termine "difficile" in genere si intende "quasi certamente oltre la portata di un qualsiasi avversario al quale deve essere impedito di rompere il sistema finché la sicurezza del sistema venga ritenuta importante". Il significato del termine è quindi leggermente dipendente dall'applicazione, poichè lo sforzo che un agente maligno può dedicare al suo lavoro è di solito proporzionale al suo guadagno previsto. Tuttavia, dal momento che gli sforzi da parte dell'attaccante aumentano rapidamente con la lunghezza del digest, gioverebbe il sistema se ad esso venissero aggiunte alcune dozzine di bit, con la capacità di neutralizzare anche un vantaggio di un migliaio di volte nel potere di elaborazione.
 
Per messaggi brevi, come ad esempio le [[password]], si può riuscire ad invertire un hash provando tutti i messaggi possibili nell'insieme ma, poichè le funzioni crittografiche di hash sono progettate per essere calcolate rapidamente, sono state sviluppate delle [[Derivazione di una chiave crittografica|funzioni di derivazione della chiave]] che richiedono maggiori risorse di calcolo rendendo, di conseguenza, più difficili possibili attacchi di forza bruta.
 
In alcune [[Teoria della complessità computazionale|analisi teoriche]], "difficile" assume un significato matematico specifico, come "non risolvibile nel [[Complessità temporale|tempo polinomiale asintotico]]". Tali interpretazioni di difficoltà sono importanti nello studio di [[:en:Security_of_cryptographic_hash_functions#Provably_secure_hash_functions|funzioni crittografiche di hash probabilmente sicure]], ma solitamente non hanno corrispondenza nella sicurezza pratica. Ad esempio, si può notare come un algoritmo di [[tempo esponenziale]] può talvolta essere abbastanza veloce da rendere un attacco fattibile; d'altra parte, un algoritmo di [[tempo polinomiale]], contrariamente a quello esponenziale, può risultare troppo lento per qualsiasi uso pratico.
 
== Applicazioni==