Wie lange brutet man einen gesalzenen SHA-512-Hash? (Salz zur Verfügung gestellt)
Hier ist ein Algorithmus in Java:
public String getHash(String password, String salt) throws Exception {
String input = password + salt;
MessageDigest md = MessageDigest.getInstance(SHA-512);
byte[] out = md.digest(input.getBytes());
return HexEncoder.toHex(out);
}
Davon ausgehen, das Salz ist bekannt. Ich möchte wissen, die Zeit für brute-force, wenn das Passwort ist ein Wort aus dem Wörterbuch und auch, wenn es nicht ein Wort aus dem Wörterbuch.
InformationsquelleAutor der Frage timothyjc | 2011-07-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrem Fall, brechen Sie den hash-Algorithmus äquivalent ist zum finden einer Kollision in der hash-Algorithmus. Das bedeutet, dass Sie brauchen nicht zu finden, das Passwort selbst (das wäre ein preimage-Angriff), Sie brauchen nur zu finden, eine Ausgabe der hash-Funktion, die gleich dem hash-Wert ein gültiges Passwort (also "Kollision"). Das finden einer Kollision mit einem Geburtstag Angriff in O(2^(n/2)) Zeit, wobei n die Blocklänge der hash-Funktion in bits.
SHA-2 mit einer output-Größe von 512 bits, also das finden einer Kollision nehmen würde O(2^256) Zeit. Denn es gibt keine gescheite Angriffe auf den Algorithmus selbst (derzeit keine bekannt für die SHA-2-hash-Familie) dies ist, was es braucht, zu brechen den Algorithmus.
Bekommen ein Gefühl dafür, was 2^256 bedeutet eigentlich: derzeit ist es angenommen, dass die Anzahl der Atome in der (gesamten!!!) Universum ist in etwa 10^80 ist etwa 2^266. Angenommen 32-byte-input (was ist angemessen für Ihren Fall - 20 bytes-Salz + 12 Byte Passwort) meine Maschine braucht ~0,22 s (~2^-2s) für 65536 (=2^16) Berechnungen. Also 2^256 Berechnungen gemacht werden würde in 2^240 * 2^16 Rechenoperationen, die dauern würde,
Selbst nannte diese Millionen von Jahren, ist lächerlich. Und es wird nicht viel besser mit der schnellsten hardware auf dem Planeten computing Tausende von hashes in parallel. Keine menschliche Technologie wird in der Lage sein zu Knirschen diese Zahl in etwas akzeptabel.
Also vergessen brute-forcing, SHA-256, hier. Ihre nächste Frage war über Wörterbuch. Zum abrufen solcher schwache Passwörter Regenbogen-Tabellen verwendet wurden traditionell. Eine rainbow-Tabelle ist in der Regel nur eine Tabelle der vorausberechneten Hashwerten, die Idee ist, wenn Sie waren in der Lage, vorausberechnen und speichern Sie jeden möglichen hash zusammen mit seinem Eingang, dann würde es Sie O(1) suchen eines bestimmten hash-und rufen Sie eine gültige preimage. Dies ist natürlich nicht möglich, in der Praxis, da es keine Speicher-Gerät, dass die Speicherung so großer Datenmengen. Dieses dilemma ist bekannt als Speicher-Zeit-Kompromiss. Sie sind nur in der Lage, um zu speichern, so viele Werte typische rainbow-Tabellen enthalten eine form von hash-Verkettung mit Vermittler-Reduzierung-Funktionen (dies ist ausführlich im Wikipedia-Artikel) sparen Sie Speicherplatz, indem Sie ein bisschen Zeit sparen.
Salze wurden Gegenmaßnahme zu machen, wie die rainbow-Tabellen nicht möglich ist. Entmutigen Angreifer aus precomputing eine Tabelle für einen bestimmten Salz ist es ratsam, pro-user-salt-Werten. Jedoch, da die Benutzer nicht verwenden, sicher sein, eine komplett zufällige Passwörter, ist es immer noch erstaunlich, wie erfolgreich Sie bekommen können, wenn der salt bekannt ist und Sie einfach Durchlaufen einer großen Wörterbuch der häufigsten Passwörter in einer einfachen trial-and-error-Schema. Die Beziehung zwischen natürlicher Sprache und Zufälligkeit ist, ausgedrückt als Entropie. Typische Passwort-Entscheidungen sind in der Regel niedriger Entropie, in der Erwägung, dass völlig zufällige Werte enthalten würde, ein maximum der Entropie.
Der niedrigen Entropie der typische Passwörter macht es möglich, dass es eine relativ hohe chance, einen Benutzer mit einem Passwort aus einer relativ kleinen Datenbank, die häufige Passwörter. Wenn Sie google für Sie, werden Sie am Ende finden die torrent-links für eine solche Passwort-Datenbanken, die oft in gigabyte-Größe Kategorie. Erfolgreich sein mit solch ein Werkzeug ist in der Regel im Bereich von Minuten bis zu Tagen, wenn der Angreifer in keiner Weise beschränkt werden.
Deshalb in der Regel hashing und salting allein ist nicht genug, müssen Sie installieren Sie andere Sicherheits-Mechanismen, wie gut. Sie sollten eine künstlich verlangsamt Entropie-enducing Verfahren wie PBKDF2 beschrieben in PKCS#5 und sollten Sie erzwingen eine Wartezeit für einen bestimmten Benutzer, bevor Sie wiederholen die Eingabe Ihr Passwort ein. Ein gutes Schema ist zum start mit 0,5 s und eine Verdoppelung, die Zeit für jeden fehlgeschlagenen Versuch. In den meisten Fällen Benutzer nicht bemerken dies und nicht scheitern viel öfter als drei mal im Durchschnitt. Aber es wird deutlich verlangsamen bösartige Außenseiter, der versucht anzugreifen, Ihre Anwendung.
InformationsquelleAutor der Antwort emboss
Wörterbuch Passwort
Baseballstadion Abbildung: es gibt ungefähr 1.000.000 englische Wörter, und wenn ein hacker lässt sich berechnen, etwa 10.000 SHA-512-hashes eine zweite (update: siehe Kommentar von CodesInChaos, diese Schätzung ist sehr tief), 1,000,000 /10,000 = 100 Sekunden. So würde es nehmen etwas mehr als einer minute zu knacken ist ein single-word-Wörterbuch Passwort für einen einzelnen Benutzer. Wenn der Benutzer verkettet zwei Wörterbuch Worten, Sie sind im Bereich von ein paar Tagen, aber immer noch sehr gut möglich, wenn der Angreifer kümmert sich genug. Mehr als das, und es beginnt immer hart.
Zufälliges Passwort
Wenn das Passwort ist eine wirklich zufällige Folge von alphanumerischen Zeichen, groß-und Kleinschreibung, dann die Anzahl der möglichen Passwörter der Länge N 60^N (es sind 60 Zeichen möglich). Wir werden die Berechnung der anderen Richtung in diese Zeit; wir werden Fragen: Was die Länge des Passworts konnten wir knacken, bei einer bestimmten Länge der Zeit? Verwenden Sie einfach diese Formel:
N = Log60(t * 10,000)
wo t ist die Zeit, die Berechnung der hashes in Sekunden (wieder unter der Annahme von 10.000 hashes pro Sekunde).So ein 3 Tage würden wir in der Lage sein, das Kennwort zu knacken, wenn es 5 Zeichen lang sein.
Dies ist alles sehr ball-park, aber Sie bekommen die Idee. Update: siehe Kommentar unten, ist es eigentlich möglich die zu knacken viel mehr Passwörter als diese.
Was ist denn hier Los?
Lassen Sie uns klären einige Missverständnisse:
Das Salz macht es nicht langsamer zu berechnen hasheses bedeutet nur, Sie knacken jedes Kennwort des Benutzers individuell und vorberechnete hash-Tabellen (buzz-word: rainbow-Tabellen) sind völlig nutzlos. Wenn Sie nicht über eine vorberechnete hash-Tabelle, und du bist nur das knacken einer Passwort-hash, das Salzen macht keinen Unterschied.
SHA-512 ist nicht darauf ausgelegt, hart zu sein, um brute-force -. Besser hashing-algorithmen, wie BCrypt, PBKDF2 oder SCrypt kann so konfiguriert werden viel länger dauern, um zu berechnen, und eine Durchschnittliche computer ist möglicherweise nur in der Lage sein zu berechnen 10-20 hashes einer Sekunde. Lesen Diese hervorragende Antwort über Passwort-hashing-wenn Sie nicht bereits getan haben.
update: Wie bereits im Kommentar von CodesInChaos, auch Passwörter mit hoher Entropie (etwa 10 Zeichen) könnte bruteforced, wenn mit der richtigen hardware zur Berechnung von SHA-512-hashes.
Hinweise auf akzeptierte Antwort:
Die akzeptierte Antwort von September 2014 ist falsch und gefährlich falsch:
Geburtstag Angriff völlig irrelevant zu das knacken eines bestimmten hash. Und das ist in der Tat ein perfektes Beispiel für einen preimage-Angriff. Diese Formel und die nächsten paar Absätze führen gefährlich hohe und völlig sinnfreie Werte für die attack-Zeit. Wie oben dargelegt, es ist durchaus möglich zu knacken gesalzen Wörterbuch Passwörter in Minuten.
Ja, bitte verwenden Sie einen Algorithmus, der langsam zu berechnen, aber was ist "Entropie-enducing"? Putting eine niedrige Entropie Passwort durch einen hash nicht erhöht Entropie. Es sollte bewahren Entropie, Sie können Sie aber nicht einem Müll-Passwort besser mit einem hash, es funktioniert so nicht. Eine schwache Passwort durch PBKDF2 ist immer noch ein schwaches Passwort.
InformationsquelleAutor der Antwort George Powell
Gibt es nicht eine einzige Antwort auf diese Frage, da es zu viele Variablen, aber SHA2 ist noch nicht wirklich geknackt (siehe: Die Lebensdauer von kryptographischen hash-Funktionen), so ist es immer noch ein guter Algorithmus zum speichern von Passwörtern. Die Verwendung von Salz ist gut, weil es verhindert, dass ein Angriff von Wörterbuch-Attacken oder rainbow-Tabellen. Wie wichtig Salz ist, dass es muss eindeutig sein für jedes Passwort. Sie können ein format wie [128-bit-Salz][512-bit-Passwort-hash -] beim speichern des Hash-Passwörter.
Der einzig gangbare Weg, um Angriff ist tatsächlich berechnen hashes für die verschiedenen Möglichkeiten, das Passwort und schließlich die richtige zu finden durch den Abgleich der hashes.
Geben eine Vorstellung darüber, wie viele hashes in einer Sekunde, ich denke Bitcoin ist ein anständiges Beispiel. Bitcoin verwendet SHA256 und schneiden Sie es kurz, die mehrere hashes, die Sie generieren, desto mehr bitcoins erhalten Sie (Sie können den Handel für echtes Geld), und als solche Menschen, die motiviert sind, verwenden GPUs für diesen Zweck. Sie können sehen,in der hardware-übersichtdass eine Durchschnittliche Grafikkarte, die kostet nur $150 berechnen können, mehr als 200 Millionen hashes/s. Je länger und komplexer Ihr Passwort ist, desto länger wird es dauern. Der Berechnung auf 200 M/s, um zu versuchen, alle Möglichkeiten für eine 8 alphanumberic Zeichen (Kapital, unteren, zahlen) rund 300 Stunden. Die Echtzeit wird wahrscheinlich weniger, wenn das Passwort ist etwas, was berechtigt oder ein common english word.
Als solche überhaupt nichts mit Sicherheit, die Sie benötigen, zu betrachten, im Kontext. Was ist der Angreifer motivation? Was ist die Art von Anwendung? Mit einem hash mit zufälligen salt für jeden gibt ziemlich guten Schutz gegen Fälle, in denen so etwas wie Tausende von Passwörtern gefährdet sind.
Eine Sache, die Sie tun können, ist fügen Sie auch zusätzliche brute-force Schutz durch Bremsen unten die hashing-Prozedur. Als Sie nur hash-Passwörter einmal, und die Angreifer zu tun hat, das viele Male, das funktioniert zu Ihren Gunsten. Die typische Art und Weise zu tun ist, um einen Wert, der hash, den Ausgang, hash es wieder und so weiter für eine Feste Anzahl von Iterationen. Sie können versuchen, so etwas wie 1.000 oder 10.000 Iterationen zum Beispiel. Dies wird machen, dass es viele Zeiten, langsamer für die Angreifer zu finden, jedes Passwort.
InformationsquelleAutor der Antwort Can Gencer