Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Sicherheit & Datenschutz 01.10.2026 · 10 min Lesezeit

2FA-QR-Generator: TOTP-Secret als QR-Code für Authenticator-Apps erzeugen

Aus einem TOTP-Secret einen QR-Code für die Authenticator-App erzeugen, den Live-Code prüfen, otpauth-Links importieren und jeden Code im Terminal mit Python nach RFC 6238 nachrechnen.

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Illustration des 2FA-QR-Generators mit Secret-Feld, QR-Code und sechsstelligem Code

Viele Dienste im Unternehmen bieten eine Zwei-Faktor-Anmeldung an, liefern aber nur ein Secret als Zeichenkette statt eines QR-Codes: ein selbst gehostetes Monitoring, ein Router, ein Admin-Konto, das Sie für eine Kollegin auf einem neuen Smartphone einrichten wollen. Der 2FA-QR-Generator auf s-edv.com/tools/2fa-qr macht aus einem TOTP-Secret einen scanbaren QR-Code für Authenticator-Apps, zeigt zur Kontrolle den aktuellen Einmalcode, liest vorhandene otpauth-Links ein und speichert den Code als PNG. Diese Anleitung richtet sich an Administratoren und IT-Verantwortliche in kleinen und mittleren Unternehmen. Sie erklärt kurz, wie TOTP funktioniert, zeigt jede Funktion so, wie sie im Browser tatsächlich arbeitet, und wie Sie die Codes im Terminal unabhängig nachrechnen.

Voraussetzungen

  • Einen aktuellen Browser mit JavaScript. Die Seite rechnet die Codes über die Web-Crypto-Schnittstelle, die eine HTTPS-Verbindung voraussetzt. Eine Anmeldung ist nicht nötig.
  • Ein eigenes, vertrauenswürdiges Gerät. Wer das Secret kennt, kann alle künftigen Codes erzeugen. Nutzen Sie das Tool nie an einem fremden oder öffentlichen Rechner.
  • Ein Smartphone mit einer Authenticator-App, etwa Google Authenticator, Microsoft Authenticator, Aegis oder die TOTP-Funktion eines Passwortmanagers.
  • Für die Gegenprobe ein Terminal mit Python 3 (Standardbibliothek genügt) und eine synchronisierte Systemuhr.
  • Zugriff auf die 2FA-Einstellungen des Dienstes, für den Sie den Code einrichten.

Kurz zur Technik: TOTP (Time-based One-Time Password, RFC 6238) baut auf HOTP aus RFC 4226 auf. Dienst und App kennen dasselbe Secret. Beide teilen die aktuelle Unix-Zeit durch die Periode, meist 30 Sekunden, und erhalten einen Zähler. Aus Zähler und Secret entsteht ein HMAC, standardmäßig mit SHA-1, der auf sechs Ziffern gekürzt wird. Stimmen Secret und Uhrzeit, kommt auf beiden Seiten dieselbe Zahl heraus, ohne Verbindung zwischen App und Server. Das Secret wird in Base32 geschrieben: nur die Buchstaben A bis Z und die Ziffern 2 bis 7.

Schritt 1: Tool öffnen und ein Secret eintragen

Öffnen Sie s-edv.com/tools/2fa-qr. Oben stehen die Hinweise „Läuft komplett in Ihrem Browser“, „Keine Daten an einen Server“ und „Ohne Anmeldung, ohne Tracking“. Im Bereich „Secret und Konto“ haben Sie drei Wege:

  • Secret vom Dienst: Kopieren Sie die Zeichenkette aus der 2FA-Einrichtung des Dienstes in „Secret (Base32)“. Kleinbuchstaben, Leerzeichen und Bindestriche stören nicht; aus jbsw y3dp-ehpk 3pxp wird im Link JBSWY3DPEHPK3PXP. Auch angehängte Gleichheitszeichen entfernt das Tool.
  • Neues Secret: „Zufälliges Secret (160 Bit)“ erzeugt 32 Base32-Zeichen mit dem Zufallsgenerator des Browsers (crypto.getRandomValues). Das ist sinnvoll, wenn Sie selbst die Serverseite einrichten, etwa für ein eigenes Skript oder einen PAM-Login.
  • Ausprobieren: „Beispiel laden“ füllt das Secret GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ, den Aussteller „Beispiel GmbH“ und das Konto „erika@example.com“ ein.

Das Feld ist zunächst verdeckt. Über das Augensymbol („Secret anzeigen“ bzw. „Secret verbergen“) schalten Sie die Anzeige um. Neben der Feldbeschriftung erscheint die Schlüssellänge, etwa „160 Bit“ oder „80 Bit“.

Verifizieren: Unter dem QR-Code steht „Bereit zum Scannen“, und die Bitangabe passt zur Länge: 16 Zeichen ergeben 80 Bit, 32 Zeichen 160 Bit. Im Terminal prüfen Sie das Secret so:

python3 -c 'import base64; print(len(base64.b32decode("GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ"))*8, "Bit")'
# 160 Bit

Schritt 2: Aussteller, Konto und Parameter festlegen

Tragen Sie unter „Aussteller“ den Dienst oder die Firma ein und unter „Konto“ zum Beispiel die E-Mail-Adresse. Beides erscheint später als Name des Eintrags in der App. Bei mehreren Admin-Konten lohnt ein eindeutiger Aussteller wie „Firma Monitoring“, damit niemand den falschen Code abtippt. Sonderzeichen sind kein Problem: Aus „Firma: Test & Co“ wurde im Test korrekt Firma%3A%20Test%20%26%20Co im Link.

Unter „Erweitert: Algorithmus, Stellen, Periode“ wählen Sie „SHA-1“, „SHA-256“ oder „SHA-512“, „6“ oder „8“ Stellen und „30 s“ oder „60 s“. Weichen Sie vom Standard ab, erscheint der Hinweis „Abweichend vom Standard (SHA-1, 6 Stellen, 30 s)“. Den sollten Sie ernst nehmen: Viele Apps werten diese Angaben nicht aus, rechnen mit den Standardwerten und zeigen dann falsche Codes. Ändern Sie die Werte nur, wenn der Dienst es ausdrücklich verlangt. SHA-1 gilt für HMAC weiterhin als ausreichend, weil die bekannten Kollisionsangriffe auf SHA-1 HMAC nicht direkt betreffen.

Verifizieren: Der otpauth-Link unter dem QR-Code enthält Ihre Werte, etwa algorithm=SHA1&digits=6&period=30. Bei verborgenem Secret ist es dort durch Punkte maskiert; der Kopierknopf „otpauth-Link kopieren“ übernimmt laut Hinweis den vollständigen Link.

Schritt 3: QR-Code scannen und Live-Code vergleichen

Öffnen Sie die Authenticator-App, wählen Sie das Hinzufügen per QR-Code und scannen Sie den Code vom Bildschirm. Der QR-Code enthält einen Link im Key-URI-Format, den praktisch alle Apps verstehen:

otpauth://totp/Beispiel%20GmbH:erika%40example.com?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Beispiel%20GmbH&algorithm=SHA1&digits=6&period=30

Rechts zeigt das Tool unter „Aktueller Code“ die gültigen Ziffern, einen Countdown „Sekunden bis zum nächsten Code“ sowie „Vorher“ und „Danach“. Die Nachbarcodes sind hilfreich, weil viele Server auch den Code des vorherigen Zeitfensters akzeptieren; RFC 6238 empfiehlt höchstens ein Fenster Abweichung. Mit „Code kopieren“ übernehmen Sie den aktuellen Code.

Im letzten Schritt der Einrichtung fragt der Dienst fast immer nach einem Code aus der App. Tippen Sie ihn ein, bevor der Countdown abläuft. Erst danach ist die Zwei-Faktor-Anmeldung aktiv.

Verifizieren: Der Code in der App muss mit „Aktueller Code“ übereinstimmen. Unabhängig vom Tool rechnen Sie ihn mit Python nach; die drei Werte entsprechen „Vorher“, „Aktueller Code“ und „Danach“:

python3 - <<'EOF'
import base64, hashlib, hmac, struct, time
s = "GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ"
k = base64.b32decode(s + "=" * (-len(s) % 8))
def totp(t, digits=6, period=30):
    h = hmac.new(k, struct.pack(">Q", int(t // period)), hashlib.sha1).digest()
    o = h[-1] & 15
    return str((struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 10**digits).zfill(digits)
now = time.time()
print([totp(now + d) for d in (-30, 0, 30)])
EOF

Für SHA-256 oder SHA-512 ersetzen Sie hashlib.sha1, für 8 Stellen oder 60 Sekunden die Parameter. Ist das Paket oathtool installiert, liefert oathtool --totp -b SECRET denselben Wert. Geben Sie dort keine produktiven Secrets ein, die in der Shell-History landen würden; ein führendes Leerzeichen verhindert das in vielen Bash-Konfigurationen.

Haben Sie bereits einen otpauth-Link, etwa von der Einrichtungsseite eines Dienstes oder aus dem Export einer App, fügen Sie ihn unter „Vorhandenen Link importieren“ in das Feld „otpauth-Link“ ein und klicken Sie auf „Übernehmen“. Das Tool füllt alle Felder aus und meldet „Link übernommen“. Im Test kamen Aussteller, Konto, Secret, SHA-256, 8 Stellen und 60 Sekunden korrekt an. So bringen Sie einen Eintrag auf ein Zweitgerät oder prüfen, was in einem fremden QR-Code steckt.

Nicht jeder Link funktioniert. Das Tool meldet:

  • „HOTP (zählerbasiert) wird hier nicht unterstützt, nur TOTP.“ bei otpauth://hotp/…
  • „Kein otpauth-Link. Erwartet wird otpauth://totp/…“ bei normalen Webadressen und beim Exportformat des Google Authenticator (otpauth-migration://)
  • „Der Link enthält kein Secret (Parameter secret).“, wenn der Pflichtparameter fehlt

Verifizieren: Nach „Übernehmen“ stehen die Werte in den Feldern, und der neu erzeugte otpauth-Link entspricht inhaltlich dem eingefügten. Der Live-Code muss mit dem Code des bestehenden App-Eintrags übereinstimmen.

Schritt 5: QR-Code als PNG sichern und aufräumen

„PNG herunterladen“ speichert den QR-Code als Bilddatei, deren Name aus dem Aussteller entsteht, im Test 2fa-beispiel-gmbh.png. Das hilft, wenn Sie einen Code auf einem zweiten Gerät scannen oder in eine interne Einrichtungsanleitung einbauen. Die Datei enthält das Secret im Klartext. Legen Sie sie nicht in Tickets, Chats oder unverschlüsselte Netzlaufwerke, sondern löschen Sie sie nach dem Scannen oder speichern Sie sie verschlüsselt, zum Beispiel als Anhang in einem Passwortmanager wie Vaultwarden.

„Leeren“ löscht Secret, Aussteller und Konto. Die Auswahl unter „Erweitert“ blieb im Test dabei erhalten; prüfen Sie sie vor dem nächsten Eintrag. Laut Seite speichert das Tool nichts: kein Verlauf, nichts in der Adresszeile, nach dem Schließen des Tabs ist alles weg.

Verifizieren: Nach „Leeren“ steht unter dem QR-Code „Geben Sie ein Secret ein oder erzeugen Sie ein zufälliges.“, der Knopf „PNG herunterladen“ ist deaktiviert, und die Adresszeile zeigt nur https://s-edv.com/tools/2fa-qr.

Typische Fehler

  • Code in der App weicht ab: Zuerst die Uhrzeit prüfen. Auf Linux-Servern zeigt timedatectl die Zeile „System clock synchronized: yes“, mit Chrony liefert chronyc tracking die Abweichung. Smartphones sollten die Zeit automatisch beziehen.
  • Abweichende Parameter: Der QR-Code nutzt 8 Stellen oder SHA-256, die App ignoriert das. Ergebnis: falsche Codes trotz richtiger Uhr. Auf den Standard zurückstellen, wenn der Dienst nichts anderes verlangt.
  • „Unzulässiges Zeichen „0““: Die Meldung ergänzt, dass Base32 nur die Buchstaben A bis Z und die Ziffern 2 bis 7 kennt, also keine 0, 1, 8 oder 9. Häufig ein abgetipptes O oder I. Secret neu kopieren statt abtippen.
  • „Die Länge des Secrets ist für Base32 ungültig. Vermutlich fehlt ein Zeichen oder eines ist zu viel.“: Das Secret wurde unvollständig kopiert.
  • Zu kurzes Secret: Das Tool erzeugt auch aus sehr kurzen Secrets Codes, im Test sogar aus sieben Zeichen mit 32 Bit, ohne Warnung. RFC 4226 verlangt mindestens 128 Bit und empfiehlt 160. Achten Sie selbst auf die Bitangabe neben dem Feld.
  • Google-Authenticator-Export lässt sich nicht importieren: Das Format otpauth-migration:// liest das Tool nicht.

Häufige Fragen

Wird das Secret an s-edv.com übertragen?

Laut Seite nein; Secret, QR-Code und Codes entstehen im Speicher der Seite. Im Test lud die Seite während aller Eingaben keine weiteren Ressourcen nach, und Browser-Speicher sowie Adresszeile blieben leer. Für hochkritische Konten können Sie das Secret dennoch direkt in der App eintippen statt einen QR-Code zu erzeugen.

Was unterscheidet TOTP von HOTP?

HOTP zählt bei jeder Code-Erzeugung einen Zähler hoch, TOTP leitet den Zähler aus der Uhrzeit ab. TOTP-Codes verfallen deshalb automatisch. Das Tool erzeugt ausschließlich TOTP.

Wie sichere ich mich gegen den Verlust des Smartphones ab?

Heben Sie die Wiederherstellungscodes des Dienstes auf oder legen Sie das Secret verschlüsselt im Passwortmanager ab. Wer 2FA-Konten zentral im eigenen Netz verwalten will, findet in der Anleitung zu 2FAuth mit Docker Compose eine Lösung.

Ersetzt TOTP Passkeys?

Nein. TOTP-Codes lassen sich auf gefälschten Anmeldeseiten abfangen, Passkeys und FIDO2-Schlüssel sind gegen Phishing resistent. TOTP ist trotzdem ein großer Fortschritt gegenüber dem reinen Passwort und wird fast überall unterstützt.

Testumfang

Das Tool wurde am 1. Oktober 2026 in einem aktuellen Chromium mit Beispiel-Secret, Zufalls-Secrets, allen Algorithmen, Stellen und Perioden, Fehleingaben und mehreren Import-Links ausprobiert. Die angezeigten Codes stimmten in allen Varianten mit einer eigenen Python-Berechnung nach RFC 6238 überein, die vorher am Testvektor aus dem RFC geprüft wurde. Der QR-Code ließ sich mit einem unabhängigen Decoder lesen und enthielt exakt den angezeigten otpauth-Link.

Fazit

Der 2FA-QR-Generator schließt eine typische Lücke im Admin-Alltag: Dienste, die nur ein Secret liefern, lassen sich damit bequem per QR-Code in jede Authenticator-App bringen. Besonders nützlich ist der Live-Code mit Vorher- und Danach-Wert, weil er die Einrichtung sofort bestätigt. Bleiben Sie beim Standard SHA-1, 6 Stellen und 30 Sekunden, achten Sie auf mindestens 128 Bit Schlüssellänge und behandeln Sie Secret und PNG wie ein Passwort. Wie Sie die Zwei-Faktor-Anmeldung im ganzen Unternehmen einführen, beschreibt die Anleitung Zwei-Faktor-Authentifizierung richtig einführen.

Weiterführende Anleitungen und Quellen

2FATOTPAuthenticatorQR-CodeTools