wake-up-neo.com

Was ist derzeit der sicherste Einweg-Verschlüsselungsalgorithmus?

Wie viele wissen, ist die Einwegverschlüsselung eine praktische Methode zum Verschlüsseln von Benutzerkennwörtern in Datenbanken. Auf diese Weise kann selbst der Administrator der Datenbank das Kennwort eines Benutzers nicht kennen, muss jedoch eine Kennwortschätzung vornehmen, diese mit demselben Algorithmus verschlüsseln und dann das Ergebnis mit dem verschlüsselten Kennwort in der Datenbank vergleichen. Dies bedeutet, dass das Herausfinden des Passworts eine Menge Rätselraten und viel Rechenleistung erfordert.

Angesichts der Tatsache, dass Computer immer schneller werden und Mathematiker diese Algorithmen immer noch entwickeln, frage ich mich, welcher Algorithmus angesichts der modernen Rechenleistung und Verschlüsselungstechniken der sicherste ist.

Ich verwende seit Jahren fast ausschließlich MD5 und frage mich, ob ich noch etwas tun sollte. Sollte ich über einen anderen Algorithmus nachdenken?

Eine andere verwandte Frage: Wie lang sollte ein Feld für ein derartiges verschlüsseltes Passwort normalerweise sein? Ich muss zugeben, dass ich praktisch nichts über Verschlüsselung weiß, aber ich gehe davon aus, dass ein MD5-Hash (als Beispiel) länger sein kann und vermutlich mehr Rechenleistung zum Knacken benötigt. Oder spielt die Länge des Feldes keine Rolle, vorausgesetzt, das verschlüsselte Passwort passt überhaupt hinein?

55
Teekin

Warnung: Seitdem dieser Beitrag im Jahr 2010 verfasst wurde, wurden GPUs häufig für Brute-Force-Kennwort-Hashes eingesetzt. Preisgünstige GPUs können zehn Milliarden MD5s pro Sekunde ausführen. Dies bedeutet, dass sogar ein völlig zufälliges 8-stelliges alphanumerisches Passwort (62 mögliche Zeichen) in 6 Stunden brutal erzwungen werden kann. SHA-1 ist nur geringfügig langsamer, es würde einen Tag dauern. Die Passwörter Ihrer Benutzer sind viel schwächer und fallen (selbst bei Salting) mit einer Rate von Tausenden Passwörtern pro Sekunde. Hash-Funktionen sind entwickelt, um schnell zu sein. Sie möchten dies nicht für Kennwörter. Verwenden Sie scrypt, bcrypt oder PBKDF-2.

MD5 wurde 1996 als schwach befunden und sollte für kryptografische Zwecke nicht mehr verwendet werden . SHA-1 ist ein häufig verwendeter Ersatz, aber weist ähnliche Probleme auf . Die SHA-2 Familie von Hash-Funktionen ist die aktuelle Ersetzung von SHA-1. Die Mitglieder von SHA-2 werden einzeln als SHA-224, SHA-256, SHA-384 und SHA-512 bezeichnet.

Derzeit konkurrieren mehrere Hash-Funktionen um SHA- , den nächsten standardisierten kryptografischen Hashing-Algorithmus. Ein Gewinner wird im Jahr 2012 ausgewählt. Keiner von diesen sollte noch verwendet werden!

Für das Hashing von Passwörtern können Sie auch die Verwendung von bcrypt ​​ in Betracht ziehen. Es ist langsam genug, um groß angelegte Brute-Force-Angriffe unmöglich zu machen. Sie können die Langsamkeit selbst einstellen, um sie zu verlangsamen, wenn Computer schneller werden.

Warnung: bcrypt basiert auf dem älteren Zwei-Wege-Verschlüsselungsalgorithmus Blowfish, für den es heute bessere Alternativen gibt. Ich glaube nicht, dass die kryptografischen Hashing-Eigenschaften von bcrypt vollständig verstanden werden. Jemand korrigiert mich, wenn ich falsch liege; Ich habe nie eine zuverlässige Quelle gefunden, die die Eigenschaften von bcrypt (mit Ausnahme der Langsamkeit) aus kryptografischer Sicht beschreibt.

Es mag ein wenig beruhigend sein, dass das Risiko von Kollisionen beim Kennwort-Hashing weniger von Bedeutung ist als bei der Verschlüsselung mit öffentlichen Schlüsseln oder digitalen Signaturen. Die heutige Verwendung von MD5 ist eine schreckliche Idee für SSL, jedoch nicht gleichermaßen katastrophal für das Hashing von Passwörtern. Aber wenn Sie die Wahl haben, wählen Sie einfach eine stärkere.

Die Verwendung einer guten Hash-Funktion reicht nicht aus, um Ihre Passwörter zu sichern . Sie sollten die Passwörter zusammen mit salt ​​ hashen, die lang und kryptografisch zufällig sind. Sie sollten Ihren Benutzern auch dabei helfen, nach Möglichkeit stärkere Passwörter oder Passphrasen auszuwählen. Länger ist immer besser.

58
molf

Gute Frage! Diese Seite ist eine gute Lektüre. Insbesondere behauptet der Autor, dass MD5 nicht für das Hashing von Passwörtern geeignet ist:

Das Problem ist, dass MD5 schnell ist. So sind seine modernen Konkurrenten wie SHA1 und SHA256. Geschwindigkeit ist ein Entwurfsziel eines modernen sicheren Hashes, da Hashes ein Baustein für fast jedes Kryptosystem sind und in der Regel paket- oder nachrichtenbezogen ausgeführt werden.

Geschwindigkeit ist genau das, was Sie in einer Passwort-Hash-Funktion nicht wollen.

Der Artikel erklärt dann einige Alternativen und empfiehlt Bcrypt als die "richtige Wahl" (seine Worte, nicht meine).

Haftungsausschluss: Ich habe Bcrypt überhaupt nicht ausprobiert. Betrachten Sie dies als eine freundliche Empfehlung, aber nicht als etwas, das ich mit meiner eigenen technischen Erfahrung belegen kann.

10
Matt Solnit

Um die Kennwortsicherheit zu erhöhen, sollten Sie eine größere Auswahl an Symbolen verwenden. Wenn Sie 8-10 Zeichen im Passwort haben, wird es ziemlich schwer zu knacken. Wenn Sie es länger machen, wird es zwar sicherer, aber nur, wenn Sie numerische/alphabetische/andere Zeichen verwenden.

SHA1 ist ein weiterer Hashing-Algorithmus (Einwegverschlüsselung), der langsamer ist, aber einen längeren Digest hat. (verschlüsselte Nachricht) (160 Bit), wobei MD5 nur 128 Bit hat.

Dann ist SHA2 noch sicherer, aber es wird weniger verwendet.

6
Tony The Lion

Zu sehen, dass Computer immer schneller werden und dass Mathematiker diese Algorithmen immer noch entwickeln

Die RSA-Verschlüsselung ist insofern sicher, als sie darauf beruht, dass eine wirklich große Zahl schwer zu faktorisieren ist. Schließlich werden Computer schnell genug, um die Anzahl in einem angemessenen Zeitraum zu berücksichtigen. Um der Kurve immer einen Schritt voraus zu sein, verwenden Sie eine größere Zahl.

Bei den meisten Websites dient das Hashing von Kennwörtern jedoch dazu, unpraktisch dass jemand, der Zugriff auf die Datenbank hat, das Kennwort liest und keine Sicherheit bietet. Zu diesem Zweck ist MD5 in Ordnung1.

Dies impliziert, dass ein böswilliger Benutzer, der Zugriff auf Ihre gesamte Datenbank erhält, das Kennwort nicht benötigt. (Das Schloss an der Haustür hindert mich nicht daran, ins Fenster zu kommen.)


1 Nur weil MD5 "kaputt" ist, heißt das nicht, dass Sie es jederzeit umkehren können.

3
Seth

das Passwort zu salzen ist immer eine zusätzliche Verteidigungsstufe

$salt = 'asfasdfasdf0a8sdflkjasdfapsdufp';
$hashed = md5( $userPassword . $salt );
3
David Morrow

Eine gute Hash-Funktion für den Passwortschutz ist nicht nur eine kryptografisch sichere Einwegfunktion, sondern sollte auch schwer zu erzwingen sein - d. H. Von Natur aus langsam. scrypt ist einer der besten in diesem Bereich. Von der Homepage:

Wir schätzen, dass auf moderner (2009) Hardware die Kosten eines Hardware-Brute-Force-Angriffs auf bcrypt ungefähr 4000-mal höher sind als die Kosten eines ähnlichen Angriffs auf bcrypt (um denselben zu finden), wenn 5 Sekunden für die Berechnung eines abgeleiteten Schlüssels aufgewendet werden Passwort) und 20000-mal größer als ein ähnlicher Angriff gegen PBKDF2.

Das heißt, ausgehend von allgemein verfügbaren Hash-Funktionen ist das Ausführen einiger Tausend Iterationen von Dingen aus der SHA Familie ein ziemlich vernünftiger Schutz für nicht kritische Passwörter.

Fügen Sie außerdem immer ein Salz hinzu, damit Sie nicht die gleichen Anstrengungen unternehmen können, um viele Hashes gleichzeitig zu erzwingen.

1
Ants Aasma

NIST führt derzeit einen Wettbewerb zur Auswahl eines neuen Hashing-Algorithmus durch, genau wie bei der Auswahl des AES-Verschlüsselungsalgorithmus. Die Antwort auf diese Frage wird sich also wahrscheinlich in ein paar Jahren ändern.

Sie können die Einsendungen nachschlagen und sie selbst untersuchen, um festzustellen, ob Sie eine verwenden möchten.

0