Ich beschäftige mich für ein Projekt gerade mit dem Verschlüsseln von Zugangsdaten. Dazu möchte ich statt "Benutzername + Passwort + Hostname" einfach den zugehörigen Hash-Wert zur Kontrolle an den Server übermitteln.
Du willst also die Sicherheit erhöhen. Wie? [...]
Sicherheit erhälst du bei Logins nur durch Verschlüsselung, beispielsweise mit SSL. Alles andere ist Spielkram, macht das Verfahren komplizierter, fehleranfälliger, benutzerunfreundlicher, aber kein bißchen sicherer.
Quatsch. Schonmal von CHAP gehört?
Ich übermittele ein Formular mit:
form no-action (nur für Javascript)
text name=user
password name=pass
hidden name=callenge value=$RANDOM_TEXT
form action=...
hidden response
button login onclick="calc_response+submit"
Im Javascrpit wird dann sha1 von user+pass+challenge berechnet und dann rausgesendet. Den challenge kennt der Server (er hatte ihn ja generiert und gesendet) und kann damit die angaben überprüfen. Um ihn zu unterstützen wird noch user mitgesendet. Der Server muß nun alle Challengesm, die er in der letzten Zeit (z.B. 5 Minuten) versendet hat mit dem passwort ausprobieren, um herauszufinden, ob das Passwort stimmt. Alternativ sendet man den challenge auch nochmal zurück, hier MUSS der Server dann aber auf jeden Fall überprüfen, ob er den Challenge
a) gerade selber generiert hatte und
b) ob er nicht vielleicht schonmal benutzt wurde, um sich einzuloggen.
Je nach dem, wie schützenswert die Daten sind, sollte man aber dennoch verschlüsseln, aber nicht weil die Login-Prozedur an sich unsicher ist, sondern weil der Übertragungskanal unsicher ist (nach dem Login kann jeder die Verbindung übernehmen, und selber Requests im Namen des eingeloggten Benutzers durchführen). Allerdings kann das nur jemand, der auch eine Crypto-Man-in-the-Middle-Attack durchführen kann, man steht dann also vor dem Problem des Key-Exchanges.
Gruß, Bodo
PS: Wenn man das Passwort auf dem Server nicht im Klartext gespeichert hat, sondern z.B. mit md5 gecrypted, erhöht das die Sicherheit in diesem Szenario eigentlich auch nicht mehr.