Frage

Was ist die schnellste und zugleich sicherste Methode zum Verschlüsseln von Passwörtern (bevorzugt PHP) und ist die von Ihnen gewählte Methode portierbar?

Mit anderen Worten: Funktionieren meine Passwörter weiterhin, wenn ich meine Website später auf einen anderen Server migriere?

Wie mir gesagt wurde, hängt die Methode, die ich jetzt verwende, von den genauen Versionen der auf dem Server installierten Bibliotheken ab.

War es hilfreich?

Lösung

Wenn Sie eine Verschlüsselungsmethode für Ihr Anmeldesystem wählen, ist Geschwindigkeit nicht Ihr Freund, Jeff hatte einen Streit mit Thomas Ptacek über Passwörter und das Abschluss war, dass Sie die langsamste und sicherste Verschlüsselungsmethode verwenden sollten, die Sie sich leisten können.

Aus dem Blog von Thomas Ptacek:
Geschwindigkeit ist genau das, was Sie bei einer Passwort-Hash-Funktion nicht wollen.

Moderne Passwortschemata werden mit inkrementellen Passwort-Crackern angegriffen.

Inkrementelle Cracker berechnen nicht alle möglichen geknackten Passwörter im Voraus.Sie betrachten jeden Passwort-Hash einzeln und füttern ihr Wörterbuch über die Passwort-Hash-Funktion, so wie es Ihre PHP-Anmeldeseite tun würde.Rainbow-Table-Cracker wie Ophcrack nutzen Speicherplatz, um Passwörter anzugreifen;Inkrementelle Cracker wie John the Ripper, Crack und LC5 arbeiten mit der Zeit:Statistik und Berechnung.

Das Passwort-Angriffsspiel wird in der Zeit gewertet, die zum Knacken des Passworts X benötigt wird.Bei Regenbogentabellen hängt diese Zeit davon ab, wie groß Ihre Tabelle sein muss und wie schnell Sie sie durchsuchen können.Bei inkrementellen Crackern hängt die Zeit davon ab, wie schnell Sie die Passwort-Hash-Funktion ausführen können.

Je besser Sie Ihre Passwort-Hash-Funktion optimieren können, desto schneller wird Ihre Passwort-Hash-Funktion, desto schwächer ist Ihr Schema.MD5 und SHA1, selbst herkömmliche Blockchiffren wie DES, sind auf Schnelligkeit ausgelegt.MD5, SHA1 und DES sind schwache Passwort-Hashes.Auf modernen CPUs können rohe Kryptobausteine ​​wie DES und MD5 bitsliced, vektorisiert und parallelisiert werden, um die Suche nach Passwörtern blitzschnell zu gestalten.Game-over-FPGA-Implementierungen kosten nur Hunderte von Dollar.

Andere Tipps

Ich bin bei Peter.Der Entwickler scheint Passwörter nicht zu verstehen.Wir alle wählen MD5 oder SHA1 (und ich bin auch daran schuld), weil sie schnell sind.Wenn ich darüber nachdenke (weil mich kürzlich jemand darauf hingewiesen hat), ergibt das keinen Sinn.Wir sollten einen Hashing-Algorithmus wählen, der wahnsinnig langsam ist.Ich meine, im Großen und Ganzen wird eine stark frequentierte Website Passwörter hashen. Was?alle 1/2 Minute?Wen interessiert es, wenn es serverseitig 0,8 Sekunden gegenüber 0,03 Sekunden dauert?Aber diese zusätzliche Langsamkeit ist enorm, um alle Arten üblicher Brute-Forcish-Angriffe zu verhindern.

Nach meiner Lektüre ist bcrypt speziell für sicheres Passwort-Hashing konzipiert.Es basiert auf Blowfish und es gibt viele Implementierungen.

Für PHP schauen Sie sich PHPPass an http://www.openwall.com/phpass/

Für alle, die .NET nutzen, schauen Sie sich BCrypt.NET an http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

Es sollte darauf hingewiesen werden, dass Sie das nicht wollen Verschlüsseln das Passwort, das Sie möchten Hash Es.

Verschlüsselte Passwörter können entschlüsselt werden, sodass jemand das Passwort sehen kann.Hashing ist ein einseitiger Vorgang, sodass das ursprüngliche Passwort des Benutzers (kryptografisch) verloren geht.


Welchen Algorithmus Sie wählen sollten – verwenden Sie den aktuell akzeptierten Standardalgorithmus:

  • SHA-256

Und wenn Sie das Passwort des Benutzers hashen, stellen Sie sicher, dass Sie auch anderen Junk-Passwort mit einbinden.z.B.:

  • Passwort: password1
  • Salz: PasswordSaltDesignedForThisQuestion

Hängen Sie den Salt an das Passwort des Benutzers an:

String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");

Schreiben Sie auf keinen Fall Ihren eigenen Verschlüsselungsalgorithmus.Wenn Sie dies tun, ist fast garantiert (es sei denn, Sie sind Kryptograf), dass es einen Fehler im Algorithmus gibt, der es trivial macht, ihn zu knacken.

Erwägen Sie die Verwendung bcrypt Es wird in vielen modernen Frameworks wie Laravel verwendet.

Ich bin nicht unbedingt auf der Suche nach dem Schnellsten, aber nach einem guten Gleichgewicht. Einige der Server, für die dieser Code entwickelt wird, sind ziemlich langsam. Die Ausführung des Skripts, das das Passwort hasht und speichert, dauert 5 bis 6 Sekunden, und das habe ich getan Ich habe es auf das Hashing eingegrenzt (wenn ich das Hashing kommentiere, läuft es in 1-2 Sekunden).

Es muss nicht unbedingt das sicherste sein, ich arbeite (im Moment) nicht für eine Bank, aber auf jeden Fall WIRD NICHT Speichern Sie die Passwörter als Klartext.

password_hash ( string $password , int $algo [, array $options ] ).(PHP 5 >= 5.5.0, PHP 7)

passwort_hash() erstellt einen neuen Passwort-Hash mithilfe eines starken Einweg-Hashing-Algorithmus.passwort_hash() ist mit crypt() kompatibel.Daher können von crypt() erstellte Passwort-Hashes mit passwort_hash() verwendet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top