it-swarm.com.de

Welcher Hash wird 2018 zum Speichern von Passwörtern empfohlen: bcrypt, scrypt, Argon2?

Es gibt viele Fragen zum Auswählen einer Hash-Funktion, einschließlich Wie man sicher Passwörter hascht ? oder Gibt es modernere Methoden zum Hashing von Passwörtern als bcrypt und scrypt ? , with sehr detaillierte Antworten, aber müssen von ihnen ziemlich viel datieren .

Der Konsens schien zu sein:

  • bcrypt ist eine gute Wahl
  • scrypt sollte eine bessere Wahl sein, aber zu der Zeit war es noch ein bisschen neu, also sollte man warten müssen, um zu sehen, ob es den Test der Zeit besteht

Argon2 ist jetzt der Gewinner des Passwort-Hashing-Wettbewerbs, aber es ist definitiv noch ziemlich neu, so dass die gleichen Argumente, die zu dieser Zeit für das Verschlüsseln galten, wahrscheinlich jetzt für ihn gelten.

Fragen:

  • Ist bcrypt immer noch eine gute Wahl?
  • Ist Scrypt jetzt eine gute Wahl?
  • Ist Argon2 schon eine gute Wahl?

Welche Passwort-Hashing-Funktion sollte man heute für ein durchschnittliches System mit Passwörtern bevorzugen? Welche Funktionen sollten Parameter haben?

Bearbeiten

Beachten Sie, dass die meisten Antworten auf diese Frage aus dem Jahr 2010 stammen, obwohl die Frage fast ein Duplikat von Wie kann man Passwörter sicher hasht ? Wie oben angegeben ist? 2013, mit den neuesten relevanten Updates aus dem Jahr 2016 . Die Dinge haben sich seitdem offensichtlich geändert, und ich suche nach einem Update dieser hervorragenden Antworten. Sie können diese Frage gerne mit einem Update beantworten und diese Frage schließen, wenn Sie der Meinung sind, dass dies sinnvoller ist. Schließen Sie diese Frage jedoch nicht einfach ohne eine aktuelle Antwort hier oder da.

60
jcaron

Ich empfehle bcrypt nicht für neue Designs, bei denen der Eingabewert ein vom Menschen generiertes Token (z. B. ein Kennwort) ist und Offline-Cracking im Bedrohungsmodell enthalten ist. Der Mangel an Speicherhärte ist ein ernstes Problem, wenn man bedenkt, wie leistungsfähig Standardhardware heutzutage ist. Während das Fehlen wichtiger bcrypt-basierter Kryptowährungen weder FPGA noch ASIC Mining-Implementierungen für den Algorithmus) angezogen hat, besteht immer noch ein gewisses Interesse daran, bcrypt mit hybriden ARM/FPGA-SoCs wie in anzugreifen dieses Papier aus dem Jahr 2014 . Letztendlich ist der Mangel an Speicherhärte ein erhebliches Problem für moderne Designs.

scrypt hat als Teil seines Designs Speicherhärte, weist jedoch einige Mängel auf. Zunächst einmal gibt es eine ganze Reihe von Kryptowährungen auf Verschlüsselungsbasis, und dies hat einen ziemlichen Markt für Standard-FPGA- und ASIC Mining-Lösungen, die zum Knacken verwendet werden könnten) angezogen Die Anzahl der Iterationen ist an einen einzelnen skalaren Kostenfaktor gebunden. Dies macht es schwierig, die Verschlüsselung an Ihr eigenes Bedrohungsmodell anzupassen. Ich empfehle die Verschlüsselung, wenn dies die einfachste Option für die Kennwortspeicherung in der von Ihnen verwendeten Sprache oder im verwendeten Framework ist, z Es ist bereits eine integrierte Option zum Schutz von Benutzerkennwörtern.

Letztendlich empfehle ich Argon2 aus mehreren Gründen immer als bevorzugte Wahl:

  1. Es gibt es schon eine Weile - es hat 2015 den PHC gewonnen. Es gab einige Artikel, die sich mit den Sicherheitsnachweisen von Argon2 befassten, und viele weitere Studienpotentiale Möglichkeiten zur Beschleunigung des Algorithmus auf dedizierter Hardware. Bisher hat es der Prüfung sehr gut standgehalten.
  2. Es gibt Open Source-Implementierungen und -Bindungen für C, Erlang, Go, Haskell, JavaScript, Java, Lua, OCaml, Python, R, Ruby, Rust, C # (sowohl Framework als auch Core), Perl und Schnell.
  3. Argon2 basiert auf der AES-Verschlüsselung, und die meisten modernen x86_64- und ARMv8-Prozessoren implementieren eine AES-Befehlssatzerweiterung. Dies hilft, die Leistungslücke zwischen dem beabsichtigten System und einem dedizierten Cracking-System zu schließen. (BEARBEITEN, Februar 2019: Es scheint, dass neuere Versionen von Argon2 möglicherweise nicht mit der AES-Implementierung in Hardware-Erweiterungen kompatibel sind. Weitere Informationen hierzu finden Sie in den Kommentaren.)
  4. Argon2 ist besonders resistent gegen Ranking-Tradeoff-Angriffe über einen Speicheranteil von einem Drittel hinaus, was es viel schwieriger macht, auf FPGAs billig zu beschleunigen. Dies liegt daran, dass FPGA-basierte Cracking-Lösungen hauptsächlich durch die Speicherbandbreite begrenzt sind und der Angreifer beim Design von Argon2 eine erhebliche Verlängerung der Rechenzeit in Kauf nehmen muss, um die Anforderungen an die Speicherbandbreite zu verringern, wodurch der Kompromiss ineffizient wird. Weitere Informationen hierzu finden Sie in Abschnitt 5.1 des Papiers Argon2 . Informationen zum Verschlüsseln finden Sie zum Vergleich in Tabelle 6 (unter Abschnitt 5) des Papiers -. "Kompromiss-Kryptoanalyse speicherharter Funktionen".
  5. Die Parameter für die Speicherhärte und die CPU-Härte können zusammen mit einem Parallelitätsfaktor separat konfiguriert werden. Auf diese Weise können Sie die Sicherheit besser an Ihren Anwendungsfall anpassen, z. B. einen Server mit mäßiger CPU-Leistung und viel RAM.

Wie Sie bereits bemerkt haben, sind die von Ihnen ausgewählten Parameter wichtig. Bei der Verschlüsselung haben Sie nicht viel Auswahl. Daher empfehle ich, in diesem Fall einen Kostenfaktor basierend auf der Zeit (z. B. 1500 ms Verarbeitung) auszuwählen.

Für Argon2 haben Sie mehr Auswahlmöglichkeiten als nur Parameter. Es gibt tatsächlich drei verschiedene Implementierungen von Argon2, bekannt als Argon2d, Argon2i und Argon2id. Das erste, Argon2d, ist am rechenintensivsten und widerstandsfähig gegen Beschleunigung durch GPUs, FPGAs und ASICs mit begrenzter Speicherbandbreite. Da die Speicherzugriffe von Argon2d jedoch vom Kennwort abhängen, können Seitenkanalangriffe, bei denen Informationen über Speicherzugriffe verloren gehen, das Kennwort anzeigen. Argon2i wählt, wie das Suffix andeutet, Speicheradressen unabhängig vom Kennwort aus. Dies verringert die Beständigkeit gegen GPU-Risse, eliminiert jedoch den Seitenkanalangriff. Argon2id ist ein Hybridansatz, bei dem der erste Durchgang den (unabhängigen) Argon2i-Ansatz und nachfolgende Durchgänge den (abhängigen) Argon2d-Ansatz verwenden.

Wo immer möglich, sollten Sie eine Argon2id-Implementierung verwenden. Dies ist jedoch nicht immer verfügbar. In einem Szenario, in dem Sie Kennwörter auf einem Server schützen und Ihr Bedrohungsmodell Angriffe auf Seitenkanäle mit Speicherzugriff als sehr unwahrscheinlich erachtet (dies ist meiner Erfahrung nach die meiste Zeit), können Sie Argon2d verwenden. Wenn Angriffe auf Seitenkanäle mit Speicherzugriff als potenzielles Risiko angesehen werden, z. In einem System mit mehreren Mandanten, in dem nicht vertrauenswürdige oder weniger vertrauenswürdige Benutzer Code auf demselben System ausführen, auf dem das Argon2-Hashing ausgeführt wird, ist Argon2i möglicherweise die bessere Wahl.

Kurz gesagt: Verwenden Sie Argon2id, wenn Sie können, verwenden Sie Argon2d in fast allen anderen Fällen, und betrachten Sie Argon2i, wenn Sie wirklich Angriffsresistenz gegen Speicherseitenkanäle benötigen.

Für die Parameter gelten die einzigen harten Regeln für Argon2i, das aufgrund seiner vergleichbaren Schwäche mit den anderen Optionen besonders behandelt werden muss. Insbesondere muss die Anzahl der Iterationen 10 oder mehr betragen, da ein praktischer Kompromissangriff auf Argon2i .

Sie sollten die Parameter an Ihre eigenen Anwendungsfall- und Leistungsanforderungen anpassen, aber ich glaube, dass die folgenden Standardeinstellungen für Argon2id und Argon2d akzeptabel sind:

  • 512 MB Speicher
  • 8 Iterationen
  • Parallelitätsfaktor von 8

Die Geschwindigkeit hängt von Ihrem Prozessor ab, aber ich habe auf meinem System ungefähr 2000 ms erreicht.

Für Argon2i müssen Sie die Anzahl der Iterationen auf mindestens 10 erhöhen, was möglicherweise dazu führt, dass Sie den Speicherfaktor aus Leistungsgründen verringern müssen. Dies ist ein weiterer Grund, Argon2i zu vermeiden, es sei denn, Sie benötigen unbedingt seinen Widerstand gegen Speicherzugriffsseitenkanäle.

53
Polynomial