Používanie modula v kľúčových údajoch v dnešnej dobe
V praxi často narazíme na rôzne moduly, ktoré majú zvyšovať bezpečnosť používaných údajov. Čo to vlastne je, a na čo to má naozaj slúžiť? Princíp modula je jednoduchý. Všeobecne spočíva v tom, že pre nejaký "kľúčový údaj" v znakovej podobe, ktorý slúži na identifikáciu nejakého reálneho objektu, je stanovený algoritmus na výpočet sumy z jednotlivých údajov. Tá potom musí byť u korektného údaje bezozbytku deliteľná zodpovedajúcim číslom.
Všeobecne možno samozrejme stanoviť ľubovoľný algoritmus pre ľubovoľný text, kde napríklad ako hodnoty do výpočtu sumy môžu vstupovať hodnoty reprezentovaná číselnými znakmi au nečíselných znakov hodnoty podľa tabuľky napr. ASCII kódy a podobne. Je potrebné si uvedomiť, že okrem významových znakov, ktoré slúžia naozaj na identifikáciu objektu, nám použiteľný rozsah údaje orezávajú takzvané kontrolky. To sú pre jednoduchosť väčšinou číselné údaje a slúži na to, aby sa významovej znakmi doplnili tak, aby po zistení sumy pre daný algoritmus vyšlo zodpovedajúce modulo.
Ak máme modulo do desať, stačí nám samozrejme jedna kontrolka. Od 11 vyššie potrebujeme v desiatkovej sústave kontrolky 2 a tak ďalej. Najčastejším prípadom je používanie modulo pre číselné údaje, kde algoritmus spočíva v tom, že pre jednotlivé pozície údaje sú stanovené váhy, ktorými sa vynásobí číslice na zodpovedajúcu pozíciu. Násobky sa sčítajú a tým sa získa potrebná suma, z ktorej sa vypočíta modulo. Ak sa niekto domnieva, že modulo má hlavne slúžiť na to, aby bolo ťažšie natypovat správny údaj alebo pred-overiť jeho existenciu, tak sa trochu mýli. Ono to síce tak pôsobí - zvlášť v dnešnej dobe, keď je existencia záznamov overovaná oproti databáze. Pôvodný účel a využitie modula je ale trochu hlbšie. Pôvodne bolo postavené tak, aby čo najviac zachytávala chyby, ktoré vznikajú pri ručnom robení údajov. Ide najčastejšie o vynechanie znaku, zdvojenie znaku alebo jeho prehodenie. To sú chyby úplne bežné, a hoci je veľká snaha a maximálne úsilie o prevedenie tejto činnosti na "techniku", je jasné, že sa ešte pomerne dlho bude na niektorých miestach používať, pretože technické riešenia sa pre tieto prípady budú ešte dlho pohybovať v oblasti neefektívnosti.
Pozrieme Ak sa na oblasť nášho bankovníctva, tak pôvodne bolo číslo účtu chránené modulo 10 s opakujúcimi sa váhami 1,3 a 5. Pri inovácii systému bolo prevedené na modulo 11 s váhami od pravej strany doľava, ktoré zodpovedajú mocninám 2. To je 1, 2, 4, 8 atď. Podľa teoretikov najúčinnejšia kombinácia. Je to krásna ukážka, že teória je len teória a občas sa do praxe netrafí. Prečo o tom tak "nepekne" hovorím. Keď sa totiž pozriete na rad váh tak, zistíte, že pridám ak na koniec rady hodnotu "0", tak pre tento reťazec musí modulo vychádzať taky. Ak predtým súčet bol deliteľný bezo zvyšku, teraz bude každé číslo vynásobené číslicu dvakrát väčšia, a suma tým pádom musí byť opäť deliteľná bezozbytku. Z toho vyplýva, že nové (aktuálne) riešenie nechytá vypustenie koncových núl. Keď bude trochu premýšľať, zistíme, že diera je ešte väčší. Totiž toto riešenie tiež nechytá vypustené alebo vložené nuly medzi dvoma časťami, pre ktoré samostatne vychádza modulo.
Podarilo sa mi vo Vás vzbudiť pocit, že tá inovácia bola krok z dažďa pod odkvap. Tak mu nepodliehajte, ono to totiž nie je pravda. Keď niečo analyzujeme, tak by sme nemali mať žiadny ani pocitový "záujem" na výsledku, potom totiž nehľadáme ako to vlastne je, ale hľadáme dôkazy na to, že je to tak, ako by sme si priali. A presne v duchu týchto pravidiel, som sa rozhodol, že to lepšie preskúmam. Rozhodol som sa napísať program (vo VB.NET a je priložený), pomocou ktorého si zistím ako to vlastne je. Ten môj pokus mal nasledujúci postup.
- Vygeneroval som 50 000 náhodných rôznych 6místných kombinácií ako základ pre vytvorenie testovacích dát
- Zo základnej sady som vytvoril dáta pre testovanie modulo 11 tým, že som ich doplnil na 8-miestne reťazca so zodpovedajúcimi kontrolkami pre modulo 11
- Rovnakým spôsobom som vytvoril dáta pre testovanie starého spôsobu s modulo 10 (jedna kontrolka bola "0".). A tým som získal prakticky zhodná dáta pre oba prípady.
- Potom som napísal program, ktorý postupne bral jednotlivé údaje. A pre každý údaj vytvoril nové kombinácie s tým, že postupne vynechával jeden znak na každej pozícii a v druhej fáze ho naopak zdvojili a v tretej fáze postupne prehodil každú dvojicu. Pre každú takto získanú kombináciu som skontroloval, či u nej vychádza zodpovedajúce modulo.
Výsledky boli prekvapujúce a sú nasledujúce:
Štatistika spracovanie
Modulo 11
počet prípadov | 450 000 testovaných kombinácií |
Vynechanie znaku - z toho nezachytený | 32 190 |
Po zdvojenie nezachytený | 32 190 |
Po prehodenie nezachytený | 39 595 |
počet prípadov | 450 000 testovaných kombinácií |
Vynechanie znaku - z toho nezachytený | 44 991 |
Po zdvojenie nezachytený | 40 048 |
Po prehodenie nezachytený | 79 749 |
V percentuálnom vyjadrení to dopadlo nasledovne:
Nezachytené zmeny
Modulo11
zdvojenie | 7,15% |
vynechanie | 7,15% |
Celkom | 14,31% |
prehodenie | 7,70% |
Celkom s prehodením | 22,01% |
---|
zdvojenie | 10,00% |
vynechanie | 8,90% |
Celkom | 18,90% |
prehodenie | 15,51% |
Celkom s prehodením | 34,40% |
---|
Čo z uvedeného vyplýva? Modulo 11 je naozaj účinnejší než staré modulo 10. Je schopné zachytiť 78% možných bežných chýb typovanie, a ak by sa pri prideľovaní nových hodnôt vylúčili kombinácia dovoľujúca vynechanie resp. zdvojenie, tak by sa účinnosť zdvihla ešte na 85%. To ale vzhľadom na rozsah zachytenie chýb, v ktorom sa pohybujeme, pravdepodobnosti chyby a obmedzenia významového rozsahu identifikátora, by bolo už neefektívne.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 839x (559 B)