Login per Smartphone mit QR-Code + Public-Key Cryptography
Der eigentliche Gedanke dahinter ist schon etwas älter und ich hab schon öfter drüber nachgedacht. Meine ursprüngliche Idee war es mit einem asymmetrischen Verfahren per Bluetooth ein Login an einem PC vorzunehmen.
Allerdings hat es da fast immer ein Problem mit der Authentifizierung des PCs, an dem man sich anmelden möchte, gegeben. Es muss einen einfachen und schnellen Weg geben, mit dem Handy den PC zu identifizieren.
Ich denke mit QR-Codes dürfte das schnell und einfach gehen. Die Sequenz des Einloggens sähe dann wie folgt aus:
- Der PC generiert einen zufälligen Wert sicherer Länge. Dieser Wert wird dann mit einer Names-ID (bei Bluetooth) oder einer IP (bei WLAN) in einem QR-Code kodiert. Dieser Code ist auf dem Login-Bildschirm zu sehen.
- Der Nutzer kommt zum PC, startet auf seinem Smartphone sein Login-App und scannt damit den QR-Code. Das Handy entnimmt die "Kontaktinformationen", stellt eine Verbindung her (muss dabei nicht einmal verschlüsselt sein) und signiert mit dem privaten Schlüssel des Nutzers diesen zufällig vom PC generierten Code. Dann wird dieser signierte Text an den PC übermittelt. Das Zertifikat für den Schlüssel muss natürlich von einer speziellen CA (wie z.B. der Uni) ausgestellt sein.
- Anhand der Signatur erkennt der PC, welcher Nutzer sich da anmeldet und die Authentizität des Nutzers ist hergestellt. Anhand des Wertes der signiert wurde erkennt der PC, dass auch wirklich dieser PC gemeint ist. Außerdem wird dieser Wert nach jedem Login neu zufällig erzeugt. Damit ist er nur einmal gültig und das Login kann nicht dupliziert werden. Wenn alles stimmt, wird der Besitzer des Zertifikates eingeloggt.
Wenn die Authentizität des PCs sichergestellt werden muss, kann beim Verbindungsaufbau in Schritt 2 der PC den Wert auch nocheinmal mit einem speziellen, nur von offiziellen PCs genutzten Zertifikat signieren. Dann muss dieses Zertifikat dem Handy jedoch vorher bekannt sein, was nicht wirklich schwer wäre.
Ich hab das ganze jetzt noch nicht verifiziert; noch nicht einmal richtig durchdacht. Das ist mir nur gerade noch so eingefallen und ich wollts schnell runterschreiben, bevor ich es wieder vergesse. Auf Anhieb hört es sich jedoch recht gut an. Das wäre sogar mal ein interessantes neues Hobby-Projekt. Meinungen?
Update: Ich sollte vielleicht noch dazu schreiben, dass das vom Umfeld her auf die öffentlich verfügbaren Terminals in den Pools der Uni gerichtet ist. Also nicht wie im Büro, wo man seinen eigenen Rechner hat. Da bräuchte man ja nicht so viel mit der Identifikation rumhantieren.
Das Ziel des ganzen soll halt vor Allem sein, Passwörter abzuschaffen und durch wesentlich sichere Verfahren (basierend auf Public-Key Cryptography) zu ersetzen ohne neue Hardware (z.B. Smart Cards, Smart Card Reader), sondern nur neue Software einzusetzen.
Zugegebener Maßen basieren meine Überlegungen auf Smartphones. Ich weiß nicht wie gut das ganze mit älteren Handys umzusetzen wäre.
January 2nd, 2011 - 18:30
Warum ist E-Mail ein Pflichtfeld?!
Für ein Hobbyprogramm doch eher ungeeignet, oder? Wie Du schon sagst, der Einsatz im privaten Umfeld wäre etwas sinnlos und die Uni wird uns so schnell sicher auch nicht die Kontrolle über die Netzwerke geben.
Außerdem sehe ich da nicht unbedingt mehr Sicherheit. Im Gegenteil, ist mein Handy mal weg, steht dem Finder ohne jede Gegenwehr alles zur Verfügung. Außer man sichert es noch zusätzlich mit Passwort – womit wir aber wieder am Anfang wären. Oder habe ich das falsch verstanden?
January 3rd, 2011 - 16:12
Ja, diese Überlegungen sind schon richtig. Jedoch passe ich mehr darauf auf, dass mir keiner mein Handy klaut, als dass ich bei dutzend Gelegenheiten unser RZ PW auch janicht abgucken lasse. Da hofft man doch meistens eher, dass die anderen sich das nicht so schnell merken können.
Außerdem wollte ich mich nochmal schlau machen, wie man mit Finger Gesten aufm Touch Screen so eine art PW erkennt.
January 3rd, 2011 - 21:24
Achso, und eMail-Pflichtfeld. Also ganz genau weiß ich es nicht. Aber ich nehm mal an, es hat was damit zu tun, dass man verhindern möchte, dass sinnloser Spam gepostet wird. Bestimmt irgendsoeine Einstellung. ^^
January 3rd, 2011 - 15:38
Klingt nach einer ganz guten Idee, aber ich sehe bisher noch nicht viel Potential über “Spielerei” hinauszugehen. Für den Laien, der ja heutzutage immer mehr mit Verschlüsselungsverfahren zutun bekommt (z.B. am Arbeitsplatz) ist das zu kompliziert, denke ich. Dennoch bin ich gern bereit, das fertige Tool auszuprobieren. Sicherheitsbedenken sehe ich nur auf dem Weg zwischen Client-PC und Mobiltelefon.
January 3rd, 2011 - 20:59
Naja, da man dafür ja schon auf dem technischen Niveau eines Smartphones sein muss, wäre das eh in Richtung Zukunft gedacht. Da bekommt halt jeder Student automatisch ein Zertifikat ausgestellt durchs Rechenzentrum.
Dann gibts halt ein gut Integriertes und durchdachtes App für die gängigen mobilen Betriebssysteme und der Quellcode ist OpenSource.
Ich hab es schon geschafft mit der Bibliothek Libqrencoder QR-Codes aus Strings zu generieren und in einer Qt-Anwendung darzustellen. Wenn du Interesse hast, kann ich dir Zugang zum SVN geben. Funktioniert (leider) nur unter Linux, da die Bibliothek aus irgendwelchen mir nicht begreiflichen Gründen unter Windows nur unter Cygwin kompiliert. Ich mein, es benutzt nur Standardbefehle und -datenstrukturen und den Rest implementiert es alleine. Weiß nicht, wo da die Abhängigkeit zu Linux ist. Vll liegts auch nur am Buildsystem.
Sollte ich das weiter nutzen wollen, müsste ich entweder gucken, wie ich die Bibliothek unter Windows zum Laufen kriege oder aber eine andere finden.
Für ein Login unter Windows müsste man wohl eh auf .NET setzen. Hab auch schon den nötigen Eisntiegspunkt gefunden: Credential Provider.
http://social.msdn.microsoft.com/Forums/en/windowssecurity/thread/b4f56d18-62ad-4159-8ac9-4f151bb00bcb
Wenn jetzt nur nicht diese nervige BA-Arbeit im Weg wäre.
January 4th, 2011 - 01:46
Bezüglich der Sicherheit der Kommunikation:
Meine Überlegungen bestehen grundsätzlich auf der Prämisse, dass die Zertifikatmengen der Nutzer und PCs als disjunkt zu erkennen sind. Entweder durch unterschiedliche direkt übergeordnete CAs oder durch irgendeine Art spezielles Flag, das kennzeichnet ob das Zertifikat für einen Login-berechtigten Nutzer oder ein einlogbares Terminal ausgestellt wurde.
January 4th, 2011 - 11:49
So wie Basti es schon mitteilte. Es ergibt sich dadurch ein erhöhtes Sicherheitsleck, denn wenn ich mein Handy verliere, kommen anderen ohne weiteres in meine Rechneraccounts. Außerdem komme ich nicht mehr rein. Also ohne Handy. Und mal schnell ein neues kaufen, so viel Geld haben Studenten nun auch nicht.
Außerdem würde es viel zu lange dauern, immer das Handy aus der Tasche zu holen und diese App zu starten, die Kamera auf den Bildschirm zu zeigen und so. Was ist, wenn ich mein Handy nicht dabei habe, der Akku leer ist oder sonst was?
Ich glaube, so schnell kommen wir von den Passwörtern nicht weg. Außerdem sind die verhältnismäßig sicher.