HOTP
HOTP (HMAC-based One-Time Password, RFC 4226) on TOTP:n laskuripohjainen sisarus. Siinä missä TOTP etenee kellolla, HOTP etenee jaetulla laskurilla, jota sekä token että palvelin kasvattavat jokaisen käytetyn koodin myötä.
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.
Mitä se on
HOTP-rekisteröinti-QR on URL otpauth://-skeemassa, jossa tyyppi on hotp. Se sisältää jaetun HMAC-salaisuuden sekä laskuriarvon, jonka molemmat osapuolet on pidettävä synkronoituna. Muoto:
otpauth://hotp/LABEL?secret=SECRET&issuer=ISSUER&counter=N&digits=N&algorithm=ALG- LABEL,
Issuer:Account, URL-koodattu. Esimerkki:YubiKey:alice@example.com. - secret, jaettu HMAC-avain, Base32-koodattu (RFC 4648 §6: A-Z, 2-7).
- counter, laskurin aloitusarvo. Yleensä
0, mutta voidaan jatkaa tunnetusta arvosta uudelleenrekisteröitäessä tokenia. - issuer, todennussovelluksessa näytettävä palvelunimi.
- digits,
6(oletus) tai8. RFC 4226 §5.3 määrittää 6; 8 on yleinen laajennus. - algorithm, käytännössä
SHA1. RFC 4226 määrittää vain SHA1:n; SHA256/512-versiot ovat RFC 6238 -laajennuksia.
HOTP vs TOTP, milloin käyttää kumpaa
| Ominaisuus | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Etenee | Laskurilla (jokainen käyttökerta) | Kellolla (30 s välein) |
| Vaatii kellon synkronoinnin | Ei | Kyllä, ~30 s drift sallittu |
| Resync driftissä | Palvelin hyväksyy seuraavat N laskuriarvot | Palvelin hyväksyy ±1 ikkunan |
| Tyypillinen käyttö | YubiKey, vanhat laitetokenit, offline-pankkiasiointi | Kaikki kuluttaja-2FA, Google, Microsoft, 1Password, Authy |
| Laskurin uudelleenkäyttö | Katastrofaalinen, vuotaa salaisuuden ajan myötä | Ei sovellettavissa |
| Haavoittuvuus salaisuuden vuotaessa | Kaikki tulevat koodit ennustettavissa | Kaikki menneet + tulevat koodit ennustettavissa |
Kanononiset testivektorit
RFC 4226 Liite D tarjoaa referenssi-HOTP-arvot salaisuudelle 12345678901234567890 (20 tavua, Base32 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ) 6-numeroisella tulostuksella:
| Counter | HOTP (6-digit) |
|---|---|
0 | 755224 |
1 | 287082 |
2 | 359152 |
3 | 969429 |
4 | 338314 |
5 | 254676 |
6 | 287922 |
7 | 162583 |
8 | 399871 |
9 | 520489 |
Minimaalinen QR-hyötykuorma rekisteröintiin laskurilla 0:
otpauth://hotp/Example:test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&counter=0Reaaliaikainen Base32-salaisuusvalidaattori
Sama validaattori kuin TOTP-sivulla, HOTP-salaisuudet käyttävät samaa Base32-aakkostoa (RFC 4648 §6: A-Z, 2-7). Toimii selaimessasi, ei palvelinkierrosta.
Yleisiä sudenkuoppia
- Laskuridrift. Jos käyttäjä painaa tokenin nappia mutta palvelin ei kirjaa koodia, tokenin laskuri juoksee palvelimen laskurin edellä. Palvelimet käsittelevät tämän 'resync-ikkunalla'.
- Laskurin uudelleenkäyttö on katastrofaalista. Älä koskaan hyväksy samaa laskuriarvoa kahdesti. RFC 4226 §7.3 velvoittaa palvelimen hylkäämään koodin viimeisimmän hyväksytyn laskurin tasolla tai alla.
- Laskurin vienti varmuuskopioinnissa. Todennussovellukset, jotka vievät HOTP-merkinnät, vievät joskus salaisuuden mutta eivät nykyistä laskuria. Tuominen uuteen laitteeseen käynnistää laskurin 0:sta.
- Base32 ei Base64. Sama sääntö kuin TOTP:ssa: salaisuudet, joissa on
0,1,8,9, pieniä kirjaimia,+tai/ovat Base64 ja jokainen RFC-yhteensopiva todennussovellus hylkää ne. - Vain SHA1 käytännössä. RFC 4226 määrittää SHA1:n HMAC-funktioksi. SHA256/SHA512 ovat RFC 6238 TOTP-aikakauden laajennuksia; useimmat HOTP-laitetokenit eivät toteuta niitä.
- Numerot-parametri usein ohitetaan. Monet laitetokenit on kiinnitetty 6 numeroon ja lyhentävät hiljaa pyydettäessä 8. Tarkista kohdelaitteistosi ennen QR-korttien tulostamista.
- Älä sekoita HOTP:ia ja TOTP:ia samaan QR:ään. URI-skeema käyttää
TYPE(hotpvstotp)-segmenttiä tilojen vaihtamiseen. Yksi salaisuus voi käyttää molempia, mutta silloin molemmat jakavat salaisuuden.
Todennussovelluksen yhteensopivuus
| Sovellus / Token | HOTP | SHA256/512 | 8-numeroinen | Muistiinpanot |
|---|---|---|---|---|
| YubiKey Authenticator (iOS/Android/desktop) | Yes | Yes | Yes | HOTP on kanoninen YubiKey OATH -tila. Täysi RFC 4226 -tuki. |
| Google Authenticator | Yes | Ohitettu (vain SHA1) | Ohitettu (vain 6) | De facto -perustaso. Turvallinen HOTP:lle mutta vain 6-numeroisella SHA1:llä. |
| 1Password | Yes | Yes | Yes | Täysi RFC-tuki. Laskuri tallennetaan ja viedään merkinnän kanssa. |
| Bitwarden | Yes | Yes | Yes | Täysi RFC-tuki. |
| Microsoft Authenticator | Yes | Yes | Yes | Täysi RFC-tuki. |
| Authy | No | , | , | Pudotti HOTP:n uusimmissa versioissa. Vain TOTP. |
| Duo Mobile | No | , | , | Käyttää omaa push-virtaustaan; vain TOTP varmuustilana. |
| OATH hardware tokens (Feitian, Token2, etc.) | Yes | Varies | Varies | Kanoninen laite-HOTP-markkina; aina 6-numeroinen SHA1, ellei tiedoissa sanota muuta. |
Katso myös
- /hotp-qr-code/, HOTP-generaattori reaaliaikaisella laskuri- + Base32-validoinnilla.
- /standards/totp/, aikapohjainen sisarus (RFC 6238).
- /totp-2fa-qr-code/, TOTP-generaattori.
- /standards/, takaisin standardien hakemistoon.