
Der vollständige Leitfaden zu TOTP im Team
Wie TOTP funktioniert, welche Eigenschaften des Algorithmus alle Probleme geteilter Konten verursachen, und was ein Team einrichten muss.
TOTP nimmt zwei Eingaben und erzeugt eine Ausgabe. Die Eingaben sind ein geteiltes Geheimnis und die aktuelle Uhrzeit; die Ausgabe ist ein sechsstelliger Code, den jeder berechnen kann, der dasselbe Geheimnis hält. Es gibt keinen Netzaufruf, keine Registrierung pro Gerät und keine serverseitige Spur davon, welches Gerät einen Code erzeugt hat.
Alle Schwierigkeiten, die ein Team mit 2FA auf geteilten Konten hat, folgen aus diesem Satz. Dieser Leitfaden erklärt den Mechanismus und dann, was er für ein Team von mehr als einer Person bedeutet.
Was ist TOTP?
TOTP ist in RFC 6238 spezifiziert. Es ist eine dünne Schicht über HOTP (RFC 4226), das einen Code aus einem Geheimnis und einem Zähler erzeugt. HOTP zählt den Zähler bei jeder Verwendung hoch; TOTP ersetzt den Zähler durch die aktuelle Uhrzeit in festen Schritten, damit beide Seiten ohne Kommunikation zum selben Wert kommen.
Wie funktioniert TOTP?
Eine Erzeugung sieht so aus:
counter = floor(unix_time / period) # die Periode ist meist 30 Sekunden
digest = hmac_sha1(secret, counter) # 20 Bytes
offset = digest[-1] & 0x0F # dynamische Trunkierung
number = int_from(digest[offset:offset+4]) & 0x7FFFFFFF
code = number % 10 ** digits # mit Nullen aufgefüllt, meist 6 Ziffern
Vier Parameter sind im Spiel: das Geheimnis, die Periode (30 Sekunden als Voreinstellung), die Zahl der Ziffern (6) und der Algorithmus (in der Praxis SHA-1). Die Authenticator-App eines Telefons tut genau das Obige, offline. Der Server tut dasselbe und vergleicht.
Zwei Folgen gehören klar gesagt, denn dort beginnen die meisten Missverständnisse:
- Nichts an einem Code identifiziert seine Quelle. Der Server sieht sechs passende Ziffern, nicht welches Gerät oder welche Person sie erzeugt hat.
- Es gibt keinen Zustand zu entziehen. Ein Gerät einzurichten ist keine Registrierung, sondern eine Kopie des Geheimnisses. Nichts im Konto hält das fest.
Das Geheimnis ist das Konto
Das Geheimnis hat meist 16 bis 32 Base32-Zeichen. Es läuft nicht ab, es ist an kein Gerät gebunden, und das Protokoll kennt keinen Begriff seiner Rotation.
Wenn Sie einen Einrichtungs-QR-Code scannen, lesen Sie eine URI im Format, das unter dem Namen Key URI Format veröffentlicht ist:
otpauth://totp/Acme:[email protected]?secret=JBSWY3DPEHPK3PXP&issuer=Acme&algorithm=SHA1&digits=6&period=30
Diese Zeichenkette ist die ganze Kennung. Der QR-Code ist ein Foto davon. Das heißt, ein Screenshot des Einrichtungsbildschirms ist keine Bequemlichkeit. Er ist der zweite Faktor, in einer Form, die sich weiterleiten, sichern und indizieren lässt.
Daraus folgen die Eigenschaften, die geteilte 2FA unangenehm machen:
- Besitz gilt als dauerhafter Zugang. Wer das Geheimnis hat, kann alle künftigen Codes erzeugen, auf jedem Gerät, für immer.
- Kopien sind unsichtbar. Keine Sicherheitsseite wird Ihnen je sagen, wie viele es gibt.
- Entziehen heißt alles zurücknehmen. Der einzige Weg, eine Kopie ungültig zu machen, ist die 2FA am Konto abzuschalten und neu einzurichten, für alle.
Die Einrichtung, Schritt für Schritt
Was während der Konfiguration geschieht, erklärt, warum manche späteren Entscheidungen unumkehrbar sind.
- Der Anbieter erzeugt das Geheimnis. Es entsteht serverseitig, wird an Ihrem Konto gespeichert und ändert sich nie wieder, es sei denn, die 2FA wird abgeschaltet.
- Es wird einmal gezeigt, als QR-Code und meist als Base32-Zeichenkette hinter einem Link „Scannen nicht möglich?“. Das ist der einzige Moment, in dem die Kennung einem Menschen gezeigt wird.
- Ihr Client speichert es. Eine Authenticator-App schreibt es auf das Gerät; ein Teamtresor schreibt es in seinen eigenen verschlüsselten Speicher. Beide tun dasselbe: eine Kopie behalten.
- Sie geben einen Code zur Bestätigung ein. Das beweist, dass die Kopie funktioniert. Es ist keine Registrierung des Geräts: Nichts über Ihr Telefon wird irgendwohin gesendet.
- Der Anbieter liefert Wiederherstellungscodes, meist in diesem Moment, und meist ein einziges Mal.
Schritt 2 ist der ganze Einsatz. Was diesen Bildschirm sieht, hält von da an den zweiten Faktor des Kontos, und Schritt 4 gibt keinen Hinweis darauf, wie viele Dinge ihn gesehen haben. Deshalb ist „wir machen fürs Erste nur einen Screenshot“ eine Entscheidung ohne Verfallsdatum, und deshalb ist die richtige Frage während der Einrichtung nicht, wer ihn scannt, sondern wo die eine Kopie leben soll.
Warum es das Fenster von dreißig Sekunden gibt
Beide Seiten müssen sich über den Zähler einig werden, ohne miteinander zu sprechen: Also einigen sie sich über die Zeit. Ein Schritt von dreißig Sekunden ist der Kompromiss: lang genug, um einen Code zu tippen, kurz genug, damit ein abgefangener Code kurz danach nichts mehr wert ist.
Prüfstellen akzeptieren meist auch den unmittelbar vorangehenden Schritt und manchmal den folgenden, um Tippzeit und kleine Uhrabweichungen aufzufangen. Deshalb funktioniert ein Code oft noch einige Sekunden nach dem Nullstellen des Countdowns.
Es heißt auch, dass Uhren zählen. Ein Gerät, dessen Uhr eine Minute abweicht, berechnet die Codes eines Schritts, den der Server schon verlassen hat, und alle Codes werden abgelehnt. Meldet jemand, dass die Codes nicht mehr funktionieren, ist eine nicht synchronisierte Uhr das Erste, was zu prüfen ist, bevor man annimmt, das Geheimnis sei falsch. Alles, was für ein Team Codes erzeugt, braucht eine synchrone Uhr als strikte Anforderung, nicht als Bequemlichkeit.
Wie die Prüfung funktioniert, und warum ein Code nur einmal dienen sollte
Auf der anderen Seite berechnet die Prüfstelle den erwarteten Code für den aktuellen Schritt und vergleicht. Drei Einzelheiten dieses Vergleichs zählen für alle, die geteilte Konten verwalten.
Das Akzeptanzfenster ist eine bewusste Abwägung. Jeder zusätzlich akzeptierte Schritt verlängert die Zeit, in der ein abgefangener Code nutzbar bleibt. Ein Schritt rückwärts ist normal; breite Fenster deuten auf einen Dienst, der Uhrprobleme verdeckt.
Ein Code sollte einmalig sein. RFC 6238 sagt ausdrücklich, dass eine zweite Authentifizierung mit demselben Zeitschritt abgelehnt werden sollte, und gute Implementierungen merken sich den zuletzt verwendeten Schritt je Konto. Die praktische Wirkung für ein Team: Zwei Personen, die sich in denselben dreißig Sekunden anmelden, können erleben, dass der zweite Versuch abgelehnt wird, obwohl der angezeigte Code stimmt. Auf den nächsten Code zu warten ist das Mittel, und das ist kein Fehler.
Versuche sollten begrenzt sein. Sechs Ziffern sind eine Million Möglichkeiten, was nur dann Brute Force standhält, wenn der Server die Versuche begrenzt. Dieser Schutz lebt vollständig beim Anbieter; nichts, was Sie mit dem Geheimnis tun, verbessert ihn.
Keiner dieser Punkte lässt sich auf Seiten eines Teams konfigurieren, aber alle drei erklären Symptome, die sonst nach kaputter Konfiguration aussehen: ein Code, der verspätet funktioniert, ein Code, der für eine Kollegin funktioniert und für die nächste nicht, eine Anmeldung, die nach einer Serie von Versuchen anfängt, richtige Codes abzulehnen.
Ist TOTP sicher? Wogegen es schützt und wogegen nicht
Es verteidigt gut gegen wiederverwendete Passwörter, Credential Stuffing aus Datenlecks und ein einzeln geleaktes Passwort. Ein Angreifer, der nur das Passwort hat, kann sich nicht anmelden.
Es verteidigt nicht gegen eine Weiterleitung in Echtzeit: eine überzeugende gefälschte Anmeldeseite, die den Code abfragt und ihn in seinem Gültigkeitsfenster weitergibt. TOTP-Codes sind von der Konstruktion her phishbar, da der Nutzer sie lesen kann. Es tut auch nichts gegen Schadsoftware auf dem Gerät, das sie erzeugt, ein gestohlenes Sitzungs-Cookie oder ein kopiertes Geheimnis.
Dieser letzte Punkt ist die Lücke, die Teams betrifft. Alle anderen Bedrohungen der Liste werden von den Sicherheitseinstellungen des Kontos selbst behandelt. Ein kopiertes Geheimnis wird nur dadurch behandelt, wie Ihr Team es verwahrt, was der Anbieter weder sehen noch unterstützen kann.
Wo Teams TOTP brechen
Nach steigendem Schaden:
- Eine Person behält die App. Kein Geheimnis wird kopiert, aber das Konto hängt nun an der Verfügbarkeit eines Menschen.
- Ein eigenes Telefon in einer Schublade. Im Büro ausgezeichnet, aus der Ferne nutzlos, und es zeichnet nichts auf.
- Das Geheimnis neben dem Passwort in einem geteilten Tresor. Praktisch, und es vereint beide Faktoren in einem Behälter.
- Der QR-Code in einem Kanal veröffentlicht. Dauerhafte und nicht zählbare Verteilung der Kennung.
Die Abwägungen zu jedem und wie man wählt, sind das Thema von den besten Wegen, die 2FA eines geteilten Kontos zu verwalten und, Kontoart für Kontoart, von die 2FA eines geteilten Kontos: Wie sollte ein Team vorgehen?.
Was eine teamtaugliche TOTP-Installation verlangt
Eine Installation, die mehr als eine Person übersteht, braucht sechs Dinge, welches Werkzeug auch gewählt wird. Das ist die Liste, die man vor der Wahl prüft.
Eine einzige Verwahrung des Geheimnisses. Ein einziger Ort hält es, einmal eingegeben, von der Person, die das Konto verwaltet. Alles andere verbraucht Codes.
Eine Verteilung der Codes ohne Verteilung des Geheimnisses. Wer sich anmelden muss, erhält den aktuellen Code und den Countdown und kann aus dem, was er sieht, das Geheimnis nicht rekonstruieren.
Eine Berechtigung je Person und je Konto. Nicht je Tresor. Wer auf dem Social-Profil postet, hat keinen Grund, Codes für den Zahlungsdienstleister zu erzeugen.
Eine Spur der Codeabrufe. Das Protokoll des Anbieters zeigt das geteilte Konto, nicht die Person. Ein Register darüber, wer einen Code angefordert hat, ist das Einzige, was einen Vorfall auf einen Namen und einen Zeitstempel bringt.
Eine synchrone Uhr überall dort, wo Codes erzeugt werden, aus dem oben genannten Grund.
Ein getesteter Wiederherstellungsweg. Das ist der Teil, den Teams im schlechtesten Moment entdecken.
Sicherungen und Wiederherstellung
Zwei getrennte Dinge müssen wiederherstellbar sein, und sie sollten weder am selben Ort wie das jeweils andere noch in dem Konto leben, das sie schützen.
Das Geheimnis, denn es zu verlieren zwingt zum Zurücksetzen der 2FA des Kontos. Sein Ort sollte notiert und von mehr als einer Administration erreichbar sein.
Die Wiederherstellungscodes des Anbieters, die einmalige Rückfallmittel sind und bei der Einrichtung ausgegeben werden. Sie dienen dem Tag, an dem das Geheimnis verschwunden ist, nicht dem täglichen Zugang: Sie sind begrenzt, und niemand kann sagen, welcher von wem verbraucht wurde.
Die einzige Kopie eines Wiederherstellungscodes in dem Konto abzulegen, das er wiederherstellt, ist eine Schleife, die sich genau dann schließt, wenn Sie sie offen bräuchten. Dasselbe gilt für das Geheimnis des Kontos, das den Tresor bewacht, der Ihre Geheimnisse enthält.
Der Wiederherstellungsweg verdient es, einmal absichtlich durchlaufen zu werden, auf einem Konto ohne Einsatz: die 2FA mit einem Wiederherstellungscode abschalten, neu einrichten, prüfen, dass alle, die die Codes brauchen, sie noch haben. Ohne diesen Trockenlauf entdecken Sie das Verfahren an dem Tag, an dem das Konto schon unerreichbar ist.
Die Parameter, denen Sie wirklich begegnen
Die Voreinstellungen decken die überwältigende Mehrheit ab: SHA-1, sechs Ziffern, dreißig Sekunden. Die Verwendung von SHA-1 ist hier nicht die Schwäche, die sie zu sein scheint, denn HMAC-SHA1 ist von den Kollisionsangriffen nicht betroffen, die SHA-1 für Signaturen ausgemustert haben. Die RFC erlaubt SHA-256 und SHA-512, aber die Unterstützung in Apps ist uneinheitlich genug, dass Anbieter sie selten nutzen.
Eine Minderheit von Diensten weicht ab: acht Ziffern, eine Periode von sechzig
Sekunden, oder ein nicht numerisches Codealphabet. Die praktische Folge ist eine
Speicheranforderung. Was ein Geheimnis hält, muss seine Parameter digits,
period und algorithm daneben halten, sonst sind die Codes dieser Konten auf
eine Weise falsch, die nach einem kaputten Geheimnis aussieht. Jedes Werkzeug, das
nur eine nackte Geheimniszeichenkette akzeptiert, unterstellt stillschweigend die
Voreinstellungen.
Kleines Glossar
Es lohnt sich, sich im Team darüber zu einigen, denn diese Wörter werden austauschbar benutzt, und am Ende sprechen Menschen über verschiedene Dinge.
- Geheimnis (oder Seed): die Base32-Zeichenkette, aus der die Codes kommen. Dauerhaft.
- Schlüssel: meist ein Synonym für Geheimnis. Manchmal ist damit die Key URI gemeint, was etwas anderes ist.
- Code (oder OTP): die sechs Ziffern. Einen Schritt gültig, einmalig.
- Token: austauschbar für die sechs Ziffern und, bei eigener Hardware, für das Gerät, das das Geheimnis hält. Sagen Sie, welches.
- HOTP: dieselbe Konstruktion mit einem Zähler, der bei jeder Verwendung hochzählt.
- Periode / Zeitschritt: das Gültigkeitsintervall eines Codes, meist 30 Sekunden.
- Drift: die Abweichung zwischen zwei Uhren, die Codes scheitern lässt.
- Key URI / otpauth-URI: die Textform der Einrichtungsnutzlast; der QR-Code ist ihre visuelle Kodierung.
- Wiederherstellungscodes: einmalige Rückfallmittel des Dienstes, ohne Bezug zu TOTP.
- Einrichtung: die Kopie des Geheimnisses auf ein Gerät. Keine Registrierung, trotz des Eindrucks, den es macht.
Wo Share Auth steht
Share Auth setzt die sechs Anforderungen oben für die Konten um, die wirklich nur
eine Kennung haben. Die Geheimnisse werden einmal eingegeben und im Ruhezustand
verschlüsselt, mit digits, period und algorithm daneben gespeichert; die
Mitglieder sehen Codes und Countdowns statt Geheimnisse; die Berechtigungen gelten
je Mitglied; und jeder Abruf wird in ein Zugriffsprotokoll geschrieben. Ein
Mitglied zu entfernen entzieht seinen Zugang zu allen Konten auf einmal.
Es ersetzt nicht den Zugang je Person auf den Plattformen, die ihn anbieten. Wo ein Werkzeug jeder Kollegin eine eigene Kennung und einen eigenen zweiten Faktor geben kann, ist das strikt besser, als irgendetwas zu teilen.
Prüfliste
- Das Geheimnis jedes geteilten Kontos hat ein bekanntes Zuhause, erreichbar für zwei Administratoren.
- Niemand braucht das Geheimnis, um einen Code zu bekommen.
- Der Zugang wird je Person, je Konto gewährt und ist mit einer Handlung entziehbar.
- Codeabrufe werden protokolliert, während sie geschehen.
- Die Wiederherstellungscodes liegen beim Geheimnis, außerhalb des Kontos, das sie wiederherstellen.
- Die Uhren sind überall synchron, wo Codes erzeugt werden.
- Der Wiederherstellungsweg wurde einmal absichtlich getestet.
- Bei jedem Konto, dessen QR-Code je geteilt wurde, ist die 2FA zurückgesetzt worden.
Häufige Fragen
TOTP, für „time-based one-time password“, ist der in RFC 6238 spezifizierte Algorithmus, der ein geteiltes Geheimnis und die aktuelle Uhrzeit in einen kurzen Code verwandelt, meist sechs Ziffern, rund dreißig Sekunden gültig. Das Konto und die Authenticator-App halten dasselbe Geheimnis: Sie berechnen also denselben Code, ohne etwas auszutauschen.
OTP ist die allgemeine Kategorie, ein Einmalpasswort. TOTP ist eine Art, eines zu erzeugen, aus einem geteilten Geheimnis und der aktuellen Uhrzeit. Es gibt andere: HOTP zählt die Verwendungen statt der Zeit, und per SMS oder E-Mail geschickte Codes sind übermittelte statt berechnete Einmalpasswörter. TOTP ist eine Art OTP, keine Alternative zu OTP.
Beide leiten einen Code aus demselben geteilten Geheimnis ab. HOTP (RFC 4226) nutzt einen Zähler, der bei jeder Verwendung hochzählt: Die beiden Seiten laufen auseinander, sobald eine Codes erzeugt, die die andere nie sieht. TOTP (RFC 6238) ersetzt diesen Zähler durch die aktuelle Uhrzeit in Schritten von dreißig Sekunden, was das Synchronisationsproblem beseitigt und den Codes ein Verfallsdatum gibt. Fast alle Authenticator-Apps, denen Sie begegnen, machen TOTP.
Ja für das, wogegen es gebaut ist: wiederverwendete Passwörter, Credential Stuffing und geleakte Passwortdatenbanken. Es hält niemanden auf, der einen Code in Echtzeit von einer überzeugenden gefälschten Anmeldeseite weiterreicht, und es hilft nicht, wenn das Geheimnis selbst kopiert wurde. Behandeln Sie es als guten zweiten Faktor, nicht als Identitätsnachweis.
Ja. Jedes Gerät, das dasselbe Geheimnis mit einer richtigen Uhr hält, erzeugt dieselben sechs Ziffern. Deshalb lässt sich TOTP teilen, und deshalb ist das Teilen des Geheimnisses endgültig: Es gibt keine Registrierung pro Gerät, die man entziehen könnte.
Die Codes werden abgelehnt. TOTP leitet den Code aus der aktuellen Uhrzeit ab: Ein Gerät oder Server, der mehr als etwa eine Minute abweicht, erzeugt die Codes des falschen Schritts. Alles, was für ein Team Codes erzeugt, muss seine Uhr synchron halten.
Nicht schrittweise. Das Protokoll sieht keinen Rotationsmechanismus vor: Sie schalten die 2FA am Konto ab und richten sie neu ein, was alle Kopien des alten Geheimnisses ungültig macht und alle, die die Codes brauchen, zur Neueinrichtung zwingt. Das ist der einzige verfügbare echte Entzug.
Die meisten nutzen SHA-1, sechs Ziffern und einen Schritt von dreißig Sekunden, die Voreinstellungen. Eine Minderheit weicht ab, mit acht Ziffern, einer Periode von sechzig Sekunden, fünf Zeichen oder einer anderen Hashfunktion: Was ein Geheimnis speichert, muss also seine Parameter daneben speichern, nicht nur die Zeichenkette des Geheimnisses.
Weiterlesen · So funktioniert TOTP
Wie TOTP-Geheimnisse funktionieren (und warum man sie nicht teilen sollte)
Was ein TOTP-Geheimnis ist, wo sich seine Kopien lautlos ansammeln, und die genaue Reihenfolge zum Zurücksetzen eines Kontos, dessen Geheimnis schon zirkuliert ist.
Zwei-Faktor-Authentifizierung: Definition und Funktionsweise
Was Zwei-Faktor-Authentifizierung ist, wie sie ein Konto schützt, welche Verfahren es gibt und warum nicht jede Form von 2FA gleich viel wert ist.