Perché le collisioni MD5 sono pericolose?

4

Comprendo che l'algoritmo MD5 non è resistente alla collisione e che le collisioni tra i dati di dimensioni arbitrarie possono essere trovate con metodi più efficienti rispetto alla forza bruta.

Tuttavia, ho letto che MD5 è ancora un algoritmo sicuro per, per esempio, l'hashing della password, perché non è stato trovato alcun metodo per decodificare l'algoritmo di hashing.

In quali casi un hacker può sfruttare una pagina Web o un altro client sicuro che utilizza MD5 per la sicurezza?

    
posta Jared Nielsen 14.06.2013 - 02:49
fonte

3 risposte

3

Se dovessero penetrare nel sistema e scaricare il file di password con hash, potrebbero, con difficoltà, trovare password che funzionerebbero.

Mentre nessuno è stato in grado di trasformare l'output dell'hash MD5 nel testo originale. La cattiva notizia è che MD5 non richiede molto tempo per la CPU.

"Aspetta, sono cattive notizie?" In realtà lo è. Quando si calcolano i valori hash, si desidera prendere più tempo della CPU, piuttosto che meno. Più velocemente i cattivi possono testare milioni e miliardi di password, più velocemente possono arrivare a quello che stai cercando di mantenere segreto.

Ho eseguito un test di cinque milioni di password di nove caratteri e ho ottenuto i seguenti risultati sulla mia macchina (usando openssl, risultati in millisecondi):

  • MD5: 2449
  • SHA1: 2620
  • SHA256: 3884

Se vogliono testare circa 5 miliardi di password, che coprono quasi tutte le possibili password di sei caratteri, il tempo della CPU dovrebbe variare da circa 28 giorni per MD5 a 44 giorni per SHA256. Questo è con un singolo thread su un computer non molto veloce. Se hanno investito poche centinaia di dollari per una mezza dozzina di schede grafiche, questo potrebbe essere fatto in poche ore.

È normale che il processo di hashing calcoli l'hash più volte. Calcoleremo l'hash della password "abc123" e otterremo "8be8efb0bfa ..." Se calcoleremo l'hash dell'hash, otterremo "98dead38ed2 ...". Puoi vedere che se lo facciamo dieci o cento volte, difficilmente noteremo la differenza nel tempo, ma i cattivi dovranno prendere non ore ma giorni o mesi.

Non dimenticare, devi solo trovare una stringa che si blocca sul valore memorizzato nella tabella della password, non necessariamente sul valore originale. Qualsiasi collisione farà. Ci sono modi per attaccare l'hash stesso per trovare collisioni che potrebbero essere più semplici di questo attacco di forza bruta. Per quello che vale, dubito che ci siano moltissime coppie di stringhe di caratteri stampabili con hash allo stesso valore.

Non sono sicuro che questo risponda esattamente alla tua domanda ma sembra pertinente.

    
risposta data 14.06.2013 - 04:58
fonte
2

Considera un sistema di sicurezza in cui gli utenti hanno ciascuno la propria chiave segreta, che è conosciuta da un server. Quando inviano comandi al server, eseguono l'hash del comando e della relativa chiave segreta e quindi inviano il comando all'hash. Il server esegue lo stesso hash e conferma che il comando è stato sottoposto a hash con la chiave segreta. Questo è fondamentalmente ciò che OAuth fa (eccetto che usano SHA-1).

Se un utente malintenzionato può generare hash senza la tua chiave segreta, può inviare comandi come senza accedere alla tua chiave.

Casi simili si verificano quando si utilizzano le funzioni hash per verificare i dati. Potrei avere un database di noti programmi validi sul mio computer e rifiutare di eseguire qualsiasi programma che non sia nel database. Se un utente malintenzionato può causare una collisione, può alterare maliziosamente un programma, ma farlo visualizzare nel database come se non fosse cambiato. Questo è fondamentalmente ciò che ha fatto il malware Fiamma :

Flame was signed with a fraudulent certificate purportedly from the Microsoft Enforced Licensing Intermediate PCA certificate authority. The malware authors identified a Microsoft Terminal Server Licensing Service certificate that inadvertently was enabled for code signing and that still used the weak MD5 hashing algorithm, then produced a counterfeit copy of the certificate that they used to sign some components of the malware to make them appear to have originated from Microsoft.

Il motivo per cui questo non è un problema per l'hashing della password è duplice:

  • L'utilizzo di una normale funzione di hash crittografica (MD5, SHA- *, ecc.) per le password di hashing è completamente interrotto. Perché preoccuparsi di rompere la funzione hash quando si può forzare la password? Se esegui l'hashing della password correttamente (PBKDF2), non sei vulnerabile, anche se la funzione di hash interna è MD5 (suppongo che il sale e un numero elevato di iterazioni lo rendano molto più difficile).

  • C'è molto poco da trovare nella ricerca di una collisione di hash delle password. Immagino che tu possa accedere come qualcuno, supponendo che il programma server (scritto da idioti che pensano che MD5 sia una funzione di hashing della password) non soffochi la tua gigantesca password binaria. E, se hai accesso agli hash, probabilmente hai già accesso al server.

risposta data 14.06.2013 - 05:14
fonte
1

Per situazioni come l'uso come hash di una password (in cui tutto ciò che serve è la resistenza preimage contro i computer classici), MD5 in pratica è fondamentalmente buono come SHA-1 e SHA-2 hash (SHA-256, SHA- 512). Il miglior attacco pubblicato contro MD5 riduce la sua resistenza di preimage dalla sua complessità da 2 128 di un fattore di 24 (a 2 123.4 ), che è perfettamente sicuro.

Ammesso che siano stati sviluppati computer quantistici generalizzati su larga scala, gli attacchi preimage con forza bruta su MD5 richiederebbero solo approssimativamente sqrt (2 128 ) = 2 64 . Contro la minaccia dei computer quantistici si consiglia di utilizzare hash più grandi; come SHA-256 (per la resistenza di preimage) o SHA-512 (se si desidera anche la resistenza di collisione con una complessità sopra sqrt (2 128 ) per un attaccante quantistico).

Sì, MD5 è leggermente più veloce di SHA-1 e della famiglia SHA-2, il che è un male per una funzione hash; ma la differenza è all'incirca un fattore due che è abbastanza trascurabile. E come ogni semplice funzione di hash crittografica è troppo veloce per scopi moderni, è necessario eseguire molti round ripetuti come MD5-crypt (e ha un unico salt) per prevenire attacchi di dizionario computazionalmente semplici.

Ma la linea di fondo è che gli sviluppatori attenti alla sicurezza devono sapere per evitare MD5 quando è necessaria la resistenza alle collisioni. Per ragioni solo parzialmente giustificate, spesso decidono di evitare MD5 anche in domini in cui è richiesta solo la resistenza preimage. Forse non vogliono affrontare le critiche di altri che hanno sentito parlare di attacchi di collisione contro MD5 e non capiscono la sottile differenza tra un attacco preimage e un attacco di collisione. Forse non si sono pienamente convinti che il loro sistema abbia solo bisogno di una resistenza all'immagine e che un abile aggressore non possa sfruttare il proprio sistema usando un attacco di collisione contro l'hash MD5. O forse sentono che dal momento che l'MD5 non ha resistenza alla collisione, MD5 è intrinsecamente più debole degli altri ed è più probabile che sia completamente rotto contro gli attacchi preimage prima che le funzioni hash SHA-1 / SHA-2 siano rotte.

    
risposta data 14.06.2013 - 06:36
fonte

Leggi altre domande sui tag