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.
Sie dürfen BCrypt in .NET nicht verwenden . Sie müssen PBKDF2 wie bei der integrierten .NET Framework-Implementierung verwenden. Es ist die einzige frei verfügbare kryptografisch verifizierte Implementierung in .NET und der von NIST empfohlene Algorithmus .
StackId hat zuvor BCrypt verwendet und aus genau diesem Grund zu PBKDF2 verschoben:
Kevin Montrose, 27. Mai 2011
(Aktualisierter Link auf GitHub)
Bearbeiten: Die Bedeutung von verifiziert in kryptografischen Begriffen scheint nicht ohne weiteres verstanden zu werden. Eine verifizierte Implementierung bedeutet, dass kryptografisch nachgewiesen wurde, dass sie fehlerfrei implementiert wurde. Die Kosten hierfür können leicht 20.000 USD oder mehr erreichen. Ich erinnere mich daran, als ich über OpenSSL recherchierte und las, wo angegeben wurde, dass sie nicht den gesamten Überprüfungsprozess abgeschlossen haben, aber wenn Sie vollständig überprüft werden müssen, dass sie Sie auf den richtigen Weg bringen können, und erwähnte die damit verbundenen Kosten. Bestimmte behördliche Anforderungen umfassen Mandate für verifizierte Verschlüsselungsalgorithmen.
Die bcrypt-Implementierungen in .NET wurden nicht überprüft. Bei Verwendung einer nicht verifizierten Verschlüsselungsimplementierung können Sie nicht absolut sicher sein, dass weder absichtliche böswillige Fehler darin enthalten sind, z. B. das Zulassen einer Hintertür zu verschlüsselten oder unbeabsichtigten Implementierungsfehlern, die zu kryptografisch unsicheren Daten führen.
Ausgabe 2014: Für alle, die die Notwendigkeit der Verwendung verifizierter kryptopgraphischer Algorithmen in Frage stellen, sollten Sie sich die Verwüstung ansehen, die durch den in OpenSSL ausgenutzten Heartbleed-Hack verursacht wurde. Dies sind die Kosten für die Verwendung einer nicht überprüften Implementierung. Es ist sicher ... bis Sie herausfinden, dass jede Person nur den gesamten Speicherinhalt Ihres Servers lesen kann.
Dies ist die Definition einer nicht verifizierten Implementierung. Selbst der kleinste Defekt kann die gesamte Sicherheit beeinträchtigen.
2015 bearbeiten: Empfehlungsbasierte Sprache entfernt und durch Absolutes ersetzt. Eingebetteter Originalkommentar von Kevin Montrose für die Nachwelt.
quelle