Frage:
Warum haschen und salzen die Benutzer nicht, bevor sie gespeichert werden?
Grezzo
2012-12-13 17:48:03 UTC
view on stackexchange narkive permalink

Jeder weiß, dass er, wenn er ein System hat, für dessen Anmeldung ein Kennwort erforderlich ist, eine gesalzene &-gesalzene Kopie des erforderlichen Kennworts anstelle des Kennworts im Klartext speichern sollte.

Was ich begonnen habe Heute zu fragen ist, warum sie die Benutzer-ID nicht auch in einem ähnlichen gesalzenen &-Passwort speichern.

Für mich scheint dies logisch, weil ich keine Nachteile sehe und wenn die Datenbank war kompromittiert, müssten die Angreifer das Passwort und den Benutzernamen-Hash "knacken", bevor sie dieses Konto kompromittieren könnten. Dies würde auch bedeuten, dass Benutzernamen, wenn sie gehashte und gesalzene E-Mail-Adressen wären, besser vor dem Weiterverkauf an SPAMmers geschützt wären.

Weil Sie wahrscheinlich das Salz lagern müssten? Was passiert, wenn Sie Ihren Benutzernamen und / oder Ihr Passwort vergessen, was eine schreckliche Verwendbarkeit wäre? Es gibt einen Grund, warum dies nicht getan wird.
Benutzernamen dienen nicht zur Authentifizierung, sondern lediglich zur Identifizierung. Wenn Sie sie mit einem sicheren Protokoll behandeln, müssen Sie sich Sorgen machen. Es ist genauso wichtig zu identifizieren, was * nicht * privat gehalten werden muss, wie zu identifizieren, was * tut *. Eine klare Unterscheidung ist wichtig.
"Jeder weiß, dass er bei einem System, für dessen Anmeldung ein Kennwort erforderlich ist, eine Hash- und Salted-Kopie des erforderlichen Kennworts und nicht das Kennwort im Klartext speichern sollte." * nein *, *** sie nicht ***. Nichts davon ist für jemanden offensichtlich, der neu in der Sicherheit ist. Sogar der Unterschied zwischen Verschlüsselung und Hashing ist jenseits dessen, was manche Leute verstehen können.
@zzzzBov OK, vielleicht meinte ich "jeder, der Sicherheit versteht"
@lynks, aber wäre es nicht schön, wenn bei einer Kompromittierung einer Datenbank nicht alle E-Mail-Adressen der Benutzer abgerufen würden? Sie können diese Adressen nicht nur SPAMEN, sondern sie auch mit ortsspezifischen Phishing-Angriffen angreifen
@Ramhound Ich bin sicher, Sie haben Recht, dass es einen Grund gibt, warum dies nicht getan wird. Ich möchte nur wissen warum. Wenn wir für die Benutzernamen ein Site-weites Salt verwenden würden (ich weiß, dies würde bedeuten, dass es möglich wäre, alle Hashes in einem Durchgang mit brutaler Gewalt anzugreifen), könnten Sie den Benutzernamen trotzdem nachschlagen, indem Sie ihn hashen, bevor Sie die Abfrage ausführen
Für eine Sekunde dachte ich, es könnte eine gute Idee sein, aber welches Unternehmen muss niemals eine E-Mail an seine Benutzer senden?
Wenn Daten in einer Datenbank gespeichert werden, werden sie normalerweise nicht gehasht und gesalzen. Hashing wird nur durchgeführt, wenn ein Bedarf besteht (z. B. um ein Passwort zu schützen). Was wäre die Notwendigkeit, Benutzernamen zu hashen? Mit anderen Worten, die Prämisse Ihrer Frage ist falsch ... Sie gehen davon aus, dass es einen Grund geben sollte, Benutzernamen NICHT zu hashen, wenn das Nicht-Hashing von Daten das Standardverhalten ist.
Könnte der Grund sein, Timing-Angriffe noch weiter abzuschrecken?Da der Benutzername normalerweise mit einem Zeichenfolgenvergleich erstellt wird, könnte man theoretisch Leute davon abhalten, dort auch Vermutungen (in Mikrosekunden) von Benutzernamen (die in der Regel E-Mail-Adressen sind) zu messen.Wenn zum Beispiel jemand E-Mail-Adressen-Benutzernamen hacken möchte, die jeweils 10.000.000 Kennwortschätzungen enthalten, kann die Verwendung von password_verfify () in PHP für den Benutzernamen die zurückgegebene Fehlerzeit noch unregelmäßiger machen und damit schwieriger zu analysieren sein.Die Leute möchten immer noch eine E-Mail an ihre Community senden, aber das bedeutet nicht, dass die E-Mail-Adresse in ...
... die Tabelle zum Anmelden.
Aber jeder Benutzername sollte ein eindeutiges Salz haben ...
Grundsätzlich sehe ich die meisten Leute, die diese Idee verarschen, "weil dies in der Vergangenheit nicht so war. Außerdem sind hier die Gründe und Annahmen aufgeführt, auf denen die Vergangenheit aufbaut."Das Anmelden ist mit Kosten verbunden, und diese Technik ist unabhängig von Ihrer Ansicht im Durchschnitt rechenintensiver.
Kollisionen sind möglich, aber wahrscheinlich nicht mit einer guten Programmierlogik hinsichtlich des Zeitpunkts zum Speichern des Hash-Benutzernamens versehen.
Sehr viele Websites (wie Stackexchange) zeigen die Benutzernamen der Öffentlichkeit in Kommentaren und Posts an.Worum geht es dann beim Hashing von Benutzernamen?
Neun antworten:
user10211
2012-12-13 17:49:37 UTC
view on stackexchange narkive permalink

Siehst du das Ding dort oben, wo dein Benutzername angezeigt wird? Sie können das nicht tun, wenn der Benutzername jetzt gehasht gespeichert ist, oder?

Ein Wort, Benutzerfreundlichkeit.

Der Snark ist in diesem stark;)
Willkommen, 21840c1a3e3db69e01445c8782a99f9b.
Aber sie könnten, wenn Sie einen Anmeldenamen und einen angezeigten Namen hätten, wie Sie es bei Facebook und vielen anderen Diensten tun. Tatsächlich melden wir uns nicht mit einer E-Mail-Adresse beim Stapelaustausch an, sondern es wird ein Spitzname angezeigt
@Thomas, Ja, du hast mich erwischt.
AiliagyaklCMT gut!
Eigentlich könntest du. Speichern Sie nach erfolgreicher Anmeldung den nicht verwaschenen Benutzernamen in der Sitzung.
... Wenn die Sicherheit des Benutzernamens jedoch ein Problem darstellt, möchten Sie ihn nicht im Klartext vom Client zum Server übertragen. Double-Hashing ist an der Tagesordnung. Hash es auf der Clientseite, dann sende es an den Server, der erneut hascht. Jetzt kann der Rest der Benutzerinformationen, einschließlich einer Kopie des Benutzernamens oder des Anzeigenamens, mit einem PBKDF verschlüsselt werden, das auf dem gesamten oder einem Teil des vom Client übergebenen Hashs basiert. Anschließend entschlüsseln Sie es einfach, nachdem Sie das Kennwort überprüft haben, und geben den Anzeigenamen in die Sitzung ein, damit er von Webseiten verwendet werden kann.
Ich bin nicht davon überzeugt, dass der Benutzername nicht nur clientseitig angezeigt werden konnte.
@KeithS Scheint das nicht zu kompliziert für etwas, das sowieso kein Geheimnis sein soll?
Nun, es wurde angenommen, dass, wenn der Benutzername eine E-Mail-Adresse wäre, das Dumping der Datenbank jemandem eine lange Liste gültiger E-Mail-Adressen liefern würde. Daraus folgt, dass der Benutzername in diesem Fall vertraulich wäre.
@KeithS Mein erster Gedanke war "Die E-Mail-Adresse muss jedoch irgendwie gespeichert werden, damit ein Mechanismus zum Zurücksetzen des Passworts funktioniert", aber dann wurde mir klar, dass Sie, da dieser Mechanismus die Eingabe Ihrer Adresse erfordert, auch den Hash verwenden können ... interessante Idee. Natürlich können Sie Ihre Benutzer dann nicht mit Newslettern spammen
@TobiasKienzler anstelle eines "Push" -Systems für Newsletter, bei dem der Website-Betreiber oder der Inhaltsproduzent die Zustellung veranlasst, könnten sie eher einen "Pull" -Mechanismus verwenden, bei dem Benutzer einen "Feed" abonnieren, unabhängig davon, ob es sich um RSSish oder ein anderes Format / einen anderen Mechanismus handelt .
@JustinC Das wäre in der Tat besser. Wünschte nur, diese "Content" -Produzenten wären einverstanden ...
Für diejenigen, die neugierig waren, `echo -n" gotcha "| md5` `21840c1a3e3db69e01445c8782a99f9b`
Hier ist ein anderes Wort.Phantasie.
Diese Antwort ist eindeutig falsch, da es keine Regel gibt, nach der Anzeigenamen und Benutzernamen identisch sind, wie andere vor mir bereits erwähnt haben.Bitte hör auf, es zu verbessern.
Lucas Kauffman
2012-12-13 18:33:25 UTC
view on stackexchange narkive permalink

Während das, was Terry sagt, wahr ist, haben Anmeldesysteme manchmal tatsächlich den Benutzernamen (aber ohne Salz). Sie müssen einen Anmeldenamen und einen Anzeigenamen auswählen. Der Anmeldename wird gehasht gespeichert (ohne Salt, da Sie ihn nachschlagen müssen müssen) und das Kennwort wird gesalzen. Der Anzeigename unterscheidet sich von Ihrem Anmeldenamen (da dieser ebenfalls geheim gehalten werden sollte) und wird bei Bedarf angezeigt.

Selbst wenn ein Angreifer Ihren Namen sieht, kann er ihn nicht an Ihren Anmeldenamen anhängen Name. Während ich sage, dass es gesalzen werden kann, besteht eigentlich keine Notwendigkeit dafür. Das Wichtigste ist nur, es geheim zu halten. Wenn die Datenbank kompromittiert wird, kann der Angreifer weiterhin Informationen wie Ihre E-Mail-Adresse oder Ihren Namen verwenden, wenn er neue Angriffe auf Ihre anderen Konten durchführen möchte.

Ja, ich habe das gesehen. Es ist wirklich eher ein Unbekanntheitsmechanismus, denn wenn das Passwort stark gehasht ist, sollte es überhaupt nicht notwendig sein.
@Polynomial Es ist möglicherweise nicht erforderlich, aber wenn Anmeldenamen so etwas wie E-Mail-Adressen wären, könnte dies eine gute Möglichkeit sein, die E-Mail-Adresse eines Benutzers zu verbergen, wenn die Datenbank gelöscht wird, nicht wahr?
mmm guter Punkt, Sie können die E-Mail auch hashen, wenn Sie nicht vorhaben, Ihren Benutzern E-Mails zu senden. Das Zurücksetzen des Passworts per E-Mail könnte noch möglich sein.
@LucasKauffman Ich denke, das ist ein guter Punkt. Es hilft, wenn Sie Ihren Benutzern eine E-Mail senden können. Das würde sicherlich bedeuten, dass es gehasht werden muss, bevor das Speichern nicht durchgeführt werden kann!
Ich denke, diese Antwort und ihre Kommentare sind die besten für mich. Vielen Dank.
"Der Protokollierungsname wird gehasht gespeichert (ohne Salz, da Sie ihn nachschlagen müssen müssen)." Wie würden Sie ihn nachschlagen? Regenbogentische? Oder fehlt mir etwas?
Speichern Sie den Hash-Namen des Benutzernamens. Wenn sich jemand anmeldet, hashen Sie den Benutzernamen und suchen Sie ihn in der Datenbank, um den Hash des entsprechenden Passworts zu finden.
Sie können den Benutzernamen nicht nachschlagen, wenn er gehasht ist (das ist per Definition). Sie können nur testen, ob der angegebene Benutzername / das angegebene Kennwort (sowohl gehasht als auch gesalzen oder nicht) in der Datenbank vorhanden und miteinander verknüpft sind. Das einzige, was Sie nachschlagen können, ist der Anzeigename.
@MarioAwad Sie sind falsch, ich fürchte.
@LucasKauffman Welcher Teil meines Kommentars ist Ihrer Meinung nach falsch? Bitte erläutern Sie, vielleicht lernen wir alle hier etwas Neues. Vielen Dank.
Sie können einen Benutzernamen in einer Datenbank nachschlagen, auch wenn dieser gehasht ist. Sobald der Benutzer seinen Benutzernamen eingegeben hat, hashen Sie ihn einfach. Sobald es gehasht ist, können Sie es in der Datenbank nachschlagen. Wenn Sie ein Salz verwenden würden, wäre dies nicht möglich, da Sie zuerst das Salz nachschlagen müssten, was nicht möglich wäre, da der Hash, den Sie suchen müssen, bereits das Salz enthält.
Es sieht so aus, als würden wir beide dasselbe sagen, aber unterschiedliche Begriffe verwenden. Wenn ich Nachschlagen sage, meine ich, den Benutzernamen zu erhalten und anzuzeigen, wenn Sie nur prüfen möchten, ob er ordnungsgemäß bereitgestellt wurde oder nicht. Prost.
Das macht für mich nicht viel Sinn. Es bedeutet im Grunde, den Benutzernamen als "Passworterweiterung" zu verwenden. Verwenden Sie stattdessen einfach ein stärkeres Passwort und vermeiden Sie verwirrende Felder.
@Grezzo: Tatsächlich können Sie Benutzer nach dem Hashing ihrer E-Mail-Adresse immer noch per E-Mail benachrichtigen.Fordern Sie einfach an, dass sie ihre E-Mail-Adresse angeben, wenn Sie ein Zurücksetzen des Passworts oder eine andere Anfrage anfordern, diese E-Mail mit ihrem gespeicherten Hash vergleichen, um ihre Identität zu bestätigen, und senden Sie dann das Zurücksetzen des Passworts oder antworten Sie auf die E-Mail-Adresse, die Sie gerade erhalten haben.Da Sie ihre E-Mails nicht gespeichert haben, können Sie sie nur in Zusammenarbeit mit ihnen senden. Wenn Sie jedoch nicht vorhaben, sie mit Verkaufsangeboten zu spammen, sehe ich das nicht als schlecht an.
Durch das Hashing eines Benutzernamens werden Aufzählungs-Exploits Ihres Anmeldesystems verhindert.Grundsätzlich schlagen die meisten Brute-Force-Front-End-Angriffe fehl, wenn sie zunächst keinen gültigen Benutzernamen haben. Wenn Sie ihn also mit einem Site-weiten Salt hashing, werden Ihre Benutzerkonten bei einem erfolgreichen Angriff auf Ihre Datenbank nicht aufgelistet.Eine Person müsste das Dateisystem Ihrer Anwendung hacken, um Ihr Salz zu erhalten, was oft viel schwieriger ist.Wenn Sie Ihre Benutzernamen nicht hashen, kann auf einen Aufzählungsangriff eine Front-End-Flut von Überprüfungen auf schwache Kennwörter für diese Benutzernamen folgen.
AJ Henderson
2012-12-13 20:15:05 UTC
view on stackexchange narkive permalink

Im Allgemeinen gelten Benutzernamen nicht als sicher, sondern als Identität und nicht als Authentifizierung. Es ist gut, nicht preiszugeben, welche Benutzernamen gültig sind, aber es wäre schlimmer, wenn Sie zufällig eine Kollision hätten. Sie können dies immer noch umgehen, indem Sie alle übereinstimmenden Benutzernamen nach einem passenden Kennwort-Hash durchsuchen, aber das ist etwas chaotisch.

Wenn Sie ansonsten eine gute Kennwortsicherheit und Einschränkungen bei Anmeldeversuchen haben, eine vollständige Liste von Benutzernamen bietet einem Angreifer wenig praktischen Wert. Der Hauptvorteil wäre Phishing, aber wenn Ihre offizielle Korrespondenz Informationen enthält, können diese Informationen nicht gehasht werden und sie würden sie erhalten, wenn sie Ihre Datenbank trotzdem kompromittieren würden.

Auch die Benutzerfreundlichkeit mag Sagte Terry. Es ist viel einfacher, Ihr Konto zu finden, wenn sie Benutzernamen sehen können. Sie gewinnen nicht genug, wenn Sie versuchen, eine Kennung zu sichern, um sie in den meisten Kontexten zu rechtfertigen.

Das Nachschlagen mit dem Passwort hat ein Problem: Was tun, wenn sie gleich sind (auch - Zurücksetzen)? Wenn Sie eine solche Situation verbieten, geben Sie das Passwort effektiv weiter.
@MaciejPiechotka - Ja, wenn Sie eine Doppelkollision haben, ist das auch ein Problem, obwohl die Chancen einer Doppelkollision ziemlich gering sind. Wenn Sie eine Doppelkollision verhindert hätten, würden Sie den Benutzernamen, dem sie entsprechen, nicht preisgeben, sodass es Ihnen immer noch schwer fallen würde, die Informationen zu nutzen, aber es ist immer noch eine gültige Beobachtung, dass dies aussagekräftig wäre Sie, dass einige Benutzer ein Passwort haben, das mit ihrem Passwort aufgelöst werden würde, aber die Chancen, dass ein Angreifer diesen Fall trifft, sind ziemlich (kryptografisch sicher) gering.
FWIW Bei einer Kollision wird dem zweiten Benutzer beim Versuch, sich zu registrieren, die Meldung "Dieser Benutzername ist bereits vorhanden" angezeigt.
@MaciejPiechotka Deshalb suchen Sie zuerst nach der Kennung.Daraus folgt, dass, wenn der Bezeichner vorhanden ist, nur ein Kennwort (Hash) zugeordnet werden sollte.Wenn man den Hash einer Login-ID nachschlägt und eine zeitangriffssichere Methode verwendet, um den Vergleich durchzuführen, wie könnte dies schaden?
Edward Thomson
2012-12-13 22:30:30 UTC
view on stackexchange narkive permalink

Während andere gut darauf hingewiesen haben, dass es nur wenige (wenn überhaupt) Vorteile gibt, würde ich Ihre Behauptung in Frage stellen, dass es keine Nachteile gibt. Wenn Sie nur den Hash-Benutzernamen speichern, ist die Suche nach dem Benutzernamen einfach. Wenn Sie einen gesalzenen, gehashten Benutzernamen speichern, wird die Suche etwas problematischer.

Nehmen wir an, wir erstellen eine SQL-Tabelle mit Benutzernamen und (gehashten) Kennwörtern und weisen den SQL Server an, die Spalte mit dem Benutzernamen zu indizieren es wird eine Art binäre Suche oder eine andere Magie durchführen. Wir könnten eine Tabelle haben, die so aussieht:

  Benutzername | Passworttest | j9lnvqjAuhNJs  

(Dies ist der Unix-Krypta-Hash der alten Schule (3), nur zur Vereinfachung und Kürze.)

Wenn Sie Ihre Benutzernamen im Klartext speichern, rufen Sie den ( Das Hash-Passwort für einen Benutzer ist ein einfacher SQL-Aufruf. Angenommen, Sie möchten die Anmeldeinformationen für einen Benutzer überprüfen, der den Benutzernamen test :

  eingegeben hat. Wählen Sie das Kennwort von Benutzern aus, bei denen Benutzername = 'test';  

Einfach genug. Wenn wir nun die Benutzernamen im gleichen Format wie die Passwörter speichern, sieht unsere Tabelle folgendermaßen aus:

  Benutzername | PasswortM1CAtvzDdJDGU | j9lnvqjAuhNJs  

Wenn ein Benutzer nun seinen Benutzernamen test eingibt, wie überprüfen Sie das Kennwort? Eine binäre Suche ist hier nutzlos, da Sie nicht einmal das Salz kennen, mit dem Sie den Benutzernamen gespeichert haben. Stattdessen müssen Sie jeden Benutzernamen in der Datenbank durchlaufen, den angegebenen Benutzernamen mit dem Salt für diesen Benutzernamen verschlüsseln und ihn mit dem gespeicherten (gehashten) Benutzernamen vergleichen, um festzustellen, ob er übereinstimmt. Youch!

Angenommen, Sie haben einige gute Vorsichtsmaßnahmen getroffen und einen schönen langsamen Hash wie bcrypt anstelle einer guten alten Unix-Krypta verwendet? Double Youch!

Wie Sie sich vorstellen können, hat das Speichern eines gesalzenen Hash-Benutzernamens anstelle von einfachem Text einige schwerwiegende Nachteile.

Wenn Sie es jedoch nicht salzen oder für den Benutzernamen ein Site-weites Salt verwenden, können Sie denselben Auswahlbefehl verwenden. Statt jedoch nach dem Klartext-Benutzernamen zu suchen, können Sie auch nach dem Hash suchen. Oder fehlt mir etwas?
Wenn Sie ein standortweites Salz verwenden, können Sie auch gar nicht salzen. http://crypto.stackexchange.com/questions/1855/passwords-with-same-salt-what-does-this-mean
Das ist nicht wahr. Es ist wahr, dass sie mit einem ortsspezifischen Salz alle Hashes gleichzeitig mit brutaler Gewalt angreifen könnten, aber ohne Salz könnten Angreifer einen ungesalzenen Regenbogentisch verwenden, was viel weniger Aufwand wäre. Und geht es bei der Sicherheit nicht darum, sich zu viel Mühe zu geben, um anzugreifen, und nicht wirklich darum, es unmöglich zu machen?
Wenn Sie davon ausgehen, dass meine E-Mail-Adresse irgendwo in einer Regenbogentabelle mit ungesalzenen `bcrypt`s vorhanden ist, dann haben Sie Recht.
Das ist wohl ein fairer Punkt. Ich bezweifle, dass meine E-Mail-Adresse in einer Regenbogentabelle steht, da es sich um eine ganze Reihe von Zeichen handelt. Ich denke, das trifft wahrscheinlich auf die meisten Menschen zu, einschließlich Ihrer. Allerdings muss es Unmengen von E-Mail-Adressen geben, die [a-zA-z0-9] {8} @hotmail.com sind. Das würde keinen riesigen Regenbogentisch erfordern, obwohl ich keine Ahnung (und keinen Zweifel) habe, ob jemand jemals einen solchen gemacht hat
Ich genieße diesen Beitrag.Ich wünschte, mehr Leute würden über die Bedrohungen sprechen, die den Benutzernamen behindern.Ohne eine zeitangriffssichere Vergleichsmethode ist das Hashing des Benutzernamens eine Nullsummenverstärkung.
SilverlightFox
2012-12-14 15:15:48 UTC
view on stackexchange narkive permalink

Wenn Sie den Benutzernamen gehasht und gesalzen haben, wie würde das System wissen, dass neue Konten einen eindeutigen Benutzernamen haben, ohne alle vorhandenen Datensätze zu durchlaufen und den neuen Benutzernamen mit jedem einzelnen vorhandenen Salt zu hashen?

Vielleicht durch die Verwendung eines ortsweiten Salzes (oder Pfeffers, wie ich denke, das ist bekannt)
Vaibhav Kaushal
2012-12-13 23:19:15 UTC
view on stackexchange narkive permalink

Ihre Idee ist edel und die Frage interessant. Nun, ich glaube, Sie haben entweder überhaupt nicht an Benutzerfreundlichkeit gedacht, als Sie die Frage angesprochen haben, oder Sie haben den Punkt des Hashing verpasst (oder vielleicht Sie nur falsch geschrieben 'Verschlüsselung').

Hashing ist irreversibel, es sei denn, Sie haben Supercomputer, die Dinge brutal erzwingen, oder Regenbogentabellen, um nach Hashes zu suchen. Daher würde die Benutzerfreundlichkeit nach unten gehen, wenn Sie die für Anmeldungen verwendeten Benutzernamen / E-Mails hashen würden. Wenn man jedoch dasselbe mit einem vordefinierten Schlüssel im Programm (der den Benutzernamen überprüft) selbst "verschlüsselt", ist dies möglicherweise etwas sicher. Aber noch einmal - ein direkt in einem Programm gespeicherter Verschlüsselungsschlüssel ist genauso gut wie gar kein Schlüssel. Dies sind die Hauptgründe, warum Benutzernamen nicht gehasht oder verschlüsselt werden.

Ich wollte es definitiv hashen, nicht verschlüsseln. Wenn wir auch einen angezeigten Namen haben, gibt es kein Usability-Opfer, oder?
@Grezzo - Wenn Sie einen Anzeigenamen separat gespeichert haben, wird die Mehrheit der Personen ihren Anzeigenamen stark an ihren Benutzernamen anpassen. Wenn Sie ihren Benutzernamen generieren, verringert dies die Benutzerfreundlichkeit.
Lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/52884/discussion-between-aj-henderson-and-anthony-rutledge).
devel
2012-12-14 04:38:00 UTC
view on stackexchange narkive permalink

Ich denke, der wahrscheinlichste Grund ist, dass das Hashing der Benutzernamen zusammen mit dem Passwort keinen zusätzlichen Schutz bietet.

Wir empfehlen Benutzern, schwierige und komplexe Passwörter zu erstellen, wodurch sie schwerer zu knacken sind. Jede Datenbank mit gehashten Benutzernamen kann mit einem einfachen Wörterbuch in wenigen Minuten geknackt werden ... es sei denn, Sie benötigen mindestens 6 alphanumerische Zeichen für Ihre Benutzernamen;)

Es würde einen sehr kleinen zusätzlichen Schutz bieten, aber zugegebenermaßen nicht viel. Dies könnte jedoch den Vorteil haben, dass die Benutzernamen der Benutzer verdeckt werden. Dies sind wahrscheinlich E-Mail-Adressen, die für gezielte Phishing-Angriffe verwendet werden können.
Anthony Rutledge
2017-02-01 19:37:22 UTC
view on stackexchange narkive permalink

Diese Idee entspricht zwei Taktiken: 1) Sicherheit durch Dunkelheit, 2) Zusätzliche Abschwächung von Timing-Angriffen (wenn Sie eine zeitsichere Vergleichsfunktion verwenden). Sie können kein einzigartiges Salz verwenden, um dies effektiv zu tun, aber es ist eine gute Idee. Dies würde es einem ermöglichen, die Tabelle, die Anmeldeinformationen enthält, von der Tabelle zu trennen, die "Personen" -Informationen enthält. Dann zwei Tabellen, Person (könnte Klartext-E-Mail-Adressen enthalten) und Benutzer (könnte einen Hash-Benutzernamen (Site Wide Salted) und ein Hash-Passwort und ein eindeutig gesalzenes Passwort enthalten). Das Nachschlagen des Benutzers anhand des Hash-Benutzernamens ist kein Problem.

James
2018-08-12 21:22:11 UTC
view on stackexchange narkive permalink

Ich denke, das ist eine ausgezeichnete Idee. Wie von Anthony Rutledge ausgedrückt; Dies kann Sicherheit durch Verschleierung / Verschleierung bieten, und wenn eine Schlüsselableitungsfunktion wie PBKDF2 verwendet wird, besteht für einen potenziellen Angreifer, der versucht, eine gestohlene Datenbank zu kompromittieren, vermutlich eine um mehrere Größenordnungen größere Schwierigkeit.

Zum Beispiel würde ein Offline-Brute-Force-Angriff auf eine gestohlene Datenbank das Auffinden von Hash-Kollisionen sowohl für den Benutzernamen als auch für das Kennwort erfordern, ungeachtet der Tatsache, dass das Salzen des Benutzernamens in der Methode, wie oben erwähnt, Dies würde bedeuten, dass Angreifer Ihren Computer kommandieren und auch Ihren Quellcode identifizieren und verstehen müssten, da das Salt nirgendwo in Ihrer Datenbank vorhanden wäre. Es fügt mehrere zusätzliche Verteidigungsebenen hinzu, ohne die Rechenlast für die Webanwendung erheblich zu erhöhen.

In Bezug auf Hashing-Probleme: Der Benutzername kann mit einer proprietären Serverseite gesalzen werden Hash, basierend auf dem tatsächlichen Benutzernamen / der E-Mail-Adresse.

Das würde bedeuten, dass das Salz bekannt ist, wenn auch programmgesteuert. Und das Skript, das das Salz berechnet und zurückgibt, kann sich im Verhältnis zum Webdienst außerhalb des Bandes auf dem Computer befinden - so dass auf jede Methode zum Erzeugen des Salzes von jedem mit dem Web ausgerichteten Einstiegspunkt nicht zugegriffen werden kann.



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