Einmal-Passwörter
Autor : Gerd Raudenbusch
Stand : 11.11.2024
Einmal-Passwörter stellen eine effektive Methode zur Verbesserung der Sicherheit in digitalen Anwendungen dar. Denn selbst, wenn das Einmal-Passwort mitgelesen werden konnte, ist es nach wenigen Sekunden ungültig. Auch als zweiter Faktor durch die Kombination von etwas, das der Benutzer weiß (sein Passwort), mit etwas, das er besitzt (den zeitbasierten Einmalcode), wird eine robuste Authentifizierung erreicht.
Inhalt
- Einführung
- Vorgehen
- TOTP-Token erstellen
- Einmal-Passwort erzeugen
- Die OTPauth-URL
- QR-Code erstellen
- QR-Code lesen
- TOTP-Authenticatoren
Einführung
Das Time-based One-Time Password (TOTP) hat sich als Standard etabliert. TOTP ist ein Algorithmus zur Generierung von zeitlich begrenzten Einmalpasswörtern (One-Time Passwords, OTP), die in der Regel alle 30 Sekunden wechseln. Das Verfahren basiert auf einem geheimen Schlüssel und der aktuellen Zeit, um einen temporären Code zu erzeugen, der für eine kurze Zeit gültig ist.
TOTP findet Anwendung in verschiedenen Bereichen, insbesondere:
- Zwei-Faktor-Authentifizierung (2FA): Bei der Anmeldung muss der Benutzer neben seinem Benutzernamen und Passwort auch den TOTP-Code eingeben, was einen zusätzlichen Schutz gegen unbefugten Zugriff bietet.
- Sichere Online-Dienste: Viele Online-Plattformen, darunter Banken und Cloud-Dienste, setzen TOTP ein, um die Sicherheit ihrer Benutzerkonten zu erhöhen.
- VPN-Zugänge: TOTP wird auch zur Authentifizierung bei virtuellen privaten Netzwerken (VPNs) verwendet, um sicherzustellen, dass nur autorisierte Benutzer Zugang erhalten.
Die Generierung eines TOTP-Codes erfolgt durch die Kombination eines geheimen Schlüssels (Token) und der aktuellen Zeit. Der Algorithmus verwendet die Unixzeit, die in Sekunden seit dem 1. Januar 1970 gemessen wird. Diese Zeit wird in Intervalle unterteilt, typischerweise 30 Sekunden. Innerhalb jedes Intervalls wird ein Hash-Wert erzeugt, der dann in einen sechs- oder achtstelligen Code umgewandelt wird.
Die Schritte zur Erstellung eines TOTP-Codes sind wie folgt:
- Geheimer Schlüssel: Ein geheimer Schlüssel wird bei der Einrichtung des TOTP-Systems generiert und zwischen dem Server und dem Benutzergerät geteilt.
- Zeitintervall: Die aktuelle Zeit wird in Intervalle unterteilt (z.B. alle 30 Sekunden).
- Hashing: Der geheime Schlüssel und das aktuelle Zeitintervall werden durch einen Hash-Algorithmus (z.B. HMAC-SHA1) verarbeitet.
- Code-Generierung: Der resultierende Hash wird bearbeitet, um einen temporären Code zu erzeugen, der für die Authentifizierung verwendet werden kann.
Vorgehen
- Mit
pyotp
kann man beliebige, neue TOTP-Tokens erstellen - Damit kann man eine OTPAuth-URL zusammenbauen.
- Mit
qrencode
kann man für diese URL einen QR-Code erstellen - Die OTPAuth-URL oder der QR-Code lassen sich in einen beliebigen TOTP-Authenticator importieren
- In der eigenen Anwendung lässt sich auf Basis des TOTP-Tokens mit
oathtool
das aktuelle Einmal-Passwort erzeugen, um es mit den Eingaben des Benutzers aus seinem Authenticator zu vergleichen und deren Gültigkeit zu validieren, um beliebige Zugriffe und Operationen zu gewähren.
TOTP-Token erstellen
Um einen neuen privaten TOTP-Token zu würfeln, empfiehlt sich pyotp
. Es kann als python3-Modul mit pip3 install pyotp
installiert werden.
Zum Würfeln eines neuen Tokens dient der Befehl
python -c "import pyotp; secret_key = pyotp.random_base32(); print('(}'.format(secret_key))"
Einmal-Passwort erzeugen
Um aus dem privaten TOTP-Token ein Einmal-Passwort zu erzeugen, kann oathtool
verwendet werden, welches man mit sudo apt install oathtool
installieren kann. Anschließend erzeugt der folgende Befehl ein neues Einmal-Passwort inform eines sechsstelligen TOTP-Codes :
oathtool --base32 --totp <token>
Die OTPauth-URL
Die OTPauth-URL ist ein spezielles Format, das von den Authenticator-Apps, verwendet wird, um ein One-Time-Password (OTP) zu generieren. Die OTPauth-URL besteht aus verschiedenen Parametern, die wie folgt aufgebaut sind:
otpauth://<scheme>?<type>&<secret>&<label>&<issuer>&<period>&<counter>
scheme
: Der URI-Schema-Name, der hierotpauth
ist.type
: Der Typ des OTP-Verfahrens, entwedertotp
für Time-Based OTP oderhotp
für Counter-Based OTP.secret
: Das geheime Schlüsselwort (Token), das als Base32-kodiertes String-Wertpaar übertragen wird.label
: Ein eindeutiger Bezeichner für die Kreditkarte, der aus dem Dienst (Issuer) und dem Account-Namen besteht. Wenn kein Dienst angegeben wird, wird nur der Account-Namen verwendet.issuer
: Der Name des Dienstes oder Providers, dem die Kreditkarte zugeordnet ist. URL-encodiert nach RFC 3986.period
(optional): Die Gültigkeitsdauer in Sekunden für das TOTP-Code.counter
(optional): Der Initialzählerwert für HOTP-Kreditkarten.
Ein Beispiel für eine OTPauth-URL könnte wie folgt aussehen:
otpauth://totp/OpenVPN?secret=4LRW4HZQCC52QP7NIEMCIT4FXYOLWI75&label=OpenVPN&issuer=OpenVPN
Diese URL enthält den Scheme otpauth
, den Typ totp
, das geheime Schlüsselwort 4LRW4HZQCC52QP7NIEMCIT4FXYOLWI75
, den Label OpenVPN
und den Issuer OpenVPN
.
QR-Code erstellen
Um einen QR-Code aus einer beliebiggen Zeichenkette zu erstellen, kann qrencode
verwendet werden, welches man mit sudo apt install qrencode
installieren kann. Den QR-Code erzeugt man als Bild im png
-Format mit dem Befehl :
qrencode -o ./<bildname>.png '<URL>'
QR-Code lesen
Um den Text eines QR-Codes zu lesen, empfiehlt sich das Tool zbarcam
, welches man mit sudo apt install zbarcam
installiert. Der Befehl zum Auslesen lautet :
zbarcam -1 >./<dateiname>.txt
TOTP-Authenticatoren
Ein TOTP-Authenticator ist eine Software oder Anwendung, die das Verfahren des Time-based One-Time Password (TOTP) implementiert, indem sie die geheimen TOTP-Token inform von OTPauth-URLs oder QR-Codes installiert und für jeden Eintrag das aktuelle Einmal-Passwort anzeigt.
Es ist nicht notwendig, dafür Authenticatoren von großen Herstellern zu verwenden. Außerdem beherrschen Passwort-Manager, wie KeepassXC diese Funktion ebenso.
Die folgenden Authenticatoren sind kostenlos, quelloffen und herstellerunabhängig, und sie unterstützen den Import und Export von OTPauth-URLs und QR-Code :
Plattform | Name | Download-URL |
---|---|---|
Linux | Authenticator | Authenticator auf GitHub |
Linux, Windows, macOS | Authy | Authy auf authy.com |
Linux, Windows, macOS | 2fast | 2fast auf GitHub |
Android | Aegis Authenticator | Aegis auf GitHub |
Android, iOS | FreeOTP | FreeOTP auf GitHub |
Android | andOTP | andOTP auf GitHub |
iOS | Raivo OTP | Raivo OTP auf GitHub |