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:

  1. Besitz gilt als dauerhafter Zugang. Wer das Geheimnis hat, kann alle künftigen Codes erzeugen, auf jedem Gerät, für immer.
  2. Kopien sind unsichtbar. Keine Sicherheitsseite wird Ihnen je sagen, wie viele es gibt.
  3. 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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

Weiterlesen · So funktioniert TOTP