it-swarm.com.de

Wie führe ich die Login-Authentifizierung auf der Clientseite durch?

Wie können wir Anmeldeinformationen auf der Clientseite selbst überprüfen, ohne den Server einer Website einzubeziehen?

14
sanjay

Das kannst du nicht.

Der Grund ist, dass Sie dem Kunden überhaupt nicht vertrauen können. Ein Angreifer kann den Client nach Belieben ändern und alle von Ihnen ergriffenen Sicherheitsmaßnahmen umgehen.

Aber was ist, wenn wir unseren Code digital signieren? Der Angreifer kann es dann nicht ändern, oder?

Ja, sie können. Wenn Sie Ihren Code signieren, muss der Computer des Angreifers die Signatur validieren und die Ausführung verweigern, wenn die Signatur des Clients nicht übereinstimmt. Nichts hindert den Client daran, diese Signaturprüfung zu deaktivieren und einfach Code mit einer falschen oder gar keiner Signatur auszuführen.

Wenn Sie den Server nach dem Senden der Website überhaupt nicht einbeziehen möchten , müssen alle potenziell vertraulichen Inhalte an den Client gesendet werden zuerst (bevor sie wissen, ob sie berechtigt sind, es zu sehen) und später offenbart.

Nichts hindert einen Angreifer daran, einfach den Rohinhalt zu betrachten, der über das Netzwerk an ihn gesendet wird, ohne dass clientseitiger Code ausgeführt wird.

Aber können Sie die Daten nicht mit den Benutzeranmeldeinformationen verschlüsseln?

Ja du könntest. Ihr Ziel ist es jedoch, den Benutzer zu authentifizieren. Dies bedeutet, dass Sie bestätigen, ob der Benutzer tatsächlich der ist, für den er sich ausgibt. Das von user9123 vorgeschlagenes Schema würde wie folgt funktionieren:

  1. Der Benutzer behauptet, Benutzer "foo" zu sein.
  2. Die Website verschlüsselt die Nutzdaten für "foo" mit Anmeldeinformationen für diesen Benutzer, z. "foo: bar".
  3. Der Benutzer gibt seine Anmeldeinformationen ein, die die Nutzdaten lokal entschlüsseln.

Dieses Schema authentifiziert den Benutzer in keiner Weise beim Server. Der Server weiß nicht, ob der Benutzer wirklich "foo" ist oder nicht. Wenn der Benutzer ein schwaches Passwort hat, kann der Angreifer außerdem versuchen, es zu knacken. Ja, eine Schlüsselableitungsfunktion kann diesen Prozess verlangsamen, aber es handelt sich im Wesentlichen immer noch um ein Anmeldeinformationsleck.


Was mich neugierig macht, ist, warum Sie möchten, dass dieses Schema anstelle der traditionell getesteten Methode versucht?

61
MechMK1

Es gibt eine lange Geschichte von Software mit clientseitiger Authentifizierung. Das beste Beispiel sind wahrscheinlich Betriebssysteme. Microsoft Windows authentifiziert Benutzer mit einem NT-Hash in einer speziellen Datei namens SAM. Linux authentifiziert Benutzer mit Krypta und der Datei/etc/shadow.

Das Design ist:

  1. Erhalten Sie die Kennung vom Benutzer
  2. Erhalten Sie das Passwort sicher vom Benutzer
  3. Suchen Sie den Benutzernamen und erhalten Sie das Salt und die Runden für diesen Benutzer (optional reservieren oder erstellen Sie Dummy-Benutzereinstellungen für nicht gefundene Benutzernamen).
  4. Generieren Sie den Hash des Passworts mit Salz, Runden und Pfeffer
  5. Vergleichen Sie den generierten Hash mit dem gespeicherten Benutzer-Hash
  6. Überprüfen Sie, ob der Benutzer gesperrt ist oder andere Kriterien
  7. Melden Sie den Benutzer basierend auf den Kriterien an oder schlagen Sie die Anmeldung fehl

Dies ist der gleiche Workflow, der auch im Webparadigma funktioniert. Die Schritte 3 bis 7 funktionieren jedoch auf dem Server und nicht auf dem Client.

0
Douglas Held