- Základný rozdiel vo vstupnej premennej: HOTP počíta hashe z monotónne rastúceho počítadla C, zatiaľ čo TOTP nahrádza C časovým krokom T (CurrentUnixTime / 30).
- Priama dedičnosť: TOTP je matematicky špecializáciou HOTP:
TOTP(K, Time) = HOTP(K, T). Oba algoritmy používajú presne tú istú funkciu dynamického orezania (Dynamic Truncation). - Rozhodujúci architektonický faktor: HOTP je stavový (servery musia pri každom overení zamknúť počítadlo a zapísať zmenu na disk). TOTP je bezstavový, čo umožňuje moderným cloudovým mikroslužbám overovať tokeny v distribuovaných klastroch bez centralizovaných zápisov do databázy.
Historické korene: Od proprietárnych hardvérových tokenov k otvoreným webovým štandardom
Začiatkom 21. storočia dominovali podnikovému dvojfaktorovému overovaniu proprietárne hardvérové kľúčenky, ako napríklad RSA SecurID. Tieto uzavreté, nákladné zariadenia obsahovali vnútorné kremíkové kryštály synchronizované s podnikovými servermi. Ak organizácia plánovala poskytnúť viacfaktorové zabezpečenie tisícom zamestnancov, náklady na nákup hardvéru a proprietárne licencie boli astronomické.
Aby bolo overovanie oslobodené od proprietárnych dodávateľov, poprední lídri v odvetví vytvorili konzorcium OATH (Initiative for Open Authentication) s cieľom vytvoriť otvorené, bezplatné štandardy IETF, ktoré by mohol akýkoľvek softvérový vývojár voľne skúmať, implementovať a podrobiť bezpečnostnému auditu:
HMAC-Based One-Time Password Algorithm. Navrhnutý pre mikrokontroléry s nízkou spotrebou a fyzickým tlačidlom. Stlačením tlačidla sa zvýši hodnota vnútorného počítadla a na LCD displeji sa zobrazí 6-ciferný token.
Time-Based One-Time Password Algorithm. Vznikol s masívnym nástupom smartfónov. Využitím časovej synchronizácie mobilnej siete cez NTP úplne odstránil problémy s nesúladom stavu fyzických tlačidiel.
Architektúra HOTP (RFC 4226) a mechanika dynamického orezania bajtov
Základná matematická definícia HOTP je prekvapivo stručná a elegantná:
Prehľad parametrov:
K: Zdieľaný symetrický tajný kľúč (zvyčajne dekódovaný 160-bitový / 20-bajtový binárny reťazec z formátu Base32).C: 8-bajtové (64-bitové) celé číslo v poradí bajtov big-endian predstavujúce počítadlo.HMAC-SHA-1: Hashovací kód overenia správy s kľúčom generujúci 20-bajtový (160-bitový) kryptografický výťah (digest).
🔍 Ako Dynamic Truncation (DT) prevádza 20 bajtov na 6 číslic:
Výstup HMAC-SHA1 obsahuje 160 bitov (20 bajtov). Extrakcia 6 rovnomerných desiatkových číslic vyžaduje deterministický mechanizmus odolný voči kolíziám, ktorý definuje sekcia 5.3 normy RFC 4226:
Predpokladajme tajný kľúč v ASCII "12345678901234567890" a počítadlo C = 0. Výsledný výťah HMAC-SHA1 v hexadecimálnej podobe je:
1. Posledný bajt je 0x71. 0x71 & 0x0F = 0x01, takže Offset = 1.
2. Bajty 1 až 4 sú: 93 cf 18 50. Vynulovanie najvyššieho bitu dáva 0x13cf1850, čo v desiatkovej sústave predstavuje 332 339 280.
3. 332339280 mod 1000000 = 339280. Výsledné 6-ciferné OTP je 339280!
Evolúcia TOTP (RFC 6238): Kúzlo časového kroku
HOTP vyžadoval udržiavanie počítadla klienta v presnom súlade so serverom. V softvérových aplikáciách vedie ručné zaznamenávanie alebo klikanie k neustálym ľudským chybám.
Norma RFC 6238 nahradila počítadlo C diskrétnym časovým krokom T odvodeným priamo z unixových hodín (Unix Epoch):
- CurrentUnixTime: Počet sekúnd, ktoré uplynuli od 1. januára 1970 00:00:00 UTC.
- T0: Referenčný počiatočný čas epochy (vo všetkých moderných systémoch nastavený na 0).
- X (Veľkosť časového okna): Štandardná odporúčaná dĺžka 30 sekúnd.
- Funkcia zaokrúhlenia nadol ⌊ ⌋: Pre akýkoľvek časový údaj v rámci daného 30-sekundového okna zostáva hodnota T nemenná. Napríklad medzi sekundami 1728211200 a 1728211229 sa T vyhodnotí na úplne rovnaké 64-bitové celé číslo.
Binárna serializácia: Po výpočte T sa hodnota zabalí do 8-bajtového binárneho vyrovnávacieho pamäťového bloku big-endian (s rovnakou štruktúrou v pamäti ako počítadlo C v HOTP). Výsledný univerzálny vzorec sa preto zjednodušuje na:
TOTP(K, Time) = HOTP(K, T)
Táto matematická elegancia vysvetľuje, prečo autentifikačné aplikácie synchrónne obnovujú kódy každých 30 sekúnd bez potreby nepretržitej synchronizácie stavu.
HS[31] & 0x0F); pri SHA-512 (64-bajtový výťah) sa posun určuje z bajtu 63 (HS[63] & 0x0F). V 99,9 % komerčných služieb (Google, Microsoft, GitHub, AWS) však SHA-1 zostáva predvoleným štandardom z dôvodu širokej spätnej kompatibility mobilných klientov.
Podrobné porovnanie: Porovnávacia matica (HOTP vs. TOTP)
| Rozmer | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Vstupná premenná | Počítadlo udalostí C (monotónne rastúce) | Časový krok T (30-sekundové okno Unixovej epochy) |
| Životnosť tokenu | Neobmedzená (platný do použitia pri ďalšom prihlásení) | Prísnych 30 sekúnd (automaticky zneplatnený) |
| Architektúra servera | Stavová (vyžaduje atomické zápisy do databázy pri každom prihlásení) | Bezstavová (nezávislé overenie času cez NTP) |
| Náchylnosť na útok opakovaním (Replay) | Stredná (zachytený token zostáva platný až do použitia) | Minimálna (obmedzená na zostávajúce sekundy v aktuálnom okne) |
| Primárny spôsob zlyhania | Desynchronizácia počítadla (neúmyselné stlačenia tlačidla) | Posun času (nesprávny systémový čas na telefóne klienta) |
| Podporované kryptografické hashe | Výhradne HMAC-SHA-1 | HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-512 |
| Rozšírenie v praxi | Staršie bankové kalkulačky, špecializované fyzické prístupy | 99,9 % moderných webových autentifikátorov |
Riešenia inžinierstva: Desynchronizácia vs. posun času
V distribuovaných produkčných prostrediach dochádza medzi klientmi a servermi k nevyhnutným odchýlkam. Kryptografi navrhli špecifické kompenzačné okná na zachovanie vysokej spoľahlivosti:
Ak používateľ stlačí tlačidlo tokenu 5-krát bez odoslania kódu, počítadlo klienta dosiahne C+5, zatiaľ čo server zostáva na hodnote C.
Norma RFC 4226 určuje, že pri overovaní server vypočíta overovacie okno v rozsahu [C+1, C+s] (zvyčajne s=20). Ak nájde zhodu, server posunie počítadlo dopredu a okamžite sa zosynchronizuje.
Z dôvodu latencie siete alebo mierneho posunu hodín v telefóne používateľa (napríklad o 10 sekúnd pozadu) môžu kódy prísť v susedných časových intervaloch.
Produkčné servery štandardne overujú pole 3 po sebe idúcich okien: [T-1, T, T+1], čo rozširuje celkové okno akceptácie na 90 sekúnd.
Keď servery overujú, či sa zadaný kód zhoduje s vypočítaným kódom, bežné porovnávanie reťazcov (ako napríklad userOtp === serverOtp) sa ukončí hneď pri prvom nezhodnom znaku. Útočník merajúci mikroskopické rozdiely v sieťovej odozve dokáže postupne zrekonštruovať jednotlivé číslice. Bezpečné podnikové backendy preto vynucujú porovnanie v konštantnom čase (napr. crypto.timingSafeEqual v Node.js) na úplné potlačenie útokov postranným kanálom.
Prečo TOTP vyhral v modernom internete
Jednoznačné víťazstvo protokolu TOTP nad HOTP na modernom webe bolo spôsobené tromi zásadnými architektonickými výhodami:
V distribuovaných cloudových mikroslužbách dokáže akákoľvek inštancia servera s časom synchronizovaným cez NTP okamžite overiť TOTP token bez nutnosti dopytovania alebo zamykania centralizovanej databázy.
Smartfóny neustále kalibrujú svoj systémový čas prostredníctvom mobilných vysielačov a GPS, čo úplne odstraňuje problém s posunom hodín bez nutnosti údržby hardvéru.
Tokeny HOTP zostávajú platné neobmedzene, až kým nie sú použité. Tokeny TOTP expirujú po 30 sekundách, čím automaticky neutralizujú riziká uniknutých logov či zachytených paketov.
Vyskúšajte výpočty TOTP v reálnom čase v nástroji 2FA-Tool
Sledujte, ako sa váš reťazec Base32 premieňa na dynamické 6-ciferné kódy prostredníctvom dynamického orezania HMAC-SHA1. 100 % offline vo vašom prehliadači.
📚 Súvisiaci bezpečnostní sprievodcovia
Bezpečný prenos 2FA účtov medzi smartfónmi pomocou offline QR kódov a cloudovej synchronizácie.
Pravidlá zhody, ukladanie kódov na obnovenie, súhra s SSH kľúčmi a postupy záchrany.
Ako obnoviť prístup k účtom Google, Microsoft, Steam, Binance, Apple a Discord.