Frage

    

Diese Frage bereits eine Antwort hier:

    
            
  •              Secure Password Hashing                                      9 Antworten                          
  •     
    

Gibt es alles zur Verfügung, ist nicht trivial zerbrechlich?

War es hilfreich?

Lösung

  

Diese 2008 Antwort ist jetzt gefährlich veraltet. SHA (alle Varianten) ist jetzt trivial zerbrechlich, und bewährtes Verfahren ist jetzt (Stand: Januar 2013) eine Schlüsselrecke Hash zu verwenden (wie PBKDF2) oder idealerweise ein RAM intensive ein (wie Bcrypt ) und ein Benutzer Salz hinzuzufügen.

     

Die Punkte 2, 3 und 4 sind noch wert Aufmerksamkeit auf.

     

Siehe IT-Security-SE-Website mehr.


Original 2008 Antwort:

  1. Mit einem bewährten Algorithmus. SHA-256 verwendet 64 Zeichen in der Datenbank, aber mit einem Index auf der Spalte, die kein Problem, und es ist eine bewährte Hash und zuverlässiger als MD5 und SHA-1. Es ist auch in den meisten Sprachen als Teil der Standard-Sicherheits-Suite implementiert. Allerdings fühlen sich nicht schlecht, wenn Sie verwenden SHA-1.

  2. Sie einfach nicht die Passwort-Hash, sondern setzen andere Informationen in es auch. Sie verwenden oft den Hash von „Benutzername: Passwort: Salz“ oder ähnlich, und nicht nur das Passwort, aber wenn Sie mit diesem spielen, dann machen Sie es noch schwieriger, einen Wörterbuch-Angriff ausführen

  3. .
  4. Die Sicherheit ist ein starkes Feld, nicht denken, Sie Ihre eigenen Algorithmen und Protokolle erfinden können.

  5. Schreiben Sie nicht Protokolle wie "[AddUser] Hash von George Bush: Rep4Lyfe: ASOIJNTY ist xyz"

Andere Tipps

Die erste Regel der Kryptographie und Speicherung von Passwörtern ist „ nicht erfinden it yourself “, aber wenn man hier muss das absolute Minimum ist, müssen Sie jeden Anschein von Sicherheit zu tun haben:

Cardinal Regeln:

  1. Speichern Sie niemals ein Klartext-Passwort (was bedeutet, können Sie es nie entweder anzuzeigen oder zu übertragen.)
  2. niemals die gespeicherte Darstellung eines Passworts über eine ungesicherte Leitung übertragen (entweder Klartext oder verschlüsselt gehasht).
  3. Die Geschwindigkeit ist dein Feind.
  4. Sie regelmäßig erneut analysieren und verbessert Ihren Prozess als Hardware und Kryptoanalyse verbessert.
  5. Kryptographie und Prozess ist ein sehr klein ein Teil der Lösung.
  6. Points of Failure gehören. Lagerung, Client, Übertragung, Verarbeitung, Benutzer, rechtliche Optionsscheine, Intrusion und Administratoren

Schritte:

  1. Erzwingen einige vernünftige Mindestkennwortanforderungen.
  2. Passwörter ändern häufig.
  3. die stärkste Hash Verwenden Sie bekommen können -. SHA-256 wurde hier vorgeschlagen
  4. Kombinieren Sie das Passwort mit einem festem Salz (gleich für die ganze Datenbank).
  5. Kombinieren Sie das Ergebnis des vorherigen Schrittes mit einem einzigartigem Salz (vielleicht der Benutzername, Rekord-ID, ein guid, eine lange Zufallszahl, etc.), die zu diesem Datensatz gespeichert wird und angebracht ist.
  6. Führen Sie die Hash-Algorithmus mehr Male - wie 1000 mal . Im Idealfall ein anderes Salz mit dem vorherigen Hash jedes Mal umfassen. Geschwindigkeit ist dein Feind und mehr Iterationen reduzieren die Geschwindigkeit. Jeder so oft die Iterationen verdoppeln (dies erfordert einen neuen Hash-Erfassung -. Es tun beim nächsten Mal sie ihr Passwort ändern)

Oh, und es sei denn, Sie SSL oder eine andere Linie Sicherheit laufen dann nicht zulassen Ihr Passwort im Klartext übertragen werden. Und wenn Sie nur die endgültige Hash vom Client an Ihrer gespeicherten Hash vergleichen dann nicht zulassen, dass entweder im Klartext übertragen werden. Sie benötigen eine Nonce (Nummer einmal verwendet) an den Client zu senden und zu haben sie, dass Hash mit ihren erzeugten Hash-Hash (Schritte oben verwenden) und dann Sie sie senden, dass man. Auf der Serverseite führen Sie den gleichen Prozess und sehen, ob die beiden einmal Match-Hashes. Dann über sie verfügen. Es gibt einen besseren Weg, aber das ist die einfachste.

Coding hatte einen großen Artikel auf diesem letzten Jahr

http://www.codinghorror.com/blog/archives/000953.html

Die Empfehlung am Ende des Artikels ist BCrypt

Die oben genannten Algorithmen sind kryptografisch sicheren Hash-Algorithmen (aber MD5 als nicht sicher sein heute).

Allerdings gibt es Algorithmen, die speziell abzuleiten Schlüssel von Passwörtern erstellt. Dies sind die Schlüsselableitungsfunktionen . Sie sind für den Einsatz mit symmetrischen Chiffren entworfen, aber sie sind gut für zu Kennwort speichern. PBKDF2 beispielsweise verwendet Salz, eine große Anzahl von Iterationen und eine gute Hash-Funktion. Wenn Sie eine Bibliothek haben, was implementiert es (zum Beispiel .NET), ich glaube, Sie sollten es in Betracht ziehen.

Fügen Sie ein zum gehashten Passwort Wert rel="noreferrer"> (speichern das Salz Wert in dB). Wenn ein einzigartiges Salz den Vorteil der Verwendung eines sichereren Algorithmus als SHA1 verwendet wird oder MD5 ist nicht wirklich notwendig ist (an diesem Punkt ist es eine schrittweise Verbesserung, während mit einem Salz eine wesentlichen Verbesserung ist).

Verwenden Sie eine starke Cryptographic Hash-Funktion wie MD5 oder SHA1, aber stellen Sie sicher, dass Sie eine gute Salz , sonst werden Sie anfällig für rainbow-Tabelle Angriffe.

Update Januar 2013

Die ursprüngliche Antwort ist aus dem Jahr 2008, und die Dinge haben sich ein wenig in den letzten 5 Jahren bewegt. Die leichte Verfügbarkeit von Cloud Computing und leistungsstarken Parallel-Prozessor-Grafikkarten bedeutet, dass Passwörter bis zu 8 oder 9 Zeichen als MD5 oder SHA1 gehasht sind nun trivialerweise zerbrechlich.

Nun wird ein langes Salz ist ein Muss, da etwas härter wie SHA512 ist.

Jedoch sind alle SHA Variante Hashes für Kommunikationsverschlüsselung ausgelegt sind, -. Nachrichten hin und her, wo jede Nachricht verschlüsselt ist, und aus diesem Grund sind sie so konzipiert, dass schnell

In der Kennwort-Hashing-Welt, ist dieser Entwurf ein großer Nachteil, da je schneller die Hash ist, desto weniger Zeit erzeugen sie eine große Anzahl von Hashes zu erzeugen nehmen.

Eine schnelle Hash wie SHA512 Millionen erzeugt werden kann, sogar Milliarden Mal pro Sekunde. Werfen Sie in billige Parallelverarbeitung und jede mögliche Permutation eines Passworts wird ein absolutes Muss.

Key-Stretching ist ein Weg, dies zu bekämpfen. Ein Schlüsselrecken Algorithmus (wie PBKDF2) wendet eine schnellere hash (wie SHA512) tausende Male, typischerweise die Hash-Erzeugungs verursacht 1/5 einer Sekunde oder so zu übernehmen. Jemand der Anmeldung wird nicht merken, aber wenn man nur 5 Hashes pro Sekunde Brute-Force-Angriffe erzeugen kann, ist viel härter.

Zweitens sollte immer werden, um ein pro-Benutzer zufällig Salz. Dies kann zufällig als erstes erzeugt werden n Bytes des Hash (die dann abgezogen werden ab und zu dem Kennwort Text zu prüfen, bevor die Hashes Gebäude zu vergleichen) oder als zusätzliche DB-Spalte.

So:

  

Welche Algorithmus sollte ich Passwörter in der Datenbank Hash verwenden?

  • Key-Strecken Hash-Generation zu verlangsamen. Ich würde wahrscheinlich mit PBKDF2 gehen.

  • Per-User-Salz bedeutet ein neuer Angriff pro Benutzer, und einige Arbeit, herauszufinden, wie das Salz zu erhalten.

Rechenleistung und Verfügbarkeit steigen exponentiell - die Chancen sind, diese Regeln wieder in weiteren 4 Jahren verändern werden. Wenn Sie zukunftssichere Sicherheit benötigen würde ich bcrypt / Scrypt Stil Hashes untersuchen - das ist die langsamen Schlüssel Stretching-Algorithmen nehmen und einen Schritt hinzufügen, die viel RAM verwendet, um den Hash zu generieren. Mit so viel RAM verringert die Wirksamkeit von billigen parallelen Prozessoren.

Original September 2008 (links in so Kommentare Sinn ergeben)

MD5 + Salz oder SHA1 + Salz ist nicht ‚trivial zerbrechlich‘ - die meisten Hacks hängen von riesigen Rainbow-Tabellen und diese wurden weniger nützlich mit einem Salz [update, now they are].

MD5 + Salz ist eine relativ schwache Option, aber es ist nicht leicht gebrochen [update, now it is very easy to break] sein wird.

SHA2 geht den ganzen Weg bis zu 512 - das ist ziemlich unmöglich sein wird mit leicht erhältlichen Kits [update, pretty easy up to 9 char passwords now] zu knacken - obwohl ich bin sicher, dass in einigen Militärbunker ein Cray gibt es irgendwo, dass es tun kann [You can now rent this 'Cray' from Amazon]

MD5 oder SHA in Kombination mit einem zufällig erzeugten Salzwert für jeden Eintrag

wie bereits erwähnt einfache Hash-Algorithmen sollten hier nicht verwendet werden ist Grund, warum:

http://arstechnica.com/security/2012/08/passwords -unter-Angriff /

so etwas anderes verwenden, wie zum Beispiel http: // msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx

Alle Hashing-Algorithmen sind anfällig für einen „Wörterbuchangriff“. Das ist einfach, wo der Angreifer eine sehr große Wörterbuch der möglichen Passwörter hat, und sie Hash alle von ihnen. Sie sehen dann, wenn eine dieser Hashes den Hash des Passworts übereinstimmen sie wollen entschlüsseln. Diese Technik kann leicht Millionen Passwörter testen. Dies ist, warum Sie ein beliebiges Passwort zu vermeiden, müssen die remote vorhersehbar sein könnte.

Aber, wenn Sie bereit sind, die Gefahr eines Wörterbuchangriff zu akzeptieren, würde MD5 und SHA1 jeweils mehr als ausreichend sein. SHA1 ist sicherer, aber für die meisten Anwendungen das ist wirklich nicht eine signifikante Verbesserung.

MD5 / SHA1-Hashes sind beide eine gute Wahl. MD5 ist etwas schwächer als SHA1.

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