Quanto è preciso `md5sum`?


27

Quando si utilizza md5sumper verificare l'integrità di un file, quanto è accurato il processo?

Un MD5 verificato significa che OGNI bit è esattamente lo stesso o esiste una soglia che deve essere superata prima che l'alterazione binaria si rifletta nell'MD5?

Anche la documentazione su come viene generato un md5 sarebbe apprezzata.



@choroba se sto leggendo tutto questo correttamente, allora la probabilità di alterazione non rilevata aumenta con la dimensione del file da verificare. Tuttavia è ancora una probabilità e la certezza del 100% può essere ottenuta solo con un file di 16 byte. Ho ragione?
Konner Rasmussen,

@Konner Ho letto la tua domanda relativa al trasferimento di file. A tale scopo, è sicuro. Le possibilità che un po 'venga danneggiato su un trasferimento sono piccole ed è più probabile che tu perda parte del file copiato sul trasferimento, supponendo che io abbia compreso la tua situazione precedente . MD5 equivale a confrontare entrambi i file, con qualche vantaggio nel fatto che non è necessario accedere a entrambi i file contemporaneamente.
Doktoro Reichard,

15
"Un MD5 verificato significa che OGNI bit è esattamente lo stesso." Si noti che questo è impossibile, grazie al principio Pigeonhole. it.wikipedia.org/wiki/Pigeonhole_principle
Plutor

3
Non credo nemmeno che tu abbia una garanzia per i file a 16 byte.
Mooing Duck

Risposte:


65

MD5 è rotto a questo scopo contro un avversario intelligente. È possibile costruire maliziosamente due diversi blocchi di dati che producono lo stesso hash MD5.

Tuttavia, è del tutto adatto (anche se ci sono quasi certamente dei modi migliori) utilizzare MD5 per proteggersi dalla corruzione involontaria di dati durante il trasporto o lo stoccaggio. Mentre è concepibile che un tale evento possa far sì che l'hash MD5 sia lo stesso, la probabilità è così bassa che è quasi inimmaginabile che sarebbe una probabilità di cui preoccuparsi. I guasti causati da radiazioni di fondo, tunneling, elettricità statica e dozzine di altre fonti sarebbero ordini di grandezza più probabili.

Anche se tu avessi un quadrilione di unità di dati, la probabilità che un MD5 non corrispondente produca un hash MD5 appartenente a una di quelle quadrilioni di unità è molto inferiore a una su un quadrilione.


Sebbene teoricamente sia possibile generare due file con lo stesso hash, potrebbe essere praticamente impossibile. Soprattutto se anche il file di sostituzione dovrebbe avere un senso. Se il file originale era in inglese, ad esempio, potrebbe non esserci nessun'altra corrispondenza che sia anche inglese. O se si tratta di un foglio di calcolo Excel, nessuno degli altri file con lo stesso hash sarebbe un foglio di calcolo valido.
Barmar,

1
@Barmar: win.tue.nl/hashclash/Nostradamus questi ragazzi hanno creato un numero di file pdf con lo stesso hash MD5 per dimostrare che era praticamente fattibile.
philfr,

26

MD5 è un hash. Fondamentalmente mappa l'intero contenuto di un file in una piccola stringa di IIRC lunga 16 byte.

Ovviamente ci saranno più file con hash alla stessa somma MD5. Pertanto, una somma MD5 corrispondente non è garanzia di una corrispondenza esatta tra i file.

Non esiste una soglia in quanto tale perché il modo in cui funzionano gli hash. Quindi una somma MD5 può rilevare anche un singolo cambio di bit. Tuttavia, molte modifiche a bit singolo insieme possono causare l'hash MD5 uguale. È quindi abbastanza ragionevole utilizzare MD5 per convalidare l'integrità dei file contro la corruzione casuale, ma non è possibile se vi sono intenzioni dannose poiché qualcuno potrebbe modificare un file assicurandosi che l'hash MD5 sia lo stesso.


1
per farla breve, un md5 non è altro che un modo rapido e sporco di verificare l'integrità dei file e dovrebbe essere usato solo quando un errore non rilevato non causerebbe ripercussioni catastrofiche ... giusto?
Konner Rasmussen,

3
il miglior uso è rilevare la corruzione durante il trasferimento o la copia. non proprio come una cosa di sicurezza.
Michael Martinez,

12
@KonnerRasmussen - non è una questione di grado di ripercussioni, è la natura della minaccia. Se sei preoccupato che due documenti possano avere accidentalmente lo stesso MD5, smetti di preoccuparti: le probabilità sono considerevolmente più alte che i tuoi computer scoppieranno spontaneamente in fiamme; se sei preoccupato che un aggressore intelligente possa produrre un documento che corrisponda a quello che hai già, questa è una preoccupazione seria e dovresti ottenere un hash migliore; se sei preoccupato, un aggressore intelligente potrebbe produrre due documenti corrispondenti tra loro, non preoccuparti: accadrà sicuramente .
Malvolio,

5
Naturalmente, mentre generare una collisione di hash MD5 è teoricamente possibile, generare una collisione utile (come in, il file di collisione è lo stesso tipo di file e il suo contenuto è almeno plausibilmente autentico) è molto più difficile ...
Shadur

6
@Shadur: Questo era il caso, ma la ricerca sulla sicurezza in corso ha scoperto nuovi modi per generare collisioni MD5 che lo rendono più semplice. In particolare, se il formato del file consente blocchi di dati di "commento" in formato libero, è possibile abbinare qualsiasi hash MD5 inserendo un commento adatto.
Salterio

17

Un MD5-Hash è composto da 128 bit. Un singolo bit capovolto nella sorgente lancia (in media) 64 bit nell'hash.

La probabilità che due hash si scontrino accidentalmente è 1/2 ^ 128 che è 1 su 340 undecilioni 282 decillion 366 nonillion 920 ottilioni 938 settilioni 463 sextillion 463 quintilioni 374 quadrilioni 607 trilioni 431 miliardi 768 milioni 211 mila 456.

Tuttavia, se mantieni tutti gli hash, grazie alla probabilità di paradosso del compleanno è un po 'più alta. Per avere il 50% di possibilità di scontrarsi con qualsiasi hash, sono necessari 2 ^ 64 hash. Ciò significa che per ottenere una collisione, in media, è necessario eseguire l'hashing di 6 miliardi di file al secondo per 100 anni.

Fonte: porneL, /programming/201705/how-many-random-elements-before-md5-produces-collisions


8
Quindi stai dicendo che c'è ancora una possibilità? : p
Holloway,

1
Il problema è che, sebbene BISOGNO di eseguire l'hashing di 6 miliardi di file al secondo per 100 anni per essere certi di trovare una collisione; potrebbe accadere entro il primo secondo.
derby il

È vero, potrebbe succedere il primo secondo. Ma come sempre si tratta di ragioni di bilanciamento. Potrebbero esserci applicazioni militari in cui tale rischio non è accettabile, ma vorrei noleggiare un'auto senza pensarci due volte in cui i sensori dell'airbag utilizzano md5. Ricorda, è probabile che vieni colpito da un fulmine più volte mentre aspetti una collisione md5.
Zsolt Szilagy,

Mi dispiace, ma la metà di 2 ^ 128 è 2 ^ 127, non 2 ^ 64.
fischi,

2
@fischi, leggi il link sul paradosso del compleanno e anche en.wikipedia.org/wiki/Birthday_attack - non si tratta semplicemente di dimezzare il numero totale di hash. Dato lo spazio di ricerca H, il numero di hash che devi generare prima di ottenere una probabilità del 50% di una collisione è approssimativamente di sqrt ((pi / 2) * H). Se lo fai con 2 ^ 128, otterrai un numero circa 2 ^ 64
Paul Dixon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.