SHA1 è migliore di MD5 solo perché genera un hash di 160 bit?

68

È risaputo che SHA1 è raccomandato più di MD5 per l'hashing poiché MD5 è praticamente rotto in quanto sono state trovate molte collisioni. Con l'attacco di compleanno, è possibile ottenere una collisione in MD5 con 2 64 complessità e con 2 80 complessità in SHA1

È noto che esistono algoritmi in grado di decifrare entrambi in tempi molto minori rispetto a quelli necessari per un attacco di compleanno.

La mia domanda è: MD5 è considerato insicuro solo per questo motivo che è facile produrre collisioni? Perché guardare entrambi, produrre collisioni in SHA1 non è poi così difficile. Quindi cosa rende SHA1 migliore?

Aggiornamento 02/2017 - link

    
posta sudhacker 04.09.2012 - 00:07
fonte

4 risposte

88

La produzione di collisioni SHA-1 non è quella facile. Sembra ragionevole che l'attacco con è stato descritto su SHA-1 funziona davvero con un costo medio di 2 61 , molto più veloce dell'attacco di compleanno generico (che è in 2 80 ), ma ancora abbastanza difficile ( fattibile , ma costoso).

Detto questo, non sappiamo veramente cosa renda le funzioni hash resistenti (si veda ad esempio questa risposta per una discussione dettagliata). Con molto sventolio di mani, posso affermare che SHA-1 è più robusto di MD5 perché ha più round e perché la derivazione delle 80 parole di messaggio in SHA-1 è molto più "miscelante" di quella di MD5 (in in particolare la rotazione a 1 bit, che, a proposito, è l'unica differenza tra SHA-0 e SHA-1, e le collisioni SHA-0 sono state prodotte).

Per saperne di più, guarda SHA-256, che è molto più "massiccio" (molte più operazioni di SHA-1, ma con una struttura simile), e attualmente ininterrotto. È come se ci fosse una quantità minima di operazioni per una funzione di hash per essere sicuro, per una data struttura (ma lì sto muovendo le mani a velocità stupefacente, quindi non credere che ho detto qualcosa di veramente scientifico o profondo).

    
risposta data 04.09.2012 - 02:08
fonte
34

No. Non è solo la lunghezza dell'output. Ci sono differenze significative nel loro livello di sicurezza contro gli attacchi crittoanalitici.

Ci sono devastanti attacchi di collisione su MD5. (L' articolo di Wikipedia su MD5 ha alcuni dettagli.) Questi attacchi significano che MD5 non offre sostanzialmente alcuna sicurezza contro le collisioni: è facile per trovare collisioni in MD5.

Al contrario, SHA1 sembra essere molto più sicuro. Mentre ci sono alcuni attacchi noti su SHA1, sono molto meno gravi degli attacchi a MD5. (L' articolo di Wikipedia su SHA1 ha una panoramica.) Per questo motivo, SHA1 è una scelta molto migliore di MD5 in molte impostazioni .

In questi giorni, invece di usare MD5 o SHA1, probabilmente stai ancora meglio usando una delle funzioni di hash più moderne, come SHA256. Quelli non hanno attacchi noti di alcuna rilevanza pratica.

Ma certamente non usare MD5 in nessuna impostazione in cui è necessaria la resistenza alle collisioni, poiché l'aspetto di MD5 è completamente rotto.

    
risposta data 04.09.2012 - 01:35
fonte
1

Il livello di sicurezza fornito da una funzione di hash si basa sulla difficoltà di generare un testo semplice che produrrà una data firma hash (l'output dell'hash). Un hash è un metodo rapido per semplificare un insieme di dati per indicare che un utente possiede i dati originali senza rivelare effettivamente i dati. Questo può essere utile sia per convalidare che qualcuno è chi dicono di essere (confrontando un hash di qualcosa che conosci che sanno del valore memorizzato) sia per confermare che un messaggio non è stato modificato. Poiché un hash è di molti a uno (molti valori produrranno lo stesso valore di hash), è teoricamente difficile lavorare da un hash al valore originale. A causa dell'elevato numero di possibili valori hash, DOVREBBE essere difficile ottenere un hash per produrre un determinato output.

Questo, tuttavia, purtroppo non è sempre vero. L'aspettativa che determinati valori corrispondano a un input leggibile dall'uomo consente agli attacchi del dizionario chiamati tabelle arcobaleno contro un hash di tentare di scoprire il valore originale. La salatura (l'aggiunta di un input leggibile non umano all'inizio o alla fine di un input) è un tentativo di impedire che le tabelle arcobaleno funzionino come dovrebbero essere fatte per ogni sale differente.

L'altro problema e quello relativo alla tua domanda è quello delle collisioni di hash. Una collisione hash si verifica ogni volta che due input dati producono lo stesso output hash. Per convalidare che i dati non sono stati modificati, non deve essere facilmente possibile generare un hash per un insieme di dati modificati che corrisponde all'hash dell'originale. Sfortunatamente, MD5 è completamente compromesso in questo senso, poiché esistono molti modi per trovare in modo relativamente semplice le modifiche che possono essere apportate alla fine o all'inizio di un payload per renderlo valido. SHA-1 ha anche alcuni piccoli compromessi a questo proposito che sono stati scoperti di recente, tuttavia sono meno gravi rispetto ai problemi MD5. L'uso di qualcosa come SHA256 è ancora più sicuro in quanto attualmente non ha attacchi noti contro la collisione dell'hash.

    
risposta data 04.09.2012 - 19:36
fonte
-6

Ecco il confronto tra MD5 e SHA1. Puoi avere un'idea chiara su quale è meglio.

    
risposta data 15.05.2016 - 08:07
fonte

Leggi altre domande sui tag