Avrebbe utilizzato entrambi gli hash SHA1 e MD5 per ridurre il rischio di eliminazione di duplicati

2

Sto facendo un programma per confrontare tutti i file su un disco da 3 TB con hash ed eliminare i duplicati. Inizialmente avevo intenzione di usare MD5, ma ero preoccupato che con 3 TB di file, ci fosse una leggera possibilità di una collisione che avrebbe causato la cancellazione di un duplicato.

Per rimediare a questo ho pensato di passare a SHA1, ma poi ho pensato che se avessi confrontato entrambi, ci sarebbero state anche meno possibilità di collisione.

Qualcuno qui conosce entrambi gli algoritmi abbastanza bene da confermare o negare questo?

Sto considerando la possibilità che una collisione di hash SHA1 significhi necessariamente che anche l'hash MD5 si scontrerà, nel qual caso confrontare entrambi sarebbe solo una perdita di tempo.

    
posta Dave Goldsmith 16.02.2018 - 02:28
fonte

2 risposte

1

Prima di tutto, sì sia MD5 che SHA1 sono stati ritirati dall'uso crittografico perché perché è possibile costruire coppie di messaggi che producono lo stesso valore di hash (ovvero "collisioni"). Detto questo, la possibilità di colpire una collisione a caso è assurdamente bassa.

MD5 ha un output a 128 bit, SHA1 è 160 bit. Supponiamo che un file sottoposto a hashing esegua l'hash su uno dei 2 output 128 / 2 160 con uguale probabilità, quindi, in media, ti aspetti di trovare una collisione dopo l'hashing 2 127 / 2 159 file diversi.

Supponiamo di aver riempito un disco rigido con file a 512 bit (64 byte). Avresti bisogno di 2 133 bit = 1.3 x 10 27 TB per MD5 o 2 165 bit = 5,8 x 10 36 TB per memorizzare questi file. Per confronto, si stima che entro il 2020 la specie umana produrrà 44 zetabyte (4.4 × 10 10 TB) di dati all'anno.

Quindi, anche se hai cancellato tutti i file sul pianeta con MD5, hai solo una possibilità su 1 su 10 26 di ottenere una collisione per caso.

Per rispondere alla tua domanda originale:

To remedy this I thought I would switch to SHA1, but then had the thought that if I compared both, there would be even less chance of collision. Does anyone here know both algorithms well enough to confirm or deny this?

Sì, è vero che dal momento che sono diverse funzioni hash, le possibilità che esistano due messaggi che sono collisioni per entrambi sono minuscole. Non so se sia meno minuscolo della possibilità di collisione in SHA-2/256 o SHA-2/512. A questo punto stiamo discutendo le probabilità astronomiche (cioè la possibilità di ottenere una collisione è inferiore al numero di atomi nella cosa di tipo universo) quindi / scrollare le spalle?

Ora, se stai parlando di attacchi malevoli (ad esempio file creati appositamente per ingannare MD5 o SHA1), allora forse hai un punto. ... In tal caso usa SHA2 (che è 256 bit) e stai bene:)

    
risposta data 16.02.2018 - 03:07
fonte
1

La risposta di Mike, estesa con il commento sul paradosso del compleanno, è buona. Questa non è in realtà una risposta alla tua domanda, ma un approccio alternativo al tuo problema che metterà la tua mente a tuo agio se non sei già convinto dalla matematica che tutti gli altri ti hanno lanciato.

Come tutti hanno già detto, le collisioni di hash sono molto, molto, molto improbabili.

Ma se si vuole essere sicuri al 100% prima di eliminare un duplicato che potrebbe non essere uno, è sufficiente confrontare i file in byte di domanda per byte prima di eliminare la copia.

Determinare l'hash di un file richiede comunque di leggere l'intero file. Sarai occupato per un po '(pensa diverse ore fino a diversi giorni, a seconda della velocità del tuo disco) semplicemente generando hash per tutti i tuoi file. Quindi, supponendo che tu trovi l'1% di possibili duplicati dopo aver cancellato ogni file, dovendo leggere di nuovo questi 1% di essi per il confronto byte per byte, non aggiungerai molto overhead.

Un altro test (molto semplice e praticamente gratuito) che è possibile aggiungere prima di confrontare i file con i byte per confrontare le dimensioni del file. Se non corrisponde, i file non sono ovviamente identici, anche se i loro hash si scontrano. Ma il test è praticamente inutile, dal momento che quasi certamente non ti proteggerà dal confronto in byte anche con un singolo paio di file con hash duplicati.

    
risposta data 17.02.2018 - 02:10
fonte

Leggi altre domande sui tag