Molti siti Web che offrono download forniscono anche gli hash MD5 o SHA1 dei file che sono disponibili per il download.
Un esempio -
Qual è lo scopo di sicurezza dietro la fornitura di una simile struttura all'utente finale?
Una funzione di hash crittografica è una funzione che tutti possono calcolare in modo efficiente (non c'è nulla di segreto a riguardo) e offre alcune caratteristiche interessanti:
Per lo scenario in questione, le collisioni non sono un problema. La resistenza di preimage riguarda l'impossibilità di trovare un messaggio m che, quando sottoposto a hash, produce un dato risultato. La seconda resistenza di preimage è simile: si conosce un messaggio m che, quando è sottoposto a hashing, restituisce un output x e non si riesce a trovare un altro messaggio < em> m ' (distinto da m ) che produce lo stesso output. L'impossibilità di raggiungere questa impossibilità è un argomento piuttosto complesso (vedi questo ).
La dimensione di output ridotta è la ragione per cui li utilizziamo per i download. Se si ottiene l'hash MD5 da una fonte attendibile (il sito Web SSL del publisher), è possibile scaricare i dati effettivi da qualsiasi luogo, ad es. una rete P2P come BitTorrent . Una volta che hai i dati, lo hai cancellato (su il tuo computer) e poi controlla che il valore hash MD5 o SHA-1 corrisponda a quello che hai ottenuto dalla fonte attendibile. In una partita, sai che hai il file giusto, fino all'ultimo bit, perché, per nutrirti di un file alterato pur mantenendo il giusto valore hash, un malintenzionato attaccante dovrebbe rompere la seconda resistenza di preimage della funzione di hash e, al momento, nessuno sa come farlo.
Se si scarica il file dalla stessa origine del valore hash, il valore hash è praticamente inutile. Il valore aggiunto per la sicurezza dell'MD5 o SHA-1 pubblicato si trova nella situazione in cui i dati bulk sono ottenuti tramite un mezzo "debole", mentre il valore hash viene trasferito in modo sicuro.
Anche i valori di hash sono ottimi per rilevare errori. Hanno lo scopo di resistere alle modifiche dei dati da parte di aggressori intelligenti che sanno cosa stanno facendo; questo li rende anche robusti contro l'alterazione casuale da un universo senza mente. Le funzioni di hash sono checksum molto buoni. Se scarichi un grosso file, dici un'immagine ISO, masterizzalo su un DVD, poi rileggi il DVD su qualche altra macchina, quindi c'è ampio spazio per alterazioni non dannose, in particolare RAM cattiva su entrambe le macchine (i bit capovolti si verificano più spesso del solito assunto). In qualsiasi momento, puoi ricalcolare l'hash sui dati e vedere se corrisponde al valore previsto.
L'hash MD5 / SHA1 che viene fornito serve come checksum per verificare l'integrità del file. Soprattutto sui sistemi Linux / Unix, le utilità md5sum
e sha1sum
forniscono un mezzo conveniente per verificare che il file non sia stato manomesso.
Naturalmente, gli hash forniti sono utili solo SE per accertarti che l'hash non sia stato manomesso. Ciò significa che gli hash devono essere trasmessi all'utente finale in modo sicuro, forse tramite HTTPS o un canale diverso.
What is the security purpose behind providing such a facility to the end-user?
C'è una possibilità che quando stai provando a scaricare un file / software un cattivo può avere successo nel fare un attacco Man In The Middle e sostituisci il software reale con una versione dannosa . Gli hash ti aiutano a essere sicuro di aver scaricato il software originale.
Negli ambienti basati su linux hai utility md5sum e sha1sum. Nel caso tu stia usando windows puoi usare qualcosa come cryptool.
Il punto di un hash è che se i dati cambiano, l'hash cambia. Quindi se sai che l'hash è corretto (cioè hash(data_you_have) = announced_hash
), e se sai che l'hash è buono (cioè announced_hash = hash(genuine_data)
), allora sai di avere i dati giusti ( data_you_have = genuine_data
).
Quindi, perché dovresti inviare un hash separatamente? Nel caso qualcuno potesse modificare i dati ma non l'hash. Questo ha senso se si inviano i dati attraverso un canale che ha una larghezza di banda elevata ma può essere soggetto a corruzione dei dati e l'hash attraverso un canale più affidabile ma con poca larghezza di banda.
I torrenti sono un buon esempio. Il file .torrent
contiene un hash di ogni file nel torrent. Sono solo pochi kilobyte e possono essere scaricati facilmente sul web. Le parti del torrent, d'altra parte, vengono scaricate da macchine sconosciute casuali da qualche parte su Internet, di cui non si ha motivo di fidarsi. Quindi, una volta che i dati sono stati scaricati, il tuo software torrent verificherà che gli hash corrispondano e rifiutino qualsiasi pezzo il cui hash non corrisponde.
Qui, fornire separatamente gli hash sulla pagina web è un'ulteriore comodità se si ottiene il file .torrent
dalla stessa fonte: in tal caso non è necessario verificare separatamente l'hash. Se ottieni il file .torrent
da un'origine diversa (ad esempio un tracker), tale origine potrebbe essere essa stessa corrotta o dannosa e gli hash ti consentono di verificare che i dati scaricati siano autentici.
Se scarichi gli hash da un sito web su HTTP, devi fidarti delle seguenti parti:
Non è necessario, tuttavia, fidarsi di chiunque sia coinvolto nell'ottenere i dati effettivi: solo gli hash.
Spetta a te decidere se fidarti del sito (sia per servire dati utili e non essere interessati da malware) sia per sapere se il tuo computer è privo di malware. Per quanto riguarda l'infrastruttura di Internet, in pratica si tratta di un rischio molto basso, a meno che non si utilizzi il wifi pubblico.
Se si scaricano gli hash su un sito Web HTTPS il cui certificato è valido, si rimuove il rischio dall'infrastruttura Internet. Hai ancora bisogno di fidarti del proprietario del sito web, della tua macchina e della parte dell'infrastruttura di Internet coinvolta nella fornitura del certificato (provider di browser, autorità di certificazione).
Leggi altre domande sui tag hash