Hashing der Passwörter Mit ASP.NET MVC-3
Ich bin jetzt in den Prozess der versucht, herauszufinden, der beste Weg, Hash das Passwort für mein ASP.NET MVC 3-Anwendung. Von dem was ich höre, ist es gut zu verwenden, das Passwort und einem zufälligen salt und speichern Sie dann das gehashte Passwort und Salz zusammen. Meine Frage ist nicht zu machen, dass die zufällige Salz sinnlos? Ich meine, der Grund für die hash ein Passwort ist, weil wenn jemand in Ihre Datenbank, Sie haben nicht die einfachen Passwörter und das Salz macht es viel viel härter zur Umkehrung der hash-um das Passwort zu erhalten, aber wenn ich speichern den hash mit dem Kennwort, was ist der Punkt, den Salz (mein wissen über hashing ist jeder so beschränkt, ich könnte völlig off base mit meinem denken).
Meine zweite Frage ist, was hashing-Methode ist die beste zu verwenden? Ich habe gelesen, dass MD5 (was ich auch immer verwendet haben) ist sehr einfach zu knacken. Ich höre die bcrypt/sha512 sind ziemlich gut. Welche sollte man verwenden? Ich weiß, dass C# standardmäßig kommt mit der sha512-Hash. Von was ich sehen kann, bcrypt ist nicht enthalten in der .NET-Bibliothek, gibt es gute Bibliotheken für C# und bcrypt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
gibt es keine Notwendigkeit, Sie zu speichern das Salz in einem anderen Ort, sollten Sie immer davon ausgehen Salz in bekannt, die durch einen Angreifer sowieso, und Ihr Zweck ist nicht, ein extra Passwort!!!!
In .NET diese API wird alles, was Sie tun müssen, wird es schaffen große crypto random Salz sowie HMACSHA512 hashing und key-stretching über byte-swapping vor jedem AES-Verschlüsselung pass 🙂
http://sourceforge.net/projects/pwdtknet/
+1
für die nette Antwort, vor allem "man sollte immer davon ausgehen, Salz in bekannt, die durch einen Angreifer".Salzen erhöht die Resistenz gegen ein rainbow - /Wörterbuch-Angriff. Ein paar Sicherheitslücken, die stattgefunden haben, waren in diesem Jahr, da die web-Anwendung die Datenbank enthielt Passwörter ohne Salz, und fertig waren Sie mit md5. So eine einfache rainbow-Angriff, produziert das Passwort innerhalb von Sekunden für ein paar Anwender, die schreckliche Passwörter.
Für die Bereitstellung von Benutzer-Authentifizierung mit MVC 3, Sie sollten wirklich die Rahmen für diese Art der Sache. Coming up mit Ihrem eigenen benutzerdefinierten Authentifizierungsanbieter konnte Probleme verursachen, wenn Sie nicht tun es richtig.
Werfen Sie einen Blick auf
http://msdn.microsoft.com/en-us/library/ff398049%28v=VS.98%29.aspx und http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx. Wenn Sie die .NET-Mitgliedschaft-system, brauchen Sie nicht zu tun, low-level-Datenbank oder das Passwort-management. Sie setzen einfach die [Genehmigen] - tags um die controller-Aktionen werden müssen-auth würde und fertig.
Hier ist eine schöne C# - Implementierung von bcrypt:
http://bcrypt.codeplex.com/
SHA512 ist eine gute Wahl für das hashing in .net und wenn Sie speichern Sie das Salz mit dem Passwort ist es ein bisschen sinnlos (aber die "Entschlüsselung" noch brauchen würde, eine längere Zeit), aber Sie können speichern das Salz irgendwo sonst, so dass die DB nicht genug:
UPDATE:
Wie Mike schon sagte, dass ich falsch bin mit dem "sinnlos" Aussage oben. Selbst wenn der salt bekannt ist, machen wird es Rainbow-Table Angriffe nutzlos (oder viel mehr unwahrscheinlich ist), so sollten Sie immer Salz, auch wenn die Speicherung der salt direkt neben dem hash (z.B. linux speichert die Passwörter der Benutzer in der shadow-Datei in form von "$id$salt$Hash")!
Ich habe immer verwendet den folgenden Ansatz zur Speicherung der Passwörter
Es ist nie eine Frage ob es möglich ist, zur Wiederherstellung solcher hash, um original-Passwort.
Wenn Sie gehackt in Ihre Sicherheits-Datenbank zu stehlen, die Menschen hashed Passwort, dann ist es unwahrscheinlich, dass Sie wirklich brauchen würde, das Kennwort an diesem Punkt. Sie haben bereits Zugang zu allen Daten in der Datenbank am wahrscheinlichsten. Ein MD5-hash ist wahrscheinlich gut für den durchschnittlichen website, wenn es ist etwas einfacher mit Daten, ist nicht wertvoll. Andere erschwert hashing-Methoden wäre gut für Daten, die wahrscheinlich mehr wertvollen.