In che modo CRC e checksum proteggono l’integrità dei dati nel software di tutti i giorni

4

Probabilmente hai visto una stringa hash o un valore di checksum durante un aggiornamento software o un download di file. Sembra un rumore casuale: una lunga stringa di cifre esadecimali o un breve numero allegato a un file. Ma ha uno scopo vitale. È un’impronta digitale. Se cambia anche un solo bit di dati, l’impronta digitale cambia completamente. Questo meccanismo garantisce che ciò che hai scaricato sia esattamente ciò che è stato inviato, fino all’ultimo byte.

I due modi più comuni per raggiungere questo obiettivo sono i Checksum e i Cyclic Redundancy Checks (CRC). Sebbene sembrino simili, operano su principi diversi e servono nicchie leggermente diverse nel mondo dei protocolli Internet e dell’archiviazione dei dati. Comprendere la differenza è importante per chiunque abbia a che fare con trasferimenti di file, traffico di rete o diagnostica hardware.

Il semplice checksum

Fondamentalmente, un checksum è un valore derivato da un blocco di dati digitali. La versione più semplice è l’Internet Checksum utilizzato nei protocolli più vecchi come IPv4 e UDP. Funziona trattando i dati come una sequenza di parole a 16 bit e sommandoli insieme. Se è presente un numero dispari di byte, viene aggiunto un byte di riempimento. La somma è quindi complementare.

Questo metodo è veloce. Molto veloce. Ma non è particolarmente robusto. Può perdere alcuni tipi di errori. Ad esempio, se due byte si scambiano di posto o se un’inversione di bit in una posizione viene compensata da un’inversione di bit in un’altra, il checksum potrebbe rimanere invariato. È come controllare il peso di una valigia ignorandone il contenuto. Sai che il peso è corretto, ma non sai se la maglietta è ancora lì o se è stata sostituita da una roccia dello stesso peso.

A causa di queste limitazioni, oggigiorno i checksum semplici vengono utilizzati raramente per i controlli di integrità critica. Sono stati per lo più sostituiti da algoritmi più robusti come CRC o hash crittografici come SHA-256. Tuttavia, comprendere il semplice checksum aiuta a spiegare perché abbiamo bisogno di strumenti migliori per la verifica dell’integrità dei dati.

Inserisci il controllo di ridondanza ciclico (CRC)

CRC è dove le cose si fanno interessanti. Si basa sulla divisione polinomiale. Invece di limitarsi ad aggiungere numeri, CRC tratta i dati come un grande numero binario e li divide per un polinomio generatore predefinito. Il resto di questa divisione è il valore CRC.

Questo approccio matematico rende CRC molto più efficace nel rilevare gli errori. Può rilevare tutti gli errori a bit singolo, tutti gli errori a doppio bit e qualsiasi numero dispari di errori. Rileva anche gli errori di burst (bit consecutivi danneggiati) che sono comuni nei canali di trasmissione rumorosi. Pensa agli errori di burst come a un guasto momentaneo in un segnale radio o a un graffio su un CD. CRC è progettato per gestire queste imperfezioni del mondo reale.

La variante più comune è CRC-32, che produce un valore a 32 bit. Lo troverai ovunque. Frame Ethernet, file ZIP, immagini PNG e persino alcuni sistemi di database utilizzano CRC-32. Non è crittograficamente sicuro (non puoi usarlo per dimostrare che qualcuno non ha manomesso intenzionalmente i tuoi dati), ma è eccellente in caso di corruzione accidentale.

Perché è importante per te?

Potresti non pensare a CRC quando riproduci in streaming un video o invii un’e-mail. Ma funziona dietro le quinte. Quando scarichi una patch del gioco, il tuo sistema utilizza checksum o CRC per verificare i file. Se i valori non lo fanno