2fa-authenticationCOMP

TOTP vs. HOTP: Wie Einmalpasswörter wirklich funktionieren (und welches Ihre 2FA nutzt)

TOTP vs. HOTP erklärt: beide sind HMAC-basierte OATH-Einmalpasswort-Standards, aber TOTP nutzt die Zeit (RFC 6238) und HOTP einen Zähler (RFC 4226). Vergleichstabelle, welches Ihre Authenticator-App tatsächlich nutzt und welches sicherer ist.

Von Eric Gerard · Redakteur · PwdFortress5 Min. LesezeitFoto: Towfiqu barbhuiya - Unsplash

Wenn Sie sich je gefragt haben, was diese rotierenden 6-stelligen Codes in Ihrer Authenticator-App eigentlich sind - und warum sich ein paar Hardware-Tokens anders verhalten - dann läuft die Antwort auf zwei eng verwandte Standards hinaus: TOTP und HOTP.

Neu bei der Zwei-Faktor-Authentifizierung im Allgemeinen? Beginnen Sie mit was 2FA ist und wie sie Ihre Konten schützt.

Kurze Antwort

TOTP ist zeitbasiert: der Code wird aus der aktuellen Zeit abgeleitet und rotiert (und läuft ab) alle 30 Sekunden. HOTP ist zählerbasiert: der Code wird aus einem Zähler abgeleitet, der bei jeder Verwendung eines Codes hochzählt, und bleibt gültig, bis er verwendet wird. Beide sind OATH/IETF-Standards, die auf HMAC aufbauen. Ihre Authenticator-App nutzt fast sicher TOTP - das ist es, was Google Authenticator, Authy, Aegis, Bitwarden Authenticator und die meisten Websites umsetzen. HOTP taucht hauptsächlich bei bestimmten Hardware-Tokens auf.

HOTP: zählerbasiert (RFC 4226)

HOTP - HMAC-based One-Time Password - ist der ursprüngliche OATH-Algorithmus, definiert in RFC 4226 (2005). Jeder Code wird aus zwei Eingaben berechnet:

  • Einem gemeinsamen Geheimnis (einem Seed, der einmal bereitgestellt wird, meist per QR-Code)
  • Einem Zähler, der bei null beginnt und um eins hochzählt, jedes Mal, wenn ein Code verbraucht wird

Das Gerät führt HMAC-SHA1 (die Voreinstellung) über das Geheimnis und den Zähler aus und kürzt das Ergebnis dann auf einen kurzen numerischen Code - standardmäßig 6 Stellen, optional 8.

Die entscheidende Eigenschaft von HOTP ist, dass der Code keine Ablauffrist hat. Er bleibt gültig, bis er tatsächlich verwendet wird; der Zähler bewegt sich nur vorwärts, wenn ein Code akzeptiert wird. Das ist praktisch, wenn es keine zuverlässige Uhr gibt, hat aber eine wohlbekannte Schwachstelle: Desynchronisierung. Wenn Codes auf dem Client erzeugt werden, ohne abgesendet zu werden (jemand drückt ständig die Taste eines Tokens), läuft der Client-Zähler dem Server-Zähler voraus, und die beiden passen nicht mehr zusammen. Zur Wiederherstellung setzen Server ein Vorausschau-Fenster um - sie testen die nächsten paar Zählerwerte, und wenn einer davon passt, rücken sie ihren Zähler vor, um sich neu zu synchronisieren.

TOTP: zeitbasiert (RFC 6238)

Ein offenes Vorhängeschloss liegt unter rotem und grünem Licht auf einer Laptop-Tastatur
Ein offenes Vorhängeschloss liegt unter rotem und grünem Licht auf einer Laptop-Tastatur

TOTP - Time-based One-Time Password - ist in RFC 6238 (2011) definiert und lässt sich am besten als Sonderfall von HOTP verstehen. Statt eines Ereigniszählers nutzt TOTP die aktuelle Zeit geteilt durch einen Zeitschritt (der Standardschritt beträgt 30 Sekunden) als Zähler. Setzen Sie diesen zeitabgeleiteten Zähler in dieselbe HMAC-Konstruktion ein, und Sie erhalten einen Code, der sich automatisch alle 30 Sekunden ändert und abläuft, wenn das Fenster umschlägt.

Weil der Zähler die Uhr ist und nicht Ihre Handlungen, desynchronisiert sich TOTP nie durch unbenutzte Codes - es gibt kein Problem à la "ich habe zu oft die Taste gedrückt". Der Kompromiss ist, dass es erfordert, dass die Uhren von Client und Server ungefähr synchron sind. Server fangen geringe Abweichungen mit einem kleinen Toleranzfenster auf und akzeptieren typischerweise den vorherigen und den nächsten Zeitschritt zusätzlich zum aktuellen.

Alles andere spiegelt HOTP: standardmäßig HMAC-SHA1 (SHA-256 oder SHA-512 sind ebenfalls erlaubt), standardmäßig 6 Stellen (optional 8) und das Geheimnis, bereitgestellt über eine otpauth://-URI in einem QR-Code. Wenn Sie die Apps vergleichen wollen, die diese Codes erzeugen, siehe unseren Vergleich der besten Authenticator-Apps.

Vergleichstabelle

EigenschaftHOTP (RFC 4226)TOTP (RFC 6238)
Beweglicher FaktorZähler (ereignisbasiert)Zeit (aktuelle Zeit / Schritt)
Code läuft ab?Nein - gültig bis zur VerwendungJa - alle ~30 Sekunden
Standard-ZeitschrittNicht zutreffend30 Sekunden
HauptschwachstelleZähler-Desync (Vorausschau-Resync)Uhrenabweichung (Toleranzfenster)
AlgorithmusHMAC-SHA1 (SHA-256/512 optional)HMAC-SHA1 (SHA-256/512 optional)
Stellen6 Standard (8 optional)6 Standard (8 optional)
Netzwerk nötig?NeinNein
Typische NutzungManche Hardware-Tokens, offline/ohne UhrAuthenticator-Apps, die meisten Websites

Welches Ihre 2FA nutzt

In der Praxis wählen Sie selten - der Dienst entscheidet. Und der Dienst wählt fast immer TOTP. Der rotierende 6-stellige Code in Google Authenticator, Authy, Aegis, Bitwarden Authenticator oder Microsoft Authenticator ist TOTP. Ebenso der Code auf praktisch jedem "scanne diesen QR-Code"-2FA-Einrichtungsbildschirm, dem Sie im Web begegnen.

HOTP ist die Ausnahme. Sie treffen es vor allem auf Hardware-Tokens - ein YubiKey kann etwa für OATH-HOTP konfiguriert werden - oder in Umgebungen, in denen eine zuverlässige Zeitsynchronisierung nicht garantiert werden kann, also genau dem Szenario, in dem ein Zähler eine Uhr schlägt. Ein YubiKey kann tatsächlich mehrere davon: OATH-TOTP, OATH-HOTP und das weit stärkere FIDO2. Wenn Sie das ganze Bild wollen, siehe unseren vollständigen Leitfaden zu YubiKey und FIDO2.

Sicherheit: welches ist sicherer

TOTP wird aus einem konkreten Grund generell bevorzugt: seine Codes laufen ab. Ein von einem Angreifer erfasster TOTP-Code ist nur für die Sekunden nützlich, bis das Fenster umschlägt, was das Fenster für Abfangen-und-Wiederholen kurz hält. Ein HOTP-Code hingegen bleibt gültig, bis er verwendet wird, sodass ein abgefangener, aber unbenutzter HOTP-Code einem Angreifer ein längeres Wiederholungsfenster verschafft.

Aber keiner der beiden Algorithmen ist ein Allheilmittel. Sowohl TOTP als auch HOTP sind phishbar. Wenn eine gefälschte Anmeldeseite Sie dazu bringt, einen gültigen Code einzutippen, kann ein Angreifer diesen Code in Echtzeit an den echten Dienst weiterleiten, bevor er abläuft. Die Ablauffrist von TOTP verkürzt dieses Fenster, schließt es aber nicht. Das ist die strukturelle Grenze aller OTP-Verfahren mit gemeinsamem Geheimnis.

Die einzigen breit eingesetzten Faktoren, die echt phishing-resistent sind, sind FIDO2 und Passkeys, weil sie die Authentifizierung an die Herkunft der echten Seite binden, sodass ein weitergeleiteter Berechtigungsnachweis auf der Domain des Angreifers schlicht nicht funktioniert. Wenn Sie die Sicherheitsleiter hinaufsteigen wollen, lesen Sie was ein Passkey ist.

Fazit

TOTP und HOTP sind dieselbe HMAC-Maschinerie mit einem unterschiedlichen beweglichen Faktor: HOTP zählt Ereignisse, TOTP zählt die Zeit. Die Codes von HOTP laufen nie ab, aber sein Zähler kann außer Takt geraten; die Codes von TOTP laufen alle 30 Sekunden ab, aber seine Uhr muss ungefähr ausgerichtet bleiben. Die weite Welt hat sich für app-basierte 2FA auf TOTP festgelegt, weil ablaufende Codes die sicherere Voreinstellung sind, und HOTP überlebt vor allem auf Hardware-Tokens und in Offline-Szenarien. Welches auch immer ein Dienst Ihnen gibt, denken Sie an die gemeinsame Grenze: beide können gephisht werden. Für die wichtigsten Konten ist ein phishing-resistenter FIDO2-Schlüssel oder Passkey die stärkere Schicht.

Für Definitionen von TOTP, HOTP, 2FA, Passkey und Hardware-Schlüssel in klarer Sprache siehe das PwdFortress-Authentifizierungsglossar.


PwdFortress erklärt Authentifizierungsstandards auf Basis der veröffentlichten RFCs und öffentlicher Dokumentation. Wir erfinden keine Testergebnisse oder Statistiken.

Häufig gestellte Fragen

Was ist der Unterschied zwischen TOTP und HOTP?

Beide sind OATH/IETF-Einmalpasswort-Standards, die auf HMAC aufbauen. **HOTP** (RFC 4226) leitet jeden Code aus einem gemeinsamen Geheimnis plus einem **Zähler** ab, der bei jeder Verwendung eines Codes hochzählt - der Code bleibt gültig, bis er verwendet wird, ohne Zeitlimit. **TOTP** (RFC 6238) ist HOTP, bei dem der Zähler die **aktuelle Zeit geteilt durch einen Zeitschritt** ist (standardmäßig 30 Sekunden), sodass der Code alle 30 Sekunden wechselt und abläuft. Kurz gesagt: HOTP = ereignis-/zählerbasiert, TOTP = zeitbasiert.

Welches nutzt meine Authenticator-App, TOTP oder HOTP?

Fast sicher **TOTP**. Google Authenticator, Authy, Aegis, Bitwarden Authenticator, Microsoft Authenticator und die überwiegende Mehrheit der Websites nutzen TOTP - den 6-stelligen Code, der alle 30 Sekunden wechselt. HOTP ist viel seltener; man sieht es hauptsächlich bei einigen Hardware-Tokens (zum Beispiel einem für OATH-HOTP konfigurierten YubiKey) oder in Umgebungen, in denen keine zuverlässige Zeitsynchronisierung verfügbar ist.

Ist TOTP oder HOTP sicherer?

TOTP wird generell bevorzugt, weil seine Codes **nach etwa 30 Sekunden ablaufen**, was das Fenster verkleinert, in dem ein abgefangener Code wiederverwendet werden kann. HOTP-Codes bleiben gültig, bis sie verwendet werden, sodass ein abgefangener, aber unbenutzter Code ein längeres Wiederholungsfenster hat. Allerdings sind **beide phishbar** - ein Angreifer kann Sie dazu bringen, einen gültigen Code auf einer gefälschten Seite einzugeben, und ihn in Echtzeit weiterleiten. Nur FIDO2/Passkeys sind phishing-resistent.

Warum gerät HOTP außer Takt?

HOTP beruht auf einem Zähler, den Client und Server jeweils hochzählen. Wenn Sie Codes auf dem Client erzeugen, ohne sie je abzusenden (zum Beispiel indem Sie wiederholt die Taste eines Hardware-Tokens drücken), läuft der Client-Zähler dem Server-Zähler voraus, und die Codes passen nicht mehr zusammen. Zur Wiederherstellung nutzen Server ein **Vorausschau-Fenster**: Sie probieren die nächsten paar Zählerwerte, und wenn einer passt, synchronisieren sie sich neu. TOTP vermeidet das, weil der Zähler die Uhr ist, nicht Ihre Handlungen.

Braucht TOTP eine Internetverbindung?

Nein. Ein TOTP-Code wird lokal aus dem gemeinsamen Geheimnis und der aktuellen Zeit berechnet, die Erzeugung funktioniert also vollständig offline. Sie erfordert allerdings, dass die Uhren von Client und Server ungefähr synchron sind; Server akzeptieren meist ein kleines Toleranzfenster (oft plus oder minus einen Zeitschritt), um geringe Uhrenabweichungen aufzufangen.

Wie wird das OTP-Geheimnis überhaupt geteilt?

Bei der Einrichtung zeigt der Dienst einen QR-Code, der eine `otpauth://`-URI kodiert, welche das gemeinsame Geheimnis, den Algorithmus (standardmäßig HMAC-SHA1, manchmal SHA-256/512), die Anzahl der Stellen (standardmäßig 6, manchmal 8) und den Typ (`totp` oder `hotp`) enthält. Ihre Authenticator-App scannt ihn und speichert das Geheimnis. Von da an berechnen beide Seiten denselben HMAC und vergleichen den resultierenden Code.