Frage:
Kann man erkennen, ob eine Kennwortschätzung nahe am Hash-Ergebnis lag?
elmer007
2016-09-16 01:50:17 UTC
view on stackexchange narkive permalink

Ich habe in letzter Zeit über die Passwortverwaltung gelesen (sehr interessantes Zeug!) und mich gefragt, wie unterschiedlich die Hashes für ähnliche Zeichenfolgen sein würden.

Kann man durch Vergleichen feststellen, ob eine Passwortschätzung nahe beieinander liegt? Der resultierende Hash zum echten Hash?

Wenn das echte Passwort beispielsweise "password123" lautet und ein Hacker "Password123", "password1234", "password124" usw. versucht, sind die generierten Hashes Ähnlich wie der echte Hash, dass entweder der Hacker oder sein Computer erkennen konnten, dass sie auf dem richtigen Weg waren?

Nehmen wir an, der Hacker kennt Salz, Pfeffer, Cayennepfeffer, Adobo, was auch immer ... Wenn Sie versuchen das richtige Passwort, um einen passenden Hash zu generieren.

(Ich denke, dies kann je nach verwendeter Hash-Funktion variieren, aber ich weiß das nicht genau.)

kurze antwort: nein - sonst wären regenbogentische * viel * kleiner
Das Ziel des Hash ist es, so zufällig wie möglich zu sein.Also ich hoffe nein.
Wurde diese Frage noch nie gestellt?Probieren Sie einfach einen kurzen MD5-Hash aus, ändern Sie einen Buchstaben und finden Sie es selbst heraus!http://www.miraclesalad.com/webtools/md5.php
@schroder verwechseln Sie "sollte nicht sein" mit "nein"?
@emory verwechseln Sie Hash-Funktionen mit * Zitat unquote Hash-Funktionen *?
@DmitryGrigoryev Das glaube ich nicht.Die Definition, die ich verwende "Eine Hash-Funktion ist eine beliebige Funktion, mit der Daten beliebiger Größe Daten fester Größe zugeordnet werden können". Einige Hash-Funktionen haben Eigenschaften, die sie für die Kennwortanwendung besser machen als andere, aber der Modul ist eine Hash-Funktion.Haben Sie eine andere, bessere Definition?
@emory Aus dem Kontext der Frage geht hervor, dass Krypto-Hash-Funktionen diskutiert werden.
Neun antworten:
ThoriumBR
2016-09-16 02:12:15 UTC
view on stackexchange narkive permalink

Nein, Sie können nicht feststellen, wie genau Sie den Hash betrachtet haben. In diesem Sinne wurde eine Hash-Funktion entwickelt: Ein einzelnes geändertes Bit am Eingang muss viele Bits am Ausgang ändern. . Sein Avalanche-Effekt genannt

Bellow ist SHA1-Hashes für einige Ihr Beispiel Passwörter:

  cbfdac6008f9cab4083784cbd1874f76618d2a97 - password123b2e98ad6f6eb8508dd6a14cfa704bad7f05f6fb1 - Password1232b4bfcc447c3c8726d26c22927a68f511d5e01cc - password124115b55dcc1cd9a0dfdd60c120e83eaf658c45fc6 - richtiges Pferd Batterieheftbarkeitf7aad6438836dbe526aa231abde2d0eef74d42 - Richtige Heftklammer für Pferdebatterien  

Eine einzelne Bitänderung ändert das Hashing-Ergebnis vollständig. Tatsächlich wird im Idealfall für jedes Bit der Eingabeänderung jedes Bit der Ausgabe mit einer Wahrscheinlichkeit von 50% geändert.

Es ist _ [korrekte Heftklammer für Pferdebatterien] (https://xkcd.com/936/) _ :) (SHA1 `abf7aad6438836dbe526aa231abde2d0eef74d42`)
Kommentare sind nicht für eine ausführliche Diskussion gedacht.Diese Konversation wurde [in den Chat verschoben] (http://chat.stackexchange.com/rooms/45501/discussion-on-answer-by-thoriumbr-can-one-tell-if-a-password-guess-was-in der Nähe).
für den Versuch, mit XKCD klug zu sein, aber dann falsch zitiert.
Nun, richtig ist ziemlich nah dran zu korrigieren, das Ergebnis kann nicht so unterschiedlich sein
Sie sollten beachten, dass dies für * kryptografische * Hashes gilt.Dies trifft nicht zu, wenn Sie beispielsweise die String.hashCode () -Methode von Java oder andere allgemeine Hashing-Funktionen verwenden
@theonlygusti: Eigentlich ist es ziemlich klug, ein Wort in ein Synonym zu ändern.sicherlich klüger als ein Passwort zu verwenden, zu dem jetzt jeder den SHA1-Hash kennt.
@theonlygusti Wen stimmen Sie ab?Reeno?Wie stimmen Sie einen Kommentar ab?Nur neugierig
@Mawg Der von Reeno gepostete Link zeigt das beliebte Beispiel "Richtige Pferdebatterie".ThoriumBR bezog sich in seiner Antwort darauf, zitierte es jedoch falsch als "richtige Pferdebatterie-Heftklammer".Theonlygusti stimmt ThoriumBR vermutlich im Scherz ab, weil er eine so beliebte XKCD falsch zitiert hat.
OIC.Tut mir leid, dass ich so dumm bin.Vielen Dank für die Erklärung (+1)
Die in dieser Antwort angegebenen SHA1-Hashes sind die der Passwörter plus einer Zeilenänderung (LF) am Ende.Somit unterscheiden sie sich komplett von Hashes der Kennwortstrings ohne den zusätzlichen Zeilenwechsel.
@JiK Es ist nicht wirklich wichtig.Der Punkt ist zu zeigen, dass ein einzelnes Bit der Eingabe die Ausgabe vollständig ändert.
Außerdem werden gute Passwort-Hashes gesalzen.
Surendra Patil
2016-09-16 03:31:56 UTC
view on stackexchange narkive permalink

Nein, dank des Lawineneffekts sollte bereits eine einzelne Bitänderung in der Eingabe einen signifikanten großen Unterschied in der Ausgabe bewirken.

Auch über Hashing-Funktionen wie md5 oder andere sprechen ... Bei jeder Eingabe Größe Die Ausgabegröße ändert sich nicht. Wenn Ihre Eingabegröße in md5 2 Bit oder 2000 Bit beträgt, ist Ihre Ausgabe immer 32-stellig in alphanumerischer Form (Hexadezimalformat). Daher ist es für den normalen Benutzer fast unmöglich, die Eingabegröße zu erraten, selbst wenn er die MD5-Ausgabe gehasht hat. Das Erraten des Kennworts geht weit über den Rahmen für den normalen Benutzer hinaus. Dennoch gibt es Möglichkeiten für paralleles High-End-Computing durch Anwenden von Algorithmen und vielen Permutationen und Kombinationen, um eine der möglichen Eingaben herauszufinden, wenn Sie den Hash-Code haben ...!

 md5 Ausgabe: password123 = 482c811da5d5b4bc6d497ffa98491e38Password123 = 42f749ade7f9e195bf475f37a44cafcbpassword1234 = bdc87b 
Bitte verwenden Sie MD5 nicht zum Hashing von Passwörtern (und dies nur, weil es "zu effizient" ist).
Ich habe gerade einen MD5 zum Beispiel genommen ... Ich bin mir besserer Hash-Funktionen bewusst ...
Jason
2016-09-16 22:06:56 UTC
view on stackexchange narkive permalink

Um den obigen Antworten ein zusätzliches Element hinzuzufügen - der ganze Punkt einer Hash-Funktion besteht darin, die Art von Informationen in der Frage nicht zu verlieren - wenn Sie irgendetwas em bestimmen könnten > über die Ähnlichkeit der Eingaben beim Vergleichen der Ausgaben, was einen Fehler der Hash-Funktion darstellt.

Es ist nicht nur so, dass Hash-Funktionen einen Job ausführen, und im Übrigen können Sie nichts über die herausfinden Eingaben besteht die Aufgabe der Hash-Funktion darin, Ihnen keine Informationen über die Eingaben zu geben. Wenn Sie durch Vergleichen zweier Ausgaben etwas über die Eingaben herausfinden könnten, würde dies gegen dieses Prinzip verstoßen.

Sie meinen, der springende Punkt einer ** kryptografischen ** Hash-Funktion.
@XiongChiamiov Sie haben Recht - mit dem Nachtrag, dass Sie nichts falsch gemacht haben, wenn Sie Ihre Passwörter mit einer nicht kryptografischen Hash-Funktion gehasht haben.
TTT
2016-09-16 20:18:06 UTC
view on stackexchange narkive permalink

Es hängt davon ab, welche Hash-Funktion Sie verwenden. Da Sie einen Kennwort-Hash und dann eindeutig keinen angegeben haben, möchten Sie niemals eine Hash-Funktion für Kennwörter verwenden, bei denen Informationen verloren gegangen sind. Der Hash sollte einfach übereinstimmen oder nicht übereinstimmen, und das war's.

Allerdings gibt es Hash-Funktionen, die Ähnlichkeitsinformationen bereitstellen. Weitere Informationen finden Sie in dieser Antwort.

Es gibt nur eine Hash-Funktion, die "keine Informationen verliert" und alle Eingaben derselben Ausgabe zuordnet.
@NajibIdrissi Damit werden Informationen darüber weitergegeben, dass eine Eingabe erfolgt ist.
@MichaelKjörling Tut es?Dies sind keine neuen Informationen.Mein Kommentar war nicht als Witz gedacht, FYI ...
@NajibIdrissi - Ich stimme Ihnen zu.Pedantisch ist es möglicherweise nicht möglich, dass eine Hash-Funktion * keine * Informationen verliert UND auch zum Überprüfen von Passwörtern nützlich ist.Obwohl wir nah genug heran kommen können, um es praktisch gleichwertig zu machen.
@NajibIdrissi diese bestimmte Funktion ist jedoch schlecht, wenn es um Kollisionen geht ... (j / k)
@TTT "Pedantisch"?Kryptographie ist eine exakte Wissenschaft."Nah genug" ist nicht "gleich".
@NajibIdrissi - Ich bin nicht sicher, was Sie fragen?Nah genug, ich habe nicht gesagt, dass es gleich ist, nur * praktisch * gleich.Da darin * praktisch * keine Informationen verloren gehen, obwohl * any * übertrieben ist (wie Sie betont haben). Wenn dies nicht wahr wäre, könnten wir keine Hash-Funktion für Passwörter sicher verwenden.
Joshua Hunter
2016-09-16 02:08:05 UTC
view on stackexchange narkive permalink

Nein. Es sollte keine Beziehung zu den Daten geben, die in die Hash-Funktion eingegangen sind, und zu den Ergebnissen.

Hier ist beispielsweise 'Hallo' in MD5:

  5d41402abc4b2a76b9719d911017c592  

Und hier ist 'Hallo':

  8b1a9953c4611296a827abf8c47804d7  
Nun, es gibt notwendigerweise eine Beziehung;Der Punkt ist, dass es nicht in beide Richtungen transparent ist.
@AntonSherwood, Sie sind natürlich richtig.Es gibt eine Beziehung zwischen dem, was rein geht und dem, was rauskommt.Es muss sein, wenn Sie dasselbe einsetzen und erwarten, dass jedes Mal dasselbe wieder herauskommt. Aber solange die Hash-Funktion nicht beeinträchtigt wurde, sollte es nicht möglich sein, das, was herauskam, zu nehmen und zu bestimmen, was hineingegangen ist. Es gibt also keine ** offensichtliche ** Beziehung zwischen dem In und dem Out.
Flutter
2016-09-20 15:11:30 UTC
view on stackexchange narkive permalink
> Das nächste Szenario, an das ich denken kann, wäre, wenn Segmente der Passphrase wie bei LMhash getrennt aufgeteilt und gehasht werden. Diese Situation würde es dem Angreifer ermöglichen, Informationen aus korrekten Abschnitten des Kennworts abzurufen, aber es würde dem Angreifer nicht ermöglichen, zu schließen, "wie nahe" jedes Segment an der Richtigkeit war.

Andere Benutzer haben einen großartigen Überblick über Hashing und den Lawineneffekt gegeben, daher werde ich nicht darauf eingehen!

Lucas
2016-09-19 01:56:12 UTC
view on stackexchange narkive permalink

Abhängig von den verwendeten Algorithmen kann möglicherweise berechnet werden, wie nah das Kennwort ist, und dies führt zu Kollisionsangriffen, mit denen das Kennwort schneller als mit brutaler Gewalt geknackt werden kann.

Soweit ich weiß, ist dies der Fall von MD4, das aufgrund solcher Fehler in Millisekunden geknackt werden kann. Ich habe den MD4-Exploit nicht analysiert, aber ich wette, dass eine Näherungsgleichung darin eingebettet ist.

Nehmen wir ein idiotisches Beispiel: eine Hash-Funktion, die die Summe der ASCII-Codes des Passworts ist. Das Passwort AB und BA haben den gleichen Hash 131. Wenn das echte Passwort AB ist, akzeptiert das System auch BA als echtes Passwort. Ein kleines Reverse Engineering zeigt eine Beziehung: a) Wenn Sie einen Buchstaben in den nächsten ändern, wird einer in den Hash eingefügt. b) Durch Hinzufügen eines neuen A zum Kennwort werden dem Hash 65 hinzugefügt. Und dann ist der Riss fertig. Das vom Crack zurückgegebene Passwort stimmt möglicherweise nicht mit dem vom Benutzer verwendeten überein, aber das System erkennt den Unterschied nicht.

Ja, das Ziel eines kryptografischen Hash-Algorithmus ist es, dies zu verhindern. Es sollte unvorhersehbar sein und daher rohe Gewalt erfordern. Funktioniert aber nicht immer wie erwartet. Mathematik ist unverzeihlich.

BEARBEITEN: MD4, MD5 und SHA1 sind aufgrund dieser Art von Angriffen inzwischen veraltet. Neue Algorithmen wurden entwickelt, um diese Schwachstellen zu vermeiden. Und die Passwortprüfung ist ein bisschen mehr als nur Hashing. Die Einführung neuer Algorithmen ist nicht so schnell wie wir wollen. Für ständig aktualisiertes Linux sollten die Basiskennwörter moderne Algorithmen verwenden. Aber ich wette, es gibt viele Systeme auf der Welt, auf denen mehr als 10 Jahre alte Software ausgeführt wird, da die neue Version des Betriebssystems möglicherweise nicht mit älteren Anwendungen kompatibel ist oder aufgrund der Lizenzkosten einfach ist, wenn kostenpflichtige Software verwendet wird. Ich wette, dass viele Software, deren eigene Passwortdatenbank vom System getrennt ist, eine schwache Sicherheit haben.

Aber heutzutage verwendet niemand MD4, MD5 oder sogar gesalzenes SHA1, oder?Wir verwenden alle pbkdf2, bcrypt oder script?Wie andere Poster erklärt haben, erzeugt selbst uraltes ungünstiges MD5 völlig unterschiedliche Ausgaben für Eingaben, die sich nur um 1 Zeichen unterscheiden, was bedeutet, dass keine ähnlichen Kennwortversuche zu ähnlichen Hashes führen.
Ein Kommentar dazu wurde hinzugefügt
MD4 ist viel älter als 10 Jahre, ebenso wie MD5.MD5 war ab 1993 veraltet, als SHA0 veröffentlicht wurde, und eine Komponente von MD5 wurde 1995 kompromittiert. SHA1 wurde 1995 veröffentlicht, aber eine theoretische Schwäche wurde 2005 in SHA1 festgestellt, und seit 11 Jahren wird SHA1 nicht mehr berücksichtigtSichern Sie sich gegen gut finanzierte Gegner, also möchten Sie SHA256 oder SHA512 verwenden, aber nicht alleine.Somit sind HMAC-Funktionen, Pbkdf2, bcrypt, scrypt, re all, die Hash-Funktionen mit Entropie als Teil ihrer Algorithmen verwenden, aber keine NUR Hash-Algorithmen sind.
Craig, Elmer fragte über Hashes "vorausgesetzt, jemand kennt alle Salze, [...]" und andere verwendete Techniken.
Elmers Frage betraf die Passwortverwaltung
mckenzm
2016-09-19 11:46:00 UTC
view on stackexchange narkive permalink

Ja, das können Sie, aber Sie müssen Hashes für Beinaheunfälle speichern und zuordnen, damit hier und da Arbeit und Ressourcen sowie mögliche Sicherheitsprobleme auftreten. Es ist zum Beispiel bereits jetzt möglich, das Klartext-Passwort "Versuche" auf einer Wordpress-Site zu sehen, wenn eines dieser Passwörter mit einem bekannten Passwort mit hoher Entropie von einem anderen Ort übereinstimmt, können wir feststellen, woher es möglicherweise durchgesickert ist. Es gibt natürlich Algorithmen zum Generieren von falsch eingegebenen Daten, und dies ist weithin bekannt, da URLs mit ähnlichen Rechtschreibfehlern besetzt sind. Sie müssten jedoch Punktzahlen zuweisen, um zu bestimmen, wie eng die Übereinstimmung sein könnte und wie nahe sie sein muss, bevor Sie sich befinden alarmiert. Wenn es sich um Wörter aus dem Wörterbuch handelt, können Sie sie im Wesentlichen nach Soundex oder ähnlichem ordnen.

Können Sie das etwas näher erläutern?Ich verstehe nicht, wie Sie feststellen würden, dass zwei Hashes ähnliche Eingaben haben.
Die Ähnlichkeit wird vor dem Hashing bestimmt.Da "disneyland" ein Passwort mit niedriger Entropie ist, können Sie Hashes für "disnyland" und "Disneyland" (unter anderem) generieren.Abgesehen von Kollisionen haben Sie eine Liste von Hashes, die mit dem Passwort verknüpft sind. Wenn einer getroffen wird, können Sie ihn erkennen.Ihre Kriterien für die Ähnlichkeit liegen bei Ihnen, aber Sie können 100 Beinaheunfälle speichern, indem Sie Zeichen im Original wiederholen oder weglassen.Sie können dies nicht über den Hash tun. Sie benötigen das Kennwort zum Zeitpunkt der Erfassung.Auf Unternehmensebene kann dadurch eine schwarze Liste erstellt werden, um serielle Werte wie "Summer01", "Summer02" usw. zu verhindern.
Gutschrift für die Idee der schwarzen Liste, aber besser auf "genug anders" prüfen, wenn Sie ein neues Passwort angeben.Wenn Sie den Benutzer auffordern, ein altes Passwort (erneut) einzugeben, erhalten Sie Klartext von beiden (außerdem wird empfohlen, die Änderung während der Änderung trotzdem erneut zu validieren).Siehe auch Harpers Antwort und Kommentare.Die Antwort lautet immer noch "Nein" für kryptografische Hashes, die ursprüngliche Frage, da Sie tatsächlich mit dem _ anderen_ Hash vergleichen (und Sie haben auch die Verknüpfung zwischen den Hashes basierend auf den nicht verwaschenen / unverschlüsselten Werten erstellt).
Harper - Reinstate Monica
2016-09-19 06:34:15 UTC
view on stackexchange narkive permalink

Nicht durch einen Blick auf den Hash, nein.

Aber sie könnten ein paar tausend Passwörter, die sich in der Nähe des eingegebenen Passworts befinden, brutal erzwingen.

Vorausgesetzt natürlich, dass sie die Verteidigung einer Site gegen jemanden umgehen können, der zahlreiche Versuche unternimmt. Offensichtlich hat die Site selbst diese Fähigkeit, beispielsweise wenn sie überprüfen möchte, ob ein Passwort nur mit fetten Fingern versehen wurde, und es nicht auf die zulässige Anzahl von Versuchen angerechnet wird.)

Wie viele Versuche würde es dauern? ein Passwort mit n Zeichen?

  • n, um zu testen, ob der Benutzer ein zusätzliches Zeichen fickt.

  • (n + 1) * 95, um zu testen, ob ein Zeichen fehlt Zeichen in einer beliebigen Position.

  • n, um zu testen, ob der Benutzer 1 Zeichen in Kleinbuchstaben anstelle von Großbuchstaben oder verschoben (#) anstelle von nicht verschoben (3) erstellt.

  • n (n-1) zum Testen auf 2 Zeichen in Kleinbuchstaben / ohne Verschiebung oder umgekehrt.

  • < = 6n, um zu testen, ob der Benutzer versehentlich ein benachbartes Zeichen anstelle dieses Zeichens eingibt. (Das heißt, wenn es sich um ein F handelt, ersetzen Sie D R T G V C).

  • 12, um zu testen, ob eine Hand des Benutzers an einer Stelle versetzt ist, an der sie sein sollte, plus ein paar mehr für Zeichen in der Mitte der Tastatur (YGHB) könnte von beiden Händen getroffen werden.

  • Wie Sie sehen können, sind diese Zahlen nicht unerschwinglich groß, und eine solche Analyse ist möglich.

    Ich vermisse den Sinn dieser Antwort.Sie vergleichen einen Hash nicht mit dem realen Hash, um zu sehen, wie nahe er ist. Sie erstellen eine Reihe von Hashes, die auf ähnlichen Eingaben basieren.Dieser Satz kann nützlich sein, um einen Benutzer zu validieren (Schließen zählt nicht für maximale Versuche vor dem Sperren), würde aber auch einem Angreifer helfen, wenn der Satz durchgesickert ist ("falscher Wert versucht, aber Ihr Schließen!" Oder "Sie müssen nur eine Form von versuchen."Passwort, aber keine Variante). Beispiel: 'Passwort' testet auch 'Passwort', 'Passwort1 ",' Passwort2 ',' Passwort ',' Passwortz '- aber nicht die klassische Feststelltaste' PASSWORT 'und' PASSWORT '.
    Ich sehe keinerlei Grund für den Host, dem Hacker / Benutzer mitzuteilen, dass er in der Nähe ist. Es handelt sich nur um nützliche interne Intelligenz.Wenn der Hacker die Hashes und das Salz hat, kann er damit auch leicht Passwörter in der Nähe von Passwörtern testen, die er möglicherweise bereits hat, z.Vom Hacken * anderer * Systeme.Für den Benutzer bedeutet dies, dass geringfügige Änderungen des Passworts überhaupt keinen Schutz bieten.
    Wenn der Cracker über eine Reihe von Hashes verfügt (Ist + Schließen), werden beim Testen eines möglichen Hash-Passworts alle in der Menge enthaltenen Passwörter entfernt (wenn 1000 geschlossen sind, berechnen Sie 1 Hash und vergleichen Sie ihn mit 1001 Hashes ohne Berechnung).Ich gehe davon aus, dass die pwd-Datenbank - mit all den zusätzlichen "engen" Hashes - durchgesickert ist (siehe aber nächsten Kommentar).
    Alternatives Cracking-Szenario: Angenommen, Cracker (ich) versucht, sich bei einer Webseiten-Anmeldung anzumelden, die nach 3 falschen Versuchen für 1 Minute nach 12 für 5 Minuten gesperrt wird und nach 24 zurückgesetzt werden muss, aber nicht "nah genug" zählt.Wenn ich tatsächlich ein "Schließen" -Passwort versuche, ist das fast so, als würde ich 1000 versuchen, wenn ich die Sperrungen verfolge.Wenn "opensesame" in der Nähe ist, muss ich nur Passwörter in der Nähe von opensesame testen.Schlimmer noch, ** dies ist ein Glücksfall für jeden, der versucht, einen Verstoß gegen eine Site über ein Standard-Anmeldeverfahren auf andere auszudehnen **, da das Passwort häufig wiederverwendet wird (genau oder größtenteils ähnlich).** Ich kann es für immer versuchen! **


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