Se tuttavia non si vuole utilizzare il Download Manager (ad esempio non accettiamo di installarlo), è possibile scaricare direttamente l'immagine del software. Così facendo è consigliabile, una volta scaricato il file, controllarne la checksum.
La checksum, cioè somma di controllo, viene utilizzata per verificare l'integrità di un dato o di un messaggio che potrebbe subire alterazioni. Una somma di controllo potrebbe sommare tutti i bit del dato e verificare se la somma dei bit trasmessi corrisponda a quella calcolata prima del trasferimento. Se due o più input hanno la stessa somma, quindi la stessa checksum, si parla di collisione. Minore è la probabilità di collisione, migliore è la qualità dell'algoritmo di controllo per verificare l'integrità del dato in sicurezza. Pertanto è importante utilizzare algoritmi con strutture matematiche complesse per impedire a malintenzionati di calcolare checksum che determinino collisioni. Quando scarichiamo file da internet, è buona pratica verificare la checksum per poter assicurare che i dati scaricati siano corretti e per garantirne l'autenticità. In genere per la checksum (digest nel caso specifico) vengono utilizzati algoritmi di hash crittografati, come MD5 e SHA-1 che comunque non sono esenti da collisioni.
Qui possiamo vedere una panoramica sulle funzioni hash e degli attacchi ai quali potrebbero essere soggetti: collisione hash, attacco del compleanno, attacco preimmagine, tabella arcobaleno, attacco del canale laterale e attacco a forza bruta.
Con c# possiamo facilmente calcolare la checksum (MD5) di un file:
using (FileStream file = new FileStream(txtFile.Text, FileMode.Open)) { byte[] retVal; using (MD5 md5 = new MD5CryptoServiceProvider()) { retVal = md5.ComputeHash(file); txtMD5.Text= BitConverter.ToString(retVal).Replace("-", ""); // hex string } }
Qui potete scaricare la soluzione.
Controllo di un file scaricato con verifica del checksum (MD5) dichiarato:
Esito positivo
Esito negativo: