Nein, es gibt keine Möglichkeit, Browser-JavaScript zu verwenden, um die Kennwortsicherheit zu verbessern. Ich empfehle Ihnen dringend, diesen Artikel zu lesen . In Ihrem Fall ist das größte Problem das Hühnerei-Problem:
Was ist das "Hühnerei-Problem" bei der Bereitstellung von Javascript-Kryptografie?
Wenn Sie dem Netzwerk nicht vertrauen, dass es ein Kennwort übermittelt, oder, schlimmer noch, dem Server nicht vertrauen, dass er keine Benutzergeheimnisse bewahrt, können Sie ihm nicht vertrauen, dass er Sicherheitscode übermittelt. Derselbe Angreifer, der vor der Einführung von Krypto Passwörter beschnüffelt oder Tagebücher gelesen hat, entführt einfach Krypto-Code, nachdem Sie dies getan haben.
[...]
Warum kann ich TLS / SSL nicht verwenden, um den Javascript-Kryptocode bereitzustellen?
Sie können. Es ist schwieriger als es sich anhört, aber Sie übertragen Javascript-Krypto sicher über SSL an einen Browser. Das Problem ist, dass Sie nach dem Einrichten eines sicheren Kanals mit SSL keine Javascript-Kryptografie mehr benötigen. Sie haben "echte" Kryptographie.
Was dazu führt:
Das Problem beim Ausführen von Kryptocode in Javascript besteht darin, dass praktisch jede Funktion, von der die Krypto abhängt, von allen Inhalten, die zum Erstellen der Hosting-Seite verwendet werden, stillschweigend überschrieben werden kann. Die Kryptosicherheit kann zu Beginn des Prozesses (durch Generieren falscher Zufallszahlen oder durch Manipulation von Konstanten und Parametern, die von Algorithmen verwendet werden) oder später (durch Zurückschicken von Schlüsselmaterial zu einem Angreifer) oder --- im wahrscheinlichsten Szenario rückgängig gemacht werden --- indem die Krypto vollständig umgangen wird.
Es gibt keine zuverlässige Möglichkeit für einen Teil des Javascript-Codes, seine Ausführungsumgebung zu überprüfen. Javascript-Kryptocode kann nicht fragen: "Habe ich es wirklich mit einem Zufallszahlengenerator zu tun oder mit einem Faksimile eines von einem Angreifer bereitgestellten?" Und es kann mit Sicherheit nicht behaupten, dass "niemand etwas mit diesem Krypto-Geheimnis anfangen darf, außer auf eine Weise, die ich als Autor gutheiße". Dies sind zwei Eigenschaften, die häufig in anderen Umgebungen mit Krypto bereitgestellt werden und in Javascript nicht möglich sind.
Grundsätzlich ist das Problem folgendes:
- Ihre Clients vertrauen Ihren Servern nicht und möchten daher zusätzlichen Sicherheitscode hinzufügen.
- Dieser Sicherheitscode wird von Ihren Servern bereitgestellt (denen, denen sie nicht vertrauen).
Oder alternativ,
- Ihre Kunden vertrauen SSL nicht und möchten daher, dass Sie zusätzlichen Sicherheitscode verwenden.
- Dieser Sicherheitscode wird über SSL übermittelt.
Hinweis: Außerdem ist SHA-256 dafür nicht geeignet, da es so einfach ist, ungesalzene, nicht iterierte Kennwörter brutal zu erzwingen . Wenn Sie sich trotzdem dazu entschließen, suchen Sie nach einer Implementierung von bcrypt , scrypt oder PBKDF2 .