Technische Details – TOTP Authentifizierung
1. Grundprinzipien von TOTP
Die Time-based One-Time Password (TOTP)-Authentifizierung ist eine Methode der Zwei-Faktor-Authentifizierung (2FA), die auf kryptographischen Prinzipien basiert und die aktuelle Zeit als dynamischen Faktor nutzt, um temporäre Einmalpasswörter zu generieren. TOTP ist eine Erweiterung des HMAC-based One-Time Password (HOTP)-Algorithmus und wurde im RFC 6238 standardisiert.
Hauptbestandteile
- Shared Secret (K): Ein kryptographisch sicherer, geheimer Schlüssel, der zwischen Client und Server geteilt wird.
- Zeitbasierter Zähler (T): Ein Wert, der aus der aktuellen Unix-Zeit und einem Zeitintervall abgeleitet wird.
- Kryptographische Hash-Funktion: Typischerweise HMAC-SHA-1.
- Dynamische Truncation: Ein Verfahren, um aus dem Hash-Wert ein numerisches Passwort zu extrahieren.
2. Mathematischer und kryptographischer Ablauf
Schritt 1: Zeitbasierter Zähler (T)
Der Zeitbasierte Zähler wird aus der aktuellen Zeit berechnet:
- T0: Startzeitpunkt (Unix-Epoch, standardmäßig 0).
- TS: Zeitintervall (Time Step), standardmäßig 30 Sekunden.
- T: Aktueller Zählerwert, berechnet als:
\[ T = \left\lfloor \frac{\text{UnixTime(now)} - T_0}{TS} \right\rfloor \]
- UnixTime(now): Aktuelle Unix-Zeit in Sekunden.
- \(\left\lfloor \cdot \right\rfloor\): Abrundungsfunktion (Floor).
Beispiel: Am 12. März 2025, 22:19 UTC, beträgt die Unix-Zeit etwa 1.742.917.140 Sekunden. Bei \(T_0 = 0\) und \(TS = 30\): \[ T = \left\lfloor \frac{1.742.917.140}{30} \right\rfloor = 58.097.238 \] Dieser Wert \(T\) ändert sich alle 30 Sekunden.
Schritt 2: HMAC-Berechnung
TOTP basiert auf dem HMAC-Algorithmus:
\[ \text{HMAC}(K, T) = \text{SHA-1}(K \oplus \text{opad} || \text{SHA-1}(K \oplus \text{ipad} || T)) \]- \(K\): Geheimer Schlüssel.
- \(T\): Zeit-Zähler als 64-Bit-Integer.
- \(\oplus\): Bitweises XOR.
- \(||\): Verkettung.
- ipad: 0x36 (64-mal).
- opad: 0x5c (64-mal).
Der HMAC erzeugt einen 20-Byte (160-Bit) Hash-Wert, der deterministisch und kollisionsresistent ist.
Schritt 3: Dynamische Truncation
Der 20-Byte-Hash wird gekürzt:
- Offset \(O\) aus dem letzten Byte: \[ O = \text{HMAC}[19] \& 0x0F \]
- 4 Bytes ab Offset \(O\): \[ \text{Bytes} = \text{HMAC}[O:O+4] \]
- 31-Bit-Wert: \[ I = (\text{Bytes}[0] \& 0x7F) \ll 24 \, | \, (\text{Bytes}[1] \& 0xFF) \ll 16 \, | \, (\text{Bytes}[2] \& 0xFF) \ll 8 \, | \, (\text{Bytes}[3] \& 0xFF) \]
Schritt 4: OTP-Generierung
Der 31-Bit-Wert \(I\) wird modulo \(10^d\) genommen: \[ \text{TOTP} = I \mod 10^d \] Beispiel: Wenn \(I = 1.234.567\) und \(d = 6\): \[ \text{TOTP} = 1.234.567 \mod 1.000.000 = 234.567 \]
Schritt 5: Verifikation
Der Server vergleicht das berechnete TOTP mit dem eingegebenen Code, oft mit Toleranz für benachbarte Zeitfenster (\(T-1\), \(T+1\)).
3. Kryptographische Sicherheit
Sicherheitsmerkmale
- Symmetrische Kryptographie: Sicherheit hängt vom Shared Secret ab.
- Zeitliche Begrenzung: 30 Sekunden erschweren Brute-Force-Angriffe.
- HMAC-SHA-1: Für HMAC ausreichend sicher.
Schwachstellen
- Phishing: Codes können in Echtzeit abgefangen werden.
- Shared Secret: Bei Kompromittierung unsicher.
- Clock Drift: Zeitabweichungen können Probleme verursachen.
4. Implementierung in Authentifizierungs-Apps
Proprietäre Apps
- Google Authenticator: Einfach, nur TOTP mit SHA-1, keine Cloud.
- Authy: Cloud-Backup, Multi-Device-Synchronisation.
Open-Source-Apps
- Aegis: Android, lokal verschlüsselt, TOTP/HOTP.
- Stratumauth: Minimalistisch, Offline, Android.
- FreeOTP: Red Hat, TOTP/HOTP, einfach.
- X1nto/Mauth: iOS, Open Source, Backup-Optionen.
5. Vergleich und praktische Aspekte
Vorteile von TOTP
- Offline-Fähigkeit, Standardisierung, Benutzerfreundlichkeit.
Unterschiede zwischen Apps
- Sicherheit: Aegis/FreeOTP lokal, Authy Cloud.
- Flexibilität: FreeOTP/Aegis anpassbarer.
- Plattform: X1nto/Mauth iOS-spezifisch.
6. Fazit
TOTP ist ein robustes Verfahren, das auf HMAC und zeitlicher Synchronisation basiert. Es bietet Sicherheit und Flexibilität, unterstützt durch Apps wie Google Authenticator, Authy und Open-Source-Alternativen wie Aegis, Stratumauth, FreeOTP und X1nto/Mauth.