Ha senso controllare più hash quando rileva un file duplicato?

2

Per favore perdonami se questa domanda appartiene a un altro sito StackExchange.

Un collega molto più esperto (come, 8 volte più esperto di me) ha difeso energicamente un'idea che dovresti controllare più tipi di hash (md5, sha1 ecc.) così come le dimensioni da essere assolutamente sicuro che il file dato non sia un duplicato di un altro.

Penso che sia BS e che sia sufficiente controllare l'hash più strong usato (anche se md5 sembra "abbastanza strong" in questo contesto). Questo mi dà già più sicurezza di qualsiasi hash più debole, quindi combinare i due non aggiunge alcun vantaggio.

Ho ragione o torto? Ho trovato più spiegazioni che trattano di crittografia, ma quelle non sono direttamente applicabili.

    
posta Red 04.07.2016 - 07:37
fonte

2 risposte

4

Contro le collisioni accidentali, praticamente qualsiasi hash decente con dimensioni di output sufficienti funziona. Anche funzioni rotte come MD5 (e presto SHA-1) sono molto improbabili da produrre collisioni accidentali.

Contro le collisioni intenzionali che concatenano più hash ti dà un hash strong quanto l'individuo più strong. Ma probabilmente non più strong di quello.

In genere è meglio passare a una funzione hash più strong piuttosto che combinare due hash deboli. Raccomando SHA-2 e SHA-3 come hash resistenti alle collisioni. A 256+ bit, le collisioni accidentali sono così improbabili che è possibile ignorare completamente questa possibilità. E le collisioni deliberate sono ben al di là dell'attuale crittanalisi analitica.

SHA256 > MD5 + SHA1

    
risposta data 04.07.2016 - 09:27
fonte
3

Se hai 1 giorno di esperienza, né tu né il tuo collega potete essere considerati esperti in qualsiasi dominio. Quindi "8 volte" non è sempre una differenza impressionante ...

Le funzioni di hash trasformano un input arbitrario in un numero finito. Poiché esiste un numero infinito di input distinti, ci sono "molti" input che saranno associati allo stesso output, qualunque sia la funzione di hash che si considera. Questo è chiamato una collisione.

Nel tuo contesto, la domanda è quindi determinare la probabilità di ottenere accidentalmente lo stesso output per due input distinti. Se gli input non sono scelti maliziosamente, la risposta è che la probabilità è "molto bassa". Tuttavia, per alcuni algoritmi come MD5, si considera che si può facilmente creare un input con un output predeterminato.

Se si considera l'output di diversi algoritmi indipendenti, la probabilità di una collisione è il prodotto della probabilità di ciascun algoritmo: le uscite devono scontrarsi a coppie. Questa probabilità è quindi "estremamente" piccola.

Quindi, se non sospetti un attacco dannoso, l'uso di diversi algoritmi "abbastanza potenti" è "migliore" (rispetto all'uso di uno solo) ma anche inutile.

È possibile fare riferimento agli articoli del WP sulle funzioni di hash. Git utilizza SHA-1 per identificare qualsiasi versione di qualsiasi file che gestisce e per prevenire un danneggiamento accidentale di questi file. Per quanto ne so non causa alcun problema.

Vedi anche questa domanda sulla probabilità di una collisione con SHA-1.

    
risposta data 04.07.2016 - 08:11
fonte

Leggi altre domande sui tag