Gib einen gültigen Geheimschlüssel ein, um den Code zu sehen.
Prüfe einen Code so, wie es der Server tun würde: Akzeptiert werden der aktuelle Code und bis zu 2 Schritte davor oder danach, um abweichende Uhren zu tolerieren.
So funktioniert es
TOTP (Time-based One-Time Password, RFC 6238) ist der Algorithmus hinter den sechsstelligen Codes von Google Authenticator, Microsoft Authenticator, Authy oder 1Password. Der Dienst und dein Smartphone teilen sich einen Geheimschlüssel; alle 30 Sekunden berechnen beide einen HMAC aus dem Geheimschlüssel und der in Schritte eingeteilten aktuellen Zeit, kürzen ihn auf sechs Ziffern und vergleichen das Ergebnis. Da niemand den Code überträgt, bis du ihn eintippst, funktioniert das auch, wenn das Smartphone keine Verbindung hat.
HOTP (RFC 4226) ist der zugrunde liegende Algorithmus: Statt der Uhrzeit verwendet er einen Zähler, der bei jeder Code-Anforderung weiterzählt. TOTP ist HOTP, bei dem der Zähler durch die Anzahl der seit 1970 vergangenen Perioden ersetzt wird. Der Geheimschlüssel wird in Base32 geschrieben und steckt in einer otpauth://-URI, die beim Aktivieren der Zwei-Faktor-Authentifizierung als QR-Code angezeigt wird.
Das Tool erzeugt Geheimschlüssel mit dem kryptografischen Zufallsgenerator des Browsers, berechnet den aktuellen, den vorherigen und den nächsten Code, erstellt die URI und ihren QR-Code, liest eine vorhandene URI aus und prüft einen Code mit derselben Uhrentoleranz, die auch Server verwenden. Der Geheimschlüssel verlässt nie deinen Browser und ist nicht im Link zum Teilen enthalten.
Beispiele
GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ · SHA1 · 8 · T = 59 s94287082Testvektor aus RFC 6238. Der Geheimschlüssel ist der ASCII-Text 12345678901234567890, in Base32 kodiert; 59 Sekunden nach Beginn der Unix-Epoche ist der Schritt 1, und der achtstellige Code muss genau dieser sein.GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ · SHA1 · 8 · T = 1111111109 s07081804Ein weiterer Vektor aus RFC 6238, nützlich, um zu prüfen, dass deine Implementierung keine führenden Nullen verliert: Der Code ist eine Ziffernfolge fester Länge, keine Ganzzahl.HOTP · GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ · contador 0755224Erster Vektor aus RFC 4226 mit sechs Stellen. Mit dem Zähler auf 1 wird der Code zu 287082.otpauth://totp/Ejemplo:ana%40example.com?secret=JBSWY3DPEHPK3PXP&issuer=EjemploTOTP · SHA1 · 6 · 30 sDas Key URI-Format, das Google Authenticator definiert hat und das die anderen Apps übernommen haben. Fehlen algorithm, digits und period, werden SHA1, 6 und 30 angenommen, daher enthalten die meisten QR-Codes nur den Geheimschlüssel und den Aussteller.Anwendungsfälle
- Die 2FA-Aktivierung deiner Anwendung testen: einen Geheimschlüssel erzeugen, den QR-Code mit dem Smartphone scannen und prüfen, ob der Server denselben Code akzeptiert, den die App anzeigt.
- Herausfinden, warum ein Server gültige Codes ablehnt: Stimmen sie mit dem vorherigen oder nächsten Schritt überein, deutet das auf eine abweichende Uhr hin.
- Eine eigene TOTP- oder HOTP-Implementierung anhand der Testvektoren aus RFC 6238 und 4226 validieren.
- Eine aus einer anderen App exportierte otpauth://-URI auslesen, um zu sehen, welchen Algorithmus, wie viele Stellen und welche Periode das Konto verwendet.
- Ein Testkonto, dessen Geheimschlüssel du bereits in Base32 hast, in eine zweite App oder einen Passwortmanager übernehmen.
Häufige Fragen
Warum lehnt der Server einen Code ab, den die App als gültig anzeigt?
Fast immer liegt es an der Uhr. TOTP setzt voraus, dass Smartphone und Server sich über die Uhrzeit einig sind: Schon bei 30 Sekunden Abweichung berechnen sie unterschiedliche Schritte. Deshalb akzeptieren Server einen oder zwei Schritte in jede Richtung. Stimmt der Code mit dem vorherigen oder nächsten Schritt überein, synchronisiere die Serverzeit per NTP und aktiviere die automatische Uhrzeit auf dem Smartphone.
Ist es sicher, hier den Geheimschlüssel für ein echtes Konto zu erzeugen?
Der Geheimschlüssel wird mit crypto.getRandomValues erzeugt und verlässt deinen Browser nicht, aber in der Produktion muss ihn der Server erzeugen und speichern, der die Codes prüft. Dieses Tool dient zum Testen und Debuggen. Behandle jeden echten Geheimschlüssel wie ein Passwort: Wer ihn hat, kann für immer deine Codes erzeugen.
Sollte ich SHA-256, 8 Stellen oder 60 Sekunden verwenden?
Theoretisch sind sie stärker, aber mehrere Apps, darunter Versionen von Google Authenticator, ignorieren diese Parameter und berechnen immer SHA-1 mit 6 Stellen alle 30 Sekunden – der Nutzer sieht dann Codes, die der Server ablehnt. SHA-1 ist als HMAC weiterhin sicher. Aus Kompatibilitätsgründen verwenden fast alle Dienste die Standardwerte.
Wie lang sollte der Geheimschlüssel sein?
RFC 4226 verlangt mindestens 128 Bit und empfiehlt 160, das sind in Base32 32 Zeichen. Viele Dienste verwenden 80 Bit (16 Zeichen), und die Apps akzeptieren sie trotzdem. Dieses Tool erzeugt 160 Bit.
Schützt TOTP vor Phishing?
Nicht vollständig. Es ist viel besser als SMS, die abgefangen oder per SIM-Tausch gestohlen werden kann, aber eine gefälschte Website kann dich nach dem Code fragen und ihn innerhalb derselben 30 Sekunden auf der echten verwenden. FIDO2-Sicherheitsschlüssel und Passkeys sind an die Domain gebunden und widerstehen diesem Angriff.
Was passiert, wenn ich mein Smartphone verliere?
Ohne den Geheimschlüssel lassen sich die Codes nicht berechnen. Deshalb geben Dienste beim Aktivieren von 2FA Wiederherstellungscodes aus: Bewahre sie außerhalb des Smartphones auf. Manche Apps erlauben es, die Konten verschlüsselt in der Cloud zu sichern oder als QR-Code zu exportieren, um sie auf ein anderes Gerät zu übertragen.