HOTP
HOTP (HMAC-based One-Time Password, RFC 4226) er tællerbaseret søskende til TOTP. Hvor TOTP skrider frem på et ur, skrider HOTP frem på en delt tæller, som både token og server øger med hver brugt kode.
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.
Hvad det er
Et HOTP-tilmeldingsQR er en URL i otpauth://-skemaet med hotp som type. Det bærer den delte HMAC-hemmelighed plus en tæller-værdi, som begge sider skal holde synkroniseret. Format:
otpauth://hotp/LABEL?secret=SECRET&issuer=ISSUER&counter=N&digits=N&algorithm=ALG- LABEL,
Issuer:Account, URL-kodet. Eksempel:YubiKey:alice@example.com. - secret, den delte HMAC-nøgle, Base32-kodet (RFC 4648 §6: A-Z, 2-7).
- counter, startværdi for tæller. Normalt
0, men kan genoptages fra en kendt værdi ved genuddannelse af et token. - issuer, tjenestenavnet vist i autentificeringsappen.
- digits,
6(standard) eller8. RFC 4226 §5.3 specificerer 6; 8 er en almindelig udvidelse. - algorithm,
SHA1i praksis. RFC 4226 definerer kun SHA1; SHA256/512 varianter er RFC 6238-udvidelser.
HOTP vs TOTP, hvornår bruges hvad
| Egenskab | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Skrider frem på | Tæller (hver vellykket brug) | Ur (hvert 30. s) |
| Kræver ursynchronisering | Nej | Ja, inden for ~30 s drift |
| Resync ved drift | Server accepterer næste N tællerværdier | Server accepterer ±1 vindue |
| Typisk deployment | YubiKey, ældre hardware-tokens, offline banking | Al forbruger-2FA, Google, Microsoft, 1Password, Authy |
| Tæller genbrug | Katastrofalt, lækker hemmelighed over tid | N/A |
| Sårbarhed ved hemmelighedslæk | Alle fremtidige koder forudsigelige | Alle tidligere + fremtidige koder forudsigelige |
Kanoniske testvektorer
RFC 4226 Appendiks D giver reference HOTP-værdier for hemmeligheden 12345678901234567890 (20 bytes, Base32 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ) med 6-cifret output:
| Counter | HOTP (6-digit) |
|---|---|
0 | 755224 |
1 | 287082 |
2 | 359152 |
3 | 969429 |
4 | 338314 |
5 | 254676 |
6 | 287922 |
7 | 162583 |
8 | 399871 |
9 | 520489 |
Minimal QR-payload til tilmelding ved tæller 0:
otpauth://hotp/Example:test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&counter=0Live Base32 hemmelighedsvalidator
Samme validator som TOTP-siden, HOTP-hemmeligheder bruger det identiske Base32-alfabet (RFC 4648 §6: A-Z, 2-7). Kører i din browser, ingen serverrundtur.
Almindelige faldgruber
- Tællerdrif. Hvis brugeren trykker på tokenknappen, men serveren ikke registrerer koden, løber tokentælleren forud for servertælleren. Servere håndterer dette med et 'resync-vindue'.
- Tæller genbrug er katastrofalt. Accepter aldrig den samme tællerværdi to gange. RFC 4226 §7.3 kræver, at serveren afviser enhver kode ved eller under den sidst accepterede tæller.
- Tællereksport under sikkerhedskopiering. Autentificeringsapps, der eksporterer HOTP-poster, eksporterer nogle gange hemmeligheden men ikke den aktuelle tæller. Import til en ny enhed genstarter tælleren ved 0.
- Base32 ikke Base64. Samme regel som TOTP: hemmeligheder med
0,1,8,9, små bogstaver,+eller/er Base64 og afvises af enhver RFC-kompatibel autentificering. - Kun SHA1, i praksis. RFC 4226 definerer SHA1 som HMAC-funktionen. SHA256/SHA512 er RFC 6238 TOTP-eraudvidelser; de fleste HOTP hardware-tokens implementerer dem ikke.
- Ciffer-parameter ignoreres ofte. Mange hardware-tokens er fastsat til 6 cifre og afkorter lydløst ved anmodning om 8. Kontroller mod din målhardware inden kortene trykkes.
- Bland ikke HOTP og TOTP i samme QR. URI-skemaet bruger
TYPE(hotpvstotp)-segmentet til at skifte tilstande. En enkelt hemmelighed kan drive begge, men begge flows deler hemmeligheden.
Autentificeringskompatibilitet
| App / Token | HOTP | SHA256/512 | 8-cifret | Noter |
|---|---|---|---|---|
| YubiKey Authenticator (iOS/Android/desktop) | Yes | Yes | Yes | HOTP er den kanoniske YubiKey OATH-tilstand. Fuld RFC 4226-understøttelse. |
| Google Authenticator | Yes | Ignoreret (kun SHA1) | Ignoreret (kun 6) | De facto-base. Sikker til HOTP men kun med 6-cifret SHA1. |
| 1Password | Yes | Yes | Yes | Fuld RFC-understøttelse. Tæller gemmes og eksporteres med posten. |
| Bitwarden | Yes | Yes | Yes | Fuld RFC-understøttelse. |
| Microsoft Authenticator | Yes | Yes | Yes | Fuld RFC-understøttelse. |
| Authy | No | , | , | Droppede HOTP i nyere versioner. Kun TOTP. |
| Duo Mobile | No | , | , | Bruger sit eget push-flow; kun TOTP som fallback. |
| OATH hardware tokens (Feitian, Token2, etc.) | Yes | Varies | Varies | Kanonisk hardware-HOTP-marked; altid 6-cifret SHA1 medmindre databladet siger andet. |
Se også
- /hotp-qr-code/, HOTP-generatoren med live tæller + Base32-validering.
- /standards/totp/, den tidsbaserede søskende (RFC 6238).
- /totp-2fa-qr-code/, TOTP-generatoren.
- /standards/, tilbage til standardindekset.