Wie TOTP-Codes funktionieren
Ein TOTP-Code ist eine 6-stellige Zahl, die eine Authenticator-App und ein Server jeweils unabhängig voneinander berechnen, aus denselben zwei Eingaben: einem gemeinsamen geheimen Schlüssel und der aktuellen Zeit, geteilt in 30-Sekunden-Fenster. Der Code selbst wird bei der Einrichtung nie übertragen und trägt keine Information über das Geheimnis, und doch kommen beide Seiten auf dieselben Ziffern – denn TOTP ist weder Magie noch Zufall, sondern ein veröffentlichter Algorithmus (RFC 6238), angewandt auf dieselben Eingaben. Dieser Artikel geht die Berechnung von Anfang bis Ende durch, erklärt, warum ein „falscher Code“ fast immer ein Uhrenproblem ist, und behandelt die Umgangsregeln, die entscheiden, ob Ihr zweiter Faktor ein zweiter Faktor bleibt. Jeden Schritt können Sie selbst im TOTP-Generator ausführen, der Codes lokal in Ihrem Browser berechnet.
Zwei Eingaben, ein Code: das Geheimnis und die Uhr
Wenn Sie die Zwei-Faktor-Authentifizierung einschalten, erzeugt der Dienst ein zufälliges Geheimnis – typischerweise 20 Bytes, Ihnen als Zeichenfolge in Base32 gezeigt und der Bequemlichkeit halber in einen QR-Code kodiert. Dieses Geheimnis wird an genau zwei Orten gespeichert: in der Datenbank des Dienstes und in Ihrem Authenticator. Von diesem Moment an ist die Anmeldung eine synchronisierte Berechnung. Beide Seiten nehmen die aktuelle Unix-Zeit, teilen sie durch den Zeitschritt (30 Sekunden bei fast jedem Dienst) und führen den resultierenden Zähler zusammen mit dem Geheimnis in eine Hash-Funktion. Wer die übereinstimmende Ausgabe vorlegt, gilt als Besitzer des Geheimnisses.
Die Eleganz des Designs liegt in dem, was es weglässt. Es gibt keine Herausforderung zu senden, keinen Code zuzustellen, keinen Netzwerk-Roundtrip und nichts pro Anmeldung, das ein Angreifer abfangen könnte: Die „Einmal“-Eigenschaft kommt von der Uhr, denn der Zähler wechselt alle 30 Sekunden und alte Ausgaben werden wertlos. Es bedeutet auch, dass das System genau zwei Dinge hat, die schiefgehen können – das Geheimnis und die Zeit. Fast jeder TOTP-Fehler und jeder TOTP-Diebstahl geht auf eines dieser beiden zurück.
Die Berechnung, Schritt für Schritt
Der Zähler wird zunächst als 8-Byte-Ganzzahl in Big-Endian-Schreibweise geschrieben – eine Kodierung fester Breite, auf die sich beide Seiten geeinigt haben. Diese Nachricht läuft dann durch HMAC mit dem Geheimnis als Schlüssel, mit dem vereinbarten Hash: SHA-1 als Standard, mit SHA-256 und SHA-512 für Dienste, die sie wählen. HMAC ist eine schlüsselbasierte Konstruktion, kein einfacher Hash: Den Zähler nur zu hashen, würde jedem mit dem Algorithmus erlauben, Codes zu reproduzieren, während HMAC-Ausgaben ohne das Geheimnis unfälschbar sind und nicht rückwärts laufen können, um es zu bergen.
Ein Digest hat 20 Bytes oder mehr; ein Anmeldefeld will 6 Ziffern. Die Brücke ist die dynamische Kürzung: Das letzte Halbbyte des Digests wählt einen Offset, vier Bytes werden von diesem Offset gelesen, mit dem obersten Bit maskiert (um Vorzeichen-Mehrdeutigkeit zu vermeiden), und die resultierende 31-Bit-Zahl wird modulo 10^Ziffern reduziert – eine Million für die üblichen sechs Ziffern –, links mit Nullen aufgefüllt. Das ist der Code, den Sie eintippen. Das nächste Fenster rechnet von vorn; keine Kette verbindet einen Code mit dem nächsten, weshalb ein fotografierter Code dreißig Sekunden später nichts mehr wert ist.
Wenn der Code abgelehnt wird: Es ist meist die Uhr
Weil der Zähler aus der Zeit abgeleitet wird, müssen Generator und Server sich einig sein, welches 30-Sekunden-Fenster gerade aktuell ist. Die meisten Server mildern das, indem sie auch die Nachbarfenster akzeptieren – einen Schritt zu jeder Seite –, was kleine Abweichungen still aufsaugt. Darüber hinaus ist jeder Code falsch, so richtig das Geheimnis auch sein mag, und der Fehler sieht identisch aus wie eine vertippte Ziffer: eine flache Ablehnung ohne jeden Hinweis darauf, welche Eingabe nicht übereinstimmte.
Die erste Diagnose bei einem plötzlich versagenden Authenticator ist daher nie das Geheimnis; es ist die Uhr des Geräts, das die Codes erzeugt. Eine von Hand eingestellte Zeit, eine sterbende CMOS-Batterie, ein Telefon, das einen Flug im falschen Zeitzonenmodus verbracht hat – jedes davon kann das Gerät um eine Minute oder mehr abdriften lassen. Unser TOTP-Generator zeigt eine Live-Uhrenkarte und misst Ihr Gerät gegen die Serverzeit, genau aus diesem Grund. Schalten Sie automatisches Datum und Uhrzeit ein, und die Codes funktionieren fast immer wieder – kein Zurücksetzen, kein neues Geheimnis, kein Support-Ticket.
Das Geheimnis ist das ganze Spiel
Nimmt man die Zeremonie weg, ist TOTP-Sicherheit eine einzige Tatsache: Wer das Geheimnis hat, hat den zweiten Faktor, für immer, von überall, ohne dass der Dienst seine Codes von Ihren unterscheiden könnte. Der QR-Code, den Sie bei der Einrichtung scannen, ist nicht das Bild eines Codes – er ist das Geheimnis selbst, plus Kontobeschriftung und Parameter, formatiert als otpauth://-URI. Ein Screenshot davon ist eine dauerhafte Kopie Ihres zweiten Faktors.
Deshalb sind die Umgangsregeln strenger als für Passwörter. Ein Passwort wird vom Server geprüft und kann gehasht gespeichert werden; ein TOTP-Geheimnis muss von beiden Seiten in Rohform abrufbar sein, lässt sich also nicht weghashen, und jede Kopie ist eine lebende Kopie. Bewahren Sie die Master-Kopie in Ihrem Authenticator oder einem verschlüsselten Passwort-Manager auf. Tippen Sie es niemals in eine Website, die Codes auf ihrem Server erzeugt – Sie haben einem Fremden einen dauerhaften Schlüssel übergeben –, und fügen Sie es niemals in einen Chat ein, wie der nächste Abschnitt erklärt.
Warum das Geheimnis nie in einen Chat gehört
Ein 2FA-Geheimnis in einen Chat einzufügen – ein Support-Gespräch, einen Team-Kanal, einen KI-Assistenten – fühlt sich harmlos an, weil die Zeichenfolge wie Kauderwelsch aussieht und das Gespräch sich privat anfühlt. Es ist beides nicht. Chats werden protokolliert, aufbewahrt, auf jedes Gerät des Kontos synchronisiert, sind durchsuchbar und werden auf Servern verarbeitet, die Sie nicht kontrollieren; KI-Chats fügen dieser Liste noch Trainings-Pipelines und lange Aufbewahrung hinzu. In dem Moment, in dem das Geheimnis dort landet, existiert Ihr zweiter Faktor in Systemen, die dafür gebaut sind, Text zu speichern und zu indizieren.
Das sichere Muster ist, dass das Geheimnis nur an drei Arten von Orten existieren sollte: in der Datenbank des Dienstes, in Ihrem Authenticator oder Passwort-Manager und in lokaler Berechnung auf einem Gerät, das Sie kontrollieren – so ist der TOTP-Generator auf dieser Seite gebaut, mit dem Geheimnis nur im Seitenspeicher und beim Neuladen zerstört. Wenn ein Geheimnis bereits dort eingefügt wurde, wo es nicht hingehört, behandeln Sie es als verbrannt: Schalten Sie die Zwei-Faktor-Authentifizierung beim Dienst aus und wieder ein, um ein frisches zu prägen, registrieren Sie Ihren Authenticator neu, und prüfen Sie bei der Gelegenheit das Passwort selbst in der Passwort-Leak-Prüfung.
Was TOTP nicht aufhält
TOTP besiegt Passwortdiebstahl, Credential Stuffing und Datenbank-Leaks: Ihr Passwort zu kennen, reicht nicht mehr. Es besiegt kein Echtzeit-Phishing. Eine gefälschte Anmeldeseite, die Ihre Zugangsdaten an den echten Dienst weiterleitet und nach dem Code fragt, kann den Code innerhalb seines 30-Sekunden-Fensters weiterreichen – der Code beweist den Besitz des Geheimnisses, nicht, dass Sie mit der echten Seite sprechen. Der Diebstahl des Sitzungs-Cookies umgeht es genauso vollständig, weil der Code nur einmal geprüft wird.
Deshalb verdrängen Passkeys und Hardware-Sicherheitsschlüssel TOTP am oberen Ende: Sie binden den Nachweis an den Ursprung der Seite und lassen nichts Eintippbares zurück, das ein Relais stehlen könnte. TOTP bleibt eine starke, universelle Basis – weit besser als SMS-Codes, die die Schwächen des Telefonnetzes erben –, sollte aber mit offenen Augen eingesetzt werden: Schützen Sie das Geheimnis wie einen Generalschlüssel, bewahren Sie Backup-Codes an einem getrennten Ort auf, halten Sie Ihre Uhr ehrlich, und ziehen Sie eine Passkey vor, wo immer der Dienst eine anbietet.