Passwörter - Theorie und Praxis
Zeitbasierte Einmalpasswörter
Auf Dauer empfinden Alice und Bob die zählerbasierten Einmalpasswörter doch als etwas unpraktisch. Denn sie müssen dabei ja immer Buch darüber führen, welches Passwort sie schon verwendet und damit "verbraucht" haben. Um sich also in Zukunft nicht mehr immer den Zählerstand merken zu müssen, wandeln sie ihr Verfahren wie folgt ab.
Sie nehmen einfach die aktuelle Uhrzeit und hängen diese statt des Zählers an ihr gemeinsames Geheimnis an. Anschließend berechnen sie dann den SHA1-Hashwert des sich ergebenden Strings. Auf diese Weise erhalten sie ein sogenanntes zeitbasiertes Einmalpasswort, welches nur für die exakte Uhrzeit gültig ist.
Da es allerdings unpraktisch ist, die sekundengenaue Uhrzeit zu verwenden, vereinbaren sie, dass das Einmalpasswort nur alle 30 Sekunden aktualisiert werden soll. In Python können sie das recht einfach wie folgt erreichen.
Die Funktion time() im Paket time liefert die vergangene Zeit in Sekunden seit dem 1.1.1970 um 0:00 Uhr zurück. Diese Zeit teilt man ohne Rest durch 30 Sekunden und wandelt das Ergebnis in einen String um und erhält so den sogenannten Zeitstempel:
import time
timestamp = str( time.time()//30 )
Anschließend konkateniert man den für jeweils 30 Sekunden gültigen Zeitstempel mit dem Geheimnis, berechnet von dem entstehenden String den SHA1-Hashwert und wandelt diesen anschließend, wie bereits im vorletzten Unterkapitel beschreiben, wieder in eine 6-stellige Zahl um:
geheimnis = "6jp1lzxn3szn5vrurxnzru2p6j"
int( hashlib.sha1((geheimnis+timestamp).encode('utf-8')).hexdigest(), 16) % 1000000
Das Ergebnis ist ein 6-stelliges Einmalpasswort, welches jeweils für Zeitintervalle von 30 Sekunden gültig ist.
Auf diese Weise können Alice und Bob sich nun authentifizieren, ohne sich dazu immer einen Zähler merken zu müssen.
Der Vollständigkeit halber noch einmal alles in einer Pythonzeile:
int( hashlib.sha1((geheimnis+str(time.time()//30)).encode('utf-8')).hexdigest(), 16) % 1000000
Aufgabe
Überzeuge dich davon, dass das zwischen Alice und Bob vereinbarte zeitbasierte Einmalpasswort tatsächlich für jeweils genau 30 Sekunden das gleiche bleibt und danach wechselt.