HOTP
HOTP (HMAC-based One-Time Password, RFC 4226) är TOTP:s räknarbaserade syskon. Där TOTP fortskrider på en klocka, fortskrider HOTP på en delad räknare som både token och server ökar med varje använd kod.
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.
Vad det är
En HOTP-registrerings-QR är en URL i otpauth://-schemat med hotp som typ. Den innehåller den delade HMAC-hemligheten plus ett räknarvärde som båda sidor måste hålla synkroniserat. Format:
otpauth://hotp/LABEL?secret=SECRET&issuer=ISSUER&counter=N&digits=N&algorithm=ALG- LABEL,
Issuer:Account, URL-kodat. Exempel:YubiKey:alice@example.com. - secret, den delade HMAC-nyckeln, Base32-kodat (RFC 4648 §6: A-Z, 2-7).
- counter, startingvärde för räknaren. Vanligtvis
0, men kan återupptas från ett känt värde vid omregistrering av en token. - issuer, tjänstnamnet som visas i autentiseringsappen.
- digits,
6(standard) eller8. RFC 4226 §5.3 specificerar 6; 8 är ett vanligt tillägg. - algorithm,
SHA1i praktiken. RFC 4226 definierar bara SHA1; SHA256/512-varianter är RFC 6238-tillägg.
HOTP vs TOTP, när används vilken
| Egenskap | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Fortskrider på | Räknaren (varje lyckad användning) | Klockan (var 30:e s) |
| Kräver klocksynkronisering | Nej | Ja, inom ~30 s drift |
| Resync vid drift | Server accepterar nästa N räknarvärden | Server accepterar ±1 fönster |
| Typisk driftsättning | YubiKey, äldre hårdvarutokens, offline-banking | All konsument-2FA, Google, Microsoft, 1Password, Authy |
| Räknaråteranvändning | Katastrofalt, läcker hemligheten med tiden | Ej tillämpbart |
| Sårbarhet vid hemlighetsleak | Alla framtida koder förutsägbara | Alla tidigare + framtida koder förutsägbara |
Kanoniska testvektorer
RFC 4226 Bilaga D ger referens-HOTP-värden för hemligheten 12345678901234567890 (20 byte, Base32 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ) med 6-siffrig utdata:
| 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-nyttolast för registrering vid räknare 0:
otpauth://hotp/Example:test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&counter=0Live Base32-hemlighetvalidator
Samma validator som TOTP-sidan, HOTP-hemligheter använder det identiska Base32-alfabetet (RFC 4648 §6: A-Z, 2-7). Kör i webbläsaren, ingen serverrundtur.
Vanliga fallgropar
- Räknardrift. Om användaren trycker på tokenknappen men servern inte registrerar koden, löper token-räknaren före server-räknaren. Servrar hanterar detta med ett 'resync-fönster'.
- Räknaråteranvändning är katastrofal. Acceptera aldrig samma räknarvärde två gånger. RFC 4226 §7.3 kräver att servern avvisar koder vid eller under den senast accepterade räknaren.
- Räknarexport vid säkerhetskopiering. Autentiseringsappar som exporterar HOTP-poster exporterar ibland hemligheten men inte den aktuella räknaren. Import till ny enhet återstartar räknaren vid 0.
- Base32, inte Base64. Samma regel som TOTP: hemligheter med
0,1,8,9, gemener,+eller/är Base64 och avvisas av varje RFC-kompatibel autentisering. - Bara SHA1, i praktiken. RFC 4226 definierar SHA1 som HMAC-funktionen. SHA256/SHA512 är RFC 6238 TOTP-utvidgningar; de flesta HOTP hårdvarutokens implementerar dem inte.
- Sifferparametern ignoreras ofta. Många hårdvarutokens är låsta till 6 siffror och trunkerar tyst vid begäran om 8. Kontrollera mot målhardvaran innan QR-kort skrivs ut.
- Blanda inte HOTP och TOTP i samma QR. URI-schemat använder
TYPE(hotpvstotp)-segmentet för att byta lägen. En enda hemlighet kan driva båda, men det innebär att båda flödena delar hemligheten.
Autentiseringskompatibilitet
| App / Token | HOTP | SHA256/512 | 8-siffrigt | Anteckningar |
|---|---|---|---|---|
| YubiKey Authenticator (iOS/Android/desktop) | Yes | Yes | Yes | HOTP är det kanoniska YubiKey OATH-läget. Full RFC 4226-stöd. |
| Google Authenticator | Yes | Ignoreras (endast SHA1) | Ignoreras (endast 6) | De facto-baslinjen. Säker för HOTP men bara med 6-siffrigt SHA1. |
| 1Password | Yes | Yes | Yes | Full RFC-stöd. Räknare lagras och exporteras med posten. |
| Bitwarden | Yes | Yes | Yes | Full RFC-stöd. |
| Microsoft Authenticator | Yes | Yes | Yes | Full RFC-stöd. |
| Authy | No | , | , | Tog bort HOTP i senaste versioner. Endast TOTP. |
| Duo Mobile | No | , | , | Använder sitt eget push-flöde; endast TOTP som reserv. |
| OATH hardware tokens (Feitian, Token2, etc.) | Yes | Varies | Varies | Kanonisk hårdvaru-HOTP-marknad; alltid 6-siffrigt SHA1 om inte databladet säger annat. |
Se även
- /hotp-qr-code/, HOTP-generatorn med live räknare + Base32-validering.
- /standards/totp/, den tidsbaserade systern (RFC 6238).
- /totp-2fa-qr-code/, TOTP-generatorn.
- /standards/, tillbaka till standardindexet.