Hallo liebe Community,
ich bin aktuell eine Android-App am programmieren, genauer gesagt eine Client-Server-Anwendung. Dabei sollen sich die Nutzer über zuvor angelegte Konten beim Server anmelden können. Das ganze soll natürlich sicher ablaufen, da ich allerdings doch eher ein Anfänger bin, hätte ich einige grundsätzliche Fragen, wie man ein solches Login-System implementieren soll, damit die Zugangsdaten auch wirklich sicher ausgetauscht und gespeichert werden.
Also, angenommen die Client-App baut über TCP eine Verbindung zum Server auf. Nun meldet sich ein Nutzer mit seinem Nutzernamen und Passwort an, beides wird verschlüsselt zwischen Client und Server ausgetauscht. Zum Verschlüsseln hatte ich gedacht RSA zu benutzen. Also wird z.b das Passwort mit dem Public RSA-Key verschlüsselt und übertragen. Das verschlüsselte Passwort wird nun am Server entschlüsselt, gehasht und dann mit dem gespeicherten Hash des Nutzers in der Datenbanken verglichen. Stimmen sie überein, wird der Nutzer eingeloggt. Mein Problem liegt jetzt bei Folgendem: Ein Angreifer im Netzwerk könnte die Übertragung des Verschlüsselten Passworts ja mitlesen. Nun könnte er mit einer selbst erstellen Dritt-App das verschlüsselte Passwort ja direkt an den Server senden, ohne es vorher nochmal mit dem Public RSA-Key zu verschlüsseln. Der Server würde das verschlüsselte Passwort wieder bearbeiten und akzeptieren. Im Endeffekt würde das ja heißen, dass das verschlüsselte Passwort mit einer Dritt-App genau so benutzt werden könnte, wie das Klartext-Passwort bei der eigentlichen App, wobei die Sicherheit durch die Verschlüsselung hinfällig wäre. Hab ich einen Denkfehler bei dieser Vorgehensweise, sodass das Problem gar nicht besteht? Und wenn nicht, wie müsste eine Implementierung gestaltet sein, damit der Login, auch wenn er von dritten mitgelesen wird, nicht reproduziert werden kann.
Ich hoffe, dass Ihr für mich ein bisschen Licht ins dunkle bringen könnt.
LG Minilulatsch
ich bin aktuell eine Android-App am programmieren, genauer gesagt eine Client-Server-Anwendung. Dabei sollen sich die Nutzer über zuvor angelegte Konten beim Server anmelden können. Das ganze soll natürlich sicher ablaufen, da ich allerdings doch eher ein Anfänger bin, hätte ich einige grundsätzliche Fragen, wie man ein solches Login-System implementieren soll, damit die Zugangsdaten auch wirklich sicher ausgetauscht und gespeichert werden.
Also, angenommen die Client-App baut über TCP eine Verbindung zum Server auf. Nun meldet sich ein Nutzer mit seinem Nutzernamen und Passwort an, beides wird verschlüsselt zwischen Client und Server ausgetauscht. Zum Verschlüsseln hatte ich gedacht RSA zu benutzen. Also wird z.b das Passwort mit dem Public RSA-Key verschlüsselt und übertragen. Das verschlüsselte Passwort wird nun am Server entschlüsselt, gehasht und dann mit dem gespeicherten Hash des Nutzers in der Datenbanken verglichen. Stimmen sie überein, wird der Nutzer eingeloggt. Mein Problem liegt jetzt bei Folgendem: Ein Angreifer im Netzwerk könnte die Übertragung des Verschlüsselten Passworts ja mitlesen. Nun könnte er mit einer selbst erstellen Dritt-App das verschlüsselte Passwort ja direkt an den Server senden, ohne es vorher nochmal mit dem Public RSA-Key zu verschlüsseln. Der Server würde das verschlüsselte Passwort wieder bearbeiten und akzeptieren. Im Endeffekt würde das ja heißen, dass das verschlüsselte Passwort mit einer Dritt-App genau so benutzt werden könnte, wie das Klartext-Passwort bei der eigentlichen App, wobei die Sicherheit durch die Verschlüsselung hinfällig wäre. Hab ich einen Denkfehler bei dieser Vorgehensweise, sodass das Problem gar nicht besteht? Und wenn nicht, wie müsste eine Implementierung gestaltet sein, damit der Login, auch wenn er von dritten mitgelesen wird, nicht reproduziert werden kann.
Ich hoffe, dass Ihr für mich ein bisschen Licht ins dunkle bringen könnt.
LG Minilulatsch