Was macht man, wenn man sich von einem nicht-vertrauenswürdigen Rechner auf einem anderen Rechner einloggen möchte, ohne das Risiko einzugehen, sein eigenes Passwort zu kompromitieren? Die Frage klingt theoretisch, aber angenommen man ist unterwegs und möchte schnell mal aus einem Internetcafé seine Mails überprüfen? Kann man den Rechnern dort trauen? Weiß man, dass dort kein Keylogger mitläuft? Will man dieses Risiko tatsächlich eingehen?
Das Risiko schwindet, wenn man sogenannte Einmalpasswörter verwendet. Den Versuch einer Standarisierung hat das IETF mit RFC2289 unternommen. Das Prinzip ist einfach, wenn man sich auf dem System einloggen will, nennt das System ein paar Attribute, aus denen man sich z.B. auf seinem Handy das passende Einmalpasswort erzeugt, um sich auf diesem System einzuloggen. Ein vertrauenswürdiges System wie ein Handy ist hilfreich, aber nicht notwendig. Man kann auch ein Satz Einmalpasswörter auf Papier vorhalten und dann das passende abtippen.
Thursday, 15. December 2005
Einmalpasswörter
Wie geht man nun vor? Zunächst einmal installiert man die passenden Pakete:
Natürlich braucht man auch hier ein Passwort, um später damit passende Einmalpasswörter generieren zu lassen. Z.B. hugo123
Hier wurde für den Benutzer chrisbra die Benutzung von Einmalpasswörtern eingestellt. Dazu wird ein Paar aus dem Hash des Passwortes sowie eines Zufallwertes (der Challenge bzw. Seed) erstellt. Der Seed lautet in diesem Fall ba9622, die fortlaufende Nummer 499. Diese Nummer identifiziert später das zu nutzende Einmalpasswort. Das passende Einmalpasswort für diese Nummer lautet SUNK YELL DOUG ROWS TUNG GRAB (Groß- und Kleinschreibung spielen keine Rolle).
Mithilfe der Nummer, dem Passwort und dem Seed ist es nachher möglich auf anderen Systemen dasselbe Einmalpasswort zu generieren. Man kann sich auch die verschiedenen Einmalpasswörter generieren, ausdrucken und von dann bei der Abfrage abtippen. Das geht z.B. so:
Hier wurden jetzt die passenden Einmalpasswörter für die Nummern 499 bis 495 generiert. Der Aufruf lautet: opiekey -n "Anzahl" "Nummer" "Seed" Bei jeder Abfrage nach dem Passwort wird die Nummer um eins verringert, so dass jedesmal ein anderes Passwort verlangt wird.
Um jetzt diese Passwörter z.B. mit SSH verwenden zu können, kann man in /etc/pam.d/common-auth für Debian das hier eintragen:
Diese Datei wird automatisch von /etc/pam.d/ssh (bei Debian) eingelesen und damit ermöglicht man die Nutzung von Einmalpasswörtern zum Authentifizieren.
Wie man sieht wird zunächst das normale Userpasswort abgefragt (Steht so in /etc/pam.d/common-auth drin). Nachdem diese Abfrage abgebrochen wurde, wird nach einem passenden Einmalpasswort gefragt. Angegeben ist die Nummer, der Hash-Algorithmus des Passwortes und der Seed, der zum Generieren des Einmalpasswortes nötig ist.
Die einfachste und umständlichste Lösung ist jetzt das passende Einmalpasswort aus der vorhin generierten Liste abzutippen. Man kann aber auch ein passendes Einmalpasswort z.B. mit einem Java-Handy generieren. Ein passendes Java Midlet gibt es hier. Für einen Palm gibt es z.B. pilOTP und PalmKey und als GTK-X11 Programm gibt es otpCalc
CODE:
chrisbra@host:~$ sudo aptitude install opie-server opie-client libpam-opie
Natürlich braucht man auch hier ein Passwort, um später damit passende Einmalpasswörter generieren zu lassen. Z.B. hugo123
CODE:
chrisbra@host:~$ opiepasswd -c
Adding chrisbra:
Using MD5 to compute responses.
Enter new secret pass phrase: hugo123
Again new secret pass phrase: hugo123
ID chrisbra OTP key is 499 ba9622
SUNK YELL DOUG ROWS TUNG GRAB
Hier wurde für den Benutzer chrisbra die Benutzung von Einmalpasswörtern eingestellt. Dazu wird ein Paar aus dem Hash des Passwortes sowie eines Zufallwertes (der Challenge bzw. Seed) erstellt. Der Seed lautet in diesem Fall ba9622, die fortlaufende Nummer 499. Diese Nummer identifiziert später das zu nutzende Einmalpasswort. Das passende Einmalpasswort für diese Nummer lautet SUNK YELL DOUG ROWS TUNG GRAB (Groß- und Kleinschreibung spielen keine Rolle).
Mithilfe der Nummer, dem Passwort und dem Seed ist es nachher möglich auf anderen Systemen dasselbe Einmalpasswort zu generieren. Man kann sich auch die verschiedenen Einmalpasswörter generieren, ausdrucken und von dann bei der Abfrage abtippen. Das geht z.B. so:
CODE:
chrisbra@host:/etc/pam.d$ opiekey -n 5 499 ba9622
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Sorry, but you don't seem to be on the console or a secure terminal.
Warning: Continuing could disclose your secret pass phrase to an attacker!
Enter secret pass phrase: hugo123
495: TACK BEAT FADE BERG WRIT JIG
496: LORD MORE SWAN HART FOOL FLEA
497: LIKE FAIL TOUT ARTY CRAM EVEN
498: BABY SIN WHET WANT COAT OAF
499: SUNK YELL DOUG ROWS TUNG GRAB
Hier wurden jetzt die passenden Einmalpasswörter für die Nummern 499 bis 495 generiert. Der Aufruf lautet: opiekey -n "Anzahl" "Nummer" "Seed" Bei jeder Abfrage nach dem Passwort wird die Nummer um eins verringert, so dass jedesmal ein anderes Passwort verlangt wird.
Um jetzt diese Passwörter z.B. mit SSH verwenden zu können, kann man in /etc/pam.d/common-auth für Debian das hier eintragen:
CODE:
auth sufficient pam_unix.so
auth sufficient pam_opie.so
auth required pam_deny.so
Diese Datei wird automatisch von /etc/pam.d/ssh (bei Debian) eingelesen und damit ermöglicht man die Nutzung von Einmalpasswörtern zum Authentifizieren.
CODE:
chrisbra@host:~$ ssh localhost
Password: [Strg+D]
otp-md5 499 ba9622 ext, Response: SUNK YELL DOUG ROWS TUNG GRAB
Linux host 2.6.14.3 #1 Sun Nov 27 19:27:49 CET 2005 i686 GNU/Linux
No mail.
Last login: Thu Dec 15 21:50:26 2005 from 192.168.80.4
Wie man sieht wird zunächst das normale Userpasswort abgefragt (Steht so in /etc/pam.d/common-auth drin). Nachdem diese Abfrage abgebrochen wurde, wird nach einem passenden Einmalpasswort gefragt. Angegeben ist die Nummer, der Hash-Algorithmus des Passwortes und der Seed, der zum Generieren des Einmalpasswortes nötig ist.
Die einfachste und umständlichste Lösung ist jetzt das passende Einmalpasswort aus der vorhin generierten Liste abzutippen. Man kann aber auch ein passendes Einmalpasswort z.B. mit einem Java-Handy generieren. Ein passendes Java Midlet gibt es hier. Für einen Palm gibt es z.B. pilOTP und PalmKey und als GTK-X11 Programm gibt es otpCalc

Gibts dafür auch Programme z.B. fürs Mobile die die Einmalcodes sicher verwalten ?
Läßt man nämlich sonst mal seinen Geldbeutel irgendwo liegen ist das ja dann nicht besonders toll.
Kennst Du da eines für Series60 Telefone ?
Gruß
Marc
So macht es auch JOTP. Bei meinem alten S55 lief aber JOTP nicht aufgrund des zu geringen Speichers. Aber bei heutigen Handies sollte das kein Problem mehr darstellen, oder? Series60 kann doch Java, oder? Ansonsten ist mir kein spezielles Programm dafür bekannt.