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?