So funktionieren zeitbasierte Einmalcodes (TOTP)
Die sechsstelligen Codes aus Authenticator-Apps folgen dem Verfahren TOTP aus RFC 6238. Dienst und App kennen dasselbe geheime Secret. Beide teilen die aktuelle Unix-Zeit durch die Periode, meist 30 Sekunden, und erhalten so einen Zähler. Über diesen Zähler bilden sie mit dem Secret einen HMAC, standardmäßig mit SHA-1, und kürzen das Ergebnis auf sechs Ziffern. Stimmen Secret und Uhrzeit überein, kommen auf beiden Seiten dieselben Ziffern heraus, ohne dass dafür eine Verbindung nötig ist.
TOTP baut auf HOTP aus RFC 4226 auf. Dort zählt ein Zähler jede Anmeldung hoch, bei TOTP übernimmt die Uhr diese Rolle. Weil Uhren nie ganz genau gehen, akzeptieren viele Server zusätzlich den Code des vorherigen Zeitfensters. RFC 6238 empfiehlt, höchstens ein Zeitfenster Abweichung für die Übertragungsverzögerung zuzulassen. Deshalb zeigt das Tool neben dem aktuellen Code auch den vorherigen und den nächsten an.
Aufbau des otpauth-Links
Der QR-Code enthält einen Link im Key-URI-Format, das mit dem Google Authenticator eingeführt wurde und heute von praktisch allen Authenticator-Apps verstanden wird:
otpauth://totp/Beispiel%20GmbH:erika%40example.com?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Beispiel%20GmbH&algorithm=SHA1&digits=6&period=30
Vor dem Fragezeichen steht der Name des Eintrags: Aussteller und Konto, getrennt durch einen Doppelpunkt. Dahinter folgen die Parameter:
| Parameter | Bedeutung | Standard |
|---|---|---|
secret | der gemeinsame Schlüssel in Base32 (A–Z und 2–7), Pflichtangabe | – |
issuer | Aussteller, also Dienst oder Firma; wird in der App angezeigt | – |
algorithm | Hash-Verfahren für den HMAC: SHA1, SHA256 oder SHA512 | SHA1 |
digits | Anzahl der Ziffern | 6 |
period | Gültigkeit eines Codes in Sekunden | 30 |
Nicht jede App wertet algorithm, digits und period aus. Ignoriert eine App diese Angaben, rechnet sie mit den Standardwerten und erzeugt falsche Codes. Bleiben Sie deshalb bei SHA-1, sechs Stellen und 30 Sekunden, sofern der Dienst nichts anderes verlangt. Für HMAC gilt SHA-1 weiterhin als ausreichend, weil die bekannten Kollisionsangriffe auf SHA-1 die Sicherheit von HMAC nicht direkt betreffen.
Sicher einrichten und aufbewahren
- Vertrauenswürdiges Gerät: Wer das Secret kennt, kann alle künftigen Codes berechnen. Erzeugen und scannen Sie es nur auf eigenen, aktuellen Geräten, nie an einem fremden oder öffentlichen Rechner.
- Ausreichende Länge: RFC 4226 verlangt mindestens 128 Bit und empfiehlt 160 Bit. Der Knopf „Zufälliges Secret“ erzeugt 160 Bit mit dem Zufallsgenerator des Browsers (
crypto.getRandomValues). - Sicherung: Verliert das Smartphone die App, sind die Codes weg. Heben Sie Wiederherstellungscodes des Dienstes auf oder legen Sie das Secret verschlüsselt in einem Passwortmanager ab, etwa in einem selbst betriebenen Vaultwarden. Wer 2FA-Konten zentral im eigenen Netz verwalten möchte, findet in der Anleitung zu 2FAuth mit Docker Compose eine Lösung.
- Richtige Uhrzeit: Weichen die Codes ab, liegt es oft an der Uhr. Smartphones stellen die Zeit meist automatisch, auf Linux-Servern prüfen Sie die Synchronisierung so:
timedatectl
# „System clock synchronized: yes“ zeigt eine aktive Zeitsynchronisierung
Wie Sie die Zwei-Faktor-Anmeldung im ganzen Unternehmen einführen, beschreibt die Anleitung Zwei-Faktor-Authentifizierung richtig einführen. Hintergründe zu Passwörtern und Passkeys finden Sie unter Sichere Passwörter und Passkeys im Unternehmen.
Häufige Fragen
Warum stimmt der Code in meiner App nicht mit dem Live-Code überein?
Prüfen Sie zuerst die Uhrzeit beider Geräte. Stimmt sie, liegt es meist an Algorithmus, Stellenzahl oder Periode: Nutzt die App die Standardwerte, der QR-Code aber andere, entstehen unterschiedliche Codes. Auch ein Tippfehler im Secret führt zu völlig anderen Ziffern. Im Base32-Alphabet gibt es übrigens keine 0, 1, 8 und 9; das Tool weist auf solche Zeichen hin.
Wird das Secret gespeichert oder übertragen?
Nein. Secret, QR-Code und Live-Code entstehen ausschließlich im Speicher dieser Seite. Nichts landet in der Adresszeile, im Browser-Speicher oder auf einem Server. Nach dem Schließen des Tabs ist alles weg. Die Codes berechnet der Browser über die Web-Crypto-Schnittstelle, die eine sichere Verbindung (HTTPS) voraussetzt.
Kann ich einen vorhandenen Eintrag übernehmen?
Ja, sofern Sie den otpauth-Link haben, zum Beispiel aus der Einrichtungsseite eines Dienstes oder aus dem Export einer App. Fügen Sie ihn unter „Vorhandenen Link importieren“ ein, dann werden alle Felder ausgefüllt. Die Exportfunktion des Google Authenticator nutzt dagegen ein eigenes Format (otpauth-migration://), das dieses Tool nicht liest.
Was ist der Unterschied zwischen TOTP und HOTP?
HOTP zählt bei jeder Code-Erzeugung einen Zähler hoch, TOTP leitet den Zähler aus der Uhrzeit ab. TOTP-Codes verfallen deshalb automatisch nach der Periode, HOTP-Codes erst, wenn ein neuer benutzt wird. Dieses Tool erzeugt ausschließlich TOTP, weil nahezu alle Dienste und Apps darauf setzen.
Wofür brauche ich den QR-Code als PNG?
Etwa, um ihn in eine Einrichtungsanleitung für Mitarbeitende einzubauen oder auf einem zweiten Gerät zu scannen. Behandeln Sie die Datei wie ein Passwort: Sie enthält das Secret im Klartext. Für gewöhnliche Links, WLAN-Zugänge oder Kontakte nutzen Sie den QR-Code-Generator, für starke Passwörter den Passwort-Generator.