Bei SecureLogin handelt es sich um ein PHP-Skript, welches einen einigermaßen sicheren Login-Vorgang ermöglichen soll, wenn kein SSL oder TLS vorhanden ist. Sicherheit heißt hier Sicherheit in zwei Richtungen:
Grobes Ablaufdiagramm:
Die Sicherheit gegenüber Angreifern wird erreicht, indem für jeden neuen Login ein temporäres Schlüsselpaar erstellt wird, dessen öffentlicher Schlüssel Clientseitig mittels Javascript zur RSA-Verschlüsselung verwendet wird. Damit ist der Login auf der betreffenden Seite abhörsicher, solange Server und Client nicht kompromittiert sind.
Da viele Nutzer das gleiche Passwort für mehrere Seiten verwenden - auch wenn davon ausdrücklich abgeraten wird - ist es wichtig, dass niemand dieses Passwort kennt. Speicherung des Passworts selbst kommt deshalb nicht infrage - auch nicht verschlüsselt. Stattdessen wird nur der Hashwert des Passworts gespeichert. Das ist eine One-way function, die möglichst kollisionsfrei ist, hier wird SHA256 verwendet.
Das ist jedoch nicht ganz ausreichend, denn zum Einen kann ein Angreifer mittels einer Rainbow table leicht vom Hash auf das Passwort schließen, zum Anderen sieht der Angreifer, welche Nutzer das gleiche Passwort haben. Er kann sogar - falls mehrere Seiten das Passwort nur als Hash speichern - sich nur mit dem Hash auf diesen Seiten anmelden. Die Lösung des ganzen nennt sich Salt. Hier wird an das Passwort ein bekannter String („Salt“) angehängt. Dies führt 1. dazu, dass der Ausgangsstring um ein vielfaches länger wird und damit die Wahrscheinlichkeit sinkt, ihn mittels Rainbowtable herauszufinden, zum und 2. kann man - wenn man unterschiedliche Salts für jeden Nutzer verwendet - auch verhindern, dass gleiche Passwörter erkannt werden. Securelogin verwendet somit als Ausgangsstring Passwort+Username+„SecureLogin“. Also für den Nutzer Alice mit dem Passwort Wonderland wird der Hash von AliceWonderlandSecureLogin gespeichert.
Voraussetzungen: PHP und MySQL
Download (Source+Doku): securelogin.tar.gz
Vorsicht: Die Sources sind mit verschiedenen Lizenzen belegt und die verwendeten Libraries sind nicht von mir! (BSD und LGPL)