it-swarm.com.de

Passwort lokal speichern. Wo? Wie kann man es sicher weitergeben?

Ich entwickle eine Anwendung. Der Benutzer muss seine Anmeldeinformationen eingeben, die an den Server gesendet werden. Wenn der Benutzer die Anwendung ein zweites Mal öffnet, sollte er sie nicht erneut eingeben müssen. Die Anmeldeinformationen sollten auf dem Computer des Benutzers gespeichert werden. Auch diese Daten können weitergegeben werden. Meine App ist plattformübergreifend, daher suche ich nach einer plattformübergreifenden Lösung. Schritt für Schritt sollte der Algorithmus also so aussehen:

  1. Der Benutzer gibt Login und ein Passwort ein und diese Daten gehen an den Server. Wie kann ich es sicher weitergeben? Sollte ich ein sicheres Protokoll wie https oder ssl verwenden?
  2. Wenn die Anmeldeinformationen korrekt sind, muss ich diese Daten auf dem lokalen Computer speichern. Sollte ich eine lokale Datenbankdatei, eine Binärdatei oder nur eine Textdatei verwenden? Wo soll diese Datei gespeichert werden? Und ich wette, ich muss das verschlüsseln. Ich muss es auch später entschlüsseln, aber zum Entschlüsseln brauche ich einige zusätzliche Daten (wahrscheinlich einen Schlüssel), oder? Wo sollen diese zusätzlichen Daten gespeichert werden?
  3. Irgendwann muss ich diese Informationen an einen anderen Prozess weitergeben. Ich habe bereits eine TCP-Kommunikation zwischen Prozessen eingerichtet. Ist das genug zum Bestehen? Soll ich es verschlüsselt oder entschlüsselt weitergeben.

Bitte korrigieren Sie mich, wenn meine Schritte falsch sind. Dies ist das erste Mal, dass ich mich mit Sicherheit beschäftige, daher fehlt mir das Wissen.

15
nikitablack

HTTPS oder ein benutzerdefiniertes Protokoll, das TLS zur Verschlüsselung verwendet, ist der richtige Weg, um sicher mit einem Remote-Server zu kommunizieren, vorausgesetzt, Sie implementieren es korrekt und beenden es, wenn etwas mit Zertifikaten nicht stimmt (ich habe mobile Apps gesehen, die trotz Verwendung von HTTPS meine akzeptiert haben selbstsigniertes Zertifikat sofort, ohne den Benutzer zu fragen, was die gesamte "Sicherheit" sinnlos macht).

Das sichere Speichern der Anmeldeinformationen auf dem Computer ist viel schwieriger, denn wenn Ihre App sie entschlüsseln kann, kann auch Malware mit denselben Berechtigungen wie Ihre App ausgeführt werden. Jeder Schutz wäre nur Sicherheit durch Unbekanntheit und kann einen dedizierten Angreifer nicht aufhalten Schützen Sie nur vor gängigen "Stealern", die hauptsächlich zum Stehlen von Browserprofilen (Verlauf, Sitzungscookies) oder persönlichen Dateien (für möglichen Identitätsdiebstahl) entwickelt wurden, und stehlen Sie nicht die eigentliche App-Binärdatei, damit der Angreifer nicht weiß, wie die gespeicherten Anmeldeinformationen sind verschlüsselt wurden oder selbst wenn er die Binärdatei der App hat, ist es ihm vielleicht egal, da Reverse Engineering zeitaufwändig ist und Erfahrung erfordert (beachten Sie, dass Malware-Entwickler häufig nicht diejenigen sind, die sie tatsächlich bereitstellen und die gestohlenen Daten sammeln/weiterverkaufen).

Sie können einen Schlüssel von der Hardware wie pbkdf2(sha512(OSname+OSversion+CPUmodel+MACaddress)) ableiten und diesen als Schlüssel zum Verschlüsseln der Anmeldeinformationen verwenden. Dieser kann auf demselben Computer abgerufen werden, kommt jedoch einem Angreifer nicht zugute, wenn er nur die verschlüsselten Anmeldeinformationen und gestohlen hat Die Binärdatei der App, es sei denn, er hat noch Zugriff auf die Maschine, um zurück zu gehen und denselben Wert zu erhalten

Es ist nicht erforderlich, die Verschlüsselung für die Kommunikation zwischen Prozessen auf demselben Computer zu verwenden. Wenn ein Angreifer diese Kommunikation abfangen kann, hat er bereits die Kontrolle über den Computer (auf derselben Berechtigungsstufe, die die App verwendet, wenn nicht höher), was bedeutet, dass Sie dies können Lesen Sie, was ich oben darüber gesagt habe, dass ich mich nicht dagegen verteidigen kann.

10
user42178

Der Benutzer gibt Login und ein Passwort ein und diese Daten gehen an den Server. Wie kann ich es sicher weitergeben? Sollte ich ein sicheres Protokoll wie https oder ssl verwenden?

Ja! Sie müssen die Daten auf sichere Weise übergeben, beispielsweise mit TLS.

Wenn die Anmeldeinformationen korrekt sind, muss ich diese Daten auf dem lokalen Computer speichern. Sollte ich eine lokale Datenbankdatei, eine Binärdatei oder nur eine Textdatei verwenden? Wo soll diese Datei gespeichert werden? Und ich wette, ich muss das verschlüsseln. Ich muss es auch später entschlüsseln, aber zum Entschlüsseln brauche ich einige zusätzliche Daten (wahrscheinlich einen Schlüssel), oder? Wo sollen diese zusätzlichen Daten gespeichert werden?

Sie können einen Schlüssel anstelle des Kennworts generieren. So gibt der Server bei der Authentifizierung beispielsweise einen SCHLÜSSEL (zufällige Bits) zurück, der in einer Datenbank mit der ID des Benutzers gespeichert wird, und Sie speichern diesen SCHLÜSSEL lokal, aber auf dem Server, den Sie weiß, wem das gehört. Bei der zweiten Anmeldung senden Sie diesen Schlüssel an den Server, der prüft, ob er gültig ist (diesem Benutzer gehört) und nicht abgelaufen ist.

Irgendwann muss ich diese Informationen an einen anderen Prozess weitergeben. Ich habe bereits eine TCP-Kommunikation zwischen Prozessen eingerichtet. Ist das genug zum Bestehen? Soll ich es verschlüsselt oder entschlüsselt weitergeben.

Auch hier übergeben Sie nur den Schlüssel. Sie können verschlüsseln, aber es ist wirklich schwierig, alle Arten von Angriffen zu vermeiden, die Ihr System erleiden könnte.

12
G4spr