Come è stato notato da altri, ci sono molte possibilità di corruzione dei dati in cui qualsiasi checksum a livello di trasporto non può aiutare, come la corruzione che si verifica già prima che il checksum sia calcolato sul lato di invio, un MITM che intercetta e modifica il flusso (anche i dati come checksum), corruzione che si verifica dopo la convalida del checksum alla fine della ricezione, ecc.
Se ignoriamo tutte queste altre possibilità e ci concentriamo sulle specifiche del checksum TCP stesso e su ciò che effettivamente fa in termini di convalida dell'integrità dei dati, si scopre che le proprietà di questo checksum non sono affatto complete in termini di rilevamento degli errori. Il modo in cui è stato scelto questo algoritmo di checksum riflette piuttosto il requisito della velocità in combinazione con il periodo di tempo (fine anni '70).
Ecco come viene calcolato il checksum TCP :
Checksum: 16 bit
Il campo di checksum è il complemento a 16 bit della somma del complemento a uno di tutte le parole a 16 bit nell'intestazione e nel testo. Se un segmento contiene un numero dispari di ottetti di intestazione e di testo da sommare, l'ultimo ottetto viene riempito a destra con zeri per formare una parola di 16 bit ai fini del checksum. Il pad non viene trasmesso come parte del segmento. Durante il calcolo del checksum, il campo del checksum stesso viene sostituito con zeri.
Ciò significa che qualsiasi corruzione che si equilibra quando si sommano i dati in questo modo non verrà rilevata. Ci sono una serie di categorie di corruzione nei dati che questo consentirà, ma solo come un esempio banale: cambiare l'ordine delle parole a 16 bit rimarrà sempre inosservato.
In pratica, rileva molti errori tipici ma non garantisce affatto l' integrità. È anche aiutato dal modo in cui il livello L2 esegue anche i controlli di integrità (ad esempio CRC32 dei frame Ethernet), anche se solo per la trasmissione sul collegamento locale, e molti casi di dati danneggiati non vengono nemmeno passati allo stack TCP.
Convalidare i dati usando un hash forte, o preferibilmente una firma crittografica, è su un livello completamente diverso in termini di garantire l'integrità dei dati. I due non possono nemmeno essere paragonati.