Die Kurzfassung
TOTP steht für “Time-Based One-Time Password” (zeitbasiertes Einmalpasswort). Es ist das System hinter Apps wie Google Authenticator und Authy, die 6-stellige Codes generieren, die du beim Login in deine Accounts eingibst. Jeder Code ist 30 Sekunden gültig, dann wird er durch einen neuen ersetzt.
Das ist die Grundidee. Aber wie es technisch wirklich funktioniert, ist erstaunlich einfach.
Ein geheimer Schlüssel und eine Uhr
TOTP braucht zwei Dinge: einen geheimen Schlüssel und die aktuelle Uhrzeit.
Wenn du Zwei-Faktor-Authentifizierung auf einer Webseite einrichtest, generiert die Seite einen zufälligen geheimen Schlüssel und teilt ihn mit dir, meist als QR-Code. Deine Authenticator-App scannt den Code und speichert den Schlüssel. Die Webseite speichert ebenfalls eine Kopie. Nach diesem initialen Austausch wird der Schlüssel nie wieder übertragen.
Hier wird es interessant. Sowohl deine Authenticator-App als auch der Server der Webseite haben eine Uhr. Beide wissen, wie spät es ist. Deshalb können beide unabhängig voneinander den geheimen Schlüssel mit der aktuellen Uhrzeit kombinieren, durch dieselbe Mathematik laufen lassen und beim gleichen 6-stelligen Code landen. Keine Kommunikation nötig.
Wenn du einen Code in das Login-Formular eingibst, generiert der Server seinen eigenen Code mit demselben Geheimnis und der aktuellen Uhrzeit und prüft, ob sie übereinstimmen. Wenn ja, bist du drin.
Wie die Mathematik funktioniert
Du musst die Kryptographie nicht verstehen, um TOTP zu nutzen, aber hier ist die Kernidee, falls du neugierig bist.
Die aktuelle Uhrzeit wird in 30-Sekunden-Intervalle unterteilt. Momentan gibt es eine Zahl, die repräsentiert “wie viele 30-Sekunden-Blöcke seit dem 1. Januar 1970 vergangen sind” (das ist die Unix-Epoche, ein gebräuchlicher Referenzpunkt in der IT). Diese Zahl nennt man den Zeitschritt.
Der Algorithmus führt den geheimen Schlüssel und den Zeitschritt durch HMAC-SHA1, eine Einweg-Hash-Funktion. Das Ergebnis ist eine lange Byte-Folge. TOTP extrahiert einen Teil davon, wandelt ihn in eine Zahl um und nimmt die letzten 6 Ziffern. Das ist dein Code.
Da sich der Zeitschritt alle 30 Sekunden ändert, ändert sich auch der Code. Und weil die Hash-Funktion eine Einwegfunktion ist, kann jemand, der einen Code sieht, nicht den geheimen Schlüssel daraus berechnen.
Warum Codes ablaufen
Das 30-Sekunden-Fenster ist ein Kompromiss. Kürzere Fenster wären sicherer, längere würden dir mehr Zeit zum Eingeben geben. Dreißig Sekunden haben sich als vernünftiger Standard in RFC 6238, der Spezifikation, die TOTP definiert, etabliert.
Die meisten Server akzeptieren tatsächlich auch Codes aus dem vorherigen und nächsten 30-Sekunden-Fenster, um Zeitabweichungen zwischen deinem Gerät und dem Server auszugleichen. In der Praxis hast du also etwa 90 Sekunden.
Sobald ein Code abgelaufen ist, ist er wertlos. Jemand, der über deine Schulter auf deinen Bildschirm schaut, hat ein sehr enges Fenster, um das Gesehene zu nutzen, und viele Dienste lehnen Codes ab, die bereits einmal verwendet wurden.
RFC 6238: Der Standard
TOTP ist nicht proprietär. Es ist in RFC 6238 definiert, veröffentlicht von der Internet Engineering Task Force (IETF) im Jahr 2011. Die Spezifikation baut auf einem früheren Standard namens HOTP (RFC 4226) auf, der einen Zähler statt der Uhrzeit verwendet. TOTP hat einfach den Zähler durch einen Zeitschritt ersetzt.
Weil es ein offener Standard ist, kann jede Authenticator-App Codes für jeden Dienst generieren, der TOTP unterstützt. Du bist nicht an einen bestimmten Anbieter gebunden. Google Authenticator, Authy, 1Password, Bitwarden und Dutzende andere nutzen denselben Algorithmus.
Wie sich TOTP von normalen Passwörtern unterscheidet
Ein normales Passwort ist statisch. Es ist bei jedem Login dieselbe Zeichenfolge. Wenn es jemand durch einen Datenleck, Phishing oder Malware stiehlt, kann er es immer wieder nutzen, bis du es änderst.
TOTP-Codes unterscheiden sich in mehreren Punkten:
- Sie ändern sich alle 30 Sekunden, ein gestohlener Code ist also nur kurz nutzbar
- Sie werden aus einem Geheimnis generiert, das nach dem Setup dein Gerät nie wieder verlässt
- Sie können nicht im traditionellen Sinn gephished werden, weil ein Angreifer, wenn er einen Code nutzen will, dieser wahrscheinlich bereits abgelaufen ist
- Sie setzen nicht voraus, dass du etwas Komplexes erstellen und dir merken kannst
TOTP ist jedoch kein Ersatz für Passwörter. Es ist eine zusätzliche Ebene. Du brauchst weiterhin ein Passwort (etwas, das du weißt), und der TOTP-Code beweist, dass du auch Zugriff auf das Gerät mit dem geheimen Schlüssel hast (etwas, das du hast).
Die praktische Seite
Die Einrichtung von TOTP dauert meist etwa eine Minute pro Account. Der Dienst zeigt dir einen QR-Code, du scannst ihn mit deiner Authenticator-App und bestätigst durch Eingabe eines Codes. Das war’s.
Von da an dauert das Login etwa 10 Sekunden länger. Du öffnest deine Authenticator-App, findest den richtigen Account, liest den Code ab und gibst ihn ein. Es ist ein kleiner Reibungsverlust, der deinen Account dramatisch schwerer angreifbar macht.
Manche sorgen sich darum, den Zugriff auf ihre Authenticator-App zu verlieren. Das ist ein berechtigtes Anliegen. Die meisten Dienste geben dir Sicherheitscodes während der Einrichtung. Speichere diese an einem sicheren Ort. Du kannst auch Authenticator-Apps nutzen, die Cloud-Backups unterstützen, oder deine geheimen Schlüssel in einem Passwort-Manager aufbewahren.
Probier es selbst aus
Wenn du TOTP in Aktion sehen willst, ohne dich auf etwas festzulegen, kannst du Codes auf 2fa.zip generieren. Es läuft komplett in deinem Browser, ohne dass Geheimnisse an einen Server gesendet werden – ein guter Weg, um ein Gefühl dafür zu bekommen, wie die Codes funktionieren, bevor du 2FA auf deinen echten Accounts einrichtest.