Una funzione di hash buona ha le seguenti proprietà:
dato un hash di un messaggio è computazionalmente impossibile per un utente malintenzionato di trovare un altro messaggio in modo tale che i loro hash sono identici.
Dato un paio di messaggio, m 'e m, è computazionalmente impossibile trovare due in modo tale che che H (m) = h (m')
I due casi sono non lo stesso. Nel primo caso, esiste un hash pre-esistente per il quale stai cercando di trovare una collisione. Nel secondo caso, stai cercando di trovare qualsiasi due messaggi che si scontrano. Il secondo compito è notevolmente più semplice a causa del "paradosso" del compleanno.
Dove le prestazioni non sono un gran problema, è necessario utilizzare sempre una funzione di hash sicura.Ci sono attacchi molto intelligenti che possono essere eseguiti forzando le collisioni in un hash. Se usi qualcosa di forte fin dall'inizio, ti proteggerai da questi.
Non utilizzare MD5 o SHA-1 in nuovi progetti. La maggior parte dei crittografi, me incluso, li considererebbe rotto. La principale fonte di debolezza in entrambi questi progetti è che la seconda proprietà, che ho delineato sopra, non regge per queste costruzioni. Se un utente malintenzionato può generare due messaggi, me m ', che entrambi hanno lo stesso valore, possono usare questi messaggi contro di te. Anche SHA-1 e MD5 soffrono di attacchi di estensione dei messaggi, che possono indebolire fatalmente la tua applicazione se non stai attento.
Un hash più moderno come Whirpool è una scelta migliore. Non soffre di questi attacchi di estensione dei messaggi e utilizza la stessa matematica utilizzata da AES per dimostrare la sicurezza contro una varietà di attacchi.
Spero che questo aiuti!
fonte
2008-08-29 16:41:57
Avete considerato l'utilizzo di una o più delle seguenti funzioni hash generali: http://www.partow.net/programming/hashfunctions/index.html –
Nel fnv_func, il tipo di p [i] è char, cosa succederà con h dopo la prima iterazione? Era fatto apposta? –
@martinatime ha detto: * C'è un sacco di informazioni sulle funzioni di hash in wikipedia http://en.wikipedia.org/wiki/Hash_function e in fondo a questo articolo http://www.partow.net/programming/hashfunctions/ index.html ha algoritmi implementati in varie lingue. * – 2501