database crypter Meilleure façon de stocker le mot de passe dans la base de données




stocker mot de passe base de données (7)

La meilleure pratique de sécurité est de ne pas stocker le mot de passe (même pas crypté), mais de stocker le hachage salé (avec un sel unique par mot de passe) du mot de passe crypté.

De cette façon, il est (pratiquement) impossible de récupérer un mot de passe en clair.

Je travaille sur un projet qui doit avoir une authentification (nom d'utilisateur / passe)

Il se connecte également à une base de données, donc j'ai pensé que je stockerais le nom d'utilisateur et mot de passe, mais il semble que ce n'est pas une bonne idée d'avoir des mots de passe comme un champ de texte dans une table

J'utilise C # et me connecte à un serveur express 2008. Quelqu'un peut-il suggérer (avec autant d'exemples que possible) quel est le meilleur moyen de stocker ce type de données?

(Je suis ouvert à l'idée que cette information ne soit pas stockée dans la base de données si une bonne raison peut être fournie)


Vous avez raison de dire que stocker le mot de passe dans un champ de texte brut est une idée horrible . Cependant, en ce qui concerne l'emplacement , pour la plupart des cas que vous allez rencontrer (et je ne peux honnêtement pas penser à des contre-exemples) stocker la représentation d'un mot de passe dans la base de données est la bonne chose à faire. Par représentation, je veux dire que vous voulez hacher le mot de passe en utilisant un sel (qui devrait être différent pour chaque utilisateur) et un algorithme 1-way sécurisé et stocker cela , en jetant le mot de passe d'origine. Ensuite, lorsque vous voulez vérifier un mot de passe, vous devez hacher la valeur (en utilisant le même algorithme de hachage et le même salt) et le comparer à la valeur hachée dans la base de données.

Donc, même si c'est une bonne chose que vous y réfléchissez et que c'est une bonne question, il s'agit en fait d'un doublon de ces questions (au moins):

Pour clarifier un peu plus sur le bit salant, le danger de simplement hacher un mot de passe et de le stocker est que si un intrus s'empare de votre base de données, ils peuvent toujours utiliser ce qu'on appelle des tables arc- en- ciel pour pouvoir "déchiffrer" mot de passe (au moins ceux qui apparaissent dans la table arc-en-ciel). Pour contourner cela, les développeurs ajoutent un salt aux mots de passe qui, lorsqu'ils sont correctement effectués, rendent les attaques arc-en-ciel tout simplement impossibles à faire. Notez qu'une idée fausse commune est d'ajouter simplement la même chaîne unique et longue à tous les mots de passe; Bien que ce ne soit pas horrible , il est préférable d'ajouter des sels uniques à chaque mot de passe. Lisez ceci pour plus.



Je voudrais MD5 / SHA1 le mot de passe si vous n'avez pas besoin d'être en mesure d'inverser le hachage. Lorsque les utilisateurs se connectent, vous pouvez simplement chiffrer le mot de passe donné et le comparer au hash. Les collisions de hachage sont presque impossibles dans ce cas, sauf si quelqu'un accède à la base de données et voit un hash pour lequel il a déjà une collision.


Contexte Vous n'avez jamais ... vraiment ... besoin de connaître le mot de passe de l'utilisateur. Vous voulez juste vérifier qu'un utilisateur entrant connaît le mot de passe d'un compte.

Hash It: Stocke les mots de passe utilisateur hashed (cryptage unidirectionnel) via une fonction de hachage forte. Une recherche sur "c # encrypt passwords" donne un tas d'exemples.

Voir le créateur de hachage SHA1 en ligne pour avoir une idée de ce que produit une fonction de hachage (mais n'utilisez pas SHA1 comme fonction de hachage, utilisez quelque chose de plus fort comme SHA256).

Maintenant, un mot de passe haché signifie que vous (et les voleurs de base de données) ne devriez pas être en mesure d'inverser ce hachage dans le mot de passe d'origine.

Comment l'utiliser: Mais, dites-vous, comment puis-je utiliser ce mot de passe écrasé stocké dans la base de données?

Lorsque l'utilisateur se connecte, il vous remettra le nom d'utilisateur et le mot de passe (dans son texte d'origine). Vous utilisez simplement le même code de hachage pour hacher ce mot de passe pour saisir la version stockée.

Comparez donc les deux mots de passe hachés (hash de la base de données pour le nom d'utilisateur et le mot de passe saisi et hashé). Vous pouvez dire si "ce qu'ils ont tapé" correspond à "ce que l'utilisateur d'origine a saisi pour son mot de passe" en comparant leurs hachages.

Crédit supplémentaire:

Question: Si j'avais votre base de données, alors ne pourrais-je pas prendre un cracker comme John the Ripper et commencer à faire des hashes jusqu'à ce que je trouve des correspondances avec vos mots de passe stockés et hachés? (puisque les utilisateurs choisissent court, les mots du dictionnaire de toute façon ... cela devrait être facile)

Réponse: Oui ... oui ils peuvent.

Donc, vous devriez «sel» vos mots de passe. Voir salt

Voir "Comment hacher les données avec du sel" Exemple C #


Dans votre scénario, vous pouvez jeter un oeil à l'adhésion à asp.net, il est recommandé de stocker le mot de passe de l'utilisateur sous forme de chaîne hachée dans la base de données. vous pouvez authentifier l'utilisateur en comparant le mot de passe entrant haché avec celui stocké dans la base de données.

Tout a été construit à cette fin, consultez l' abonnement asp.net


Comme un hachage salé à la clé, en utilisant un algorithme sécurisé tel que sha-512.





passwords