it-swarm.dev

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

È noto che SHA1 è raccomandato più dell'MD5 per l'hashish poiché l'MD5 è praticamente rotto poiché sono state rilevate molte collisioni. Con l'attacco di compleanno, è possibile ottenere una collisione in MD5 con 264 complessità e con 280 complessità in SHA1

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

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

Aggiornamento 02/2017 - https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html

71
sudhacker

La produzione di collisioni SHA-1 non è così facile . Sembra ragionevole che l'attacco con è stato descritto su SHA-1 funzioni davvero con un costo medio di 261, molto più veloce dell'attacco di compleanno generico (che è in 280), ma ancora piuttosto difficile ( fattibile , ma costoso).

Detto questo, non sappiamo davvero cosa rende resistenti le funzioni hash (vedi ad esempio questa risposta per una discussione dettagliata). Con un sacco di agitando la mano, potrei 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ù "mixante" di quella di MD5 (in in particolare la rotazione a 1 bit, che, tra l'altro, è l'unica differenza tra SHA-0 e SHA-1, e sono state prodotte collisioni SHA-0).

Per lo 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 minima quantità di operazioni affinché una funzione di hash fosse sicura, per una data struttura (ma lì sto muovendo le mani a una velocità incredibile, quindi non credo di aver detto qualcosa di veramente scientifico o profondo).

91
Tom Leek

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

Ci sono devastanti attacchi di collisione su MD5. ( Articolo di Wikipedia su MD5 ha alcuni dettagli.) Questi attacchi significano che MD5 non fornisce praticamente alcuna sicurezza contro le collisioni: è facile trovare le 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. ( Articolo di Wikipedia su SHA1 ha una panoramica.) Per questo motivo, SHA1 è una scelta molto migliore di MD5 in molte impostazioni.

Al giorno d'oggi, invece di utilizzare MD5 o SHA1, probabilmente stai anche meglio usare una delle funzioni 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é quell'aspetto di MD5 è completamente rotto.

37
D.W.

Il livello di sicurezza fornito da una funzione hash si basa sulla difficoltà di generare un testo in chiaro 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 rivelarli effettivamente. Questo può essere utile sia per convalidare che qualcuno è quello che dicono di essere (confrontando un hash di qualcosa che sai di conoscere con il valore memorizzato) sia per convalidare che un messaggio non è stato modificato. Poiché un hash è molti a uno (molti valori producono lo stesso valore 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 all'input leggibile dall'uomo consente agli attacchi del dizionario chiamati tabelle Rainbow contro un hash di tentare di scoprire il valore originale. La salatura (l'aggiunta di input leggibili non umani all'inizio o alla fine di un input) è un tentativo di impedire alle tabelle Rainbow di funzionare come dovrebbero essere fatte per ogni sale diverso.

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 set alterato di dati che corrisponde all'hash dell'originale. Sfortunatamente, MD5 è completamente compromesso in questo senso con la presenza di molteplici modi per trovare relativamente facilmente alterazioni che possono essere poste alla fine o all'inizio di un payload per renderlo valido. SHA-1 ha anche alcuni piccoli compromessi a questo proposito che sono stati recentemente scoperti, tuttavia sono meno gravi dei problemi di MD5. L'uso di qualcosa come SHA256 è ancora più sicuro in quanto non ha attualmente alcun attacco noto contro la collisione dell'hash.

1
AJ Henderson