Ist der Google Authenticator Export QR sicher zu scannen?
Nur wenn Sie ihn selbst erstellt haben, auf Ihrem alten Telefon, mit Ihrem neuen Telefon direkt auf den Bildschirm gerichtet. Jeder, der diesen QR fotografiert – aus welchem Grund auch immer – erhält dauerhaften Zugriff auf jeden 2FA-Code für jedes Konto im Paket.
Google Authenticator und mehrere kompatible Apps (Aegis, Raivo OTP, 2FAS) ermöglichen den „Export" gespeicherter 2FA-Konten, um sie auf ein neues Gerät zu übertragen. Der Export erfolgt als QR mit einem URI, der mit otpauth-migration:// beginnt. Dieser URI enthält ein einzelnes Protocol-Buffer-Paket (Googles MigrationPayload-Schema) mit allen Konten gleichzeitig: Aussteller, Kontoname, Secret-Seed, Algorithmus, Stellenanzahl, Typ (HOTP / TOTP) und Zähler.
Das Format war ursprünglich undokumentiert, wurde jedoch durch Reverse Engineering erschlossen und ist inzwischen das De-facto-Austauschformat für 2FA-Backups. Drittanbieter-Authenticator-Apps erkennen und importieren denselben QR.
Ein QR kann Dutzende von Konten enthalten. Visuell ist er von einem normalen TOTP-Einrichtungs-QR nicht zu unterscheiden – es gibt kein sichtbares Merkmal, das einem flüchtigen Betrachter anzeigt, dass er das gesamte Paket trägt.
Warum ein einzelner Paket-QR besonders gefährlich ist
Ein normaler otpauth://-Setup-QR ist gefährlich zu scannen, wenn Sie ihn nicht angefordert haben – aber der Schaden beschränkt sich auf ein einziges Konto. Der Migrations-QR hat als potenzielle Schadenswirkung jedes Konto in Ihrem Authentifikator. Fotografiert jemand den Bildschirm, auf dem dieser QR angezeigt wird – über Ihre Schulter in einem Café, über eine Überwachungskamera, die Sie nicht bemerkt haben, durch ein durchsichtiges Glasfenster –, kann er dauerhaft die Zwei-Faktor-Authentifizierung für jedes abgedeckte Konto umgehen. Dauerhaft, bis Sie jedes Geheimnis manuell rotieren, was die meisten Dienste nicht einfach machen.
Die Secrets im Paket laufen nicht ab. Anders als ein Session-Token (der abläuft) oder ein Passkey-QR (der einmalig ist) sind die Seeds in einem Migrationspaket gültig, bis Sie sie Dienst für Dienst ersetzen.
Deshalb beginnt das Urteil unseres Scanners für jeden otpauth-migration://-QR bei likely_dangerous und bleibt dort, unabhängig vom Kontext. Das Format ist in Ordnung; das Bedrohungsmodell ergibt sich aus der bloßen Existenz des Formats.
Der Base64-Inhalt ist nach der Dekodierung ein MigrationPayload-Protocol-Buffer mit diesen Feldern auf oberster Ebene:
otp_parameters, wiederholt. Ein Eintrag pro Konto.
version, Schema-Version.
batch_size, Gesamtanzahl der Blöcke, wenn ein Export auf mehrere QRs aufgeteilt ist.
batch_index, Position dieses Blocks.
batch_id, eindeutige ID, die die Blöcke zusammenhält.
Jeder otp_parameters-Eintrag enthält:
secret, die rohen Seed-Bytes. Dies ist das eigentliche Schlüsselmaterial.
name, die Kontobezeichnung (z. B. alice@acme.com).
issuer, der Dienstname (z. B. ACME, GitHub).
algorithm, SHA1 / SHA256 / SHA512 / MD5.
digits, 6 oder 8 Ziffern pro Code.
type, TOTP (zeitbasiert) oder HOTP (zählerbasiert).
counter, aktueller Zählerwert für HOTP-Einträge.
Was unser Scanner anzeigt – und was er bewusst weglässt
✓ Angezeigt
Für jeden Eintrag im Paket zeigt das Urteil den Aussteller (ACME, GitHub, AWS), den Kontonamen (alice@acme.com), den Algorithmus (SHA1), die Stellenanzahl (6) und den Typ (TOTP). Die Urteilsanzeige lautet etwa „Enthaltene Konten: ACME / alice@acme.com; GitHub / bob@github; AWS / root; ..." – damit kann ein Nutzer, der sich mitten in einer Migration befindet, die Liste vor dem Import prüfen.
Schema-Version, Batch-Index, Batch-Größe und Batch-ID werden ebenfalls angezeigt – nützlich, wenn ein Export auf mehrere QRs aufgeteilt ist.
✗ Nie dekodiert
Die rohen secret-Bytes werden nie in die Urteilsausgabe dekodiert. Unser Analyzer liest sie nur, um zu prüfen, ob jeder Eintrag wohlgeformt ist (Secret vorhanden und nicht leer), und verwirft den Wert anschließend, bevor die Befunde erstellt werden.
Dies wird durch die Testsuite sichergestellt: Wir übergeben dem Analyzer handgefertigte Protobuf-Nutzlasten mit Canary-Strings (SECRET_SEED_1, SECRET_SEED_2) und prüfen, dass diese Strings nie in der serialisierten Urteilsausgabe erscheinen. Eine Regression dort schlägt im CI fehl.
Wann (und wie) man einen verwendet
Legitimer Anwendungsfall: Sie wechseln von einem Telefon auf ein anderes. Das ALTE Telefon zeigt den Migrations-QR für ca. 30 Sekunden auf dem Bildschirm. Die Authenticator-App des NEUEN Telefons wird auf den Bildschirm gerichtet und importiert die Daten. Niemand sonst ist im Raum. Sie löschen den Export vom alten Telefon, nachdem Sie alles importiert haben.
Die Gefahrenquellen sind:
Screenshots des QR. Ein Screenshot, der in cloudsynchronisierten Fotos gespeichert wird, verbreitet den QR auf jedes mit diesem Konto synchronisierte Gerät.
Den QR über einen Chat teilen. Auch kurzzeitig – jeder mit Zugang zum Chat (jetzt oder später) kann das Paket extrahieren.
Den QR in einem Hilfeforum-Thread posten. Das passiert häufiger als man denkt: Menschen bitten um Hilfe und veröffentlichen versehentlich ein Foto ihres Authentifikator-Exports.
Öffentliche Plakate / Schilder, die fälschlicherweise als Setup-QRs identifiziert werden. Das Format ist visuell von einem Einzelkonto-Setup-QR nicht zu unterscheiden.
Wenn Sie vermuten, dass ein Migrations-QR kompromittiert wurde
Behandeln Sie es als Datenleck für jedes Konto im Paket. Die Wiederherstellungsschritte in der richtigen Reihenfolge:
Melden Sie sich bei jedem betroffenen Dienst an und erneuern Sie das 2FA-Secret. Bei den meisten Diensten ist dies unter Konto → Sicherheit → Zwei-Faktor-Authentifizierung → Deaktivieren, dann neu registrieren möglich.
Bei Diensten ohne Rotationsmöglichkeit (selten, aber vorhanden): Konto entfernen und neu hinzufügen.
Überprüfen Sie die letzten Anmeldeaktivitäten bei jedem betroffenen Konto.
Löschen Sie den ursprünglichen Export-QR von jedem Gerät und jeder cloud-synchronisierten Fotobibliothek, die ihn möglicherweise enthält.
Ein Angreifer mit dem Paket kann jahrelang gültige 2FA-Codes erzeugen, bis Sie rotieren. Nicht aufschieben.
Laden Sie das QR-Bild in unseren Scanner, fügen Sie den otpauth-migration://-URI ein oder nutzen Sie die Kamera. Das Urteil zeigt jedes Konto im Paket, ohne die Secrets jemals zu dekodieren.