Invia.cz
Eurovíkendy
Kanárské ostrovy
Dominikánská republika
Madeira
Last minute
Vydělávejte peníze s INVIA.CZ
Cyklický redundantní součet, označovaný také CRC (zkratka anglického Cyclic redundancy check) je speciální hašovací funkce, používaná k detekci chyb během přenosu či ukládání dat. Pro svou jednoduchost a dobré matematické vlastnosti jde o velmi rozšířený způsob realizace kontrolního součtu. Kontrolní součet bývá odesílán či ukládán společně s daty, při jejichž přenosu nebo uchovávání by mohlo dojít k chybě. Po převzetí dat je znovu nezávisle spočítán. Pokud je nezávisle spočítaný kontrolní součet odlišný od přeneseného nebo uloženého, je zřejmé že při přenosu nebo uchovávání došlo k chybě. Pokud je shodný, tak téměř jistě k žádné chybě nedošlo. V určitých případech je možné chybu pomocí CRC opravit.
CRC je vhodný pro zjišťování chyb vzniklých v důsledku selhání techniky, avšak jako metoda pro odahlení záměrné změny dat počítačovými piráty je příliš slabý. V tomto případě je třeba používat speciální hašovací funkce určené pro kryptovací algoritmy.
Například posloupnost bitů "100101" může být přepsána jako polynom x5 + x2 + 1, posloupnost bitů "110011" může být přepsána jako polynom x5 + x4 + x + 1. Pokud nad bity těchto dvou posloupností provedeme operaci XOR, dostáváme posloupnost "010110", která odpovídá polynomu x4 + x2 + x.
Stejný výsledek dostaneme při sčítání polynomů v tělese GF(2n):
Právě jednoduchá implementace operací nad bitovými posloupnostmi je jedním z hlavních důvodů širokého rozšíření CRC algoritmů.
Výsledek výpočtu CRC je určen vstupní posloupností bitů a zvoleným klíčem (což je také posloupnost bitů). Když vstupní posloupnost a klíč interpretujeme jako polynomy nad tělesem GF(2n), pak CRC je zbytek po dělení polynomu vstupní posloupnosti polynomem klíče. Výsledkem je polynom, který následně interpretujeme jako bitovou posloupnost. Při vhodně zvoleném klíči vede i malá změna ve vstupní posloupnosti k podstatně odlišnému výsledku, při náhodné změně vstupní posloupnosti pak pravděpodobnost odhalení chyby roste s šířkou klíče (např. pro klíč stupně 16 by to měla být hodnota 1 − 1 / 216).
CRC je tedy založen na dělení v konečném tělese GF(2n), tělese polynomů nad celými čísly modulo 2. Jednodušeji řečeno, je to množina polynomů, jejichž koeficienty mohou nabývat pouze hodnot 0 a 1. Tyto polynomy sčítáme, odčítáme, dělíme a násobíme jako obyčejné polynomy, avšak nad výslednými koeficienty provádíme operaci modulo 2 (zbytek po dělení dvěma). Například -2 modulo 2 je 0, -1 modulo 2 je 1, 0 modulo 2 je 0, 1 modulo 2 je 1, 2 modulo 2 je 0, 3 modulo 2 je 1, 4 modulo 2 je 0 atd.

Ze dvojky se v tomto případě stane 0, protože operace nad koeficienty se provádí modulo 2. Násobení je podobné:

Můžeme také dělit polynomy modulo 2. Například

To lze přepsat jako

Ve výše uvedeném dělení představuje x3 + x2 + x vstupní bitovou posloupnost "1110", x + 1 představuje klíč (jeho bitová posloupnost je "11", jeho stupeň je 1), zbytkem po dělení je polynom 1. Hodnota CRC odpovídá zbytku po dělení převedeném na bitovou posloupnost, v tomto případě tedy jde o hodnotu "1".