Hi,
ich möchte für den Login mit Hilfe eines Benutzernamens + Passwort einer Client/ Serveranwendung ein möglichst hohes Maß an Sicherheit erreichen. Alternative Methoden, z.B. mit Zertifikaten, seien hier außen vor gelassen.
Als Idee habe ich folgende Möglichkeit ermittelt:
Passwort speichern
- Password wird durch den Nutzer auf dem Client eingegeben
- Password wird auf dem Client mit Hilfe von BCrypt + Random Salt [Salt-1] in "Hash" umgewandelt
- Hash wird durch den Client an den Server übertragen.
- Server führt erneut BCrypt aus, jedoch mit dem gleichen Salt [Salt-1] und speichert das Pwd in Datenbank
User authentifizieren
- Password wird durch den Nutzer auf dem Client eingegeben
- Client fragt beim Server nach dem Salt [Salt-1] des Users sowie einem Zufallswert
- Password wird zweifach auf dem Client mit Hilfe von BCrypt + Salt [Salt-1] umgewandelt (= ergibt selben Wert wie in Server-DB)
- Ergebnis wird mit Zufallswert kombiniert und erneut mit BCrypt + zufälligem Salt [Salt-2] umgewandelt
- Hash wird durch den Client an den Server übertragen.
- Server führt erneut BCrypt mit neuem Salt [Salt-2] mit dem Wert seiner Datenbank + Zufallswert aus, vergleicht Ergebnis mit Anfrage durch Client.
Habe ich etwas übersehen?
Viele Grüße