Passwörter - Theorie und Praxis
Time-based One-time Password (TOTP)
In tatsächlichen Anwendungen wird das im vorletzten Abschnitt beschriebene zählerbasierte HOTP-Verfahren abgewandelt, indem vor dem Bilden des HMAC-Hashwertes statt des Zählers einfach der Zeitstempel aus dem letzten Abschnitt angehängt wird.
Damit erhält man das sogenannte Time-based One-time Password (TOTP) Verfahren, indem man das im vorletzten Abschnit behandelte Python-Programm wie folgt um um die (einzeilige) Funktion totp
ergänzt:
import hashlib, array, base64, hmac, time
def hotp(secret, counter, digits=6):
# Umkodierung secretvon utf-8 in base32
base32_secret = base64.b32decode(bytes(secret, 'utf-8'))
# Kodierung von counter in bytes
byte_counter = counter_2_bytes(counter)
# Bilde hmac-Hashwert
hmac_sha1 = hmac.new(base32_secret, byte_counter, hashlib.sha1).hexdigest()
# Extrahiere aus hmac-Hashwert ein Integerwert
# und gebe dessen letzte <digts> Stellen zurueck
return hmac_2_digits(hmac_sha1)[-digits:]
def counter_2_bytes(counter):
byte_counter = array.array('B')
for i in reversed(range(0, 8)):
byte_counter.insert(0, counter & 0xff)
counter >>= 8
return byte_counter
def hmac_2_digits(hmac_sha1):
offset = int(hmac_sha1[-1], 16)
binary = int(hmac_sha1[(offset * 2):((offset * 2) + 8)], 16) & 0x7fffffff
return str(binary)
def totp(secret):
return hotp(secret, int(time.time())//30, 6)
# TOTP
secret='MZXW633PN5XW6MZX'
print( totp(secret) )
Aufgabe 1
Erzeuge mit dem obigen Python-Programm ein gültiges TOTP und kontrolliere es mittels App auf einem Mobiltelefon.
Dazu kannst du, wie bereits weiter oben erwähnt die kostenlose App FreeOTP (Android, iPhone) verwenden. Unter Android kannst du auch die ebenfalls kostenlose App andOTP verwenden. Beide Apps findest du auch im F-Droid-Appstore.
Aufgabe 2
Finde heraus, was in dem folgenden QR-Code kodiert ist:
Aufgabe 3
Warum lassen durch eine Angreiferin abgefangene TOTP keinen Rückschlüsse auf das Geheimnis zu?