Je travaille sur un projet qui doit avoir une authentification (nom d'utilisateur et mot de passe)
Il se connecte également à une base de données, j'ai donc pensé y stocker le nom d'utilisateur et le mot de passe. Cependant, il semble que ce ne soit pas une bonne idée d'avoir des mots de passe comme juste un champ de texte dans une table assise sur la base de données.
J'utilise C # et je me connecte à un serveur express 2008. Quelqu'un peut-il suggérer (avec autant d'exemples que possible) quelle serait la meilleure façon de stocker ce type de données?
PS Je suis ouvert à l'idée que ces informations ne soient pas stockées dans la base de données si une bonne raison peut être fournie
Réponses:
Vous avez raison, le stockage du mot de passe dans un champ en 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 hash du mot de passe en utilisant un sel (qui devrait être différent pour chaque utilisateur) et un algorithme de 1 manière sécurisée et un magasin qui , jeter le mot de passe d' origine. Ensuite, lorsque vous souhaitez vérifier un mot de passe, vous hachez la valeur (en utilisant le même algorithme de hachage et le même sel) et la comparez à la valeur hachée de la base de données.
Donc, même si c'est une bonne chose que vous y réfléchissiez et que c'est une bonne question, il s'agit en fait d'un double de ces questions (au moins):
Pour clarifier un peu plus le bit de salage, le danger avec simplement le hachage d'un mot de passe et le stockage est que si un intrus prend possession de votre base de données, il peut toujours utiliser ce que l'on appelle des tables arc- en- ciel pour pouvoir "décrypter" le mot de passe (au moins ceux qui apparaissent dans la table arc-en-ciel). Pour contourner ce problème, les développeurs ajoutent un sel aux mots de passe qui, lorsqu'ils sont correctement effectués, rendent les attaques arc-en-ciel tout simplement irréalisables. Notez qu'une idée fausse courante consiste simplement à ajouter 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 en savoir plus.
la source
Contexte Vous n'avez jamais ... vraiment ... besoin de connaître le mot de passe de l'utilisateur. Vous voulez simplement vérifier qu'un utilisateur entrant connaît le mot de passe d'un compte.
Hash It: Stockez les mots de passe des utilisateurs hachés (cryptage unidirectionnel) via une fonction de hachage puissante. Une recherche de "c # encrypt passwords" donne une multitude d'exemples.
Voir le créateur de hachage SHA1 en ligne pour 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 tel que SHA256).
Maintenant, un mot de passe haché signifie que vous (et les voleurs de base de données) ne devriez pas être en mesure de rétablir ce hachage dans le mot de passe d'origine.
Comment l'utiliser: Mais, dites-vous, comment puis-je utiliser ce mot de passe en purée stocké dans la base de données?
Lorsque l'utilisateur se connecte, il vous remet 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 tapé pour obtenir la version stockée.
Donc, comparez les deux mots de passe hachés (hachage de la base de données pour le nom d'utilisateur et le mot de passe tapé et haché). Vous pouvez savoir si "ce qu'ils ont tapé" correspondait "à ce que l'utilisateur d'origine a entré pour son mot de passe" en comparant leurs hachages.
Crédit supplémentaire:
Question: Si j'avais votre base de données, ne pourrais-je pas simplement prendre un pirate comme John the Ripper et commencer à créer des hachages jusqu'à ce que je trouve des correspondances avec vos mots de passe stockés et hachés? (puisque les utilisateurs choisissent de toute façon des mots de dictionnaire courts ... ça devrait être facile)
Réponse: Oui ... oui, ils le peuvent.
Donc, vous devez «saler» vos mots de passe. Voir l'article Wikipedia sur le sel
Voir l'exemple "Comment hacher des données avec du sel" C #
la source
En tant que hachage salé renforcé, en utilisant un algorithme sécurisé tel que sha-512.
la source
La meilleure pratique de sécurité n'est pas de stocker le mot de passe (pas même chiffré), mais de stocker le hachage salé (avec un sel unique par mot de passe) du mot de passe chiffré.
De cette façon, il est (pratiquement) impossible de récupérer un mot de passe en texte brut.
la source
Je vous recommande vivement de lire les articles Assez avec les tables arc-en-ciel: ce que vous devez savoir sur les schémas de mots de passe sécurisés [lien mort, copie sur les archives Internet ] et comment stocker en toute sécurité un mot de passe .
Beaucoup de codeurs, moi y compris, pensent qu'ils comprennent la sécurité et le hachage. Malheureusement, la plupart d'entre nous ne le font tout simplement pas.
la source
Je suis peut-être légèrement hors sujet, car vous avez mentionné la nécessité d'un nom d'utilisateur et d'un mot de passe, et ma compréhension du problème n'est certes pas la meilleure, mais OpenID mérite-t-il d'être envisagé?
Si vous utilisez OpenID, vous ne stockez pas du tout les informations d'identification si je comprends bien la technologie et les utilisateurs peuvent utiliser les informations d'identification qu'ils ont déjà, évitant ainsi de créer une nouvelle identité spécifique à votre application.
Elle peut ne pas convenir si l'application en question est purement à usage interne
RPX fournit un moyen simple et agréable d'intégrer la prise en charge d'OpenID dans une application.
la source
Dans votre scénario, vous pouvez consulter l'appartenance à 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 à cet effet, consultez l' adhésion asp.net
la source
Je voudrais MD5 / SHA1 le mot de passe si vous n'avez pas besoin de pouvoir inverser le hachage. Lorsque les utilisateurs se connectent, vous pouvez simplement crypter le mot de passe donné et le comparer au hachage. Les collisions de hachage sont presque impossibles dans ce cas, sauf si quelqu'un accède à la base de données et voit un hachage pour lequel il a déjà une collision.
la source