HOTP
HOTP (HMAC-based One-Time Password, RFC 4226) je čítačový protějšek TOTP. Zatímco TOTP postupuje na hodinách, HOTP postupuje na sdíleném čítači, který token i server navyšují s každým použitým kódem.
URI scheme:Google Authenticator Key URI Format, the
otpauth:// scheme every authenticator agrees on. Sibling spec:TOTP (RFC 6238), time-based variant that builds on HOTP.
Co to je
QR pro registraci HOTP je URL ve schématu otpauth:// s hotp jako typem. Nese sdílený tajný klíč HMAC plus hodnotu čítače, kterou obě strany musí udržovat v synchronizaci. Formát:
otpauth://hotp/LABEL?secret=SECRET&issuer=ISSUER&counter=N&digits=N&algorithm=ALG- LABEL,
Issuer:Account, URL-kódovaný. Příklad:YubiKey:alice@example.com. - secret, sdílený klíč HMAC, kódovaný Base32 (RFC 4648 §6: A-Z, 2-7).
- counter, počáteční hodnota čítače. Obvykle
0, ale lze obnovit ze známé hodnoty při znovuregistraci tokenu. - issuer, název služby zobrazený v aplikaci autentizátoru.
- digits,
6(výchozí) nebo8. RFC 4226 §5.3 specifikuje 6; 8 je běžné rozšíření. - algorithm,
SHA1v praxi. RFC 4226 definuje pouze SHA1; varianty SHA256/512 jsou rozšíření RFC 6238.
HOTP vs TOTP, kdy použít který
| Vlastnost | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Postupuje na | Čítači (každé úspěšné použití) | Hodinách (každých 30 s) |
| Vyžaduje synchronizaci hodin | Ne | Ano, v rozsahu ~30 s odchylky |
| Resync při driftu | Server přijímá dalších N hodnot čítače | Server přijímá okno ±1 |
| Typické nasazení | YubiKey, starší hardwarové tokeny, offline bankovnictví | Veškeré spotřebitelské 2FA, Google, Microsoft, 1Password, Authy |
| Opětovné použití čítače | Katastrofální, časem prozrazuje tajný klíč | N/A |
| Zranitelnost při úniku tajného klíče | Všechny budoucí kódy předvídatelné | Všechny minulé + budoucí kódy předvídatelné |
Kanonické testovací vektory
RFC 4226 Příloha D poskytuje referenční hodnoty HOTP pro tajný klíč 12345678901234567890 (20 bajtů, Base32 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ) s 6ciferným výstupem:
| Counter | HOTP (6-digit) |
|---|---|
0 | 755224 |
1 | 287082 |
2 | 359152 |
3 | 969429 |
4 | 338314 |
5 | 254676 |
6 | 287922 |
7 | 162583 |
8 | 399871 |
9 | 520489 |
Minimální QR payload pro registraci na čítači 0:
otpauth://hotp/Example:test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&counter=0Živý validátor Base32 tajného klíče
Stejný validátor jako na stránce TOTP, HOTP tajné klíče používají stejnou abecedu Base32 (RFC 4648 §6: A-Z, 2-7). Běží ve vašem prohlížeči, bez serverového přenosu.
Časté problémy
- Drift čítače. Pokud uživatel stiskne tlačítko tokenu, ale server kód nezaznamená, čítač tokenu předbíhá čítač serveru. Servery to řeší 'resync oknem'.
- Opětovné použití čítače je katastrofální. Nikdy nepřijímejte stejnou hodnotu čítače dvakrát. RFC 4226 §7.3 ukládá serveru odmítnout jakýkoli kód na nebo pod posledním přijatým čítačem.
- Export čítače při zálohování. Autentizátorové aplikace exportující HOTP záznamy někdy exportují tajný klíč, ale ne aktuální čítač. Import do nového zařízení restartuje čítač na 0.
- Base32, ne Base64. Stejné pravidlo jako TOTP: tajné klíče s
0,1,8,9, malými písmeny,+nebo/jsou Base64 a budou odmítnuty každým RFC-kompatibilním autentizátorem. - Pouze SHA1, v praxi. RFC 4226 definuje SHA1 jako funkci HMAC. SHA256/SHA512 jsou rozšíření TOTP z RFC 6238; většina hardwarových HOTP tokenů je neimplementuje.
- Parametr číslic je často ignorován. Mnohé hardwarové tokeny jsou pevně nastaveny na 6 číslic a potichu ořezávají při požadavku na 8. Ověřte proti cílovému hardware před tiskem QR karet.
- Nemíchejte HOTP a TOTP ve stejném QR. Schéma URI používá segment
TYPE(hotpvstotp) pro přepínání režimů. Jeden tajný klíč může pohánět oba, ale pak oba toky sdílejí klíč.
Kompatibilita autentizátoru
| Aplikace / Token | HOTP | SHA256/512 | 8 číslic | Poznámky |
|---|---|---|---|---|
| YubiKey Authenticator (iOS/Android/desktop) | Yes | Yes | Yes | HOTP je kanonický režim YubiKey OATH. Plná podpora RFC 4226. |
| Google Authenticator | Yes | Ignorováno (pouze SHA1) | Ignorováno (pouze 6) | De facto základ. Bezpečné pro HOTP, ale pouze 6ciferné SHA1. |
| 1Password | Yes | Yes | Yes | Plná podpora RFC. Čítač je uložen a exportován s položkou. |
| Bitwarden | Yes | Yes | Yes | Plná podpora RFC. |
| Microsoft Authenticator | Yes | Yes | Yes | Plná podpora RFC. |
| Authy | No | , | , | Dropped HOTP v posledních verzích. Pouze TOTP. |
| Duo Mobile | No | , | , | Používá vlastní push flow; záložní TOTP. |
| OATH hardware tokens (Feitian, Token2, etc.) | Yes | Varies | Varies | Kanonický trh hardwarového HOTP; vždy 6ciferné SHA1, pokud datasheet neuvádí jinak. |
Viz také
- /hotp-qr-code/, generátor HOTP s živou validací čítače a Base32.
- /standards/totp/, časová varianta (RFC 6238).
- /totp-2fa-qr-code/, generátor TOTP.
- /standards/, zpět na index standardů.