HOTP setzt auf einen Zähler als zweiten Bestandteil der Funktion. Diesen teilen Server und Nutzer miteinander. Das Problem dabei ist, dass das generierte Passwort so lange gültig ist, bis es verwendet wurde. TOTP schränkt dies ein: Nur innerhalb eines festgelegten Zeitrahmens kann der so erstellte Code eingesetzt werden. Wie funktioniert das?
Für den Time-based-One-time-Algorithmus sind drei Formeln von Bedeutung:
TOTP = HOTP(SecretKey,CurrentTime)
Diese einfache Formel legt nur fest, dass TOTP ein HOTP-Verfahren mit den beiden Parametern SecretKey und CurrentTime ist:
- SecretKey: zufällig erzeugtes Passwort, das sowohl Server als auch Client bekannt ist
- CurrentTime: aktueller Zeitpunkt in Unixzeit
Die Zeitangabe ändert sich allerdings sekündlich. Das ist nicht genug Zeit, um den Code in die Anwendung zu übertragen. Eine Sekunde später wäre das TOTP schon nicht mehr gültig: Der Server hat bereits einen neuen Hashwert erstellt. Deshalb greift man auf eine weitere Formel zurück:
CurrentTime = floorunixtime(now) – unixtime(T0/T1)
Der Parameter CurrentTime wird also definiert:
- unixtime(now): aktueller Zeitpunkt in Unixzeit
- unixtime(T0): Unixzeit zum Zeitpunkt T0, ab dem gezählt wird – also in den meisten Fällen der 1.1.1970 um Mitternacht (= 0)
- T1: Intervall, in dem das TOTP gültig sein soll – üblicherweise 30 Sekunden
- floor: Abrundungsfunktion, um den errechneten Wert auf eine ganze Zahl zu runden