database verschlüsseln - Der beste Weg, um ein Passwort in der Datenbank zu speichern




php mysql (8)

Ich würde empfehlen, die Artikel zu lesen Genug mit den Rainbow Tables: Was Sie über sichere Passwort-Schemata wissen müssen [toter Link, kopieren Sie im Internet Archive ] und wie Sie sicher ein Passwort speichern .

Viele Programmierer, mich eingeschlossen, denken, dass sie Sicherheit und Hashing verstehen. Leider tun die meisten von uns einfach nicht.

Ich arbeite an einem Projekt mit Authentifizierung (Benutzername / Passwort)

Es verbindet sich auch mit einer Datenbank, so dass ich dachte, ich würde den Benutzernamen und das Passwort dort speichern, aber es scheint nicht so eine gute Idee, Kennwörter als nur ein Textfeld in einer Tabelle auf der db sitzen

Ich verwende C # und verbinde mich mit einem 2008 Express-Server. kann jemand (mit so vielen Beispielen wie möglich) vorschlagen, wie diese Art von Daten am besten gespeichert werden kann?

(Ich bin offen für die Idee, dass diese Information nicht in der Datenbank gespeichert wird, wenn ein guter Grund angegeben werden kann)


Sie haben Recht, dass das Speichern des Passworts in einem Nur-Text-Feld eine schreckliche Idee ist. Was jedoch den Standort betrifft , so werden Sie in den meisten Fällen (und ich kann mir ehrlich gesagt keine Gegenbeispiele vorstellen) die Speicherung eines Passwortes in der Datenbank als das Richtige betrachten. Mit Repräsentation meine ich, dass Sie das Passwort mit einem Salz (das für jeden Benutzer anders sein sollte) und einem sicheren 1-Weg-Algorithmus hashen und speichern, indem Sie das ursprüngliche Passwort wegwerfen. Wenn Sie dann ein Kennwort verifizieren möchten, hashen Sie den Wert (mit demselben Hashing-Algorithmus und demselben Salt) und vergleichen ihn mit dem Hashwert in der Datenbank.

Obwohl es gut ist, dass Sie darüber nachdenken und es eine gute Frage ist, ist dies tatsächlich ein Duplikat dieser Fragen (zumindest):

Um ein bisschen weiter auf dem Salz-Bit zu verdeutlichen, besteht die Gefahr einfach darin, ein Passwort zu haseln und zu speichern, dass ein Eindringling, der einen Zugriff auf Ihre Datenbank hat, immer noch sogenannte Rainbow-Tabellen verwenden kann , um den "entschlüsseln" zu können Passwort (mindestens diejenigen, die in der Regenbogen-Tabelle angezeigt werden). Um das zu umgehen, fügen Entwickler Passwörter hinzu, die Rainbow-Attacken, wenn sie richtig gemacht werden, einfach unmöglich machen. Beachten Sie, dass ein häufiges Missverständnis darin besteht, allen Passwörtern dieselbe eindeutige und lange Zeichenfolge hinzuzufügen. Während dies nicht schrecklich ist , ist es am besten, jedem Passwort einzigartige Salze hinzuzufügen. Lesen Sie dies für mehr.


Ich bin vielleicht ein wenig off-topic, da Sie die Notwendigkeit für einen Benutzernamen und ein Passwort erwähnt haben, und mein Verständnis des Problems ist zugegebenermaßen nicht das Beste, aber ist OpenID etwas, das in Betracht gezogen werden sollte?

Wenn Sie OpenID verwenden, speichern Sie keine Anmeldeinformationen, wenn ich die Technologie richtig verstanden habe und Benutzer Anmeldeinformationen verwenden können, die sie bereits haben. Dadurch müssen Sie keine neue Identität erstellen, die für Ihre Anwendung spezifisch ist.

Es ist möglicherweise nicht geeignet, wenn die betreffende Anwendung nur für den internen Gebrauch bestimmt ist

RPX bietet eine einfache Möglichkeit, die OpenID-Unterstützung in eine Anwendung zu integrieren.


Ich würde MD5 / SHA1 das Passwort, wenn Sie nicht in der Lage sein, den Hash umzukehren. Wenn sich ein Benutzer anmeldet, können Sie einfach das angegebene Passwort verschlüsseln und mit dem Hashwert vergleichen. Hash-Kollisionen sind in diesem Fall fast unmöglich, es sei denn, jemand erhält Zugriff auf die Datenbank und sieht einen Hash, für den sie bereits eine Kollision haben.


Die beste Sicherheitsvorkehrung besteht darin, das Passwort überhaupt nicht zu speichern (nicht einmal verschlüsselt), sondern den gesalzenen Hash (mit einem eindeutigen Wert pro Passwort) des verschlüsselten Passworts zu speichern.

Auf diese Weise ist es praktisch unmöglich, ein Klartext-Passwort abzurufen.


In Ihrem Szenario können Sie sich die asp.net-Mitgliedschaft ansehen. Es empfiehlt sich, das Kennwort des Benutzers als Hash-Zeichenfolge in der Datenbank zu speichern. Sie können den Benutzer authentifizieren, indem Sie das verschlüsselte eingehende Kennwort mit dem in der Datenbank gespeicherten Kennwort vergleichen.

Alles wurde für diese Zwecke erstellt, überprüfen Sie asp.net Mitgliedschaft


Als Key-hardened Salted Hash, unter Verwendung eines sicheren Algorithmus wie sha-512.


Nur ein kurzer Vorschlag. Indem Sie für die Indizierung zusätzliche Schreibvorgänge und Speicherplatz in Anspruch nehmen, möchten Sie möglicherweise Tabellen ohne Indizes verwenden. Wenn Ihre Anwendung jedoch mehr Einfüge- / Aktualisierungsvorgänge erfordert, sollten Sie indizieren, wenn mehr Datenabrufvorgänge erforderlich sind Tabelle.





database security passwords