Frage

Was ist ein gutes, einfaches Verschlüsselungsschema zum Schutz von Passwörtern in einer Datenbank?Ich brauche nicht unbedingt etwas, das extrem sicher ist, und ich brauche auch nichts, das blitzschnell ist, aber diese Dinge wären schön.In erster Linie möchte ich einfach etwas, das einfach zu implementieren ist, ohne schrecklich langsam oder unsicher zu sein.

War es hilfreich?

Lösung

Wie mk sagt, SHA1 oder MD5 sind neben SHA2 die Standardwerte.


Aktualisieren:Da die Prozessoren im Laufe der Jahre immer schneller wurden, sind Hashes zunehmend brute-force-fähig.Es wird jetzt empfohlen, dass Sie es verwenden bcrypt.


Was Sie wollen, wird allgemeiner als kryptografische Hash-Funktion bezeichnet.Kryptografische Hashes sind so konzipiert, dass sie unidirektional sind (angesichts des resultierenden Hashs sollten Sie nicht in der Lage sein, die ursprüngliche Eingabe abzuleiten).Außerdem sollte die Wahrscheinlichkeit, dass zwei beliebige Zeichenfolgen denselben Hash haben (sogenannte Hash-Kollision), gering sein (idealerweise 1/Anzahl der Hash-Werte).

Leider bedeutet die Tatsache, dass Ihre Passwörter gehasht sind, nicht, dass Sie sich nicht wirklich darum bemühen müssen, die gehashten Versionen sicher aufzubewahren.Viel zu viele Menschen verwenden schwache Passwörter, die anfällig für einen Offline-Brute-Force-Angriff wären.

Bearbeiten – Mehrere Leute haben auch bereits darauf hingewiesen, wie wichtig die Verwendung eines Salzes ist.Ein Salt ist ein konstanter Wert, den Sie mit der Eingabe mischen, bevor Sie die Hash-Funktion verwenden.Ein einzigartiger Salt verhindert, dass Offline-Angreifer vorberechnete Tabellen mit gängigen Passwörtern (Regenbogentabellen) verwenden, um Ihre Passwörter noch schneller zu erzwingen.

Andere Tipps

MD5 oder SHA1 + Salz.

Wenn Sie MD5 oder SHA1 verwenden, verwenden Sie ein Salt, um Rainbow-Table-Hacks zu vermeiden.

In C# ist das einfach:

MD5CryptoServiceProvider hasher = new MD5CryptoServiceProvider();
string addSalt = string.Concat( "ummm salty ", password );
byte[] hash = hasher.ComputeHash( Encoding.Unicode.GetBytes( addSalt ) );

Einfach: BCrypt.

Jeffs Wahrscheinlich speichern Sie Passwörter falsch Der Artikel ist eine ausgezeichnete Lektüre zu diesem Thema.

Das war vor ein paar Wochen ein Problem von mir.Wir haben ein großes MIS-Projekt an 975 verschiedenen geografischen Standorten bereitgestellt, wo unser eigener Speicher für Benutzeranmeldeinformationen als Authentifizierung für verschiedene Sätze bereits implementierter und verwendeter Anwendungen verwendet wird.Wir haben bereits sowohl einen REST- als auch einen SOAP-basierten Authentifizierungsdienst bereitgestellt, aber der Kunde bestand darauf, den Benutzeranmeldeinformationsspeicher von anderen Anwendungen aus mit nur einer DB-Verbindung zur schreibgeschützten Ansicht der zugehörigen Tabelle oder Ansicht erreichen zu können.Seufzen... (Diese stark gekoppelte schlechte Designentscheidung ist Gegenstand einer anderen Frage).

Das zwang uns dazu, unser gesalzenes und iterativ gehashtes Passwortspeicherschema in eine Spezifikation umzuwandeln und einige verschiedene Sprachimplementierungen für eine einfache Integration bereitzustellen.

Wir nannten es Ziemlich sichere Hash-Passwörter oder FSHP Zusamenfassend.Implementierte es in Python, Ruby, PHP5 und veröffentlichte es als Public Domain.Kann auf GitHub verzehrt, gegabelt, geflammt oder ausgespuckt werden http://github.com/bdd/fshp

FSHP ist eine gesalzene, iterativ gehashte Passwort-Hashing-Implementierung.

Das Designprinzip ist ähnlich mit PBKDF1 Spezifikation in RFC 2898(auch bekannt als:PKCS #5:Spezifikation für passwortbasierte Kryptographie Version 2.0.)FSHP ermöglicht die Auswahl der Salzlänge, der Anzahl der Iterationen und der zugrunde liegenden kryptografischen Hash-Funktion zwischen SHA-1 und SHA-2 (256, 384, 512).Das selbstdefinierende Metapräfix am Anfang jeder Ausgabe macht sie portierbar, während der Verbraucher seine eigene Sicherheitsbasis für die Passwortspeicherung wählen kann.

SICHERHEIT:

Standardmäßig verwendet FSHP1 8-Byte-Salts mit 4096 Iterationen von SHA-256-Hashing.- 8 Byte -Salz -Rendern Regenbogentischangriffe unpraktisch, indem der erforderliche Raum mit 2^64 multipliziert wird.– 4096 Iterationen führen dazu, dass Brute-Force-Angriffe ziemlich teuer sind.- Es sind keine Angriffe gegen SHA-256 bekannt, um Kollisionen mit einem Rechenaufwand von weniger als 2^128 Operationen zum Zeitpunkt dieser Veröffentlichung zu finden.

UMSETZUNGEN:

  • Python:Getestet mit 2.3.5 (mit Hashlib), 2.5.1, 2.6.1
  • Rubin:Getestet mit 1.8.6
  • PHP5:Getestet mit 5.2.6

Jeder ist mehr als willkommen, um fehlende Sprachimplementierungen zu erstellen oder die aktuellen zu polieren.

GRUNDBETRIEB (mit Python):

>>> fsh = fshp.crypt('OrpheanBeholderScryDoubt')
>>> print fsh
{FSHP1|8|4096}GVSUFDAjdh0vBosn1GUhzGLHP7BmkbCZVH/3TQqGIjADXpc+6NCg3g==
>>> fshp.validate('OrpheanBeholderScryDoubt', fsh)
True

ANPASSEN DER KRYPTE:

Lassen Sie uns unser Passwort-Hashing-Schema schwächen.- Verringern Sie die Salt-Länge von Standard 8 auf 2.– Verringern Sie die Iterationsrunde von Standard 4096 auf 10.- Wählen Sie FSHP0 mit SHA-1 als zugrunde liegenden Hash-Algorithmus.

>>> fsh = fshp.crypt('ExecuteOrder66', saltlen=2, rounds=10, variant=0)
>>> print fsh
{FSHP0|2|10}Nge7yRT/vueEGVFPIxcDjiaHQGFQaQ==

Benutzen Sie die SHA Einweg-Hashing-Algorithmus zusammen mit einem einzigartigen Salt.Es ist der Hauptalgorithmus, den ich zum Speichern meiner Passwörter in der Datenbank verwende.

Wenn Sie SQL Server verwenden, gibt es die HashBytes-Funktion:

http://msdn.microsoft.com/en-us/library/ms174415.aspx

Ich unterstütze die Abstimmung für MD5 oder SHA mit Vorsicht.Alle wichtigen Webentwicklungssprachen verfügen über integrierte Funktionen zur Berechnung des Hashs (in PHP beispielsweise enthält das mcrypt-Paket die erforderlichen Funktionen).

Sie müssen einen unidirektionalen Hash-Algorithmus wie den oben vorgeschlagenen SHA-1 mit einem Salt verwenden.Für weitere Informationen würde ich diese Seite empfehlen.Es enthält einige Beispielcodes/Implementierungen.http://www.obviex.com/samples/hash.aspx

Der Schlüssel zu mehr Sicherheit liegt meiner Meinung nach in der Verwendung dynamischer Salze.Das bedeutet, dass Sie für jeden neuen Benutzer eine zufällige Zeichenfolge generieren und diese Zeichenfolge zum Salzen des Hashs verwenden.Natürlich müssen Sie dieses Salt in der Datenbank speichern, um das Passwort später überprüfen zu können (ich verschlüssele es in keiner Weise).

Für eine nicht umkehrbare Verschlüsselung würde ich auf jeden Fall SHA256 oder SHA1 wählen.Bei MD5 gibt es mittlerweile ziemlich viele Kollisionen und es wurde viel Mühe darauf verwendet, es zu knacken, daher ist es nicht gut zu verwenden.

Wenn Sie Ihre Lösung zukunftssicher machen möchten, würde ich SHA256 oder SHA512 empfehlen.Cryptographic Geekworld macht sich Sorgen wegen MD5 und, in etwas geringerem Maße, SHA1.

Oder, wenn Sie können, warten Sie SHA-3

Mir ist eine große Verwirrung darüber aufgefallen, wie man Passwort-Hashing richtig durchführt, insbesondere beim Stackoverflow.Deshalb habe ich eine Seite geschrieben, die alles klären soll.Es steckt etwas mehr dahinter als die Verwendung eines einfachen Hashs.

Mehr Info: So führen Sie das Passwort-Hashing richtig durch

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