Vyšlo v týdeníku CHIPweek č. 24/95, 11. října 1995
Vytištěno z adresy: http://www.earchiv.cz/a95/a524k130.php3

CRC

Svět počítačů, počítačových komunikací a digitálních přenosů obecně vděčí za svou existenci a za své fungování výsledkům mnoha vědních oborů - nejen fyziky, která stají za celou technologií výroby součástek, ze kterých jsou dnešní počítače a další aktivní prvky postaveny. Stejně tak vděčí digitální svět za mnohé například i matematice.

Velmi pěkným příkladem zde může být používání tzv. cyklických zabezpečovacích kódů (anglicky: Cyclic Redundancy Checks, zkratkou CRC). Jde o kódy, používané k zabezpečení dat při jejich přenosu (nebo i při jakémkoli jejich „skladování"), a mají za úkol umožnit detekci případných chyb v těchto datech. Jsou to tedy kódy detekční, podobně jako tzv. parita či kontrolních součty, o kterých jsme si povídali minule. Analogický je základní princip jejich využití: odesilatel aplikuje na odesílaná data algoritmus, na kterém je dohodnut s příjemcem, a který vyplývá z povahy detekčního kódu. Výsledkem je pak zabezpečovací údaj, který odesilatel „přišpendlí" k původním datům, a odešle je příjemci. Ten aplikuje na přijatá data přesně stejný algoritmus, a výsledek porovná se zabezpečovacím údajem, který obdržel od odesilatele. Jde-li například o zabezpečení kontrolním součtem, spočívá zmíněný algoritmus v prostém sečtení jednotlivých datových bytů či slov, chápaných pro tento účel jako čísla, a zabezpečovacím údajem je pak výsledný součet. Jak jsme si ale již uváděli minule, Spolehlivost zabezpečení pomocí kontrolních součtů ovšem není příliš velikaá, a pro mnohé účely nedostatečná.

Dostatečnou spolehlivost nabízí až výše avizované cyklické kódy (CRC)- například zabezpečovací údaj, generovaný podle této metody v nejčastěji používaném rozsahu 16 bitů, umožňuje příjemci rozpoznat všechny shluky chybných bitů se stoprocentní jistotou, shluky délky 17 bitů s pravděpodobností 99,9968%, a ostatní chyby s pravděpodobností 99,9984%. Nezní to jako fantazie, nebo dokonce jako nemožnost?

Pokud nechcete mému tvrzení věřit a chcete si sami dokázat jeho pravdivost, budete k tomu potřebovat velmi silný matematický aparát, konkrétně aparát algebry, zabývající se okruhy polynomů nad tělesem dimenze 2. Za fungováním cyklických kódů totiž stojí opravdu pokročilá matematika. Pokud ale nejsou tyto partie zrovna vaším koníčkem, vůbec to nevadí - k praktickému používání detekčních mechanismů na bázi cyklických kódů žádný matematický aparát nepotřebujete. Potřebujete pouze velmi konkrétní a ryze praktický návod na to, jak z přenášených dat vyrobit onen zabezpečovací údaj, který pak k datům připojíte a odešlete směrem k příjemci. Ten pak zase potřebuje vědět, co má s přijatými daty a zabezpečovacím údajem udělat, aby si mohl odvodit zda jsou poškozená, nebo s hodně velkou pravděpodobností nepoškozená. V obou případech přitom stačí „prohnat" přenášená data přímo triviálním logickým obvodem, který na straně odesilatale vyrobí zabezpečovací údaj, a na straně příjemce řekne ano či ne.

Pokud by vás ale přeci jen zajímalo, na jakém principu zabezpečení cyklickými kódy pracuje, pak se pokusím o maximální možné zjednodušení: odesilatel si data určená k odeslání na chvíli představí jako jedno velké číslo (což není tak těžké, vždyť jde ve své podstatě jen o posloupnost nul a jedniček). Toto číslo pak vydělí jiným číslem, na kterém je s příjemcem domluven. Podíl, který mu vyjde, okamžitě zapomene, ale využije zbytek po dělení - ten připojí k vlastním datům jako zabezpečující údaj, a vše pak odešle. Příjemce pak opakuje stejný postup a dívá se, zda dostal stejný zbytek. Podstatnou roli zde přitom hraje číslo (dělitel), kterým se přenášená data dělí, a na kterém musí být obě strany předem domluveny - toto číslo samozřejmě nemůže být ledajaké. Jeho konkrétní hodnotu lze nalézt jen s využitím onoho silného matematického aparátu, a tentýž aparát je pak třeba i k důkazu toho, že s tímto dělitelem vše funguje s onou výše uvedenou báječnou spolehlivostí, velmi se blížící stu procent. Z konkrétní hodnoty tohoto čísla-dělitele (ve skutečnosti polynomu, resp. tzv. vytvářející mnohočlenu, ale při našem maximálním zjednodušení pouhého čísla) pak přímo vyplývá funkce i struktura jednoduchého (ba přímo triviálního obvodu), který obě strany používají pro praktické generování zabezpečovacích údajů a kontrolu správnosti přenesených dat.