Les meilleures pratiques de Hachage des mots de passe
Je voudrais savoir quelle est la méthode à utiliser pour stocker les mots de passe en base de données. J'ai mis en œuvre à l'aide de MD5, mais selon certains postes SHA1 est plus sécurisé. Est-il une autre méthode qui est plus sécurisé?
Merci de m'aider à trouver une meilleure méthode pour sécuriser les mots de passe.
Recherche pour "saler"
stackoverflow.com/a/1592620/1336590
car il dit "Les méthodes de hachage unidirectionnel. vous ne serez pas en mesure de récupérer d'un utilisateur mot de passe perdu. Ils vont seulement être en mesure de réinitialiser les mots de passe." Mais je voudrais savoir quelle méthode je peux l'utiliser comme je veux récupérer fonctionnalité de mot de passe trop..
J'ai recommandé la lecture sur le sujet sur ma réponse, je vais essayer de l'étendre sur le sujet.
Ceci c'est une bonne lecture.
stackoverflow.com/a/1592620/1336590
car il dit "Les méthodes de hachage unidirectionnel. vous ne serez pas en mesure de récupérer d'un utilisateur mot de passe perdu. Ils vont seulement être en mesure de réinitialiser les mots de passe." Mais je voudrais savoir quelle méthode je peux l'utiliser comme je veux récupérer fonctionnalité de mot de passe trop..
J'ai recommandé la lecture sur le sujet sur ma réponse, je vais essayer de l'étendre sur le sujet.
Ceci c'est une bonne lecture.
OriginalL'auteur Arti | 2013-11-25
Vous devez vous connecter pour publier un commentaire.
Sûr SHA1 est plus sécurisé que MD5, mais pour la plupart des fins, elle n'est pas assez sécurisé.
Vous trouverez probablement utile de la vidéo Comment ne PAS Stocker les mots de passe par Computerphile - 9 minutes et 24 secondes.
Vous devez réaliser qu'il ya beaucoup à l'abri quand il s'agit de l'authentification et de contrôle d'accès, afin d'avoir un bon hachage régime n'est pas suffisant.
Sur le stockage de mots de passe.
Comme vous le savez déjà, vous n'avez pas stocker le mot de passe. En fait, quand il s'agit de stocker des mots de passe, en général, les termes que vous souhaitez stocker salé hashs de mots de passe, à l'aide d'un moderne algorithme optimisé pour ce but. Pour le sel, il est considéré comme ok pour le stocker à côté de la table de hachage, pour le sel de la valeur d'utiliser une valeur aléatoire aussi longtemps que possible.
Note: Lors de la génération de valeur aléatoire pour des raisons de sécurité, l'utilisation d'un chiffrement sécurisé générateur (comme une sous-classe de RandomNumberGenerator pour .NET - exemple). Ce générateur de nombres aléatoires sont conçus pour être difficiles à prévoir. Alors que la norme de générateur de nombres aléatoires sont destinés à être reproductibles (C'est-à Système.Aléatoire tous vous avez besoin est la semence de générer toutes les valeurs, et de deviner les semences de tous vous avez besoin est assez valeurs consécutives généré avec le même germe).
Noter également: la Plupart des hachages sont optimisés pour être le plus rapide à calculer, dans cette catégorie s'inscrit à la fois MD5 et SHA1. Vous devez en choisir un qui n'est pas que rapide, de sorte que l'attaque va prendre une quantité raisonnable de temps pour calculer les hachages lors de la tentative de casser votre mot de passe.
Un tel algorithme est BCrypt d'autres incluent la Scrypt et PBKDF2 - sur l'utilisation de BCrypt à partir de C#, vous trouverez l'article Utiliser BCrypt pour hacher Vos mots de passe: Exemple pour C# et SQL Server utile. Si vous ne pouvez pas les ressources pour BCrypt ou algorithme similaire, vous devez au moins utiliser une variante de SHA2 (SHA256, SHA512, et ainsi de suite).
Additif: Vous pouvez utiliser la classe
HMACSHA256
qui est disponible dans le BLC comme une fonction de dérivation de clé, passez votre sel en tant que clé. C'est preferible à l'ajout ou l'ajoutant le sel (qui pourrait tomber à Longueur de l'extension des attaques). C'est, si vous utilisez l'algorithme HMAC, et votre algorithme de hachage est vulerable à la Longueur de l'extension des attaques (connu ou à découvrir), votre système est jusqu'sécurisé. MD5, SHA1 et SHA2 comme suceptible à ce genre d'attaque. SHA3 ne l'est pas. Malheureusement SHA3 n'est pas inclus dans le BLC (non, il n'est pas SHA384), vous pouvez l'obtenir à partir d'Multiformats.De hachage
ouHashLib
. Je dois mentionner que SHA3 est également conçu pour être rapide lors de la mise en œuvre dans le matériel. Et n'oubliez pas, pour les mots de passe d'une lente hachage est mieux.Addendum: Argon2
Comme il a été signalé il y a un an cette réponse devrait être mis à jour pour la mention de Argon2. J'ai écrit la réponse originale à cette question avant qu'elle existait.
À l'époque, je n'avais pas trouvé une application en C# que j'étais prêt à recommander. Depuis cette réponse a été porté à mon attention, j'ai eu un autre regard, et ce n'est plus le cas.
Vous pouvez utiliser
Isopoh.La cryptographie.Argon2
qui a tout géré code (il n'est pas un C# de liaison pour une implémentation C++, mais plein de code C#), fonctionne sur toutes les grandes plates-formes et il y a des Nugets disponibles.Notes:
Argon2Version.Nineteen
. C'est Argon2 v. 1.3 (Nineteen = 0x13
) qui corrige des failles de sécurité connues.Argon2Type.DataDependentAddressin
(Argon2d), ou de l'utilisationArgon2Type.DataIndependentAddressing
(Argon2i) avecTimeCost >= 10
. Argon2d est en théorie vulnérables à côté les attaques par canaux, en tant que tel, il n'est pas recommandé pour le code qui s'exécute sur les ordinateurs client.Isopoh.Cryptography.Argon2
atténue ce par l'utilisation d'OS appels pour prévenir la mémoire sensible pour être déplacé à la mémoire virtuelle/fichier d'échange/swap et zéro dès que possible. D'autre part Argon2i a un Temps de mémoire compromis de la vulnérabilité, qui permet de calculer les hachages plus rapidement en utilisant plus de mémoire. Le papier Pour les Attaques sur Argon2i et Ballon de Hachage montre que vous avez besoin de 10 itérations/passes à faire l'exploit inefficace, même dans Argon2 v. 1.3.Voici quelques lectures recommandées:
Aussi la vidéo: Crypto est de Retour! - Google Tech Talk - août 5, 2009 - 54 minutes et 32 secondes.
Sur la récupération d'un mot de passe.
Tout d'abord: ne pas. Le point de la récupération de mot de passe option est de ne pas récupérer le mot de passe, mais pour récupérer l'accès à l'application. Alors... comment récupérer l'accès à l'application?
Je suis content que vous demandez. Ce que vous avez besoin est une autre façon de vérifier l'identité de l'utilisateur. Cela pourrait être un deuxième facteur d'authentification (de tout, de la question de sécurité à l'aide d'un matériel générateur de clé). Pourtant, ce qui est souvent faite est de le ressources sur des tiers, comme le courrier.
Donc, vous voulez savoir si l'utilisateur est le propriétaire de l'e-mail (ou téléphone portable, ou autre), l'utilisateur dispose d'écrits plus haut prétendre. Pour ce faire vous envoyer un code (souvent désigné comme un jeton ou biscuit) pour que l'e-mail (ou autre). Ce doit être un hasard le code généré avec un chiffrement sécurisé générateur, de sorte que personne d'autre - à l'exception de la propriétaire de cet e-mail (ou autre) - sera en mesure de savoir ce que le code est.
Maintenant, si l'utilisateur se présente à votre application de ce code, vous êtes presque sûr que c'est le droit de l'utilisateur.
Presque parce que: e-mails (ou autre) pourrait a été stockée dans un emplacement non sécurisé. Pour atténuer cela, vous voulez mettre une limite de temps sur votre code (cookie ou un jeton). Aussi, si un code a été utilisé, il devrait PAS de travailler à nouveau. Et pour plus de sécurité, vous pouvez des ressources à un CAPTCHA, pour s'assurer que ce code ne viennent pas d'un bot qui a juste eu de la chance.
Pour en savoir plus sur ce sujet (ce liens sont également présentées ci-dessus):
merci, liens fixes.
+1 @Theraot: j'ai édité ton post pour mettre en surbrillance le temps de calcul, j'espère que vous n'avez pas l'esprit.
vous êtes les bienvenus. Aussi loin que l'amélioration de la réponse va, je n'ai pas l'esprit (les réponses sont sous CC-BY-SA de toute façon).
Si l'utilisation de la troisième partie du code n'est pas une option, il y a une mise en œuvre de PBKDF2 inclus dans le .Net framework version 2.0 ou ultérieure. Il est appelé
Rfc2898DeriveBytes
et fait partie deSystem.Security.Crytography
.OriginalL'auteur Theraot
SHA1 a moins de failles que MD5. C'est un algorithme plus récent, qui utilise plus de bits et nécessite plus de traitement pour "percer". Vous pouvez accéder à la plupart des grands algorithmes de hachage et de leurs vulnérabilités connues ici: http://en.wikipedia.org/wiki/Cryptographic_hash_function
Comme quelqu'un l'a déjà dit, certainement assurez-vous d'ajouter le "sel" de votre hachage de mot de passe à l'obscurcir encore davantage tout modèle possible.
OriginalL'auteur Ketrex