Erstens verbessert dies NICHT die Sicherheit Ihrer Anwendung (vorausgesetzt, es handelt sich um eine Webanwendung).
Verwenden Sie SSL (oder tatsächlich TLS, das allgemein als SSL bezeichnet wird), es ist nicht wirklich teuer (Messen Sie die Zeit, die Sie verwenden, um Wege zu finden, und multiplizieren Sie es mit dem Mindestlohn, der Kauf eines Zertifikats gewinnt fast immer).
Das Warum dazu ist einfach. TLS löst ein Problem (bei Verwendung mit gekauften Zertifikaten, nicht selbstsigniert), das in der Kryptografie ziemlich groß ist: Woher weiß ich, dass der Server, mit dem ich spreche, der Server ist, mit dem ich zu sprechen glaube? TLS-Zertifikate sind eine Art zu sagen: "Ich, die von Ihrem Browser vertrauenswürdige Zertifizierungsstelle, bescheinige, dass die Website unter [url] diesen öffentlichen Schlüssel mit einem entsprechenden privaten Schlüssel hat, den (privater Schlüssel) nur dem Server bekannt ist Ich habe meine Unterschrift im gesamten Dokument unterschrieben. Wenn jemand sie geändert hat, können Sie sehen ".
Ohne TLS wird jede Verschlüsselung sinnlos, denn wenn ich in einem Coffeeshop neben Ihnen sitze, kann ich Ihren Laptop / Ihr Smartphone glauben lassen, ich sei der Server und MiTM (Man in The Middle) Sie. Mit TLS schreit Ihr Laptop / Smartphone "UNTRUSTED CONNECTION", weil ich kein von der Zertifizierungsstelle signiertes Zertifikat habe, das Ihrer Site entspricht. (Verschlüsselung vs. Authentifizierung).
Haftungsausschluss: Benutzer klicken in der Regel direkt durch diese Warnungen: "Nicht vertrauenswürdige Verbindung? Was? Ich möchte nur meine Bilder von Kätzchen! Ausnahme hinzufügen Klicken Sie auf Bestätigen Klicken Sie auf YAY! Kätzchen!"
Wenn Sie jedoch wirklich kein Zertifikat kaufen möchten, implementieren Sie dennoch clientseitiges Javascript-Hashing (und verwenden Sie dazu die Standford-Bibliothek (SJCL). Implementieren Sie CRYPTO NIEMALS selbst ).
Warum? Passwort wiederverwenden! Ich kann Ihr Sitzungscookie (mit dem ich Ihrem Server vorgeben kann, dass ich Sie bin) ohne HTTPS einfach stehlen (siehe Feuerschaf). Wenn Sie jedoch Ihrer Anmeldeseite ein Javascript hinzufügen, das vor dem Senden Ihr Passwort hasht (verwenden Sie SHA256 oder noch besser SHA256, senden Sie ihnen einen von Ihnen generierten öffentlichen Schlüssel und verschlüsseln Sie dann das Passwort damit, können Sie kein Salt verwenden mit diesem) und sendet dann das gehashte / verschlüsselte Passwort an den Server. REHASHEN Sie den Hash auf Ihrem Server mit einem Salt und vergleichen Sie ihn mit dem, was in Ihrer Datenbank gespeichert ist (speichern Sie das Passwort wie folgt :
(SHA256(SHA256(password)+salt))
(Speichern Sie das Salz auch als Klartext in der Datenbank)). Und senden Sie Ihr Passwort wie folgt:
RSA_With_Public_Key(SHA256(password))
und überprüfen Sie Ihr Passwort wie folgt:
if SHA256(RSA_With_Private_Key(SHA256(sent_password))+salt_for_username) == stored_pass: login = ok
Denn WENN jemand Ihren Kunden Schnüffeln, werden sie auf Login als Client (Session Hijacking) fähig sein , aber sie werden nie das Klartext - Passwort sehen (es sei denn , sie Ihr Javascript ändern, aber Starbucks ein Hacker wird wahrscheinlich nicht wissen Howto / interessieren in diesem.) So erhalten sie Zugriff auf Ihre Webanwendung, aber nicht auf ihre E-Mail / Facebook / etc. (für die Ihre Benutzer wahrscheinlich dasselbe Passwort verwenden). (Die E-Mail-Adresse ist entweder ihr Loginname oder befindet sich in ihrem Profil / ihren Einstellungen auf Ihrer Webanwendung.)