Ellenőrző összeg

Az ellenőrző összeg (angol kifejezéssel: checksum) egy általános informatikai és híradástechnikai fogalom, a digitális adatátvitel vagy adattárolás hibátlanságának ellenőrzését segítő módszer. Főleg régebbi szövegekben látható másik elnevezése a kontrollszumma.

Alapelv

Amikor egy elektronikus eszköz egy másik elektronikus eszköz részére adatokat küld, az átvitt adatokat különféle zavaró hatások torzíthatják. Az átvitel történhet több tízezer kilométeres távolságból is, mint egy műsorszóró műhold és a műholdvevő készülék között, vagy akár centiméteres távolságban is, például a számítógép alaplapjának két alkatrésze között. A zavaró hatás sokféle lehet, egy elektromos gép mágneses tere, egy másik, más eszközök között zajló adás, sűrű hóesés, viharfelhő, villámok, jelvisszaverődés stb. A zavaró hatások által okozott adattorzulás összefoglaló neve zaj.

Az átvitel történhet analóg vagy digitális formában is, az ellenőrző összeg az utóbbihoz kapcsolódik.

A digitális adatátvitel számjegyekre bontva továbbítja az átvinni kívánt információt. A vevőkészüléknek rendszerint nincs semmilyen előzetes elvárása az adatsorozatról, emiatt ha a számsorozatra zaj "rakódik", tehát egy-egy számjegy helyett más szám érkezik meg, azt a vevőkészülék adatként fogadja el. Ugyan az információátviteli technika igen magas fokra ért el a zajszűrés terén, mégis előfordul ilyen adattorzulás, amelyet tehát közvetlenül felfedezni nem lehet. A vevőkészülék számjegyeket vár, számjegyek érkeznek, a hiba észrevehetetlen.

A zavarforrás által okozott kár annál nagyobb lehet, minél sűrűbb az adatsor jeltartalma. Ha a zavarforrás torzító hatása 0,01 másodpercig tart, akkor egy olyan jelsorozatban, amelyben másodpercenként 100 adat halad, 1-2 számot fog eltorzítani. Ha az adatsor másodpercenként 5000 adatot tartalmaz, tehát nagyobb a jel adatsűrűsége, az átviteli csatorna sávszélessége, akkor ebben ugyanaz a zavar már 50-51 számjegyet képes egyszerre eltorzítani. A híradástechnika egyik fontos része egy átviteli csatorna várható átlagos zajterhelésének az előzetes megállapítása. Ha az adatátvitel tervezői nagy zajra számítanak, akkor ezért lassabb átviteli sebességgel is védekeznek a hibák ellen.

A hibák észlelésének legegyszerűbb módja az ellenőrző összeg használata. Bármilyen elvi módszert alkalmazunk is, annak a lényege megegyezik. Az adatküldő eszköz az átküldött adatsort egyezményes méretű szakaszokra, csomagokra osztja fel, és minden csomagból valami számítási algoritmus révén előállít egy kiegészítő számsorozatot, amelyet a csomag után téve szintén továbbít. Ez a kiegészítő számsorozat az ellenőrző összeg. A vevőkészülék fogadja a jelsorozatot, és ő is az egyezményes módon csomagokra bontja azt. Minden ilyen csomagból ő is előállítja ugyanazon elv alapján az ellenőrző összeget, majd összehasonlítja a csomag után küldött ellenőrző összeggel. Ha a kettő megegyezik, akkor adott bizonyossággal kijelenthető, hogy az átvitt adatcsomagban nincs hiba, nincs torzulás. Ha viszont a két ellenőrző összeg nem azonos, akkor tudható, hogy a jelcsomagban valamilyen torzulás történt, hibát tartalmaz. Hogy ekkor mi a teendő, azt már a rendszer megtervezői határozzák meg, például az interneten (TCP-protokoll) továbbított adatcsomagok esetében a vevőkészülék egy jelzést küld vissza, az adatcsomag megismétlését kérve.

Az elvi módszer különféle megvalósításai az ellenőrző összeg előállításának, generálásának matematikai algoritmusában különböznek, ez határozza meg azt, hogy a módszer egy csomagban hány hibát képes egyszerre felfedezni, hogy mekkora adatcsomagot lehet biztonságosan egyetlen ellenőrző összeggel megtoldva átküldeni, vagy hogy a hibának nem csak a ténye, hanem még a helye is kimutatható lesz-e. A téma szakértői számos nagy gondossággal megtervezett, különféle hatékonyságú módszert dolgoztak már ki erre a célra.

Alkalmazás

A digitális jelátvitelben és adattárolásban az adatokat kettes számrendszerre átszámítva, bitek formájában kezelik, de a hibavédelmi algoritmus ennek ellenére alapulhat akár tízes számrendszerbeli számokra is, amelyeket végül bitekre bontva továbbítanak vagy tárolnak. A módszer lehet akkor is bináris elvű, ha a fájl tartalmát a program nagyobb számokra vagy karakterekre átalakítva jeleníti meg.

Az ellenőrző összeg egyik alkalmazása a fent leírtak szerint az adatátvitel során történt jeltorzulás tényének és esetleg helyének azonosítása. A nagyon nagy sűrűségű jelátvitelnél még kis távolságokon is alkalmazzák ezt, például egy processzoron belül haladó, másodpercenként több milliárd bitet hordozó jeleknél is, csupán néhány milliméternyi út gyakorlatilag tökéletes biztonságának szavatolására.

De a másik alkalmazás nem a jelek átvitelének, hanem az adattárolás hibátlanságát ellenőrzi. Bármilyen tárolóeszközön is helyezünk el egy digitális adatsort, az eszköz fizikai tökéletlensége miatt, vagy a hosszabb idő alatt őt érő károsító hatások miatt ez az adatsor szintén sérülhet, tehát emiatt az adat későbbi kiolvasása során hibásan kapjuk azt meg. Itt is érvényes az előzőleg említett szabály: minél kisebb méretű, minél sűrűbben elhelyezett jelekben tároljuk az adatokat, annál nagyobb kárt okozhat egyetlen sérülés. Ha például a már régen elavult lyukkártyán tárolunk adatokat, amelyen több milliméterenként áll egy-egy bitet tároló fizikai jel (egy téglalap alakú lyuk a papíron), durva fizikai sérülés kell ahhoz, hogy egy bit méretű hiba létrejöjjön rajta. Ha az adatokat CD-n tároljuk, ott az adatsűrűség már 1 megabit/mm2 nagyságrendű, tehát egy vékony karcolás is bitek tízezreit fedi el. Egy memóriachip, pl. egy pendrive tárolóelemének a jelsűrűsége ennek nagyságrendileg már a 10000-szerese. Ez azt jelenti, hogy a tárolópontok és a szilíciumlapkába rajzolt árampályák annyira aprók, hogy a nyersanyag egy jelentéktelen méretű hibája is értéktelenné teszi a chipet, de a legfinomabb eszközökben halmozottan már a kozmikus sugárzás protonjai is olyan sérüléseket tudnak okozni, amely a tárolásban is egy-egy bitnyi adatsérülést eredményezhetnek.

Éppen ezért a tárolóeszközökön elhelyezett adatok hibátlanságát is célszerű ellenőrző összegekkel védeni. Ez a gyakorlatban azt jelenti, hogy a tároláskor a tárolt adat csomagjaihoz, esetleg fájljaihoz, vagy az egész tárolt fájlhoz egy ellenőrző összeget generáltatunk valamilyen erre írt programmal, és ezt is tároljuk a fájllal együtt. Majd amikor a fájlt ismét használatba vesszük, újra elvégezzük ugyanezt, és az újonnan kapott ellenőrző összeget összehasonlítjuk a tárolttal. Az eltérés mindig a fájlban történt változást jelez. Ez a változás lehet esetleg szándékos, ismert vagy rejtett módosítás következménye, de többnyire inkább véletlenül létrejött hibára, sérülésre utal.

Egy egyszerű szövegfájlban annak figyelmes átolvasásával felfedezhetjük a hibát, mivel az valamelyik karakter megváltozását, "sajtóhibát" eredményez, ám minden egyéb fájltípusnál, az MP3 zenefájltól a programfájlokig, ilyen áttekintést végezni nem tudunk. Márpedig egy programfájlban egyetlen bit eltérés is nagy eséllyel a program hibás működéséhez vezet.

Vannak egyszerű programok (Total Commander, CRC Guard, Validate), amelyek minden fájlhoz egy-egy ellenőrző összeget hoznak létre és azt külön tárolják. De egy másik megoldás egy tömörítőprogram használata, ilyenek a ZIP, RAR, ARJ, 7Z formátumú tömörített fájlokat létrehozó, elterjedt programok. Ezek úgy működnek, hogy az egyetlen tömörítvénybe csomagolt fájlokat nem csak kisebb méretben tárolják, hanem mindegyikhez automatikusan ellenőrző összeget is generálnak, és azt is tárolják. Ha egy ilyen tömörített fájlt "kicsomagolunk", a program mindig ellenőrzi a hibátlanságot, és azonnal értesít, ha valamelyik tárolt fájlban az ellenőrző összeg hibát jelez. Ez az ismeret nagyon fontos, mert ha a hibáról tudomást szerzünk, akkor az adatsort, fájlt nem használjuk fel tévedést okozó módon, és kísérletet tehetünk a fájl pótlására vagy kijavítására. Épp emiatt a mellékes szolgáltatás miatt célszerű lehet olyan fájlokat is például ZIP formátumba tömörítve tárolni, amelyeknek a mérete ezzel nem csökken (MP3, AVI, MPEG, JPG, PNG, PDF stb.), de a mellé kerülő hibavédelem biztonságosabbá teszi a fájl tárolását vagy továbbítását, e-mail mellékleteként vagy lemezen, pendrive-on.

Egyéb esetek

Numerikus ellenőrző összeg védi a személyi számot, a könyvek nemzetközi azonosítására használt ISBN számot, az euró bankjegyeinek sorozatszámát, az EAN-13 vonalkódot és még számtalan adatsort vagy azonosító jelet. Mivel ezek generálásának algoritmusa jól ismert, így hamis számok előállításakor nem nehéz a helyes ellenőrző karaktert kiszámolni, emiatt ezek a módszerek a szándékos hamisítások ellen nem védenek. De egy tévesen megadott adatra, egy elírásra, számcserére fel tudják hívni a figyelmet, persze csak akkor, ha az ellenőrző számot kiszámítjuk és megvizsgáljuk.

A fenti példák mintájára végül is bármilyen, számokból álló, vagy számkódokra fordítható tetszőleges karakterekből álló jelsorozathoz generálható valamilyen ellenőrző kód. Ennek algoritmusát egyénileg kidolgozva és titokban tartva általunk készített számításokban, elszámolásokban, számítógépes adatbázis adataiban, vagy akár levelek szövegében előforduló véletlen vagy szándékos változtatások felfedezésére kaphatunk lehetőséget.

A lehetőség természetes módon adódik az ókori görög és héber nyelvek kapcsán, amely nyelvek betűihez ismert módon számértékeket is rendeltek. Iván Nyikolájevics Panyin a görög nyelvű Biblia szövegében vélt felfedezni hibaellenőrző struktúrát, más szövegkutatók a Tóra szövegében azonosítottak ekvidisztáns betűsorozatokat (EBS-eket), amelyeknek az elképzelés szerint akár a tartalom misztikus magyarázatához, akár a továbbadott szöveg hibáinak észrevételéhez köze lehetett.

Más nyelveken
English: Checksum
Afrikaans: Kontrolesom
العربية: مجموع تدقيق
azərbaycanca: Nəzarət cəmi
български: Контролна сума
català: Checksum
dansk: Kontrolsum
Deutsch: Prüfsumme
فارسی: سرجمع
íslenska: Prófsumma
italiano: Checksum
한국어: 체크섬
latviešu: Kontrolsumma
Nederlands: Controlecijfer
norsk: Sjekksum
Simple English: Checksum
slovenčina: Kontrolný súčet
svenska: Kontrollsumma
українська: Контрольна сума
Tiếng Việt: Giá trị tổng kiểm
中文: 校验和
Bân-lâm-gú: Lia̍h-chóng-bé