Jak CRC a kontrolní součty zajišťují integritu dat v každodenním softwaru

9

Pravděpodobně jste viděli hash řetězec nebo hodnotu kontrolního součtu během aktualizace softwaru nebo stahování souboru. Vypadá to jako náhodný šum – dlouhý řetězec hexadecimálních číslic nebo krátké číslo připojené k souboru. Ale plní životně důležitou funkci. Toto je digitální otisk prstu. Pokud se změní byť jen jeden bit dat, otisk prstu se změní úplně. Tento mechanismus zajišťuje, že jste stáhli přesně ten soubor, který byl odeslán, až do posledního bajtu.

Dva nejběžnější způsoby, jak toho dosáhnout, jsou Kontrolní součty a Cyclic Redundancy Codes (CRC). Přestože znějí podobně, jsou založeny na jiných principech a slouží trochu jiným oblastem ve světě síťových protokolů a ukládání dat. Pochopení rozdílu mezi těmito dvěma je důležité pro každého, kdo se zabývá přenosy souborů, síťovým provozem nebo diagnostikou hardwaru.

Jednoduchý kontrolní součet

V jádru je kontrolní součet hodnota odvozená z bloku digitálních dat. Nejzákladnější verzí je Internet Checksum, používaný ve starších protokolech jako IPv4 a UDP. Funguje tak, že data zpracovává jako sekvenci 16bitových slov a sčítá je dohromady. Pokud je počet bajtů lichý, přidá se vyrovnávací bajt. Poté je součet převrácen na jednotky (jedničkový doplněk).

Tato metoda je velmi rychlá. Velmi rychle. Není to ale nijak zvlášť spolehlivé. Může chybět určité typy chyb. Pokud jsou například prohozeny dva bajty nebo pokud je bitová inverze na jedné pozici kompenzována bitovou inverzí na jiné, kontrolní součet může zůstat nezměněn. Je to podobné jako při kontrole hmotnosti kufru, ale ignorování jeho obsahu. Víte, že váha je správná, ale nevíte, jestli tam košile ještě je, nebo jestli byla nahrazena kamenem stejné hmotnosti.

Kvůli těmto omezením se dnes pro kritické kontroly integrity zřídka používají jednoduché kontrolní součty. Ty byly většinou nahrazeny bezpečnějšími algoritmy, jako je CRC, nebo kryptografickými hašemi, jako je SHA-256. Pochopení jednoduchého kontrolního součtu však pomůže vysvětlit, proč potřebujeme lepší nástroje pro kontrolu integrity dat.

Zobrazí se kód cyklické redundance (CRC).

Tady to začíná být zajímavé. CRC je založeno na polynomiálním dělení. Namísto pouhého sčítání čísel, CRC zachází s daty jako s velkým binárním číslem a dělí je předdefinovaným generátorovým polynomem. Zbytek tohoto dělení je hodnota CRC.

Tento matematický přístup dělá CRC mnohem efektivnější při odhalování chyb. Dokáže detekovat všechny chyby jednoho bitu, všechny chyby dvojitého převrácení bitů a jakýkoli lichý počet chyb. Detekuje také shlukové chyby – po sobě jdoucí bity, které jsou poškozené – které jsou běžné v hlučných přenosových kanálech. Shlukové chyby si představte jako dočasnou závadu v rádiovém signálu nebo škrábnutí na CD. CRC je navrženo tak, aby zvládlo tyto skutečné nedokonalosti.

Nejběžnější možností je CRC-32, která generuje 32bitovou hodnotu. Najdete ho všude. Ethernetové rámce, ZIP archivy, obrázky PNG a dokonce i některé databázové systémy používají CRC-32. Není kryptograficky silná – nemůžete ji použít k prokázání, že někdo úmyslně nemanipuloval s vašimi daty – ale je skvělá pro odhalování náhodného poškození.

Proč je to pro vás důležité?

Při streamování videa nebo odesílání e-mailu možná nebudete myslet na CRC. Ale funguje to na pozadí. Když si stáhnete opravu pro hru, váš systém použije k ověření souborů kontrolní součty neboli CRC. Pokud se hodnoty neshodují