7
votes

Comment hacher un mot de passe?

Ma prochaine tâche sera de chiffrer les mots de passe. Je travaille sur la couche d'accès à la base de données et mon collègue a fait cette demande: implémenter un SHA- 512 hachage sur une méthode vide. Comment puis-je faire cela?


9 commentaires

Ne pas. Laissez le cryptage de mot de passe aux experts de sécurité. Vous allez vous tromper, et vous ferez ensuite péril votre organisation. Embaucher un expert; C'est beaucoup moins cher que le coût de nettoyage du gâchis après une attaque réussie contre les faiblesses que vous ne saviez pas que vous avez ajouté à votre système de sécurité.


L'embauche d'un expert dépend de votre niveau de risque. Si vous stockez des informations privées pour les masses et que ce mot de passe est tout ce qui se tient dans la voie, oui, cherchez un expert. La plupart des exemples énumérés ci-dessous suffiront pour votre projet d'information non confidentiel moyen.


@ERIC - Je suppose que vous voulez dire par là "Utilisez la mise en œuvre de SHA512 dans .NET au lieu de créer votre propre", pas "Utiliser les fournisseurs d'adhésion implémentés dans .NET pour votre sécurité." Je peux voir une certaine validité aux deux, mais alors que j'étais d'accord à 100% avec le premier, je peux voir certaines situations où ce dernier n'est pas vraiment possible. En fait, cela ne m'a même jamais eu pour moi que quelqu'un envisagerait de mettre en œuvre leur propre version de SHA-512 - votre commentaire m'a donc déroulé pour une minute pour savoir si vous vouliez dire que je devais contracter la sécurité dans mes applications à une personne plus qualifiée. :-)


@ 5YRSLATERDBA - Les réponses ci-dessous sont parfaites, mais j'aimerais juste ajouter que le hachage est différent du cryptage. Le hachage est unidirectionnel et non récupérable; Le cryptage est récupérable si vous connaissez la clé. Vous ne chiffrez jamais un mot de passe, vous ne les selez pas à la place. @Eric dit «Ne crie pas, et certainement pas de la rétablir»


@tvanfosson: Je dis que je dis à cesser de travailler sur cette affaire en ce moment et à embaucher un expert. Obtenir le mot de passe Security CORRECT CORRECT A environ un diable de beaucoup plus que d'obtenir SHA512 mis en œuvre correctement.


@hipplar: Le montant dépensé sur une solution de sécurité devrait être proportionnel à la valeur de la ressource protégée. Si la ressource n'est pas prétable, vous n'avez pas besoin d'un système de mot de passe. Si la ressource est suffisamment précieuse pour être protégée avec un système de mot de passe, il est probablement assez précieux d'être protégé par un système de mot de passe professionnel , pas un système de mots de passe amateur .


@ Scientifique - convenu et c'est probablement un excellent avis à celui qui se sent obligé de poser une question aussi fondamentale à ce sujet, mais je doute que cela volera avec mon manager. Peut-être une meilleure question à vous est "Comment experte-t-il besoin d'utiliser les outils existants pour mettre en œuvre une solution de sécurité?" Certes, la barre est un peu inférieure à celle de "vous devez pouvoir concevoir / analyser un nouvel algorithme de cryptage". Peut-être qu'un sujet pour votre blog? Je serais intéressé à lire vos opinions plus en profondeur.


Question en cours de discussion sur M.SO: meta.stackexchange.com/questions/49608/...


@ERIC - "Embaucher un expert" est une glib et peut être irréaliste dans de nombreuses situations. Le problème suivant est le suivant: où trouvez-vous un tel expert et de la manière dont vous vous assurez qu'il a les compétences nécessaires?


4 Réponses :


1
votes

SHA512 Classe

Exemple C # à partir de cette page: P>

byte[] data = new byte[DATA_SIZE];
byte[] result;
SHA512 shaM = new SHA512Managed();
result = shaM.ComputeHash(data);


1 commentaires

-1 Pour utiliser SHA-512 uni, qui est rapide. Utilisez une fonction de dérivation de clé lente, telle que PBKDF2, BCRYPT ou SCRYPT.



10
votes

Vous devez utiliser BCRYPT , qui est plus sécurisé pour les mots de passe que SHA512.

Si vous avez vraiment besoin d'utiliser SHA512, vous devez utiliser le SHA512Ganked classe , comme d'autres réponses ont été mentionnées.
Assurez-vous de saler votre hachage.


3 commentaires

intéressant, pas vu qu'avant


Ne selez-vous pas le texte clair avant le hachage?


@uncle Brad: C'est ce que je voulais dire.



10
votes

Un processus simple vraiment: xxx

hachage contient désormais un hachage non inversable des données initiales que vous vouliez hachée. En outre, consultez MSDN . Quelques notes:

  • utilise toujours un sel (plus le mieux, et unique par utilisateur unique - Merci Paul, bon point.)
  • SHA2 * Les méthodes de génération (et SHA en général) Les méthodes de hachage sont construites à la vitesse, elles ne sont donc pas obstruées, mais elles ne sont pas les plus sûres. Regardez Bcrypt aussi bien que SLAKS a mentionné .

1 commentaires

+1 De moi, bien qu'il soit utile de mentionner que le sel doit être unique par mot de passe. Et peut-être changer votre exemple pour inclure le sel



7
votes

Comment hacher un mot de passe?

avec un sel. Vraiment.

jamais, jamais fais cela: xxx

mais ceci: xxx

Ceci est l'un des "truc du commerce" le plus mal compris. La plupart des gens ne savent pas ce qu'un "sel" est et quand vous leur l'expliquez, ils pensent que c'est inutile.

La vérité est: SHA-512 ou MD5 ou un hachage très faible, une fois que des tables arc-en-ciel sont précalculé, ne fait aucune différence. SHA-65536, devrait-il exister (je suis facéticieux ici), ne serait pas mieux que tout autre algorithme de hachage une fois que les tables arc-en-ciel sont précalisées.

Un "sel" suffisamment grand rend les tables arc-en-ciel impossible: < / P>

http://fr.wikipedia.org/wiki/rainbow_table

Notez que même si vous comprenez pleinement à quel point les tables de hachages, de sel et d'arc-en-ciel sont liées (et donc comprendre pourquoi l'article Wikipedia stipule: "un sel est souvent utilisé avec des mots de passe hachés pour rendre cette attaque plus difficile, souvent Infaisable. ") Il existe une probabilité très élevée que vos collègues ne le font pas. Tout comme il est très probable que la plupart des gens de haut et descendez-vous dans ce fil ne comprennent pas ce sujet.

J'ai vu des réponses ici sur ce que 30 upvotes où quelqu'un ne pouvait pas comprendre ce qu'un sel a été maintenue à venir avec Techno-Buzzwords pour défendre sa position ... et pourtant, il avait tous ces upvotes (trop paresseux pour trouver la question, mais c'était épique).


2 commentaires

Et vous devez utiliser rngcryptoserviceProvider pour créer votre sel pour chaque nouveau hachage et stocker à la fois le hachage et le sel.


Un sel seul ne suffit pas. La fonction de hachage devrait également être lente. Utilisez PBKDF2, BCRYPT ou SCRYPT.