when people say a file has a checked md5 hash, what exactly does that mean?
Per essere chiari, l'articolo del tuo link parla di firme digitali e ha una sezione che mostra una figura con un valore MD5.
Le firme digitali e gli hash MD5 sono cose diverse.
MD5 è un algoritmo che genera un valore hash crittografico. MD5, come altre funzioni hash crittografiche, prende come input una sequenza di bit e produce un'uscita a dimensione fissa indipendentemente dalla dimensione dell'input. La sequenza di bit può essere un file. Per semplicità, d'ora in poi userò il file invece della sequenza di bit.
Quando vuoi controllare se hai lo stesso file di un'altra persona, puoi generare un hash MD5 del file e confrontarlo con un hash MD5 creato dall'altra persona.
Avviso : Il seguente esempio non è sicuro ed è solo per illustrazione!
Alice invia a Bob un file:
- Alice calcola un hash MD5 hash_alice per file_a
- Bob chiede ad Alice di inviarlo file_a
- Alice invia file_a a Bob
- Bob riceve file_a
- Bob calcola un hash di hash MD5 per file_a
Se hash_bob è uguale a hash_alice, allora il file Bob riceve lo stesso file inviato da Alice. Bob ha controllato l'hash MD5 per verificare di aver ricevuto il file corretto.
Ora supponiamo che Mallory sia un attaccante e voglia dare a Bob un virus. Ha la capacità di monitorare gli scambi e intercettare i file.
- Alice calcola un hash MD5 hash_alice per file_a
- Bob chiede ad Alice di inviarlo file_a
- Alice invia file_a a Bob
- Mallory incerce file_a da Alice
- Mallory copia il suo file virus file_v e lo rinomina file_a
- Mallory invia il file del virus file_a a Bob
- Bob riceve file_a
- Bob calcola un hash di hash MD5 per file_a
Ora hash_bob non dovrebbe essere lo stesso di hash_alice e Bob dovrebbe rendersi conto che qualcuno ha inviato il file sbagliato.
if the program has multiple files, how do we go about computing the single md5 hash for that program?
Per ogni file nel programma si calcola un valore hash.
Se si dispone di: main.exe libabc.dll release.txt e iconabc.gif
Calcolo hash_main.exe, hash_libabc.dll, hash_release.txt e hash_iconabc.gif
Ogni valore di hash dovrebbe essere unico.
Sezione intermedia:
Il problema con il primo esempio è che non mostra come Bob ottiene hash_alice in modo che possa confrontarlo con hash_bob. Se hash_alice viene inviato allo stesso modo di file_a, un utente malintenzionato lo modificherà in modo simile a come Mallory nel secondo esempio.
Esistono due soluzioni di base al problema: utilizzare un canale sicuro (o fuori banda) per inviare l'hash o far firmare l'hash da un certificato attendibile (credito @nealmcb qui). Fuori banda significa utilizzare un diverso mezzo fisico di trasmissione. Un esempio di fuori banda potrebbe essere quello di stampare il valore hash e inviarlo tramite posta ordinaria. Canale sicuro significa utilizzare qualcosa come una rete privata virtuale (VPN) o IPSec.
Il problema con l'hash firmato è che Bob ha bisogno del certificato di Alice per verificare la firma. Se Alice invia il certificato a Bob nello stesso modo in cui invia il file, il certificato potrebbe essere intercettato come il file (credito @nealmcb qui).
Riflessioni sulla trasmissione:
Se pensi alle due soluzioni per un minuto potresti trovare una domanda.
Se ho un canale sicuro per inviare l'hash, perché non uso lo stesso canale per inviare il file?
I motivi per cui utilizzeresti la normale rete Internet per inviare il file e un canale sicuro per inviare l'hash:
- Il canale protetto è molto lento (cioè dialup) e l'hash è breve, quindi trasferisce rapidamente, ma il file è di grandi dimensioni e richiederebbe troppo tempo.
- Il canale sicuro è costoso. O ti viene addebitato il tempo utilizzato oi byte trasferiti.
- Il proprietario del canale limita l'uso del canale sicuro solo per inviare o ricevere hash.