Vysvětlení · S praktickými příklady

Jak fungují kontrolní součty

Čísla karet, IBANy, daňová identifikace i kryptoadresy obsahují jeden nebo dva skryté dodatečné číslice vypočtené ze zbytku čísla. Stačí chybně napsat jeden znak a aritmetika již nevyjde – právě proto může validátor okamžitě, offline a bez nutnosti dotazovat se banky či blockchainu, odhalit překlep.

Co je to checksum

Checksum (neboli kontrolní číslice) je záměrná redundance. Při vydání čísla se jedna nebo více jeho číslic nevolí náhodně: jsou vypočteny ze zbytku podle pevného pravidla. Každý, kdo zná toto pravidlo, může později tyto číslice znovu vypočítat a porovnat. Pokud se shodují, číslo je vnitřně konzistentní. Pokud ne, došlo k překlepu, špatnému přečtení nebo poškození.

To je vše, co checksum slibuje. Neříká nic o tom, zda účet existuje, kdo ho vlastní nebo co obsahuje – což každý validátor na těchto stránkách opakuje, protože tyto dvě věci se snadno zamění.

Praktický příklad 1 – Luhnův algoritmus pro čísla karet

Algoritmus Luhn používají karty Visa, Mastercard a většina dalších platebních karet. Vezměme si klasický příklad 7992 7398 713. Od nejpravějšího čísla zdvojnásobíme každé druhé číslo; pokud výsledek je dvouciferné číslo, sečteme jeho cifry. Poté vše sečteme.

ČíslicePoloha zpravaZdvojnásobeno?Počítá se jako
3kontrolní číslice3
12. zprava1 × 2 = 22
73.7
84.8 × 2 = 16 → 1 + 67
95.9
36.3 × 2 = 66
77.7
28.2 × 2 = 44
99.9
910.9 × 2 = 18 → 1 + 89
711.7

Sloupec vpravo dává součet 3 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 7 = 70. Sedmdesát je dělitelné deseti, takže číslo je platné. Změňte jedinou čílici a součet přestane být násobkem deseti. Vyzkoušejte si to na Validátor kreditní karty – provádí přesně tyto výpočty ve vašem zařízení.

Příklad řešení č. 2 – vážený součet (ISBN-10)

Mnoho národních identifikačních čísel používá vážený součet: každá číslice se vynásobí pevnou váhou, výsledky se sečtou a zkontroluje se zbytek po dělení. ISBN-10 je nejčistší ilustrací. U čísla 0-306-40615-2 váhy klesají od 10 do 1:

0×10 + 3×9 + 0×8 + 6×7 + 4×6 + 0×5 + 6×4 + 1×3 + 5×2 + 2×1 = 132

Číslo 132 je přesně 11 × 12, takže zbytek po dělení modulem 11 je nula a ISBN je platné. Brazílské CPF, polské PESEL a desítky dalších identifikátorů používají stejný princip s vlastními váhami a modulem – proto jeden Ověřovač dávkových ID dokáže ověřit tisíce takových čísel během jediné sekundy.

Příklad řešení č. 3 – IBAN a modul 97

Mezinárodní čísla bankovních účtů používají standard ISO 7064 mod 97-10, robustnější schéma se dvěma kontrolními číslicemi. Vezměme si standardní příklad GB82 WEST 1234 5698 7654 32:

  1. Zkontrolujte délku podle země: britský IBAN má 22 znaků. ✓
  2. Přesuňte první čtyři znaky na konec: WEST12345698765432GB82.
  3. Nahraďte každé písmeno dvěma číslicemi (A = 10 … Z = 35): W→32, E→14, S→28, T→29, G→16, B→11, čímž získáte 3214282912345698765432161182.
  4. Vydělte toto číslo 97. Zbytek musí být přesně 1 – a také je.

Protože 97 je prvočíslo a větší než jakákoli záměna dvou číslic, operace modulo 97 odhalí každou chybu jednoho znaku i každou transpozici; pouze asi jeden náhodný řetězec ze 97 projde náhodou. Validator IBAN ukazuje, zda jednotlivé vrstvy prošly nebo ne.

Kryptoměnové adresy: kontrolní součty vytvořené z hašů

U adres Bitcoin a Ethereum je požadavek vyšší, protože chybný zápis zde trvale pošle peníze nesprávnému příjemci. Starší adresy Bitcoin (1…, 3…) používají Base58Check: obsah adresy se dvakrát zpracuje pomocí SHA-256 a první čtyři bajty výsledku se připojí jako kontrolní součet. Jeden špatný znak zcela změní hash, takže pravděpodobnost, že chyba projde, je asi jedna ku čtyřem miliardám. Novější adresy bc1… používají Bech32 nebo Bech32m, kód s opravou chyb, který zaručuje odhalení jakékoli chyby postihující až čtyři znaky. U Ethereum EIP-55 je kontrolní součet skryt ve vzorci velkých a malých písmen.

Nástroje Validator bitcoinových adres a Validator ethereových adres v prohlížeči používají tyto algoritmy a při každém načtení stránky se ověřují proti oficiálním testovacím vektorům.

Přehled schémat

SchémaPoužívá se uZachycujePravděpodobnost, že náhodná chyba projde
Luhn (mod 10)Kreditní a debetní karty, IMEI, mnoho národních identifikátorůKaždá chyba jednoho číslice a většina sousedních záměnAsi 1 ze 10
ISO 7064 mod 97-10IBAN, některá daňová a firemní číslaKaždá jednotlivá chyba a každá přesmyčkaZhruba 1 ze 97
Vážený součet, mod 10 nebo 11ISBN-10, brazilský CPF, polský PESEL a mnoho dalších identifikátorůJednotlivé chyby a většina přesmyčekZhruba 1 z 10 nebo 1 z 11
Base58Check (dvojitý SHA-256, 4 bajty)Starší adresy Bitcoinu (1…, 3…)Jakákoli překlepnutí se s drtivou pravděpodobností projevíZhruba 1 ze 4 miliard
Bech32 / Bech32m (kód BCH)Adresy Bitcoin SegWit & Taproot (bc1…)Zaručeno: jakákoli chyba postihne maximálně 4 znaků.Méně než 1 ku miliardě.
EIP-55 (keccak-256 kódování)Adresy EthereumPřeklepy vznikají na základě vzoru velkých a malých písmen.U vstupu se smíšenými velikostmi písmen je velmi nízká.

Proč by měl běžet ověřovač na vašem zařízení

Vše výše uvedené je aritmetika s číslicemi, které již máte k dispozici. Není důvod, aby ověřovač posílal číslo karty, daňové identifikační číslo nebo adresu peněženky na server – a je tu velmi dobrý důvod to nedělat. Každý ověřovač na těchto stránkách běží lokálně; seznam offline nástrojů je seskupuje a náš průvodce kontrolou, zda nástroj nahrává vaše data ukazuje, jak si to ověřit pro jakýkoli web za dvacet sekund.

FAQ

Znamená platná kontrolní suma, že číslo je skutečné nebo aktivní?

Ne. Kontrolní suma pouze dokazuje, že číslice jsou vnitřně konzistentní – že číslo může existovat. Nemůže vám říct, zda je účet otevřený, kdo ho vlastní nebo jaký je jeho zůstatek. Každý ověřovač na těchto stránkách to uvádí na své stránce, protože tento rozdíl je důležitý.

Jaká je pravděpodobnost, že chybné číslo přesto projde?

Záleží na schématu. Jediná kontrolní číslice typu mod-10 propustí přibližně 1 náhodnou chybu ze 10; mod 97 u IBAN propustí asi 1 ze 97; čtyřbajtová kontrolní suma Base58Check propustí asi 1 ze 4 miliard. Důležitá vlastnost je, že běžné lidské chyby – jedna špatná číslice, dvě prohozené číslice – odhalí všechny z nich.

Proč některé identifikátory vůbec nemají kontrolní součet?

Starší nebo jednodušší schémata byla navržena tak, aby se vyhledávala v registru, nikoli aby se ověřovala offline, a některé číselné systémy tuto praxi předcházely. U nich může validátor zkontrolovat pouze délku a formát.

Je bezpečné vložit číslo své karty nebo občanského průkazu do validátoru?

Pouze pokud validace probíhá na vašem zařízení. Kontrolní součet je aritmetický výpočet z již známých číslic, takže neexistuje žádný oprávněný důvod, proč by validátor tyto údaje posílal na server. Potvrďte si, že nástroj běží lokálně pomocí testu v režimu letadla popsaného v našem návodu jak zjistit, zda nástroj nahrává vaše data.

Jaký je rozdíl mezi kontrolním součtem, hašem a šifrováním?

Kontrolní součet je krátká kontrolní číslice určená k odhalení náhodných překlepů. Kryptografický haš je dlouhý otisk navržený tak, aby i záměrná změna byla rozpoznatelná a původní data nebylo možné obnovit. Šifrování přeměňuje data tak, že je lze přečíst pouze s klíčem. Formát Base58Check používá haš ke vytvoření svého kontrolního součtu, což je důvod, proč je tak těžké jej omylem oklamat.