Frage:
Warum ist das clientseitige Hashing eines Passworts so ungewöhnlich?
Muis
2014-03-18 15:18:54 UTC
view on stackexchange narkive permalink

Es gibt nur sehr wenige Websites, auf denen das Benutzerkennwort gehasht wird, bevor es an den Server gesendet wird. Javascript unterstützt nicht einmal SHA oder andere Algorithmen.

Aber ich kann mir einige Vorteile vorstellen, wie den Schutz vor Cross-Site-Lecks oder böswilligen Administratoren, die SSL nicht bietet. P. >

Warum ist diese Praxis auf Websites so ungewöhnlich?

Welche Vorteile hat das clientseitige Hashing von Passwörtern Ihrer Meinung nach?
@TimLamballais Ein typischer Client kann viel mehr Zeit mit Hashing verbringen als ein Server. Wenn Sie also eine leistungsstarke Implementierung im Client haben (die Javascript in aktuellen Browsern ausschließt), können Sie teurere und damit stärkere Kennwort-Hashes verwenden. Dies bedeutet auch, dass der Server das Kennwort selbst nie sieht. Clientseitiges Hashing ist auch eine Voraussetzung für erweiterte PAKE-Protokolle wie SRP, bei denen Sie durch den Identitätswechsel des Servers keinen Zugriff auf das Kennwort erhalten.
Javascript ist nicht mehr so ​​langsam. Moderne Javascript-Engines sind so schnell geworden, dass sie mit kompilierten Sprachen mithalten können, und neuere Ergänzungen wie typisierte Arrays bieten die richtigen Werkzeuge für die für die Kryptografie erforderliche Zahlenverarbeitung.
@TimLamballais Ein Vorteil wäre, dass der Server mein echtes Passwort nie sieht und es möglicherweise nicht verlieren kann (ja, sie können den Hash immer noch verlieren, aber er sollte durch den Domainnamen gesalzen werden, also nutzlos für die Anmeldung an anderen Sites). Aber für den größten Vorteil siehe meinen Kommentar zu Philipps Antwort.
Viele Menschen fragen sich, ob mit dieser Praxis zusätzliche Sicherheit erreicht wird. Eine Sache, die es tut, ist das Risiko zu reduzieren. Wenn Sie immer hashen oder verschlüsseln (ich habe gesehen, wie Steam / Valve mit einem öffentlichen Schlüssel verschlüsselt wurde und ich wette, dass sie nicht entschlüsseln), besteht keine Chance, dass Sie jemals einen peinlichen Klartextverschluss haben. Nein ... es ist nicht sicherer, aber es ist nicht sinnlos
WPA2-PSK verwendet zur Authentifizierung das clientseitige Hashing des Kennworts.
Elf antworten:
paj28
2016-11-29 15:39:09 UTC
view on stackexchange narkive permalink

Erfinder des JavaScript-Passwort-Hashing hier

Bereits 1998 habe ich ein Wiki erstellt, die erste Website, die ich mit einem Anmeldesystem erstellt habe. Ich konnte mir kein Hosting mit SSL leisten, aber ich war besorgt über Klartext-Passwörter, die über das Internet gehen. Ich habe über CHAP (Challenge Hash Authentication Protocol) gelesen und festgestellt, dass ich es in JavaScript implementieren kann. Am Ende habe ich JavaScript MD5 als eigenständiges Projekt veröffentlicht und es ist das beliebteste Open Source, das ich entwickelt habe. Das Wiki kam nie über Alpha hinaus.

Im Vergleich zu SSL weist es eine Reihe von Schwächen auf:

  • Schützt nur vor passivem Abhören. Ein aktives MITM kann das JavaScript manipulieren und das Hashing deaktivieren.
  • Serverseitige Hashes werden zu Kennwortäquivalenten. Zumindest in der gemeinsamen Umsetzung; Es gibt Variationen, die dies vermeiden.
  • Erfasste Hashes können brutal erzwungen werden. Es ist theoretisch möglich, dies mit JavaScript RSA zu vermeiden.

Ich habe diese Einschränkungen immer im Vorfeld angegeben. Ich wurde regelmäßig für sie geflammt. Aber ich behalte das ursprüngliche Prinzip bis heute bei: Wenn Sie aus irgendeinem Grund kein SSL haben, ist dies besser als Klartext-Passwörter. In den frühen 2000er Jahren verwendeten einige große Anbieter (insbesondere Yahoo!) dies für Anmeldungen. Sie glaubten, dass SSL selbst nur für Anmeldungen zu viel Overhead haben würde. Ich denke, sie haben 2006 nur für Anmeldungen auf SSL umgestellt, und um 2011, als Firesheep veröffentlicht wurde, haben die meisten Anbieter auf volles SSL umgestellt.

Die kurze Antwort lautet also: clientseitiges Hashing ist selten, weil Benutzer verwenden stattdessen SSL.

Clientseitiges Hashing bietet noch einige potenzielle Vorteile:

  • Einige Softwareprogramme wissen nicht, ob es mit bereitgestellt wird SSL oder nicht, daher ist es sinnvoll, Hashing einzuschließen. vBulletin war ein häufiges Beispiel dafür.
  • Serverentlastung - Bei rechenintensiven Hashes ist es für den Client sinnvoll, einen Teil der Arbeit zu erledigen. Siehe diese Frage.
  • Böswillige Administratoren oder gefährdete Server - Clientseitiges Hashing kann verhindern, dass sie Klartextkennwörter sehen. Dies wird normalerweise verworfen, da sie das JavaScript ändern und das Hashing deaktivieren können. Fairerweise erhöht diese Aktion jedoch die Wahrscheinlichkeit, entdeckt zu werden, und dies hat einige Vorteile.

Obwohl diese Vorteile gering sind und viel Komplexität hinzufügen, besteht ein echtes Risiko dass Sie bei Ihrem Versuch, die Sicherheit zu verbessern, eine schwerwiegendere Sicherheitsanfälligkeit einführen. Und für Leute, die mehr Sicherheit als Passwort wünschen, ist die Multi-Faktor-Authentifizierung eine bessere Lösung.

Die zweite kurze Antwort lautet also: weil die Multi-Faktor-Authentifizierung mehr Sicherheit bietet als das clientseitige Passwort-Hashing .

Was ist, wenn der Server von einem Cracker kompromittiert wurde und er einfache Passwörter von Clients sammeln möchte, um sie an anderen Orten zu verwenden?Kein Schutz, sondern clientseitiges Hashing.Warum müssen wir Clients zwingen, dem Server zu vertrauen?
@ КонстантинВан - Bitte beziehen Sie sich auf den Teil der Antwort "Kompromittierter Server"
Ein weiterer Nachteil von clientseitigem Hashing besteht darin, dass Sie keine Kennwortrichtlinien auf dem Server erzwingen können.Grundsätzlich können Sie nicht überprüfen, ob das vom Benutzer ausgewählte Passwort stark genug ist
@Michael Das ist meiner Meinung nach eine gute Sache, da Kennwortrichtlinien auf den meisten Servern lächerlich sind.Viele Passwortzeichen sind ohne Grund verboten.
AJ Henderson
2014-03-18 18:36:31 UTC
view on stackexchange narkive permalink

Um dieses Problem zu verstehen, müssen Sie zuerst verstehen, warum wir Passwörter hashen. Es ist durchaus möglich, ein Passwort im Klartext auf einem Server zu speichern und das übertragene Passwort einfach mit dem empfangenen Passwort zu vergleichen. Solange das Passwort während der Übertragung geschützt ist, ist dies ein sicheres Mittel zur Authentifizierung (gemeinsames Geheimnis).

Der Grund, warum Passwörter gehasht werden, liegt darin, dass das Problem nicht die Authentifizierung, sondern der Speicher ist. Sollte der Server jemals kompromittiert werden, hätte der Angreifer sofort Zugriff auf alle Benutzerkonten, da er nun das zur Authentifizierung der Benutzer verwendete Geheimnis kennt.

Hashing wirkt als Hindernis dafür. Da der Server die zur Authentifizierung tatsächlich erforderlichen Eingaben nicht kennt, gewährt selbst ein Kompromiss mit der Datenbank einem Angreifer keinen Zugriff auf die Benutzerkonten. Sie müssten immer noch die Eingabe herausfinden, um die Hash-Werte zu erreichen, mit denen die Anwendung prüft. Sicher, sie könnten alle Werte in etwas ändern, das sie kennen, aber dies würde schnell Verdacht erregen und das System würde heruntergefahren und gesichert.

Das Problem beim clientseitigen Hashing ist also, dass es das effektiv macht Ergebnis des Hashs ist das Passwort und nicht das Passwort. Nichts hindert einen Angreifer daran, den offiziellen Client zu umgehen und den fertigen Hash einfach direkt an den Server zu senden. Es bietet keinen zusätzlichen (oder Verlust) an Sicherheit während der Authentifizierung, aber in dem Fall, dass Hashing zum Schutz dient, bietet es nichts, da der in der Datenbank gespeicherte Hash tatsächlich das gemeinsame Geheimnis ist, das an den Server übertragen wird.

Das heißt, es gibt zwei bemerkenswerte Dinge, die Ihnen clientseitiges Hashing bietet. Dies trägt zwar nicht zum Schutz Ihres Systems bei, kann jedoch zum Schutz Ihres Benutzers beitragen. Wenn Sie das Kennwort unsicher übertragen oder die Übertragung kompromittiert wird, ohne dass der Clientcode kompromittiert wird, schützen Sie das Kennwort des Benutzers (das auf anderen Websites möglicherweise wiederverwendet wird) weiterhin vor dem Durchsickern.

Das andere ist, dass Sie zusätzliche Iterationen eines Hashs bereitstellen können, um einen Offline-Angriff auf die Datenbank zu erschweren, ohne Serverzyklen verwenden zu müssen (und gleichzeitig die Länge des vom Client übermittelten "Zwischenkennworts" zu verlängern) Sie benötigen noch genügend Serverzyklen, um das verlängerte Kennwort vor einem nicht autorisierten Client zu schützen. Der primäre Schutz, den dies bietet, besteht wiederum darin, zu verhindern, dass das ursprüngliche Kennwort erkannt wird, trägt jedoch nicht zum Schutz des Authentifizierungsmechanismus Ihrer Site bei Aus Sicht des Servers sollte der clientseitige Hash so behandelt werden, als wäre es das direkte Passwort des Benutzers. Es bietet nicht mehr oder nicht weniger Sicherheit auf dem Server , als wenn der Benutzer sein Kennwort direkt angegeben hätte und als solches geschützt werden sollte.

Wenn Sie Um dieses zusätzliche Sicherheitsniveau bieten zu können, würde ich zwei Hashes empfehlen. Hash einmal clientseitig, um ein neues, eindeutiges Passwort zu erstellen, dann Hash dieses Passwort auf dem Server, um einen Wert zu erstellen, den Sie in der DB speichern. Auf diese Weise erhalten Sie das Beste aus beiden Welten.

Zum größten Teil wird SSL ausreichend vertraut, um den Austausch zu schützen, sodass der anfängliche Hash vor der Übertragung als unnötig angesehen wird und ein kompromittierter Server dies jederzeit ändern kann Code, der so an den Client gesendet wird, dass der anfängliche Hash nicht ausgeführt wird. Es ist einfach keine effektive Alternative zu SSL und bietet nicht genügend zusätzlichen Vorteil, um die Kosten und die Komplexität wert zu sein.

Ich muss einige Daten clientseitig verschlüsseln, und indem ich nur den Hash an den Server sende, kann ich nachweisen, dass der Server die lokalen Daten nicht entschlüsseln kann, da er das Klartextkennwort nicht kennt. Wenn der Hash mit dem Domainnamen gesalzen wird, gibt es eine Garantie dafür, dass der Server mein Passwort niemals verlieren kann, sondern nur einen gesalzenen (nutzlosen) Hash.
@Muis Mein Punkt ist, dass der gesalzene Hash nicht nutzlos ist. Dies kann die Integrität Ihres Authentifizierungssystems beeinträchtigen, da es sich um das neue Kennwort für die Authentifizierung handelt (auch wenn dies nicht für die Verschlüsselung gilt). Der Angreifer könnte weiterhin den Hash von der Datenbank auf dem Server abrufen und den Server davon überzeugen, dass er der Benutzer ist, und auf die verschlüsselte Kopie der Dateien zugreifen (auf die er zu diesem Zeitpunkt möglicherweise bereits Zugriff hat). Darüber hinaus sollte ein Salt global eindeutig sein und kein Domainname.
@Muis - Mein Punkt ist einfach, dass Sie die vom Hash generierte Clientseite so behandeln sollten, als wäre es das eigene Passwort des Benutzers, wenn Sie sich mit dem Server befassen. Es ist nicht schlecht, einen clientseitigen Hash zu verwenden, um das Kennwort des Benutzers davor zu schützen, dem Server ausgesetzt zu werden, aber es verhält sich für den Server praktisch wie das direkte Kennwort des Benutzers.
Meine Hauptsorge ist, dass das durchgesickerte Passwort verwendet werden kann, um sich bei ANDEREN Sites anzumelden, bei denen der Kunde dieselbe Kombination aus Benutzername und Passwort verwendet hat. Dies wird verhindert, indem der Domainname zum Hash hinzugefügt wird (da ich keinen eindeutigen Wert dauerhaft in Javascript speichern kann).
@muis das Salz muss nicht geschützt werden. Speichern Sie es auf dem Server und senden Sie es vor dem Hashing an den Client. Wenn dem Server hierfür nicht vertraut werden kann, verwenden Sie weiterhin den Domänennamen und den Benutzernamen, die möglicherweise an die vom Server bereitgestellten Daten angehängt sind.
Warum dann nicht einfach beides machen?Hash auf der Clientseite, um zu vermeiden, dass das eigentliche Klartextkennwort verloren geht, und erneut Hash auf der Serverseite, um das Problem zu vermeiden, dass Hash zum Kennwort wird.
@xaser - Sie könnten, aber es würde nicht viel hinzufügen.Das ist im Grunde das, worüber muls und ich in Kommentaren gesprochen haben.Dies wird nur wirksam, wenn Sie einen Mann in der Mitte haben, der nur beobachten kann (andernfalls könnte er das clientseitige Hashing entfernen) und nur dann einen Unterschied macht, wenn das Salz global eindeutig ist (nicht regenbogenfähig) und das Passwortselbst ist sicher genug, um nicht mit einem Hash-Cracker brutal gezwungen zu werden.Die Site selbst wird nicht geschützt, da der clientseitige Hash das Kennwort des Benutzers für diese Site ist und nur freigegebene Kennwörter schützt (die ohnehin schlecht sind).
Bietet Hashing auf Client- und Serverseite nicht die gleiche effektive Sicherheit wie die Verwendung von SSL / TLS zur Übertragung von Kennwörtern im Klartext?Wenn nicht noch sicherer, wenn diese Protokolle gebrochen würden?Die Länge wird hier nicht berücksichtigt, komplexe Passwörter können bei Bedarf erforderlich sein. @AJHenderson
@uhfocuz Nein. Aus vielen Gründen überhaupt nicht.Das Hauptproblem besteht darin, dass für Anmeldezwecke der clientseitige Hash das Kennwort des Benutzers ist, nicht unabhängig vom Benutzertyp, da der Server nicht überprüfen kann, was die Clientseite getan hat.Ohne Schutz auf dem Kanal, der den Inhalt der Seite bereitstellt, könnte ein Mann in der Mitte einfach den clientseitigen Hash vollständig entfernen und das Kennwort des Benutzers erfassen.Selbst ohne diese Probleme wäre es einfacher, eine Hash-Kollision zu erzwingen, wenn das Kennwort nicht den gleichen Entropiegrad wie der in SSL verwendete Schlüssel darstellt.
@AJHenderson Was ist, wenn der "Hash als Benutzerkennwort" ein sichereres Medium darstellt und zwei vollständig separate Hashing-Algorithmen auf Client- und Serverseite verwendet wurden?Und nur um Sie zu beruhigen, wird hier auch SSL verwendet.Wäre dies eine gute Dynamik für sicheres clientseitiges Hashing, während die Art des Hashs sicher auf der Serverseite gespeichert bleibt?
@uhfocuz das ist mein Punkt.Es bietet kein sichereres Medium.Zwei verschiedene Hashing-Algorithmen spielen keine Rolle.Ich habe nie gesagt, dass Sie keinen clientseitigen Hash ausführen können, nur dass die Art eines clientseitigen Hashs Ihnen in Bezug auf Sicherheit wirklich nicht viel bietet.Es schützt nur einen Benutzer, der an mehreren Stellen dasselbe sichere Kennwort verwendet, vor dem Senden des Kennworts an den Server.Dies ist ein sehr begrenzter Vorteil für eine Menge Arbeit und eine potenziell vergrößerte xss-Oberfläche.
@AJHenderson Ich bin immer noch stark gegen Ihre Behauptung, dass dies einen sehr begrenzten Vorteil bieten würde, es würde die Bruteforcing-Zeiten verdoppeln, niemals könnte das echte Passwort in dem Szenario, in dem unsere HTTPS-Protokolle bereits gebrochen sind, leicht preisgegeben werden, und XSS, nein, Manipulationen, ja, aberDiese Daten stammen aus der Registrierung, wären genauso effektiv wie die tatsächliche Verwendung von Manipulationsdaten
@uhfocus hätte keine Auswirkungen auf die Brute-Force-Zeit, die zusätzliche Läufe auf der Serverseite nicht hätten, und bietet der Site, die sie implementiert, überhaupt keinen Vorteil, da der clientseitige Hash für die Authentifizierung irrelevant ist.Wenn ssl kaputt geht, bietet das System überhaupt keinen Vorteil, da es keine Integritätsprüfung oder Serverauthentifizierung bietet.Der einzige Vorteil, den es bietet, ist der von mir beschriebene.Wenn es das liefern würde, was Sie beschreiben, wäre es großartig, aber es tut es nicht.
Wir können dies im Chat [hier] (http://chat.stackexchange.com/transcript/message/31963600#31963600) weiter diskutieren, wenn Sie möchten.
@AJHenderson Ich glaube nicht, dass der Server das Salt an den Client senden soll.Salt schützt vor dem Shotgun-Ansatz und ermittelt das Kennwort für viele Benutzer gleichzeitig, wenn die Datenbank kompromittiert wird.Es hilft nicht, sich gegen einen Angriff gegen einen einzelnen Benutzer zu verteidigen.Wenn das Salz eines Benutzers öffentlich an jemanden weitergegeben wird, der versucht, sich mit diesem Benutzernamen anzumelden, wird die allgemeine Sicherheit geringfügig verringert.
@lordcheeto wie?Ohne die Datenbankdaten ist ein Offline-Angriff nicht möglich.Das Salz ohne Hash zu haben, ist für einen Angreifer von null Wert.Aus diesem Grund wird das Salz nicht als sichere Daten betrachtet.Die Datenbank muss es wissen und wenn der Angreifer die Datenbank nicht hat (oder zumindest den Hash), sind es völlig nutzlose Informationen.Wenn der Client selbst kompromittiert ist, kann er einfach ein Schlüsselprotokoll erstellen.
"* Sollte der Server jemals kompromittiert werden, hätte der Angreifer sofort Zugriff auf alle Benutzer *" Woa, große Überraschung!Jemand, dem der Server gehörte, kann tatsächlich auf Dinge auf dem Server zugreifen!Abgesehen von Sarkasmus habe ich das Gefühl, dass diese Antwort nicht die richtigen Dinge hervorhebt.Sicher, man sollte einen schnellen Hash auf dem Server durchführen, aber warum beschäftigen wir uns sonst mit langsamen Hashes und Salzen, wenn nicht zum Schutz des Benutzers?Clientseitiges Hashing hat [viele Vorteile] (https://security.stackexchange.com/a/201099/10863), und ich halte das Verhindern einer Anmeldung für einen netten Nebeneffekt, der für die Systemsicherheit keineswegs wesentlich ist.
@Luc - Nicht alle Verstöße beinhalten vollständige Kontrolle.Wenn nur schreibgeschützt auf die Benutzertabelle zugegriffen wird, werden alle Benutzer vollständig verletzt.Wenn das Hashing serverseitig sicher ist, würde es immer noch einen erheblichen Aufwand pro Benutzer geben, um das System weiter gefährden zu können.Möglicherweise ist nur ein Offline-Backup-Server kompromittiert oder ein Backup auf einem Entwicklungs-Laptop wird gestohlen.Es ist dumm, nur alles oder nichts zu erwarten.Ein langsamer clientseitiger Hash wird trivial umgangen, da die Clientseite übersprungen werden kann und stattdessen einfach das vom Server erwartete Ergebnis eingibt.
@Luc - Beachten Sie, dass ich Ihrer Antwort auf die andere Frage tatsächlich zustimme, da es sich um eine Anwendung handelt.Im Fall einer Anwendung ist es zumindest etwas schwieriger, das zusätzliche Hashing zu umgehen, um direkt zum Zwischenkennwort zu springen. Es gibt also einen gewissen Wert, aber diese Frage bezog sich speziell auf Websites, bei denen es trivial ist, zum Zwischenkennwort zu springen.Alles, was clientseitiges Hashing für eine Website tut, ist, ein vom Passwort abgeleitetes Passwort zu erstellen, und ein langsamer Hash ist nicht effektiver als ein schneller clientseitiger Hash oder ein vom Passwort abgeleiteter Schlüssel.
@AJHenderson Wenn es trivial ist, zum Zwischenkennwort zu springen, bedeutet dies, dass ein Angreifer nur den Code des Servers ändert, um zu verhindern, dass er das erforderliche JavaScript an den Client sendet, sodass der Client stattdessen das Kennwort sendet?In diesem Fall siehe die FAQ unten, es ist ein Argument, das ich häufig sehe, und ich denke einfach nicht, dass es ausreicht, um alle Vorteile zu negieren.
@Luc - Ihre FAQ ist falsch, wenn es um Websites geht.Kommentare sind kein großartiger Ort für ausführliche Diskussionen, aber um es kurz zu machen: Langsames Hashing ist NUR wichtig, wenn die Hashes kompromittiert sind (daher ist die Datenbank kompromittiert), wenn der Server nicht kompromittiert istals Kanalverschlüsselung ist vorhanden.Der Punkt über eine Browsererweiterung ist völlig irrelevant, da der Angreifer nicht den Computer des Benutzers angreift, sondern die Webschicht.Die Wahrscheinlichkeit eines begrenzten Einbruchs, insbesondere bei anständigen IDS, ist tatsächlich recht hoch.
Wenn Dinge, die nicht in die DB geschrieben werden sollen, in die DB schreiben, wird etwas auffallen, aber es gibt viele Möglichkeiten, wie schreibgeschützte Hash-Listen exfiltriert werden können.Es wäre dann möglich, an der Kompromittierung von Konten zu arbeiten, um entweder Änderungen im System vorzunehmen oder nach übereinstimmenden Anmeldeinformationen für andere Dienste zu suchen.Dies ist der viel realistischere Fall, und das clientseitige Hashing wird nicht viel dazu beitragen.Es hat einen Wert für die Passworterweiterung, aber das ist alles, was es wirklich erreicht.
Cyker
2016-11-29 16:21:54 UTC
view on stackexchange narkive permalink

Wenn Sie einige Vorteile haben, sollten Sie diese in Ihrer Frage auflisten, damit die Leute herausfinden, ob sie wirklich nützlich sind (und wenn ja, werden Sie vielleicht berühmt;)

Die Leute tun es nicht. t clientseitiges Hashing nicht bevorzugen, da sie bessere Möglichkeiten zum Schutz privater Informationen von Benutzern bieten. Lassen Sie uns über die Orte mit potenziellen Informationslecks nachdenken, von denen es drei gibt:

  • Der Client.
  • Zwischen dem Client und dem Server.
  • Der Server.

Dann wollen wir sehen, warum oder warum nicht clientseitiges Hashing an diesen Stellen hilfreich ist.

  • Der Client. P. >

    Wenn auf Ihrem eigenen Computer Malware vorhanden ist, z. B. wenn Ihr Browser kompromittiert ist oder auf Ihrem Computer eine Schlüsselprotokollierungssoftware implantiert ist, verhindert clientseitiges Hashing nicht, dass ein Hacker Ihr Kennwort erhält. Der Grund liegt auf der Hand.

  • Zwischen Client und Server.

    Zwischen Client und Server besteht ein Kommunikationskanal. Wenn ein Lauscher auf die Kommunikation wartet, kann das clientseitige Hashing das Durchsickern des Kennworts erschweren, da der Lauscher das ursprüngliche Kennwort aus seinem Hash wiederherstellen muss. Dies ist in der Tat nützlich.

    Diese Sicherheitsanfälligkeit basiert jedoch auf der Voraussetzung eines unsicheren Kommunikationskanals. In Wirklichkeit gibt es Protokolle, deren Existenz versucht, dieses Problem genau zu lösen. Ihre Hauptaufgabe ist es, einen sicheren Kanal über einen unsicheren zu etablieren. Das bekannteste und am weitesten verbreitete Beispiel ist SSL / TLS. Es bietet mehr Funktionalität und bessere Sicherheit als clientseitiges Hashing.

    Die Schlussfolgerung ist, dass clientseitiges Hashing im Kanal hilfreich ist, aber hier sind bessere Tools.

  • Der Server.

    Benutzerinformationen können auf dem Server verloren gehen, wenn der Server von einem Hacker kompromittiert wird. Der Hacker kann Benutzerkennwörter aus der Datenbank abrufen, wenn diese im Klartext gespeichert sind. Deshalb machen das heute die meisten Server nicht. Stattdessen speichern sie Hashes von Passwörtern, sodass Hacker die ursprünglichen Passwörter nicht einfach aus ihren vorliegenden Informationen (dh Hashes) wiederherstellen können.

    Sie könnten versucht sein zu glauben, dass die Dinge immer noch gut funktionieren, wenn der Server einfach speichert auf der Clientseite berechnete Hashes. Das ist aber völlig falsch. In dieser Situation werden die Hashes selbst zu Passwortäquivalenten. Der Hacker kann die Authentifizierung bestehen, indem er den Hash einfach übergibt, ohne ihn umzukehren. Das Ziel eines Hackers ist nicht, einen Hash umzukehren, sondern in Ihr Konto einzubrechen. Die Bedeutung liegt im Überprüfungsprozess des Servers für Clientdaten, nicht in der Tatsache, dass die Daten ein Hashwert sind. Daher ist der Vorteil von clientseitigem Hashing hier trivial und der Server muss ohnehin erneut aufbereitet werden.

Zusammenfassend ist clientseitiges Hashing hilfreich Schutz der Benutzerinformationen, der Schutz gilt jedoch weitgehend für den Kommunikationskanal. Da wir dort bessere Ansätze haben (SSL / TLS), ist die Anwendung von clientseitigem Hashing stark unterdrückt. Es ist einfach nicht das beste Werkzeug für die jeweilige Aufgabe.

Betreff: diese Aussage: "Das Ziel eines Hackers ist nicht, einen Hash umzukehren, sondern in Ihr Konto einzubrechen."Ich würde sagen, das hängt davon ab, was die Seite ist.Oft ist das Passwort des Benutzers wertvoller als der Zugriff auf die Site, mit der Hoffnung, dass das Passwort auf anderen Sites verwendet werden kann, auf denen der Zugriff mehr Wert hätte.
@TTT In diesem Zusammenhang bedeutet dieser Satz, dass es dem Hacker egal ist, ob es sich um ein Hash- oder ein Klartext-Passwort handelt, solange er die gewünschten privaten Informationen erhält.
Diese Antwort ist super hilfreich.
Ich stimme TTT zu.Ich bin nicht der Meinung, dass es "besser" ist (wie Sie gesagt haben), wenn der Client sein Passwort im Klartext anstelle eines gesalzenen Hashs sendet.Dies erhöht das Risiko, dass ein serverseitiger Agent das Client-Passwort stiehlt oder verliert, entweder durch böswillige Absicht oder durch Nachlässigkeit.Da viele Benutzer das Passwort seitenübergreifend wiederverwenden, ist dies ein sehr besorgniserregendes Risiko.
Die Zusammenfassung Ihrer Antwort lautet also "weil ich nur geringfügige Vorteile sehe"?Nicht, weil es irgendwelche Nachteile gibt, nur einen schnellen Hash auf dem Server und den langsamen Hash auf dem Client auszuführen?Ich habe in [dieser Antwort] (https://security.stackexchange.com/a/201099/10863) ein wenig auf das Thema eingegangen und bin gespannt auf Ihre Gedanken.
@Luc Die Idee ist, dass der Server alles, was vom Client übergeben wurde, als Identitätsnachweis verwendet, unabhängig davon, ob es sich um einen Hash handelt oder nicht.Der Server betrachtet ihn einfach als einfache Zeichenkette und der Server muss seine eigene Aufgabe erledigen, um diese Zeichenkette vor der Wiederherstellung des böswilligen Zeichens zu schützen.Wenn der Client der Meinung ist, dass er sein Kennwort vor einem böswilligen Server oder einem anfälligen Kommunikationskanal schützen muss, dann kann er dies tun.Aber das ist nicht die Aufgabe des Webservers.Beispielsweise kann der Client für jede Site ein zufälliges Kennwort verwenden, und es ist kein Hashing erforderlich.
@Cyker Ja, wenn jeder einen Passwort-Manager mit eindeutigen, zufälligen Passwörtern verwenden würde, müssten wir diese Diskussion nicht führen!Dies ist jedoch nicht der Fall. Wir alle wissen, wie häufig Websites gehackt werden und dass die Daten verwendet werden, um die Benutzer auf anderen Websites zu hacken, auf denen sie ihr Kennwort erneut verwendet haben.Es ist in der Tat nicht Ihre Aufgabe, den Benutzer zu schützen, aber es ist auch nicht Ihre Aufgabe, Wasser in Afrika zu reparieren.Dennoch zahlen Länder, die es sich leisten können, Entwicklungshilfe (und in demokratischen Ländern sind sich die Menschen einig).Wir helfen anderen Menschen, wo wir können. Wenn wir also nur an einem besseren Ort hacken können, warum nicht?
@Luc Für * Hash an einem besseren Ort *: Warum denken Sie, dass Hashing auf der Clientseite besser ist als auf der Serverseite, wenn der Kanal sicher ist?Wenn Sie einfaches HTTP verwenden, sollten Sie zu HTTPS wechseln, anstatt sich auf Ihr eigenes clientseitiges Hashing zu verlassen.
@Cyker Siehe den Link, den ich zuvor gepostet habe: https://security.stackexchange.com/a/201099/10863 Clientseitiges Hashing bietet viele Vorteile, die alle davon ausgehen, dass der Transportkanal sicher ist (Sie haben mich nur daran erinnert, dass ichIch habe vergessen, den Fall zu erwähnen, in dem der Transportkanal beeinträchtigt ist!).Volle Übereinstimmung darüber, dass https übrigens viel wichtiger ist als clientseitiges Hashing.Wenn Sie kein https haben, gibt es viel größere Probleme.
@Luc Wenn Sie der Meinung sind, dass clientseitiges Hashing in Ihrem speziellen Anwendungsfall hilfreich ist, können Sie es implementieren.Vorausgesetzt, Sie verwenden einen vernünftigen Hashing-Algorithmus, sehe ich nicht, wie er schädlich wird, außer dass einige Ressourcen auf dem Client-Computer verschwendet werden.Wenn Sie beispielsweise der Meinung sind, dass der Clientcomputer sicherer ist als der Servercomputer, weil einige saure Mitarbeiter Benutzerdaten auf der Serverseite abfangen.Vergessen Sie in diesem Fall nicht, den Hash zu salzen.
@Cyker Salting, ja, danke, dass Sie mich daran erinnert haben, das hinzuzufügen.Die Leute sollten das in der Tat nicht vergessen.
Mayhem Software
2015-05-05 12:36:57 UTC
view on stackexchange narkive permalink

Es wird empfohlen, auf der Clientseite zu hashen, dann das Kennwort zu salzen und auf der Serverseite erneut zu hashen. Dies ist eine zusätzliche Schutzschicht gegen Menschen bei mittleren Angriffen. SSL ist die erste Schicht, doch Snowdens Enthüllungen machten deutlich, dass SSL von Organisationen wie der NSA relativ einfach kompromittiert werden kann.

Diese Antwort liefert nichts, was die anderen Antworten nicht tun, und übersieht den Punkt, dass für ein MitM der Hash des Clients des Passworts so verwendet werden kann, als wäre es das Passwort selbst.
@Mark Um no Mark. Dies hilft in der Tat bei Mitm. Mayhem gibt an, das Hash-Passwort noch einmal gehasht zu haben.
Das ist eine gute Idee, an die ich nicht gedacht habe.Hash auf der Clientseite, um das Klartextkennwort auszublenden, und Hash auf der Serverseite, um vor einem Verstoß auf der Serverseite zu schützen.Danke für das Teilen!
@Karl, Der 'Mann in der Mitte' würde immer noch die gleichen Anforderungsparameter wie der Zielbenutzer bereitstellen.Nur weil es kein Passwort ist, heißt das nicht, dass der Angreifer den Hash nicht abfangen und dem Server denselben Hash zur Verfügung stellen kann (damit er den Hash "hasht" und bei einem Match erfolgreich ist).
@RedGlobe Das ist jedoch wahr.Aber es hilft, weil eine Menge Internetnutzer für alles das gleiche Passwort verwenden.Ich bin damit einverstanden, dass es gegen dieses spezielle System möglicherweise nicht hilft, aber es wird in größerem Maßstab helfen.
Philipp
2014-03-18 17:12:43 UTC
view on stackexchange narkive permalink

Welche Vorteile hätte clientseitiges Passwort-Hashing?

Nun, das Passwort würde nicht im Klartext über das Internet gesendet. Sie sollten jedoch beim Anmelden unbedingt die TLS-Verschlüsselung verwenden, damit das Abhören von Kennwörtern kein Problem darstellt.

Ein weiterer Grund könnte sein, dass der Server niemals sein soll Achten Sie auf das Passwort des Benutzers, auch nicht für eine Mikrosekunde. Das bedeutet, dass Sie dem Server bei der Registrierung den Kennwort-Hash geben und sich dann mit diesem Kennwort-Hash anmelden. Leider löst dies nichts: Das gemeinsame Geheimnis, um sich in das Konto einzuloggen, ist jetzt der Hash, nicht das Passwort. Wenn Sie Kenntnis vom Hash haben, können Sie sich anmelden, ohne das tatsächliche Kennwort zu kennen (da der Server es auch nicht kennt).

Der Vorteil für mich wäre, dass ich das Kennwort des Benutzers verwenden kann, um einige lokale Daten in meiner App zu verschlüsseln und zu beweisen, dass der Server diese Daten niemals entschlüsseln kann (da er nur den Hash kennt). Andernfalls hätte ich zwei Aufforderungen an den Endbenutzer, zwei verschiedene Passwörter einzugeben (1 für die Anmeldung, 1 für die Verschlüsselung).
@Muis In diesem Fall wäre die Antwort "Weil niemand so exotische Anforderungen hat wie Sie".
@Muis, Ihre Definition von "Beweis" muss schwach sein, da die Kenntnis des Hashs häufig der Kenntnis des Passworts entspricht, da Wörterbuchangriffe so erfolgreich sind. Ich verstehe Ihren Standpunkt jedoch. Es ist ein Beweis, wenn der Benutzer ein gutes Passwort wählt.
@mikeazo Ich salze den Hash, daher sind Wörterbuchangriffe nutzlos.
@Muis So funktioniert das Salzen nicht. Salze schützen nur vor vorberechneten Regenbogentabellen, nicht vor Wörterbuchangriffen.
@Philipp,-Salz schützt vor Wörterbuchangriffen, bei denen der Angreifer nur einen von vielen erfassten Hashes haben möchte. Es hilft nicht gegen Wörterbuchangriffe auf einen einzelnen Hash.
@muis verwendet in diesem Fall einen privaten symmetrischen Schlüssel, der kennwortgeschützt ist.Dies bietet im Allgemeinen eine weitaus bessere Sicherheit für die verschlüsselten Daten aufgrund der höheren Entropie des symmetrischen Schlüssels und stellt gleichzeitig sicher, dass der Server nicht entschlüsseln kann (da er nicht über den privaten Schlüssel verfügt).Rollen Sie nicht Ihre eigenen ... verwenden Sie etablierte und bekannte sichere Muster.
@Muis Die Verwendung des Benutzerkennworts zum Verschlüsseln lokaler Daten ist möglicherweise nicht so gut wie Sie denken.Was passiert, wenn der Benutzer sein Passwort ändert?Wenn der Server über die Daten verfügt, um sie mit dem Benutzerkennwort zu verschlüsseln, muss der Server die Daten nicht entschlüsseln, er verfügt bereits darüber, sodass Sie nicht nachweisen können, dass der Server nicht auf die Daten zugreifen kann (welche)ist der Punkt der Entschlüsselung)
-1 sehr kurzsichtige Antwort.Sicher, was Sie an den Server übertragen, entspricht Ihrem Passwort.Das ist immer so.Aber es schützt den Benutzer viel besser, es vor der Übertragung zu hashen (TLS hat einige Probleme) und insbesondere bevor es auf dem Server ankommt (wo die wirklichen Schwachstellen normalerweise auftreten).
Sky
2014-03-18 18:56:40 UTC
view on stackexchange narkive permalink

Da es sich um eine Webanwendung handelt ...

In einer Datenbank haben wir einen Tabellenaufruf dbo.useracc. Wir speichern dieses Hash-Passwort.

  Benutzerkennwort- ------- ---------- user1 5f4dcc3b5aa765d61d8327deb882cf99user2 202cb962ac59075b964b07152d234b70user3 098f6bcd4621d373cade4e832627b4f6  

und unsere Anmeldefunktion

 code> if (user == $ user und password == $ pass) {return auth.token}  

Angenommen, ein Angreifer hat die Datenbank erfolgreich gehackt und gestohlen und unsere dbo.useracc-Daten gespeichert . Er hat jetzt unser Hash-Passwort.

Wenn Ihr Login-Hash-Prozess im Client gespeichert ist, kann der Angreifer weiterhin mit dem Hash-Passwort auf Ihr Konto zugreifen, indem er einfach die HTTP-POST-Methode anschließt und das zu sendende Passwortfeld ändert Ihr Hash-Passwort und er kann sich weiterhin anmelden. Denken Sie daran, dass Ihre Anwendungsdaten über die POST-Methode mit dem Server kommunizieren, nachdem der Hash überprüft wurde.

Wenn sich der Hashing-Prozess jedoch auf dem Server befindet, ist dies eine andere Geschichte.

  $ pass = md5.hash ($ pass); if (Benutzer == $ Benutzer und Passwort == $ Pass) {return auth.token;}  

Wenn der Hacker das Hash-Passwort zum Anmelden verwendet, handelt es sich um ein Hash-Hash-Passwort, das mit einem Hash-Passwort verglichen wird.

In diesem Fall sagen wir, der Angreifer postet

$ user = user1 $ pass = 5f4dcc3b5aa765d61d8327deb882cf99

Nachdem die Serverseite $ pass = md5.hash (5f4dcc3b5aa765d61d8327deb882cf99) ausgeführt hat ) Es wird '696d29e0940a4957748fe3fc9efd22a3' zurückgegeben, was eine falsche Anweisung zurückgibt.

Hiermit wird ein Angreifer abgewehrt, der die Datenbankdaten erfolgreich gestohlen hat und versucht, über die Webanwendung mit dem Hash-Kennwort darauf zuzugreifen. Und natürlich kann sich der Angreifer immer noch in die Konten hacken, wenn er die Hashes durch Wörterbuchangriffe und so weiter erfolgreich brutal erzwingt / knackt. Der Hacker benötigt jedoch eine längere Zeit, wenn das Kennwort nach einer Kompromittierung des Systems ein gutes Kennwort ist und der Serveradministrator das Kennwort einfach zurücksetzen und den Benutzern eine E-Mail senden kann.

Es wird auch für interne Bedrohungen wie Mitarbeiter in einem verwendet Unternehmen. In einem Unternehmen gibt es Datenbankadministratoren und Entwickler. Sie sind verschiedene Rollen. Um zu verhindern, dass Mitarbeiterbenutzer auf die vertraulichen Daten zugreifen können, müssen sie sowohl auf die Anwendung als auch auf die Datenbank zugreifen können, um auf die Daten zugreifen zu können. Natürlich könnten Sie argumentieren, dass ein DBA die Datenbankdaten immer noch über die Datenbank selbst ändern kann, aber die Entwickler können nicht darauf zugreifen und es ist einfacher festzustellen, woher der Angriff stammt. Es geht um Zugriffssteuerungsrechte und die Minimierung der Risiken und Bedrohungen.

Sie haben Recht, dass es für einen Angreifer nicht schwieriger ist, MEINE Site mit dem gestohlenen Hash zu betreten, aber es macht es schwieriger, sich bei einer anderen Site anzumelden, da die andere Site höchstwahrscheinlich nicht genau den gleichen Salt + Hashing-Algorithmus verwendet.
Es gibt keine Möglichkeit, dass der Angreifer auch mit dem Hash-Passwort auf eine andere Site zugreifen kann, solange die ANOTHER-Website kein Hashing im Client praktiziert und ein gutes Passwort ist, das durch Wörterbuch- oder Regenbogentabellenangriffe nur schwer zu erzwingen ist. Und warum sollten Sie sich als Entwickler überhaupt für "ANOTHER" interessieren? Wenn die Benutzer ihre anderen Daten sehr schätzen, sollten sie üben, stattdessen kein globales Kennwort zu verwenden.
Steven Coco
2018-01-21 13:15:54 UTC
view on stackexchange narkive permalink

Obwohl das Thema einige konkrete Leckstellen aufweist, wie von @Cyker hervorgehoben, ist die Diskussion hier etwas lebhaft ... Ich möchte einen Punkt hinzufügen, den ich nicht erwähnt habe.

Es ist einfach so, dass Sie, wenn Sie so schnell wie möglich hashen, das Programmierrisiko verringern, wenn Sie versehentlich ein Klartextkennwort an einen Ort übergeben, an den es nicht gehen sollte. Wir ergreifen bereits Maßnahmen wie sichere Zeichenfolgen und sichere Arrays, um zu versuchen, den Klartext so schnell wie möglich zu zerstören. Das Hashing im Moment, in dem Sie das Passwort erhalten, ist eine weitere Maßnahme wie diese ... Während sich der Code weiterentwickelt usw. scheinen die Risiken immer noch verringert zu sein.

Ich habe gerade eine kleine C # "Box" geschrieben, die benötigt wird Der SecureString-Klartext wird sofort gehasht. Auf diese Weise weiß ich einfach, dass er niemals protokolliert oder an eine Bibliothek übergeben wird, die ich nicht erwarte. Hier geht es nicht so sehr um ein Protokoll, sondern nur darum, dass der Programmierer hier sitzt und sich ein Passwort ansieht - ich möchte es nicht anfassen! (In einigen Aspekten ist es immer noch ein Passwortäquivalent, aber es ist zumindest sofort vor Torheit verborgen, wie das Verschieben einer schließenden Klammer in einem verketteten Methodenaufruf und das Übergeben von Klartext an die falsche Stelle. Und ein sicheres Array ist immer noch nicht verborgen.)

DeepS1X
2017-05-08 07:36:50 UTC
view on stackexchange narkive permalink

Ich werde hier mit dem ausdrücklichen Ziel einspringen, zugunsten des clientseitigen Hashing-Mechanismus abzuwägen. Mal sehen, wie wir davon profitieren:

Client-seitig: Keine Verbesserung.

Während der Übertragung: Schützt das Kennwort bei SSLstrip, bei dem das Kennwort im Klartext übertragen wird. Wenn jedoch HSTS implementiert ist, würden die meisten Leute sagen, dass SSLStrip keine Auswirkungen haben würde. Richtig? Nein.

Beim Eintritt in den Server: Schließlich sehen wir den Hauptvorteil. Was passiert, wenn jemand den Server kompromittiert hat? Sie erhalten einen kontinuierlichen Fluss von Klartextkennwörtern, wenn sie nur Wireshark / TCPDump starten und den privaten Schlüssel des Servers exportieren. Jetzt können sie ein paar Monate am Kabel sitzen und bei Servern mit hohem Volumen (Millionen von Benutzerregistrierungen pro Monat) erhalten sie ihre massive Klartextverletzung. Dies setzt voraus, dass es wertvoller ist, die Kennwörter für die Personen im Dienst abzurufen, als RCE auf ihrem Server zu haben.

Auf dem Server: Leistungsvorteile, wenn er nicht ausgeführt werden muss Verschlüsselung jedes eingehenden Kennworts, wodurch einige Rechenkosten auf den Client verlagert werden, ohne dass neue Sicherheitslücken entstehen. Dies scheint sowohl für den Administrator Ihres Servers als auch für Ihre Hardwarekosten eine gute Sache zu sein.

Es scheint jedoch eine bewährte Methode zu sein, Kennwort-Hashing in die Clientseite zu integrieren, es sei denn, dies führt zu unerträglichen Ladezeiten für Seiten die Benutzer.

Ich bin gespannt, warum jemand diese Antwort abgelehnt hat.SSLStrip ist etwas veraltet, aber nicht falsch, und der Rest der Antwort klingt für mich korrekt.
Ich weiß es bestimmt nicht.Wenn ich meinen Kommentar von vor einigen Jahren noch einmal lese, sehe ich keine offensichtlichen Fehler in meiner Argumentation.
BeloumiX
2019-01-10 14:19:25 UTC
view on stackexchange narkive permalink

Ich stimme zu, dass der Vorteil von clientseitigem Hashing zum Schutz des Authentifizierungsprozesses begrenzt ist, wenn SSL / TLS verfügbar ist. SSL / TLS behebt jedoch nicht die Sicherheitsanfälligkeit für benutzerdefinierte Hardwareangriffe, wenn der Angreifer Zugriff auf die gespeicherten Hashes hat (NACH dem Prozess). Funktionen wie einfache gesalzene Hashes oder Schemata wie PBKDF2 sind aufgrund ihres geringen Speicherbedarfs sehr anfällig für diese Angriffe. Das Knacken von Passwörtern, die mit diesen Schemata geschützt sind, ist billig und schnell. Und das ist mindestens eines der Hauptprobleme beim Passwort-Hashing.

Auf den ersten Blick hat dies nichts mit clientseitigem Hashing im Vergleich zu SSL / TLS zu tun - aber: Wenn ein Server ein speicherfestes implementiert Kennwort-Hashing-Schema wie Scrypt, Argon2 oder Catena zum Schutz benutzerdefinierter Hardwareangriffe erhöhen die Hardwareanforderungen des Servers erheblich. In der Realität reduzieren Dienste daher die Speicherhärte oder wechseln zu anfälligen Schemata. Clientseitiges Hashing hilft ein wenig, dieses Problem zu umgehen. Wenn die Clients diese teuren (speicherintensiven) Funktionen berechnen, kann der Dienst sie verwenden, ohne dass bessere Hardware erforderlich ist.

Moderne Kennwort-Hashing-Schemata bieten daher die Möglichkeit, die teuersten (speicherintensiven) Teile zu delegieren der Funktion an den Client. Diese Funktion heißt Server Relief und wird von Argon2 und Catena angeboten.

Fazit: Die Verwendung moderner Kennwort-Hashing-Schemata, die weniger anfällig für benutzerdefinierte Hardwareangriffe sind, wird die Verwendung von clientseitigem Hashing in Zukunft erhöhen oder zumindest verstärken - natürlich zusammen mit SSL / TLS .

savvy
2016-11-29 14:29:35 UTC
view on stackexchange narkive permalink

Ich denke, clientseitiger Hash hat einen Vorteil und einen Nachteil:

Pro: Sie verstecken das Passwort im Fall von DNS / Phishing / was auch immer, was für den Benutzer nützlich ist, da die meisten Leute Passwörter wiederverwenden auf mehrere Service. Wie andere Entwickler bereits sagten, dient dies nicht Ihrer eigenen Sicherheit.

Nachteile: Ihr Server erhält das Kennwort nicht, wodurch beispielsweise verhindert wird, dass der Benutzer vor der Kennwortstärke gewarnt wird. Ich weiß, dass einige sagen werden, dass dies clientseitig sein kann / sollte, aber wenn Sie mehrere Clients haben, kann dies hilfreich sein, um serverseitig zu zentralisieren.

(Ich habe nicht abgelehnt, wäre nett, wenn die Leute Abstimmungen erklären könnten.) Passwort-Ratschläge sollten wirklich clientseitig erfolgen.Ich würde eine Bibliothek wie [zxcvbn] (https://github.com/dropbox/zxcvbn) empfehlen, die in vielen verschiedenen Sprachen verfügbar ist und sehr zielorientiert und gut gestaltet zu sein scheint.Dies würde auch die Notwendigkeit einschränken, die Beratung separat in den Code aller Kunden aufzunehmen.
Li Billy
2014-03-18 15:42:11 UTC
view on stackexchange narkive permalink

Ich denke, die Wahrscheinlichkeit, auf der Clientseite gehackt zu werden, ist höher als auf der Serverseite. (Weil es einige IT-Experten gibt, die sich um den Server kümmern). wenn Ihr Computer bereits gehackt wird. Die clientseitigen Algorithmen, die zum Hashing Ihres Passworts verwendet wurden, können auch von Hackern gestohlen werden. Sobald Ihre Algorithmen kein Geheimnis mehr sind. Ich denke, es wird nutzlos.

Wir missbilligen im Allgemeinen den geheimen Algorithmus (siehe [Kerckhoffs Prinzip] (http://en.wikipedia.org/wiki/Kerckhoffs_Prinzip) und die Sicherheit durch Dunkelheit. Das Hashing von Passwörtern muss sich sicherlich nicht darauf verlassen Wir wenden einen Schlüssel an und hoffen, dass der Angreifer ihn nicht findet, selbst wenn er es schafft, die Datenbank zu stehlen.
Das Argument "Server ist sicherer" ist in diesem Zusammenhang wenig sinnvoll. 1) Der Client kennt das Klartext-Passwort, sodass ein Trojaner es trivial mit einem Key-Logger stehlen kann. 2) Passwort-Hashing bietet nur dann einen Vorteil gegenüber Klartext-Passwörtern, wenn der Server gehackt und die Datenbank gestohlen wird.
danke, CodesinChaos. Sie haben mir kostenlos eine nützliche Lektion angeboten.
Außerdem, verzeih mir, ich fand dein Twitter ziemlich informativ. Würde es dir etwas ausmachen, wenn ich dir dort folge?
Die Art und Weise, wie Twitter funktioniert, ist, dass Sie Leuten folgen, deren Tweets Sie interessant finden. Keine Notwendigkeit, um Erlaubnis zu bitten.
thx u, folgte.
Ein Server mit all seinen Benutzerdaten ist ein weitaus wertvolleres Ziel als ein einzelner Benutzer.


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...