Passwörter - Theorie und Praxis
Zählerbasierte Einmalpasswörter
Sowohl Alice als auch Bob mögen gerne Informatik. Daher wählen sie eine etwas technische Lösung, die aber den Vorteil hat, dass sie sich auch auf die Kommunikation im Internet übertragen lässt.
Um sich gegenseitig zu authentifizieren, vereinbaren Alice und Bob zunächst ein gemeinsames Geheimnis in Form einer zufällig generierten Zeichenkette:
geheimnis = "6jp1lzxn3szn5vrurxnzru2p6j"
Anschließend tauschen sie dieses Geheimnis auf einem sichern Kommunikationskanal aus und verraten es niemandem sonst.
Nun können sie beliebig viele Einmalpasswörter generieren, indem sie jeweils eine natürliche Zahl als Zähler an das Geheimnis anhängen und anschließend den SHA1-Hashwert der entstehenden Zeichenkette bilden.
Für das erste Einmalpasswort erhalten sie damit also in Pseudocode:
sha1(geheimnis+"1")
= sha1(6jp1lzxn3szn5vrurxnzru2p6j1)
= '78ac011bbc1a46fb9863dcf9d9bbf415c4b24c6f'
Praktische Berechnung von SHA1-Haswerten
1. GNU/Linux-Shell:
echo -n 'qwertz' | sha1sum
2. Python:
import hashlib
hashlib.sha1("qwertz".encode('utf-8')).hexdigest()
3. Suchmaschine DuckDuckGo:
Im Suchfeld zum Beispiel eingeben: sha1 qwertz
Extraktion des Einmalpassworts
Da ein solcher Hashwert jedoch am Telefon etwas umständlich vorzulesen ist, erweitern sie ihr Verfahren noch wie folgt. Der SHA1-Hashwert ist ja ohnehin bereits die hexadezimale Darstellung einer Zahl. Deshalb rechnen sie diese Zahl in ihre dezimale Darstellung um und nehmen einfach die letzten 6 Stellen dieser Zahl als ihr Einmalpasswort.
Mit Python geht das wie folgt:
int('78ac011bbc1a46fb9863dcf9d9bbf415c4b24c6f', 16) % 1000000
= 688914717222949151341896154013744225868831673455 % 1000000
= 673455
Damit bekommen sie als erstes Einmalpasswort also die sechsstellige Zahl "673455", welche sie am Telefon bequem vorlesen können.
Zusammenfassung
Mit Python erhält man das zeitbasierte Einmalpasswort in einem Schritt mit der folgenden Zeile:
int( hashlib.sha1((geheimnis+"1").encode('utf-8')).hexdigest(), 16) % 1000000
= 673455
Anmerkung
Aufgrund der Entwicklung immer schnellerer Rechner entspricht das SHA1-Verfahren nicht mehr den heutigen Anforderungen an ein sicheres Hashverfahren. Es wurde im obigen Beispiel lediglich zur Illustration der prinzipiellen Funktionsweise von zählerbasierten Einmalpasswörtern verwendet.
In tatsächlichen Anwendungen wird die SHA1-Hashfunktion durch die sogenannte HMAC-Hashfunktion ersetzt, worduch sich das sogenannte HMAC-based One-time Password (HTOP) ergibt, welches in dem folgenden Unterabschnitt behandelt wird.
Aufgabe 1
Mit dem Index 16 sei die hexadezimale Darstellung, mit dem Index 10 die dezimale Darstellung einer Zahl bezeichnet. Rechne um:
$$1fa_{16} = ?_{10}$$ $$762_{10} = ?_{16}$$ $$45054_{10} = ?_{16}$$Aufgabe 2
Berechne das 42. Einmalpasswort von Alice und Bob.