Frage:
Wie wird das clientseitige Hashing von Passwörtern mit BCrypt durchgeführt?
Amit
2015-07-08 14:19:32 UTC
view on stackexchange narkive permalink

Ich migriere eine alte Anwendung, die MD5-Hashing verwendet, zu Spring Security mit BCrypt-Codierung von Kennwörtern. Ich möchte das Kennwort auf der Erstellungsseite für neue Benutzer, auf der Kennwortseite und auf der Anmeldeseite verschlüsseln, bevor es an das Netzwerk gesendet wird.

Ich weiß, dass HTTPS das Problem lösen kann, aber ich werde trotzdem angewiesen, das Kennwort vor dem Senden über das Netzwerk gemäß unseren Organisationsrichtlinien zu verschlüsseln.

Was könnte die bestmögliche Lösung sein, um die Passwörter mit JavaScript zu haschen?

Um es weiter zu erläutern, verwende ich die JCryption-API zum Verschlüsseln des Passworts mit AES Der über das Netzwerk übertragene Wert ist AES (SHA1 (MD5 (einfaches Passwort))) . Jetzt möchte ich MD5 nur durch Bcrypt ersetzen. Der Rest der Dinge bleibt unverändert. Funktioniert dieser Ansatz gegen "Man in the Middle Attack"?

AES benötigt einen Schlüssel, der vom Client und vom Server gemeinsam genutzt wird. Wie gehen Sie sicher damit um?
Um klar zu sein, fragen Sie nach clientseitigem Hashing, das durch https geschützt ist, oder glauben Sie, dass Sie die Notwendigkeit von https durch clientseitiges Hashing beseitigen können? Im ersteren gibt es wirklich keinen Sinn, aber es ist immer noch sicher, das letztere ist einfach und kann niemals in einem Browser sicher gemacht werden.
Clientseitiges Hashing ist keineswegs ein Schutz vor Man-in-the-Middle-Angriffen !!! Der Angreifer greift einfach nach "AES (SHA1 (MD5 (einfaches Passwort))" - und meldet sich damit bei Ihrer Anwendung an.
Der Schlüssel für AES wird generiert, sobald die Anmeldeseite geladen ist. Selbst wenn jemand das AES (SHA1 (MD5 (einfaches Passwort))) erhält, hat er den Schlüssel nicht und der entschlüsselte Wert ist nicht der gleiche. Es sei denn, sie bekommen die jssessionid und Herausforderung, was offensichtlich eine Schwäche ist.
Das von Ihnen beschriebene Standardsystem nimmt ein "einfaches Passwort" auf und validiert es. Das vorgeschlagene neue System nimmt stattdessen ein "verschlüsseltes Passwort" auf und validiert es. Der einzig mögliche Vektor, den Sie sich vorstellen können, dass Sie hier verteidigen möchten, ist ein Man-in-the-Middle-Angriff, und dies ist kein Schutz, da der Angegriffene das "verschlüsselte Passwort" abruft, anstatt das "einfache Passwort" vom Draht zu holen. stattdessen. Die Tatsache, dass das "einfache Passwort" nicht angezeigt wird, ist bedeutungslos, da das "einfache Passwort" zur Authentifizierung nicht mehr benötigt wird, da der Server jetzt ein "verschlüsseltes Passwort" akzeptiert.
Sie müssen eine Server-Nonce und eine Client-Nonce bereitstellen, die zum Verschlüsseln des Kennworts verwendet werden, z. B. die Digest-Authentifizierung. Es wäre jedoch sicherer, MD5 in RFC 2617 durch bcrypt zu ersetzen. http://tools.ietf.org/html/rfc2617#section-3
@NickCoad RE "Die Tatsache, dass das" einfache Passwort "nicht angezeigt wird, ist bedeutungslos." Warum ist es bedeutungslos?Viele Benutzer verwenden ihr Kennwort erneut für mehrere Websites / Apps.Dem Angreifer ein einfaches Passwort zu geben, ist dumm, wenn es leicht verhindert werden kann.(Natürlich möchten Sie es erneut auf dem Server hashen)
@JoeRocc macht im Zusammenhang mit Man-in-the-Middle-Angriffen, Hashing oder Hashing des Passworts keinen Unterschied.Lesen Sie meine Aussage noch einmal im Zusammenhang mit dem Rest meines Kommentars und Sie werden sehen, was ich meine.
@NickCoad Ah, ich habe es aus irgendeinem Grund als "im Allgemeinen bedeutungslos" und nicht als "in diesem Zusammenhang bedeutungslos" gelesen.
Was Sie tun, ist: H (nonce || Zeitstempel || K (Passwort || Salz)) Nonce, Zeitstempel und Salz sind "öffentlich".Passwort wird vom Benutzer und privat zur Verfügung gestellt.H und K sind Hashing-Funktionen.In der Datenbank wird das Passwort als K (Passwort || Salt) gespeichert.Das Nonce kann nur einmal pro Intervall von 5 Minuten verwendet werden und der Zeitstempel muss innerhalb der 5 Minuten der Serveruhr liegen.Dadurch wird sichergestellt, dass es nicht wiedergegeben werden kann.
Fünf antworten:
Tom Leek
2015-07-08 17:33:36 UTC
view on stackexchange narkive permalink

Ich weiß, dass HTTPS das Problem lösen kann, aber ich werde dennoch angewiesen, das Kennwort vor dem Senden über das Netzwerk gemäß unseren Organisationsrichtlinien zu verschlüsseln.

This definiert Ihre Situation wirklich.

Grundsätzlich haben Sie eine einfache Lösung, die Sie trotzdem verwenden sollten (verwenden Sie HTTPS), schon allein deshalb, weil ein aktiver Angreifer ohne HTTPS die Verbindung nach dem Authentifizierungsschritt entführen könnte, unabhängig davon von jeder "Codierung" und jedem Hashing, die Sie für das Passwort verwenden (ein Angreifer, der in der Lage ist, einen Man-in-the-Middle-Angriff auszuführen, wird erfolgreich sein, unabhängig davon, wie viel Sie rituell mit Hash-Funktionen und tanzen Verschlüsselung). Dann haben Sie auch eine Richtlinie, die sowohl idiotisch als auch administrativ unvermeidbar ist. Ihr Problem ist dann: Wie können Sie die Dinge richtig machen und trotzdem die "Richtlinie" einhalten?

Beachten Sie, dass die Richtlinie auf mehreren Ebenen wenig Sinn macht. Das Fehlen von SSL macht das Protokoll nicht nur anfällig für Entführungen. Aber auch jede Art von "Kodierung" nützt passiven Angreifern nichts. Der Grund dafür ist, dass wenn das Protokoll "der Client zeigt das" verschlüsselte "Passwort" lautet, ein passiver Lauscher einfach dieses "verschlüsselte Passwort" überprüft und es selbst sendet - daher verbessert diese Art der Codierung die Sicherheit in keinem Fall Weg. Einige Leute fühlen sich dadurch sicherer , weil sie Kryptographie als eine Art Barbecue-Sauce verstehen ("je mehr wir überall streuen, desto besser wird es").

Was ich vorschlage, ist dass Sie Folgendes tun:

  1. Versuchen Sie zunächst, die Idee zu verkaufen, dass "HTTPS" die "Codierung" verkörpert. Mit anderen Worten, wenn Sie das Kennwort innerhalb eines SSL-Tunnels senden, halten Sie sich bereits an die Richtlinie, da das Kennwort zusammen mit den übrigen Daten ordnungsgemäß codiert (und tatsächlich verschlüsselt ) ist.

  2. Wenn der Dummheitsbefall schwerwiegender ist und ein Auditor (nennen wir ihn Bob) immer noch einen Anfall über Ihren Mangel an "Codierung" macht, versuchen Sie, auf der Client-Seite eine reversible Codierung anzuwenden. Z.B. Wenden Sie vor dem Senden des Passworts Base64 an. Dies bedeutet, dass, wenn das Passwort "bobsucks" lautet, (natürlich innerhalb von SSL) "Ym9ic3Vja3M =" gesendet wird und Bob glücklicher ist, da die letztere Zeichenfolge offensichtlich a ist viel sicherer.

  3. ol>

    Der wichtige Punkt hierbei ist, dass die Lösung auch keinen Sinn ergibt, da die Anforderung keinen Sinn ergibt.

Ich würde als letzte Möglichkeit Nr. 3 hinzufügen, wenn dies immer noch clientseitiges Hashing erfordert, kann dies durchgeführt werden, aber ein durch https gesicherter Kommunikationskanal ist eine Voraussetzung. clientseitiges Hashing + https kann sicher gemacht werden, aber außerhalb von Null-Wissensszenarien ist es komplexer ohne zusätzlichen Nutzen. Wenn das Unternehmen / der Kunde jedoch darauf besteht, dass dies auf diese Weise geschieht, ist es ethisch korrekt, sie zu informieren: "Okay, wir können das tun, aber wir." brauche noch https ".
@GeraldDavis Das ist im Grunde das, was # 2 oben ist. Der einzige Unterschied besteht darin, dass Sie sagen, dass Sie es hashen sollen, und dass die Antwort besagt, dass Sie eine reversible Codierung verwenden. ;) In beiden Fällen praktisch gleich.
Ich würde noch einen Schritt weiter gehen, wenn Ihre "Richtlinie wenig Sinn macht" - die Übertragung des verschlüsselten Passworts erhöht nicht nur die Sicherheit, sondern kann sie auch leicht * reduzieren *. Angenommen, jemand stiehlt Ihre Passwortdatenbank mit verschlüsselten Passwörtern, die mit denen identisch sind, die Sie über das Kabel senden (es ist "verschlüsselt", oder?). Jetzt muss ein Angreifer * nicht einmal den Hash brechen, um Zugriff auf Benutzer zu erhalten. Konten*; Sie können sich einfach direkt mit den Anmeldeinformationen anmelden, die sie von der Datenbank erhalten haben, wodurch der halbe Zweck der Verschlüsselung von Kennwörtern zunichte gemacht wird.
@hobbs Das ist eher ein Problem, wenn man schlecht über Sicherheit informiert ist. Das Problem ist nicht, dass Sie es vor dem Senden hashen / codieren. Die Sicherheit wird aufgrund des Mangels an Maßnahmen (aufgrund falscher Überzeugungen) des Implementierers verringert. Das Problem dort sind die falschen Überzeugungen über die Sicherheit. In der Praxis wirkt sich dies darauf aus, wie Sie das Problem lösen. Schritt 1 ist die Schulung, damit der Implementierer weiß, was zu tun ist. Dann können Sie beim Reparieren einfach serverseitiges Hashing hinzufügen (und TLS, falls nicht vorhanden). Die Notwendigkeit, die clientseitige Arbeit zu eliminieren, wird erst dann dringend, wenn Fehler, zusätzliche Arbeit oder andere Kosten entstehen.
+1 für die letzte Aussage, die leider viel zu oft gilt!
Gerald Davis
2015-07-08 18:00:26 UTC
view on stackexchange narkive permalink

Sie haben keine Sicherheit ohne Authentifizierung

Um es weiter zu erläutern, verwende ich die JCryption API zum Verschlüsseln des Kennworts mit AES. Der über das Netzwerk übertragene Wert lautet also AES (SHA1 (MD5 (einfaches Kennwort)) ))) Jetzt möchte ich MD5 durch Bcryptonly ersetzen. Der Rest der Dinge bleibt unverändert. Dieser Ansatz funktioniert sogar gegen "Man in the Middle Attack" .

Nein, das tut er nicht. Ich kann dies nicht stark genug ausdrücken. Jetzt kann ich Sie möglicherweise nicht davon überzeugen, https zu verwenden (Sie haben möglicherweise nicht einmal eine Wahl), aber ich hoffe, ich kann Sie davon überzeugen, dass es absolut unsicher ist und dass Sie daran glauben Es ist falsch, etwas Sicherheit zu bieten. Wenn Sie gezwungen sind, ohne TLS / SSL voranzukommen, können Sie allen Beteiligten zumindest klar machen, dass das System anfällig ist und als "leicht zu umgehende Wohlfühlsicherheit" bezeichnet werden sollte. Ein Script-Kiddie, der einen MITM-Hotspot bei Ihren lokalen Starbucks ausführt, kann Ihre Benutzer fälschen und Anmeldeinformationen stehlen oder Sitzungen entführen, sodass keine hoch entwickelten Fähigkeiten oder komplexen Angriffe erforderlich sind.

Wenn der Kommunikationskanal unsicher ist, sollten Sie dies tun Ich habe keine Erwartung, dass der von Ihnen gesendete Code der Code ist, der tatsächlich vom Client ausgeführt wird. Es gibt einen Grund, warum es https (sicheres http) heißt, nicht nur httpe (verschlüsseltes http). Sicherheit ist mehr als nur Verschlüsselung. Verschlüsselungskommunikation ohne Authentifizierung ist sinnlos.

Einige Dinge, über die Sie nachdenken sollten:

  • Woher wissen Ihre Benutzer ohne https überhaupt, dass sie sich auf Ihrer Anmeldeseite befinden?
li> Woher wissen Sie, dass ein Angreifer die an den Benutzer gesendete Anmeldeseite nicht geändert hat, um ihm eine Klartextkopie der Anmeldeinformationen zu senden, bevor er sie verschlüsselt und an Sie sendet?
  • Sie versuchen, die zu verschlüsseln Doppelter Hash des Passworts Wie werden Sie den Verschlüsselungsschlüssel sicher übertragen?
  • Was ist, wenn ich zusätzlich zur Verschlüsselung meine eigene benutzerdefinierte Authentifizierung durchführe

    So einfach ist das nicht. Das Bootstrapping eines sicheren Kanals über einen unsicheren Kanal ist kein triviales Problem. Theoretisch könnten Sie ein benutzerdefiniertes Protokoll erstellen, das alle Aspekte von https repliziert, einschließlich Protokollverhandlung, Serverauthentifizierung, Infrastruktur öffentlicher Schlüssel, Schlüsselaustausch, Verschlüsselung, Nachrichtenintegrität und Sperrung (und ich bin sicher, dass ich noch viel mehr vergessen habe). Sobald Sie fertig sind, ist es genauso groß und komplex wie TLS. Nehmen wir auch an, es hatte weniger Fehler als jede andere TLS-Implementierung und Sie könnten es in weniger als ein paar Jahren tun, Sie hätten immer noch ein fast unmögliches Problem. Wie bringen Sie diese clientseitigen Komponenten zum Client? "Oh sicher, der Client muss es sicher herunterladen ... ähm, warte". Wenn es einfach erscheint, sichere Kommunikation über einen unsicheren Kanal zu booten, dann haben Sie ehrlich gesagt nicht tief genug geschaut, es sind Schildkröten bis zum Ende.

    Lassen Sie mich jetzt klar sein, TLS hat viele Probleme, und das Das CA-System hat auch viele Probleme. Ich werde sicherlich nicht so tun, als wäre es perfekt, aber sichere Kommunikation ist ein solches Henne-Ei-Problem, dass es die beste Lösung ist, die wir haben.

    Client-seitiges Hashing kann über https

    durchgeführt werden

    Aus Ihrer Formulierung geht hervor, dass Sie die Frage als "clientseitiges Hashing ODER serverseitiges Hashing über https" betrachten, aber ich hoffe, Sie können sehen, dass dies ein Trugschluss ist. Sie benötigen https, unabhängig davon, wie Sie Ihre Benutzer authentifizieren. Wenn Sie also akzeptieren, dass Sie https benötigen, lautet die Frage: "Warum oder wann ist es sinnvoll, clientseitiges Hashing (über https) anstelle von serverseitigem Hashing (über https) zu verwenden? In den meisten Fällen ist dies nicht der Fall." Das clientseitige Hashing ist komplexer und nicht sicherer, hat jedoch einen Vorteil: Der Server kennt das Kennwort nicht, was beim serverseitigen Hashing nicht der Fall ist. In einigen Szenarien möchten Sie dies Sie können einen Schlüssel, den Sie nicht haben, nicht verlieren, und Sie können nicht gezwungen werden, die Dateien eines Kunden zu entschlüsseln, wenn er Ihnen nie den Entschlüsselungsschlüssel gegeben hat. Es gibt also Szenarien, in denen dies möglicherweise obligatorisch ist Voraussetzung, aber es sollte Teil des Projektdesigns sein, keine willkürliche Entscheidung. Wenn Sie spezielle Fragen zum Umgang mit Null-Wissensszenarien haben, ist dies besser als neue Frage zu tun.

    Ethan Kaminski
    2015-07-09 05:44:39 UTC
    view on stackexchange narkive permalink

    bcrypt ist nicht für diese Art von clientseitigem Hashing gedacht.

    Eine Schlüsseleigenschaft von bcrypt besteht darin, dass die meisten Implementierungen bei zwei unabhängigen Ausführungen mit demselben Klartext unterschiedliche Hashes erzeugen. Dies ist auf die Verwendung eines Salt zurückzuführen, das es schwierig macht, festzustellen, ob zwei verschiedene Benutzer dasselbe Kennwort haben.

    Im Gegensatz dazu müssen Anmeldeformulare jedes Mal dieselben Daten empfangen. Wie würden Sie sonst überprüfen, ob das Kennwort, das der Benutzer heute eingegeben hat, mit dem übereinstimmt, das er gestern eingegeben hat?

    Sie haben also einen Algorithmus, mit dem jeweils unterschiedliche Daten erzeugt werden Sie geben es in eine Anwendung ein, die überprüfen muss, ob die Daten jedes Mal gleich sind. Dies ist wahrscheinlich ein Hinweis darauf, dass der Algorithmus nicht wie beabsichtigt verwendet wird.

    Idealerweise sollten Sie bcrypt verwenden, um Kennwörter auf dem Server zu hashen . Dafür wurde bcrypt entwickelt: Schutz von Benutzerkennwörtern in Zeiten, in denen sich der Klartext nicht im Speicher befindet, was bei weitem der häufigste Zustand ist (z. B. würden DB-Dumps bei korrekter Implementierung nur das Hash-Passwort und nicht den Klartext anzeigen).

    Ich persönlich sehe auch einen Wert im clientseitigen Hashing, da es zum Schutz vor Angreifern beiträgt, die den Datenverkehr abhören können (oder über Serverzugriff verfügen). Ich kenne jedoch keine Möglichkeit, clientseitiges Hashing so sicher wie serverseitiges bcrypt zu machen. Deshalb sollten Sie weiterhin serverseitiges bcrypt verwenden.

    Wenn Sie bcrypt client verwenden müssen -side, verwenden Sie ein statisches Salt

    Wenn Sie bcrypt für das clientseitige Hashing eines Anmeldeformulars verwenden möchten und möchten, dass es ein Drop-In-Ersatz für MD5 ist, müssen Sie es verwenden ein statisches Salz. Vor allem, wenn Sie es durch SHA1 leiten, da dies sowohl das bcrypt-Salz als auch die Hash-Daten selbst beschädigen würde.

    Dies verstößt gegen mehrere Entwurfsannahmen von bcrypt (z. B. immer die Verwendung eines zufälligen Salzes). natürlich.

    Ich würde persönlich empfehlen, den Benutzernamen als Salt zu verwenden (so dass es schwierig ist zu sagen, ob zwei verschiedene Benutzer dasselbe Passwort haben). Ich kenne jedoch keine Forschung, die in diesem Zusammenhang zum Salzen durchgeführt wurde.

    AES (oder eine symmetrische Chiffre) ist auch hier nutzlos.

    Denken Sie daran, dass AES ist ein symmetrischer Algorithmus, dh Sie benötigen denselben Schlüssel zum Entschlüsseln von und zum Verschlüsseln von Daten.

    Was bedeutet dies für Sie? Nun, Sie haben wahrscheinlich Ihren Verschlüsselungsschlüssel in der JavaScript-Quelle, die jedem Client bereitgestellt wird, der Ihre Anmeldeseite besucht. AES ist eine symmetrische Verschlüsselung, daher sollte Ihr Verschlüsselungsschlüssel (der mit dem Entschlüsselungsschlüssel identisch ist) privat gehalten werden. Mit anderen Worten, Ihr privater Schlüssel ist der Welt bekannt - er bietet derzeit praktisch keine Sicherheit.

    Stattdessen sollten Sie Kryptografie mit öffentlichem Schlüssel verwenden. wie PGP oder HTTPS (technisch gesehen verwendet HTTPS einen hybriden Ansatz). Im Ernst, verwenden Sie einfach HTTPS , es sei denn, Ihre Organisation verweigert Ihnen aus irgendeinem Grund die Vergabe eines SSL-Zertifikats. Denken Sie daran, dass PGP nicht wirklich vor aktiven MITM-Angriffen schützt, aber zumindest vor Abhören.

    Durch die Verwendung eines statischen Salt auf dem Client wird wirklich die gesamte Sicherheit entfernt, die durch das clientseitige Hashing impliziert wird. Mit einem statischen Salt wird das Hash-Ergebnis zum neuen "Passwort", das beim Senden an den Server Zugriff gewährt. Mit einem "statischen Salz" haben Sie einfach viele Rechenzyklen für nichts verbracht. Die Verwendung des Benutzernamens als Salt ist viel besser, impliziert jedoch Kollisionen, die dem Angreifer helfen (dh der Angreifer kann die Dinge durch Vorberechnung von Hashes, z. B. als Regenbogentabelle, für den Benutzernamen "admin" optimieren, da die meisten Websites diese Software verwenden ein Benutzer namens "admin").
    Die Verwendung einer Kombination aus Benutzername und Servername als Salt ist immer noch besser. Sie haben immer noch Salzkollisionen, wenn ein Benutzer sein Passwort ändert (der alte und der neue Hash können immer noch parallel angegriffen werden). Die _really_ allgemeine Methode zum Ausführen von clientseitigem Hashing ist ein zweistufiges Protokoll, bei dem der Client zuerst den Zielbenutzernamen sendet, dann das Salt abruft, den Hash mit diesem Salt berechnet und das Ergebnis zurücksendet - und der Server muss noch Führen Sie ein zusätzliches Hashing durch (ein schnelles), damit der Client nicht das sendet, was der Server speichert.
    Diese Art von clientseitigem Hashing wird als "Server Relief" bezeichnet. Es gibt eine Menge Theorie zu diesem Thema. Ich schlage vor, mit [dieser Antwort] zu beginnen (http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords/31846#31846).
    Könnte der Server nicht einfach das zuvor für den Benutzer gespeicherte Salz zusammen mit dem Formular senden?Würde das ein Sicherheitsproblem bedeuten?
    Ich bin einer dieser dummen Typen, die routinemäßig Abfragen über HTTPS sehen und dann im gesamten "lokalen" Netzwerk im Klartext als Proxy (oder Reverse Proxy) !!!HTTPS ist also nicht immer "on".Wir sind so dumm, dass wir unserer eigenen Infrastruktur nicht einmal vertrauen.Am Ende ist es einfacher, von Anfang an so etwas wie WSSE & HMAC zu haben und sich nicht um die Möglichkeit zu kümmern, dass die Anfrage im Klartext angezeigt wird, da sie einen Dienst durchlaufen muss, der HTTPS nicht unterstützt ... Moral: don 't beleidige Leute, die wissen, warum sie fragen, was so dumm erscheint.Sie haben Gründe.
    Mark
    2015-07-08 14:27:06 UTC
    view on stackexchange narkive permalink

    Die beste Lösung ist: Nicht.

    Wenn Sie die Kennwörter über HTTPS senden, bietet das Hashing keine zusätzliche Sicherheit.

    Wenn Sie die Kennwörter senden Über einfaches HTTP kann ein Angreifer das Hash-Passwort abrufen und sich damit selbst anmelden. Alternativ können sie das JavaScript manipulieren, um das Kennwort vor dem Hashing an sie zu senden. In beiden Fällen bietet das Hashing des Kennworts keine Sicherheit.

    Bitte beachten Sie meine Bearbeitung. Ich habe versucht, den Anwendungsfall zu erklären
    bishop
    2015-07-08 22:17:39 UTC
    view on stackexchange narkive permalink

    Da Sie sich verpflichtet fühlen, diese Richtlinie umzusetzen, werde ich Ihre Frage direkt beantworten. Aber verstehen Sie, dass BCrypt und MD5 sehr unterschiedlich sind. BCrypt leistet absichtlich erhebliche Arbeit, während MD5 erheblich weniger leistet. Sie müssen sich also mit Versprechungen befassen:

      <! - https://github.com/nevins-b/ Javascript-bcrypt --><script src = 'bCrypt.js'>< / script><script src =' isaac.js'>< / script><script> // ... der Code, dann: var bcrypt = new bcrypt (); bcrypt.hashpw ('einfaches Passwort', bcrypt.gensalt (), Funktion (Hash) {var cipher = AES (SHA1 (Hash)); // jetzt haben Sie Ihren "sicheren" Hash}); < / script>  

    Ich fordere Sie auf, den weisen Rat in den anderen Antworten zu berücksichtigen. Die Szenarien, in denen diese Richtlinie einen Mehrwert bietet, sind selten. Fragen Sie sich daher: Warum doppelte Arbeit in redundante Infrastruktur investieren, die keine Sicherheit bietet und die Benutzererfahrung verlangsamt?

    Referenzen:

    1. Die Transportverschlüsselung schützt alle Geheimnisse.

    2. Das Senden eines Hashs entspricht dem Senden eines Passworts und das Generieren eines sicheren Hashs ist notwendigerweise langsam.

    3. Die Brute-Force-Resistenz von bcrypt gegenüber MD5 für Passwort-Hashing? und Ergebnisse der Hash-Algorithmus-Leistungstests.

    4. ol>


    Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
    Loading...