Ist SHA-1 für die Passwortspeicherung sicher?

148

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

  1. das Passwort eines Benutzers herausfinden?
  2. das Passwort eines bestimmten Benutzers herausfinden?
  3. das Passwort aller Benutzer herausfinden?
  4. einen Weg finden, sich als einer der Benutzer anzumelden?
  5. 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?

Tgr
quelle
Dies ist jetzt 7 Jahre alt und es ist viel passiert, seit es das letzte Mal bearbeitet wurde. SHA-1 wird nicht mehr als ausreichend sicher für Passwort-Hashing angesehen
GordonM
@ GordonM was ist passiert? Mit zunehmender Rechenleistung werden SHA-1-Kollisionsangriffe immer praktischer, sind hier jedoch nicht wirklich relevant. SHA-1 war nie wirklich sicher für Passwort-Hashing (schnelle Hashes sind es im Allgemeinen nicht), aber in dem Maße, in dem es war, ist es immer noch AFAIK.
Tgr
SHA-1 war nie sicher für Passwort-Hashing, weil es nie beabsichtigt war, Passwörter überhaupt zu sichern ...
Azxdreuwa

Antworten:

209

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:

  1. Der Brute-Force- / Wörterbuch-Angriff hat N gekostet, um jedes Passwort zu knacken.
  2. Bei einer vorberechneten Tabelle zahlt der Angreifer diese Kosten einmal N und kann danach viele Passwörter mit sehr geringen zusätzlichen Kosten pro Passwort angreifen .
  3. Wenn die vorberechnete Tabelle eine Regenbogentabelle ist, kann N etwas größer sein, da die Speicherkosten reduziert werden. Der Engpass bei N wird zur CPU-Leistung, die der Angreifer aufbringen kann, nicht zur Größe seiner Festplatten.

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/passwordDatei befanden , befinden sich jetzt in der /etc/shadowDatei, 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 ...

Thomas Pornin
quelle
5
Hervorragende Antwort. Das einzige, mit dem ich nicht einverstanden bin, ist "Konzeptionell ist es für den legitimen Benutzer und den Angreifer letztendlich keine gute Sicherheit, die Messlatte um denselben Faktor zu erhöhen" - der Angreifer muss ein großes Vielfaches der Operationen ausführen, die ein Benutzer ausführen muss. Durch Hinzufügen eines Taktzyklus für eine Benutzeranmeldung werden Millionen für einen Angreifer hinzugefügt.
Nick Johnson
1
@Thomas Dies bleibt genau und wird wahrscheinlich auf unbestimmte Zeit genau bleiben. Hacker können aufgrund der schlechten Qualität gängiger Passwörter tatsächliche Passwörter durch jede Art von Hashing erraten . Wenn Sie "123456" erraten, erhalten Sie immer ein paar Treffer. Dies gilt unabhängig davon, welchen Kennwortspeicher Sie verwenden.
Tyler
1
Nur meine Sichtweise, aber warum sollten Sie bei SHA1 bleiben, wenn eine stärkere Passwortverschlüsselung bereits weit verbreitet ist? Vor einem Jahr galt MD5 als "sicher", und jetzt ist es nicht mehr so ​​- nach allem, was wir wissen, könnte SHA1 jeden Tag dasselbe passieren. Persönlich werde ich von diesem Punkt an auf Blowfish wetten - es scheint einen besseren Repräsentanten und weniger besorgte Experten in der Krypto-Community zu haben, es ist fast überall verfügbar, also gibt es keinen Grund, mit SHA1 zu spielen.
mindplay.dk
1
Ich bin zutiefst schockiert, als ich auf eine Antwort von @ThomasPornin stoße, wonach MD5 für die Speicherung von Passwörtern sicher ist. Wenn MD5 in Ordnung ist, warum sagt ALLES, dass Sie es nicht verwenden, sondern bcrypt verwenden? Sind sie übervorsichtig? Ich habe alles gelesen und verstanden und hatte den Eindruck, MD5 sei sehr schlecht, weil es so anfällig für rohe Gewalt ist. Kommentare noch vor einem Jahr widersprechen nicht der Antwort ...
temporärer_Benutzername
1
@Aerovistae: Vielleicht möchten Sie sich diese Antwort auf der Website security.SE ansehen . Es enthält weitere Analysen und aktuelle Details zum Hashing von Passwörtern.
Thomas Pornin
30

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:

Marmeladenkuchen
quelle
2
"Moderne Passwort-Hash-Algorithmen wie bcrypt oder PBKDF2 sind speziell so konzipiert, dass sie auf GPUs nur schwer ausgeführt werden können" - meinten Sie "bcrypt or scrypt"? PBKDF2 ist nur iteriertes Hashing, es gibt nichts, was für eine GPU problematisch wäre.
Tgr
4
Bitte lassen Sie mich wissen, welche GPU Sie verwenden, ich werde die gleiche kaufen. Wenn Sie 2 ^ 160 SHA-1-Berechnungen in "Minuten" durchführen können (das wären weniger als "Stunden", also höchstens 59 Minuten), müssen Sie in der Lage sein, mehr als 10 ^ 44 pro Sekunde auszuführen. Da die PCIe-Übertragungsgrenze bei etwa 128 GT / s liegt, muss Ihre GPU auch über einen hervorragenden integrierten Speicher verfügen. Ich will es.
Damon
3
@Damon: Sie scheinen davon auszugehen, dass Benutzer entweder "triviale" Passwörter (<8 Bit Entropie) oder "unzerbrechliche" Passwörter (> 60 Bit Entropie) haben. Sie ignorieren alle Personen, deren Kennwortentropie im Bereich von 10 bis 60 Bit liegt. Dies sind die Benutzer, bei denen bcrypt, rainbow tables und GPUs verwendet werden und die normalerweise etwa 80% einer typischen Benutzerbasis ausmachen.
Jammycakes
1
(oops ... ich hätte sagen sollen: "Das sind die Benutzer, bei denen bcrypt, rainbow tables und GPUs den größten Unterschied machen")
jammycakes
3
Einige Statistiken und Analysen finden Sie unter troyhunt.com/2011/06/brief-sony-password-analysis.html. Während 36% der Benutzer Kennwörter auswählen, die in Kennwortwörterbüchern angezeigt werden, wählen nur 2-3% die am häufigsten verwendeten aus.
Jammycakes
7

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 .

Nick Johnson
quelle
Tausende Male zu iterieren ist keine so gute Idee, wie Sie vielleicht denken. Es erhöht das Risiko einer Hash-Kollision. yorickpeterse.com/articles/use-bcrypt-fool
jammycakes
1
Dieser Artikel sieht völlig verwirrt aus. Eine sichere Hashing-Funktion verliert durch iteratives Hashing keine nennenswerte Entropie, und iteratives Hashing ist eine Kernkomponente von Schlüssel-Stretching-Schemata wie PBKDF2 und Scrypt. Sogar bcrypt, das der Autor empfiehlt, verwendet eine ähnliche Konstruktion. Sein "Angriff" beruht darauf, ein Vorbild eines Hashs zu finden. In diesem Fall sind die meisten Konstruktionen, die diesen Hash verwenden, ohnehin gründlich kaputt. Schließlich empfehle ich nicht, iteratives Hashing direkt zu verwenden - wie ich in meiner Frage sage, sollten Sie ein vorhandenes Grundelement verwenden, das für diesen Zweck entwickelt wurde.
Nick Johnson
7

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:

Erwan Legrand
quelle
4

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 Zeit zu gehen, aber nicht zu den Feuerausgängen zu rennen. Sie sehen keinen Rauch, aber die Feuermelder sind los."

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.

Marcelo Cantos
quelle
Könnten Sie einen Link angeben? Wie gesagt, der beste Preimage-Angriff, den ich finden konnte, beschleunigt die Suche um das Achtfache, und selbst damit dies funktioniert, müssen Sie die Hälfte der Schritte von SHA-1 weglassen. (Ich denke auch, dass dies ein zweiter Preimage-Angriff ist, der gegen Passwort-Hashes nutzlos ist.)
Tgr
Ich bin auch skeptisch gegenüber etwas, das von der NSA kommt, angesichts der jüngsten Nachrichten :)
Alex W
4

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.

Aaron
quelle
OK, das Auffinden einer SHA-1-Kollision dauerte ungefähr 6.500 CPU-Jahre und 100 GPU-Jahre . Es handelt sich nicht um einen Produktionsangriff. Das Knacken von Passwörtern ist keine brutale Gewalt gegen alle möglichen Eingaben, sondern gegen Listen mit 10.000.000 häufigen Passwörtern. Hier ist das Papier .
Zaph
1
Der Fehler besteht darin, dass nur eine Hash-Funktion zum Schutz von Passwörtern verwendet wird. Die Verwendung einer Hash-Funktion reicht nicht aus, und das Hinzufügen eines Salzes trägt wenig zur Verbesserung der Sicherheit bei. Kryptografische Hashes sind sehr schnell. Iterieren Sie stattdessen über eine HMAC mit einem zufälligen Salz für eine Dauer von etwa 100 ms und speichern Sie das Salz mit dem Hash. Verwenden Sie Funktionen wie PBKDF2(aka Rfc2898DeriveBytes), password_hash/ password_verify, Bcryptund ä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.
Zaph
Kollision ist kein Vorbild und Passwörter sind keine Signaturen. Kollisionsangriffe funktionieren nicht gegen Kennwörter, da sie die Kenntnis des ursprünglichen Klartextes erfordern.
Tgr
Tgr: stimmte zu, danke. Zaph: Ja, das Salzen zum Schutz vor Regenbogenangriffen und die Verwendung langsamer Krypto-Hashes gehören zu den empfohlenen Methoden, auf die ich in dieser Antwort nicht ausdrücklich eingegangen bin.
Aaron
3

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 :

Die bisher auf SHA-1 präsentierten Ergebnisse stellen seine Sicherheit nicht in Frage. Aufgrund der technologischen Fortschritte plant NIST jedoch, SHA-1 bis 2010 zugunsten der größeren und stärkeren Hash-Funktionen (SHA-224, SHA-256, SHA-384 und SHA-512) auslaufen zu lassen.

VladV
quelle
Dies ist ein NIST-Kommentar aus dem Jahr 2004. Der Empfehlungsentwurf von 2010 besagt, dass SHA-1 für alle Anwendungen zur Erzeugung nicht digitaler Signaturen nach 2010 zugelassen ist.
Tgr