2011-02-07 12 views
6

Ho un client che sta distribuendo internamente grandi file binari. Stanno passando anche checksum md5 dei file e apparentemente verificando i file rispetto al checksum prima dell'uso come parte del loro flusso di lavoro.Quanto sono probabili checksum falsi positivi md5?

Tuttavia, sostengono che "spesso" si verificano corruzioni nei file in cui l'md5 sta ancora dicendo che il file è buono.

Tutto ciò che ho letto suggerisce che questo dovrebbe essere estremamente improbabile.

Sembra probabile? Un altro algoritmo di hashing fornirebbe risultati migliori? Dovrei effettivamente considerare problemi di processo come quelli che pretendono di controllare il checksum, ma non lo fanno davvero?

NB, non so ancora cosa significhi "spesso" in questo contesto. Stanno elaborando centinaia di file al giorno. Non so se si tratta di un evento giornaliero, mensile o annuale.

+5

Fornire loro un esempio di file "corrotto" e di "buono" originale. –

+1

È possibile che la somma md5 sia stata calcolata su un file corrotto o che il danneggiamento si sia verificato dopo che la somma è stata calcolata? Per sapere con certezza, prendi il suggerimento di Anon e ottieni un esempio di due file con lo stesso checksum. – BMitch

+0

Quindi, da allora, hai guardato l'idea di sincronizzazione bittorrent? getsync.com] – dlamblin

risposta

9

MD5 è una funzione di hash crittografica a 128 bit, quindi messaggi diversi dovrebbero essere distribuiti piuttosto bene nello spazio a 128 bit. Ciò significherebbe che due file (esclusi i file creati appositamente per sconfiggere MD5) dovrebbero avere una probabilità di collisione 1 su 2^128. In altre parole, se un paio di file vengono confrontati ogni nanosecondo, non sarebbe ancora successo.

+1

Bene, sei consapevole che è già successo, vero? Ovviamente quelle collisioni sono state provocate (si cercava di creare due file diversi con lo stesso checksum MD5), ma ciò non cambia il fatto che ci sono diversi file noti all'umanità (e anche questi sono fuori nella natura) che producono esattamente lo stesso checksum MD5, anche se contengono dati completamente diversi. – Mecki

+2

@Mecki: hai letto la parte in cui ho detto "(esclusi i file creati appositamente per sconfiggere MD5)"? – recursive

+0

Ma non hai mai solo due file, hai un set di file e non vuoi che due hash abbiano lo stesso valore. Si suppone che la probabilità sia sqrt (2^128) che è 2^64. È possibile archiviare circa 4,3 miliardi di file se si utilizza un hash a 64 bit o 280 trilioni di file con speace di MD5. Quando hai raggiunto 2^128 file, ti garantirai che il tuo prossimo file entrerà in collisione, se sei riuscito a evitare collisioni fino a quel punto; che non puoi avere, praticamente. – dlamblin

5

Se un file è danneggiato, la probabilità che il file danneggiato abbia lo stesso checksum md5 del file non danneggiato è 1: 2^128. In altre parole, succederà quasi come "spesso" come mai. È astronomicamente più probabile che il tuo cliente stia riportando erroneamente ciò che è realmente accaduto (come sta calcolando l'hash sbagliato)

4

Sembra un bug nel loro uso di MD5 (forse sono MD5 -ing i file sbagliati), o un bug nella libreria che stanno usando. Ad esempio, un vecchio programma MD5 che ho usato una volta non gestiva file superiori a 2 GB.

This question suggerisce che, in media, si ottiene una collisione in media ogni 100 anni se si generano 6 miliardi di file al secondo, quindi è abbastanza improbabile.

3

Sembra probabile?

No, la possibilità di una corruzione casuale che causa lo stesso checksum è 1 a 2 o 3,40 × 10. Questo numero mette 1 su un miliardo (10) possibilità da vergognare.

Un altro algoritmo di hashing fornirebbe risultati migliori?

Probabilmente no. Mentre MD5 è stato rotto per la resistenza alla collisione contro gli attacchi, va bene contro la corruzione casuale e uno standard popolare da usare.

Devo effettivamente esaminare problemi di processo come quelli che pretendono di verificare il checksum, ma non lo fanno davvero?

Probabilmente, ma prendere in considerazione tutti i possibili punti di problemi:

  1. file danneggiato prima generazione MD5
  2. file corrotto dopo la verifica MD5.
  3. programma MD5 o struttura di sostegno ha un bug
  4. uso improprio Operator (non intenzionale, ad esempio, l'esecuzione del programma MD5 sul file sbagliato)
  5. Operator abusi (intenzionale, ad esempio, saltando il passaggio di verifica)

se è l'ultimo, quindi un ultimo pensiero è quello di distribuire i file in un formato wrapper che costringa l'operatore a scartare il file, ma lo srotolamento esegue la verifica durante l'estrazione. Penso a qualcosa come Gzip o 7-Zip che supporta file di grandi dimensioni e probabilmente disabilita la compressione (non so che lo facciano).

0

Ci sono tutti i tipi di motivi per cui i binari non vengono distribuiti o se lo fanno, c'è corruzione (firewall, limite di dimensioni, inserimenti di virus, ecc.). Dovresti sempre crittografare i file (anche una crittografia di basso livello è meglio di niente) quando invii file binari per proteggere l'integrità dei dati.

Problemi correlati