In pratica, sì, un hash crittografico identico significa che i file sono gli stessi, a condizione che i file non siano stati creati da un utente malintenzionato o da un'altra entità malevola. Le probabilità di collisioni casuali con qualsiasi funzione hash crittografica ben progettata sono così piccole da essere trascurabili nella pratica e in assenza di un attaccante attivo.
In generale, tuttavia, no, non possiamo dire che due file arbitrari con lo stesso hash significhino sicuramente che sono identici.
Il modo in cui funziona una funzione hash crittografica è quello di prendere un input di lunghezza arbitraria e di generare un valore di lunghezza fissa calcolato dall'input. Alcune funzioni hash hanno più lunghezze di output tra cui scegliere, ma l'output è ancora in una certa misura un valore di lunghezza fissa. Questo valore sarà lungo fino a poche decine di byte; gli algoritmi hash con il valore di output più lungo oggi in uso comune hanno un output a 512 bit e un output a 512 bit è 64 byte.
Se un input per una funzione hash è più lungo dell'output della funzione hash, è necessario rimuovere un po 'di fedeltà per adattare l'input all'output. Di conseguenza, devono esistere più input di lunghezze superiori alla lunghezza dell'output, che generano lo stesso output.
Prendiamo come esempio l'attuale cavallo di battaglia, SHA-256. Emette un hash di 256 bit o 32 byte. Se hai due file ciascuno lungo esattamente 32 byte, ma diversi, questi dovrebbero (presupponendo che non vi siano difetti nell'algoritmo) con hash su valori diversi, indipendentemente dal contenuto dei file; in termini matematici, l'hash è una funzione che mappa uno spazio di 2 256 input su uno spazio di 2 256 output, che dovrebbe essere possibile fare a meno delle collisioni. Tuttavia, se si dispone di due file ciascuno lungo 33 byte, deve esistere una combinazione di input che forniscono lo stesso valore hash di output a 32 byte per entrambi i file, poiché ora stiamo mappando uno spazio di input 2 264 su un 2 256spazio di uscita; qui, possiamo facilmente vedere che dovrebbero esistere, in media, 2 8 ingressi per ogni singola uscita. Portalo oltre e con i file a 64 byte dovrebbero esistere 2 256 input per ogni singolo output!
Le funzioni hash crittografiche sono progettate in modo tale che sia computazionalmente difficile comporre un input che dia un output particolare o comporre due input che danno lo stesso output. Questo è noto come resistenza all'attacco preimage o resistenza all'attacco di collisione . Non è impossibile trovare queste collisioni; è solo destinato a essere davvero, davvero, davvero difficile. (Un po 'di un caso speciale di un attacco di collisione è un attacco di compleanno .)
Alcuni algoritmi sono migliori di altri nel resistere agli attaccanti. L'MD5 è generalmente considerato completamente rotto in questi giorni, ma l'ultima volta che ho guardato, mostrava ancora una buona resistenza preimage . Anche SHA-1 è effettivamente rotto; gli attacchi pre-immagine sono stati dimostrati, ma richiedono condizioni specifiche, anche se non c'è motivo di credere che ciò accadrà indefinitamente; come dice il proverbio, gli attacchi migliorano sempre, non peggiorano mai. SHA-256/384/512 sono attualmente ancora ritenuti sicuri per la maggior parte degli scopi. Tuttavia , se sei solo interessato a vedere se due non maliziosi, validii file sono gli stessi, quindi ognuno di questi dovrebbe essere sufficiente, perché lo spazio di input è già sufficientemente limitato da interessarti maggiormente alle collisioni casuali. Se hai qualche motivo per credere che i file siano stati creati in modo dannoso, allora devi usare almeno una funzione di hash crittografica che si ritiene attualmente sicura, che pone la barra inferiore su SHA-256.
Il primo preimage è trovare un input che dia un valore hash di output specifico; la seconda preimage è trovare un input che dia lo stesso output di un altro input specificato; la collisione è trovare due input che producono lo stesso output, indipendentemente da ciò che è e talvolta senza considerare ciò che sono input.
Detto questo, è importante tenere presente che i file possono avere rappresentazioni di dati molto diversi e visualizzare comunque esattamente lo stesso. Quindi possono sembrare uguali anche se i loro hash crittografici non corrispondono, ma se gli hash corrispondono, è molto probabile che appaiano uguali.
cmp
su Unix ofc
(confronto di file) su Windows.