# Checksum

In telecomunicazioni e informatica una somma di controllo o checksum è una sequenza di bit che, associata al pacchetto trasmesso, viene utilizzata per verificare l'integrità di un dato o di un messaggio che può subire alterazioni durante la trasmissione sul canale di comunicazione.
Il funzionamento della somma di controllo è del tutto analogo a quello dell'ultima lettera del codice fiscale. Essa infatti viene generata tramite un certo algoritmo a partire dalle lettere precedenti. Nel comunicare il codice fiscale potrebbe capitare che qualche lettera venga alterata. Il destinatario perciò può ricalcolarsi l'ultima lettera (la checksum). Se il risultato del calcolo è diverso da quanto scritto nel codice fiscale allora c'è stato un errore e il codice è sbagliato.

## Descrizione

Il tipo più semplice di checksum consiste nel sommare in trasmissione tutti i bit del messaggio e di memorizzare il valore risultante nel frame inviato. Per controllare l'integrità del messaggio sarà sufficiente effettuare in ricezione la stessa operazione di somma e confrontarla con il checksum memorizzato nel frame. Se i due valori coincidono, i dati possono essere considerati integri.
Questa semplice forma di checksum non è molto accurata in quanto non permette di rilevare certe tipologie di errore come:
* il riordinamento dei bit del messaggio
* l'inserimento di bit con valore 0
* la presenza di diversi errori che sommati tra loro danno 0
In questi casi, quando cioè ci sono due o più serie di bit che hanno lo stesso checksum, si parla di collisioni. Ovviamente, minore è la probabilità di collisioni, migliore è la qualità dell'algoritmo di controllo e quindi la sicurezza nella verifica dell'integrità.
Altre comuni varianti di questo semplice checksum sono ottenute usando al posto della somma l'operazione di XOR come nel longitudinal redundancy check (LRC) o sommando i bit a gruppi di 2 o 4 come nell'Internet checksum (RFC-1071). Queste varianti mantengono la stessa semplicità di calcolo ma manifestano anche gli stessi difetti.
Con il tempo sono nati diversi metodi di controllo più sofisticati, come il checksum di Fletcher, l'Adler-32, il cyclic redundancy check (CRC), in cui il risultato non dipende solo dal valore dei bit, ma anche dalla loro posizione. Il prezzo della maggiore affidabilità viene pagato in termini di risorse di elaborazione necessarie al calcolo del checksum.
Il checksum è presente nell'header di molti protocolli di rete proprio per verificare l'integrità del pacchetto trasmesso.
Questi metodi sono utili per la verifica di corruzioni accidentali (errori di trasferimento, o di memorizzazione, perdita di dati), ma non sono sicuri contro gli attacchi di malintenzionati, in quanto le loro strutture matematiche non sono particolarmente complesse da aggirare. Per questo tipo di attacchi vengono utilizzati algoritmi di hash crittografati, come l'MD5, lo SHA-1 (in cui però sono state trovate collisioni), o lo SHA-256, per il momento incorruttibile.
I checksum vengono usati spesso su Internet per poter garantire che i dati scaricati siano corretti e per garantirne l'autenticità. Per esempio nel download di software, il distributore del programma pubblica il checksum (in genere MD5 o SHA-1), che nello specifico viene chiamato digest, che viene controllato dall'utente per verificare l'integrità dei dati.