Zunächst einige wichtige Begriffe:
Hashing - Der Vorgang, bei dem eine Zeichenfolge genommen und eine Folge von Zeichen erzeugt wird, die nicht auf die ursprüngliche Zeichenfolge zurückgesetzt werden kann.
Symmetrische Verschlüsselung - (Regel nur bezeichnet als ‚Verschlüsselung‘) - der Akt der eine Zeichenfolgenehmen und eine Folge von Zeichen erzeugendie kann auf die ursprüngliche Zeichenfolge durch die Verwendung des gleichen Verschlüsselungsschlüssel entschlüsselt werdendie es verschlüsselt.
Rainbow Table - Eine Nachschlagetabelle, die alle Variationen von Zeichen enthält, die in einem bestimmten Hashing-Algorithmus gehasht wurden.
Salz - eine bekannte zufällige Zeichenfolge, die an die ursprüngliche Zeichenfolge angehängt wird, bevor sie gehasht wird.
Für .NET Framework verfügt Bcrypt noch nicht über eine verifizierte Referenzimplementierung. Dies ist wichtig, da nicht festgestellt werden kann, ob eine vorhandene Implementierung schwerwiegende Fehler aufweist. Eine Implementierung von BCrypt für .NET erhalten Sie hier . Ich weiß nicht genug über Kryptographie, um zu sagen, ob es sich um eine gute oder eine schlechte Implementierung handelt. Kryptographie ist ein sehr tiefes Feld. Versuchen Sie nicht, einen eigenen Verschlüsselungsalgorithmus zu erstellen . Ernsthaft.
Wenn Sie Ihre eigene Passwortsicherheit implementieren möchten (Seufzer), müssen Sie verschiedene Dinge tun:
- Verwenden Sie einen relativ sicheren Hash-Algorithmus .
- Salt jedes Passwort, bevor es gehasht wird.
- Verwenden Sie für jedes Passwort ein eindeutiges und langes Salz und speichern Sie das Salz mit dem Passwort.
- Benötigen Sie sichere Passwörter .
Selbst wenn Sie dies alles tun, könnte ein entschlossener Hacker möglicherweise immer noch die Passwörter herausfinden, es würde nur sehr lange dauern. Das ist dein Hauptfeind: Zeit .
Der bcrypt-Algorithmus funktioniert, da das Hashing eines Kennworts fünf Größenordnungen länger dauert als bei MD5 . (und immer noch viel länger als AES oder SHA-512). Dies zwingt den Hacker dazu, viel mehr Zeit damit zu verbringen, eine Regenbogentabelle zum Nachschlagen Ihrer Passwörter zu erstellen, wodurch die Wahrscheinlichkeit, dass Ihre Passwörter gehackt werden, weitaus geringer ist.
Wenn Sie Ihre Passwörter salzen und hashen und jedes Salz anders ist, müsste ein potenzieller Hacker eine Regenbogentabelle für jede Salzvariante erstellen , nur um eine Regenbogentabelle für ein gesalzenes + gehashtes Passwort zu haben. Das bedeutet, wenn Sie 1 Million Benutzer haben, muss ein Hacker 1 Million Regenbogentabellen generieren. Wenn Sie für jeden Benutzer das gleiche Salz verwenden, muss der Hacker nur 1 Regenbogentabelle generieren, um Ihr System erfolgreich zu hacken.
Wenn Sie Ihre Passwörter nicht salzen, muss ein Angreifer lediglich für jede Implementierung (AES, SHA-512, MD5) eine vorhandene Rainbow-Tabelle aufrufen und prüfen, ob eine mit dem Hash übereinstimmt. Dies wurde bereits getan , ein Angreifer muss diese Regenbogentabellen nicht selbst berechnen .
Trotz alledem müssen Sie gute Sicherheitspraktiken anwenden . Wenn sie erfolgreich einen anderen Angriffsvektor verwenden können (XSS, SQL Injection, CSRF, et al. ) Auf Ihrer Website, tut gutes Passwort Sicherheit Angelegenheit nicht. Das klingt nach einer kontroversen Aussage, aber denken Sie darüber nach: Wenn ich alle Ihre Benutzerinformationen durch einen SQL-Injection-Angriff erhalten kann oder Ihre Benutzer dazu bringen können, mir ihre Cookies über XSS zu geben, spielt es keine Rolle, wie gut Ihr Passwort ist Sicherheit ist .
Andere Ressourcen:
- Jeff Atwood: Vereinfachte .NET-Verschlüsselung (ideal für einen Überblick über das Hashing)
- Jeff Atwood: Ich habe mich gerade als Sie angemeldet
- Jeff Atwood: Sie speichern Passwörter wahrscheinlich falsch
- Jeff Atwood: Speed Hashing
Hinweis: Bitte empfehlen Sie andere gute Ressourcen. Ich muss ein Dutzend Artikel von Dutzenden von Autoren gelesen haben, aber nur wenige schreiben so deutlich zu diesem Thema wie Jeff. Bitte bearbeiten Sie die Artikel so, wie Sie sie finden.