Fazit: SHA-1 ist so sicher wie alles andere vor Preimage-Angriffen. Es ist jedoch einfach zu berechnen, was bedeutet, dass es einfacher ist, einen Bruteforce- oder Wörterbuchangriff durchzuführen. (Gleiches gilt für Nachfolger wie SHA-256.) Abhängig von den Umständen ist eine Hash-Funktion, die als rechenintensiv konzipiert wurde (z. B. bcrypt), möglicherweise die bessere Wahl.
Einige Leute werfen oft Bemerkungen wie "SHA-1 ist kaputt" herum, also versuche ich zu verstehen, was genau das bedeutet. Nehmen wir an, ich habe eine Datenbank mit SHA-1-Passwort-Hashes und ein Angreifer mit einem hochmodernen SHA-1-Algorithmus und einem Botnetz mit 100.000 Computern erhält Zugriff darauf. (Die Kontrolle über 100.000 Heimcomputer würde bedeuten, dass sie ungefähr 10 ^ 15 Operationen pro Sekunde ausführen können.) Wie viel Zeit würden sie benötigen
- das Passwort eines Benutzers herausfinden?
- das Passwort eines bestimmten Benutzers herausfinden?
- das Passwort aller Benutzer herausfinden?
- einen Weg finden, sich als einer der Benutzer anzumelden?
- einen Weg finden, sich als bestimmter Benutzer anzumelden?
Wie ändert sich das, wenn die Passwörter gesalzen sind? Ist die Methode des Salzens (Präfix, Postfix, beides oder etwas komplizierteres wie Xor-ing) wichtig?
Hier ist mein aktuelles Verständnis nach einigem googeln. Bitte korrigieren Sie die Antworten, wenn ich etwas falsch verstanden habe.
- Wenn es kein Salz gibt, findet ein Regenbogenangriff sofort alle Passwörter (außer extrem langen).
- Wenn es ein ausreichend langes zufälliges Salz gibt, ist der effektivste Weg, um die Passwörter herauszufinden, ein Brute-Force- oder Wörterbuchangriff. Weder Kollisions- noch Preimage-Angriffe helfen beim Ermitteln des tatsächlichen Kennworts. Daher sind kryptografische Angriffe gegen SHA-1 hier keine Hilfe. Es spielt nicht einmal eine Rolle, welcher Algorithmus verwendet wird - man könnte sogar MD5 oder MD4 verwenden und die Passwörter wären genauso sicher (es gibt einen kleinen Unterschied, da die Berechnung eines SHA-1-Hash langsamer ist).
- Um zu bewerten, wie sicher "genauso sicher" ist, nehmen wir an, dass ein einzelner sha1-Lauf 1000 Operationen erfordert und Kennwörter Groß-, Klein- und Ziffern (dh 60 Zeichen) enthalten. Das heißt, der Angreifer kann täglich 10 15 * 60 * 60 * 24/1000 ~ = 10 17 potenzielle Passwörter testen . Für einen Brute-Force-Angriff würde dies bedeuten, dass alle Passwörter mit bis zu 9 Zeichen in 3 Stunden, bis zu 10 Zeichen pro Woche und bis zu 11 Zeichen pro Jahr getestet werden. (Für jedes weitere Zeichen dauert es 60-mal so viel.) Ein Wörterbuchangriff ist viel, viel schneller (selbst ein Angreifer mit einem einzelnen Computer könnte ihn in Stunden ausführen), findet jedoch nur schwache Passwörter.
- Um sich als Benutzer anzumelden, muss der Angreifer das genaue Kennwort nicht herausfinden. Es reicht aus, eine Zeichenfolge zu finden, die zum gleichen Hash führt. Dies wird als erster Preimage-Angriff bezeichnet. Soweit ich feststellen konnte, gibt es keine Preimage-Angriffe gegen SHA-1. (Ein Bruteforce-Angriff würde 2 160 Operationen erfordern, was bedeutet, dass unser theoretischer Angreifer 10 bis 30 Jahre benötigt, um ihn auszuführen . Die theoretischen Möglichkeiten liegen bei 2 60 Operationen, bei denen der Angriff einige Jahre dauern würde.) Es gibt Vorbildangriffe gegen reduzierte Versionen von SHA-1 mit vernachlässigbarem Effekt (für das reduzierte SHA-1, das 44 Schritte anstelle von 80 verwendet, ist die Angriffszeit von 2 160 Operationen auf 2 157 verringert). Es gibt Kollisionsangriffe gegen SHA-1, die theoretisch durchaus möglich sind ( das Beste, was ich gefunden habe, verkürzt die Zeit von 2 80 auf 2 52 ), aber diese sind gegen Passwort-Hashes nutzlos, auch ohne zu salzen.
Kurz gesagt, das Speichern von Passwörtern mit SHA-1 scheint absolut sicher zu sein. Habe ich etwas verpasst?
Update: Marcelo wies auf einen Artikel hin, in dem ein zweiter Preimage-Angriff in 2 106 Operationen erwähnt wird . ( Bearbeiten: Wie Thomas erklärt , handelt es sich bei diesem Angriff um ein hypothetisches Konstrukt, das nicht für reale Szenarien gilt.) Ich sehe jedoch immer noch nicht, wie dies die Gefahr für die Verwendung von SHA-1 als Schlüsselableitungsfunktion darstellt. Gibt es im Allgemeinen gute Gründe zu der Annahme, dass ein Kollisionsangriff oder ein zweiter Vorbildangriff schließlich in einen ersten Vorbildangriff umgewandelt werden kann?
quelle
Antworten:
Die kurze Antwort auf Ihre Frage lautet: SHA-1 ist so sicher wie möglich. MD5 wäre auch in Ordnung, sogar MD4; aber es könnte einige Investoren nervös machen. Für die Öffentlichkeitsarbeit ist es am besten, eine "bessere" Hash-Funktion zu verwenden, z. B. SHA-256, selbst wenn Sie die Ausgabe auf 160 oder 128 Bit kürzen (um Speicherkosten zu sparen). Einige der SHA-3-Kandidaten der zweiten Runde scheinen schneller als SHA-1 zu sein, während sie wohl "sicherer" sind. Dennoch sind sie noch ein bisschen neu, daher wäre es im Moment sicherer, sich an SHA-256 oder SHA-512 zu halten. Es würde Sie professionell und vorsichtig aussehen lassen, was gut ist.
Beachten Sie, dass "so sicher wie möglich" nicht dasselbe ist wie "vollkommen sicher". Siehe unten für ziemlich ausführliche Erklärungen.
Über bekannte Angriffe:
Bei den bekannten Angriffen auf MD4, MD5 und SHA-1 handelt es sich um Kollisionen, die keinen Einfluss auf den Widerstand vor dem Bild haben. Es hat sich gezeigt, dass MD4 einige Schwachstellen aufweist, die (nur theoretisch) ausgenutzt werden können, wenn versucht wird, HMAC / MD4 zu beschädigen. Dies gilt jedoch nicht für Ihr Problem. Der 2 106 Sekunden lange Preimage-Angriff in der Veröffentlichung von Kesley und Schneier ist ein generischer Kompromiss, der nur für sehr lange Eingaben gilt (2 60 Bytes; das ist eine Million Terabyte - beachten Sie, wie 106 + 60 160 überschreitet; dort sehen Sie das Der Kompromiss hat nichts Magisches.
Der Rest dieser Nachricht setzt voraus, dass die von Ihnen verwendete Hash-Funktion (z. B. SHA-1) eine "Black Box" ohne spezielle Eigenschaft ist, die der Angreifer verwenden kann. Das haben Sie gerade auch mit den "kaputten" Hash-Funktionen MD5 und SHA-1.
Über Regenbogentische:
Der "Regenbogenangriff" ist eigentlich eine Kostenteilung eines Wörterbuch- oder Brute-Force-Angriffs. Es ist eine Ableitung des von Hellman 1980 erstmals beschriebenen Zeit-Speicher-Kompromisses . Angenommen, Sie haben N mögliche Passwörter (das ist die Größe Ihres Wörterbuchs oder 2 n, wenn Sie eine Hash-Funktion mit einer Ausgabe von Brute-Forcing in Betracht ziehen n Bits) gibt es einen Time-Sharing-Angriff, bei dem Sie die N Hash-Passwörter vorberechnen und in einer großen Tabelle speichern. Wenn Sie die Hash-Ausgaben sortieren, können Sie Ihr Kennwort in einer einzigen Suche abrufen. Ein Regenbogentisch ist eine clevere Möglichkeit, diesen Tisch mit viel weniger Platz aufzubewahren. Sie speichern nur N / t- Hash-Passwörter und knacken Passwörter mit O (t 2 ) Nachschlagen. Mit Rainbow-Tabellen können Sie vorberechnete Tabellen virtuell verarbeiten, die viel größer sind als das, was Sie realistisch speichern können.
Ob Regenbogen oder nicht, der Angreifer muss den vollständigen Angriff mindestens einmal ausführen. Dies kann als mehrere aufeinanderfolgende Optimierungsebenen angesehen werden:
Wenn N groß genug ist, dass die CPU-Kosten für das Hashing von N Passwörtern lächerlich sind, ist ein solcher Angriff nicht möglich, unabhängig davon, ob Regenbogentabellen verwendet werden oder nicht. Dies bedeutet, dass eine (vorbildresistente) Hash-Funktion mit einer Ausgabe von 80 Bit oder mehr ausreicht, um einen Brute-Force-Angriff unmöglich zu machen.
Über Salze:
Salze sind ein Weg, um Vorberechnungen zu besiegen. In der obigen Beschreibung bringt das Salt den Angreifer zu Schritt 1 zurück: Das Salting verhindert, dass der Angreifer die O ( N ) -Kosten auf mehrere angegriffene Passwörter verteilt. Vorberechnete Tabellen, erst recht Regenbogentabellen, sind nicht mehr möglich.
Sie möchten salzen, denn wenn die Hash-Daten aus Passwörtern bestehen , dh etwas, das in das Gehirn eines zufälligen Menschen passt, kann N ziemlich niedrig sein: Menschen sind wirklich schlecht darin, Passwörter auszuwählen und sich diese zu merken. Darum geht es bei "Wörterbuchangriffen": Dabei wird ein reduzierter Speicherplatz für potenzielle Kennwörter (das "Wörterbuch") verwendet, unter der Annahme, dass sich viele Benutzerkennwörter in diesem speziell ausgewählten Bereich befinden.
Daher verhindert das Salzen zumindest, dass der Angreifer vorberechnete Tabellen verwendet, insbesondere vorberechnete Regenbogentabellen. Dies setzt voraus , dass der Angreifer sein kann ein Passwort oder zwei brechen; Wir wollen nicht, dass er 1000 andere Passwörter mit wenig zusätzlichem Aufwand knackt.
Salzen ist auch gut für die Öffentlichkeitsarbeit.
Über SHA-1 Kosten:
Bei den Elementarkosten von SHA-1 geht es um das Hashing eines 64-Byte-Blocks. So funktioniert SHA-1: Daten werden aufgefüllt und dann in 64-Byte-Blöcke aufgeteilt. Die Kosten für die Verarbeitung eines einzelnen Blocks betragen auf einem Intel Core2-System etwa 500 Taktzyklen, und das gilt für einen einzelnen Kern. MD5 und MD4 sind schneller und zählen etwa 400 bzw. 250 Zyklen. Vergessen Sie nicht, dass die meisten modernen CPUs mehrere Kerne haben, also multiplizieren Sie entsprechend.
Einige Salzschemata schreiben riesige Salze vor; Beispiel: Was in die Hash-Funktion eingeht, sind tatsächlich 40000 aufeinanderfolgende Kopien eines einzelnen 128-Bit-Salt, gefolgt vom Passwort selbst. Dies verteuert das Hashing von Passwörtern (in meinem Beispiel um den Faktor 10000), sowohl für den legitimen Benutzer als auch für den Angreifer. Ob dies eine gute Idee ist, hängt vom Setup ab. Für die Anmeldung auf einem Desktop-System ist dies gut: Der Benutzer wird nicht einmal bemerken, dass es 10 ms gedauert hat, um sein Passwort zu hashen, anstatt 1µs; Die Kosten für den Angreifer sind jedoch um einen sehr spürbaren Faktor von 10000 gestiegen. Auf gemeinsam genutzten Servern mit Tausenden von Clients pro Sekunde können die Gesamtkosten unerschwinglich werden. Konzeptionell ist es letztendlich keine gute Sicherheit, die Messlatte für den legitimen Benutzer und den Angreifer um denselben Faktor anzuheben. In bestimmten Situationen kann dies jedoch eine lohnende Idee sein.
Über Online-Angriffe:
Bei all dem geht es darum, Offline- Angriffe zu vereiteln . Ein Offline-Angriff ist ein Angriff, bei dem der Angreifer über alle Daten verfügt, die er zum "Testen" von Passwörtern benötigt. Beispielsweise könnte der Angreifer eine Kopie der Datenbank mit den gehashten Passwörtern erhalten. Bei einem Offline-Angriff ist der Angreifer nur durch seine Rechenressourcen begrenzt. Umgekehrt ist ein Online- Angriff ein Angriff, bei dem jede Vermutung des Angreifers einen ehrlichen Prüfer durchlaufen muss (z. B. versucht der Angreifer einfach, sich beim angegriffenen System anzumelden). Online-Angriffe werden vereitelt, indem die Anzahl der Kennwörter pro Sekunde begrenzt wird. Extreme Beispiele sind Smartcards, die nach drei falschen PINs heruntergefahren werden.
Für die Kennwortsicherheit lohnt es sich normalerweise viel mehr, das System so einzurichten, dass ein Angreifer keinen Offline-Angriff erstellt. Genau das tun Unix-Systeme: Die Hash-Passwörter, die sich früher in der weltweit lesbaren
/etc/password
Datei befanden , befinden sich jetzt in der/etc/shadow
Datei, die bis auf wenige privilegierte Anwendungen vor Lesezugriff geschützt ist. Die Annahme hier ist, dass der Angreifer, wenn er lesen kann/etc/shadow
, wahrscheinlich genug Kontrolle über das System hat, dass er keine Passwörter mehr benötigt ...quelle
In den vorherigen Antworten werden keine GPUs erwähnt, die SHA-1-Hashing insofern parallelisieren können, als eine gesamte Datenbank jetzt in Minuten oder Stunden anstatt in Tagen oder Wochen brutal erzwungen werden kann, selbst wenn die Passwörter gesalzen wurden.
Moderne Passwort-Hash-Algorithmen wie bcrypt oder scrypt sind speziell so konzipiert, dass sie auf GPUs nur schwer ausgeführt werden können, da es sich um Blockchiffren mit viel höherem Speicherbedarf handelt (und der Speicherzugriff in einer GPU nicht in gleichem Maße parallelisiert werden kann). Sie haben auch eine "Arbeitsfunktion", die es ihnen ermöglicht, im laufenden Betrieb langsamer zu werden, wenn sich die Technologie verbessert.
Kurz gesagt, Sie sollten nur die besten Werkzeuge für den Job verwenden. Und SHA-1 bleibt weit hinter dem Stand der Technik zurück.
Zur weiteren Lektüre:
quelle
Ihre Beschreibung klingt nach dem aktuellen Stand der Technik korrekt.
Sie sollten jedoch keine einzige Iteration einer Hash-Funktion verwenden: Zumindest sollten Sie viele Male iterieren (1000 Iterationen des Hash erhöhen die Arbeit des Angreifers um das 1000-fache. Sie erhöhen Ihre Arbeit um den gleichen Betrag, aber Sie machen viel weniger Passwort-Hashing als sie sind).
Idealerweise sollten Sie jedoch ein vorhandenes Kennwortspeicherprimitiv verwenden, wie das hier beschriebene .
quelle
SHA1 ist ein Message Digest , es war nie als Passwort-Hashing (oder Schlüsselableitung) gedacht. (Obwohl es ein Baustein für ein KDF sein könnte, wie in PBKDF2 mit HMAC-SHA1.)
Eine Passwort-Hashing-Funktion sollte sich gegen Wörterbuchangriffe und Regenbogentabellen schützen. Um dieses Ziel zu erreichen, wurden mehrere Algorithmen entwickelt.
Derzeit ist Argon2 wahrscheinlich die beste Wahl . Diese Familie von Passwort-Hashing-Funktionen hat 2015 den Passwort-Hashing-Wettbewerb gewonnen.
Wenn Argon2 nicht verfügbar ist, ist PBKDF2 , ein alter NIST-Standard , die einzige andere standardisierte Kennwort-Hashing- oder Schlüsselableitungsfunktion . Andere Optionen, wenn die Verwendung eines Standards nicht erforderlich ist, umfassen bcrypt und scrypt .
Wikipedia hat Seiten für diese Funktionen:
quelle
In SHA-1 wurden schwerwiegende Sicherheitslücken entdeckt, die die Suche viel schneller als Brute Force machen. Es ist immer noch weitgehend unlösbar, aber das wird voraussichtlich nicht mehr lange so sein. Paranoide Programmierer bevorzugen etwas aus der SHA-2-Familie.
Aus diesem Artikel zum ursprünglichen Ergebnis von 2005:
Es ist nicht so, dass die aktuelle Kryptoanalyse SHA-1 unsicher macht, sondern dass die Krypto-Community befürchtet, dass schlimmere Nachrichten gleich um die Ecke kommen könnten. Diese Befürchtung gilt auch für SHA-2, das die gleichen Mängel wie SHA-1 aufweist, wenn auch über einen viel größeren Suchraum, weshalb die Suche nach SHA-3 fortgesetzt wird .
Kurz gesagt, SHA-1 ist derzeit sicher und wird wahrscheinlich noch einige Zeit in Betrieb sein, aber die Krypto-Community ist mit der Prognose unzufrieden.
quelle
Ab Februar 2017 sollte SHA-1 nicht mehr als sicher angesehen werden. Google hat Erfolge mit Kollisionsangriffen gegen die vollständige, nicht reduzierte Runde SHA-1 gemeldet ( Link zum Bericht ). Für die Ankündigung von Google klicken Sie hier .
Bearbeiten: Wie von anderen erwähnt, sind Passwörter nicht anfällig für Hash-Kollisionsangriffe. Als allgemeine Richtlinie würde ich SHA-1 jedoch nicht für sicherheitsrelevante Anwendungen wählen. Es gibt bessere Alternativen.
quelle
PBKDF2
(akaRfc2898DeriveBytes
),password_hash
/password_verify
,Bcrypt
und ähnliche Funktionen. Der Punkt ist, dass der Angreifer viel Zeit damit verbringt, Passwörter mit brutaler Gewalt zu finden. Der Schutz Ihrer Benutzer ist wichtig. Verwenden Sie sichere Kennwortmethoden.Wenn Sie das gesalzene Passwort speichern, ist SHA-1 aus praktischen Gründen in Ordnung. SHA-2 gilt als sicherer, aber SHA-1 ist kein Problem, es sei denn, Sie haben einen Grund, wirklich paranoid zu sein.
Folgendes sagt NIST :
quelle