133 votes

BCrypt est-il un bon algorithme de hachage à utiliser en C #? Où puis-je le trouver?

J'ai lu que lorsque le hachage d'un mot de passe, de nombreux programmeurs vous recommandons d'utiliser le BCrypt algorithme.

Je suis à la programmation en C# et se demande si quelqu'un connaît une bonne mise en œuvre de BCrypt? J'ai trouvé cette page, mais je ne sais pas vraiment si c'est faux ou pas.

Que dois-je savoir au moment de choisir un hachage de mot de passe? Est BCrypt une "bonne" mise en œuvre?

155voto

George Stocker Points 31258

Tout d'abord, certains termes sont importants:

Hachage - L'acte de prendre une chaîne et la production d'une séquence de caractères qui ne peuvent pas être ramenés à la chaîne d'origine.

Chiffrement symétrique - (Habituellement dénommé "cryptage") - L'acte de prendre une chaîne et la production d'une séquence de caractères qui peut être déchiffré à la chaîne d'origine grâce à l'utilisation de la même clé de chiffrement chiffrée.

Arc-en-ciel de la Table - une table qui contient toutes les variantes de caractères haché dans un algorithme de hachage.

Sel - un connu chaîne aléatoire ajouté à la chaîne d'origine avant qu'il est haché.

Pour la .NET Framework, Bcrypt vous n'avez pas encore vérifié l'implémentation de référence. Ceci est important car il n'y a aucun moyen de savoir si il y a de graves défauts dans la mise en œuvre existantes. Vous pouvez obtenir une mise en œuvre de BCrypt pour .NET ici. Je ne sais pas assez sur la cryptographie à dire si c'est une bonne ou une mauvaise mise en œuvre. La cryptographie est une grande profondeur de champ. N'essayez pas de construire votre propre algorithme de chiffrement. Sérieusement.

Si vous allez mettre en place votre propre mot de passe de sécurité (soupir), alors vous avez besoin de faire plusieurs choses:

  1. Utiliser un relativement algorithme de hachage sécurisé.
  2. Sel chaque mot de passe avant qu'il soit haché.
  3. L'utilisation d'un unique et long de sel pour chaque mot de passe, et de stocker le sel avec le mot de passe.
  4. Exiger des mots de passe forts.

Malheureusement, même si vous faites tout cela, un déterminé hacker encore pourrait éventuellement comprendre les mots de passe, il serait juste de lui prendre un temps très long. C'est votre principal ennemi: le Temps.

Le bcrypt algorithme fonctionne car il faut de cinq ordres de grandeur plus pour hacher un mot de passe que MD5 (et encore beaucoup plus de temps que AES ou SHA-512). Il force le hacker à passer beaucoup plus de temps pour créer un arc-en-ciel de la table à la recherche de vos mots de passe, ce qui rend beaucoup moins de chances que vos mots de passe seront en danger d'être piraté.

Si vous êtes le salage et le hachage des mots de passe, et chaque sel est différent, alors un pirate potentiel aurait pour créer un arc-en-ciel de la table pour chaque variation de sel, juste pour avoir un arc-en-ciel de la table pour un salée+mot de passe haché. Cela signifie que si vous avez 1 million d'utilisateurs, un pirate informatique a pour générer 1 million de rainbow tables. Si vous utilisez le même sel pour chaque utilisateur, alors le pirate n'a qu'à générer 1 arc-en-ciel de la table pour réussir à pirater votre système.

Si vous n'êtes pas saler vos mots de passe, puis tout d'un attaquant n'a plus qu'à tirer une Rainbow table pour chaque mise en œuvre (AES, SHA-512, MD5) et voir si l'une correspond au hachage. Ce qui a déjà été fait, un attaquant n'a pas besoin de calculer ces arc-en-ciel tables elles-mêmes.

Même avec tout cela, vous avez à être à l'aide de bonnes pratiques en matière de sécurité. Si ils peuvent utiliser avec succès un autre vecteur d'attaque (XSS, SQL Injection, CSRF, et. al.) sur votre site, bonne sécurité de mot de passe n'a pas d'importance. Qui sonne comme une déclaration controversée, mais pensez-y: Si je peux obtenir toutes vos informations de l'utilisateur grâce à une attaque par injection SQL, ou je peux obtenir vos utilisateurs à me donner leurs témoins par le biais de XSS, alors il n'a pas d'importance comment bon votre mot de passe de sécurité est.

D'autres ressources:

  1. Jeff Atwood: .NET Simplifié de Chiffrement (idéal pour un aperçu de hachage)
  2. Jeff Atwood: je viens de connecté en tant que vous
  3. Jeff Atwood: Vous êtes probablement stocker les mots de passe de manière incorrecte
  4. Jeff Atwood: Vitesse De Hachage

Remarque: s'il vous Plaît recommander d'autres bonnes ressources. J'ai dû lire une dizaine d'articles par des dizaines d'auteurs, mais quelques écrire aussi clairement sur le sujet que Jeff n'. Veuillez modifier les articles que vous trouvez.

77voto

Chris Marisic Points 11495

Je ne recommanderais pas à l'aide de BCrypt .NET, je vous conseille d'utiliser PBKDF2 comme elle est intégrée à l' .NET framework.

StackId précédemment utilisé BCrypt et a déménagé à PBKDF2, vous pouvez voir ce à partir de Kevin Montrose remarques sur DONC blog ici: http://blog.stackoverflow.com/2011/05/stack-exchange-is-an-openid-provider/#comment-59112

Si StackOverflow, puis a laissé tomber. Je n'aurais certainement pas l'utiliser.

Edit: Le sens de l' vérifiée en termes de chiffrement semble ne pas être facilement compris, a vérifié la mise en œuvre signifie qu'il est cryptographiquement avéré être mises en œuvre sans erreur. Le coût de ce qui peut facilement atteindre 20 000 $ou plus. Je me souviens quand je faisais des recherches sur OpenSSL et de lire, où ils ont déclaré qu'ils n'ont pas terminé l'ensemble du processus de vérification, mais si vous avez besoin d'pleinement vérifié qu'ils peut vous diriger dans la bonne voie pour elle et a mentionné les coûts associés. Certaines exigences du gouvernement d'inclure des mandats pour vérifié les algorithmes de chiffrement.

Le bcrypt implémentations .NET n'ont pas été vérifiées. À l'aide d'un non vérifiées cryptage de mise en œuvre, vous ne pouvez pas être absolument certain qu'il n'y a pas intentionnels défauts, comme permettant une porte dérobée dans ce qui est crypté ou non de la mise en œuvre les défauts qui résultent en cryptographique non sécurisé.

2014 edit: Pour quelqu'un qui a mis en question l'impératif de l'aide vérifié cryptopgraphical algorithims regarder la dévastation qui a été forgé par le heartbleed hack exploités dans OpenSSL. C'est le coût d'utilisation d'un non vérifié la mise en œuvre. C'est sûr.... jusqu'à ce que vous découvrez que toute personne peut tout simplement lire l'ensemble du contenu de la mémoire de votre serveur.

L'auteur de la modification qui a introduit Heartbleed, Robin Seggelmann, a déclaré qu'il a "manqué de la validation d'une variable contenant une longueur" et a nié toute intention de soumettre une mauvaise mise en œuvre. Suite à Heartbleed de communication de l'information, Seggelmann a suggéré de se concentrer sur le second aspect, indiquant que OpenSSL n'est pas examiné par un nombre suffisant de personnes.

C'est la définition d'un non vérifié la mise en œuvre. Même le plus petit défaut peut entraîner paralysant toute sécurité.

5voto

Only Bolivian Here Points 8199

J'ai écrit un article décrivant comment utiliser BCrypt dans un .NET application.

http://lostinthegc.wordpress.com/2011/03/22/using-bcrypt-in-a-net-application-why-its-better-than-sha-or-md5/

BCrypt résout ce problème en utilisant un facteur travail. Sens, à vous de décider combien de temps il va prendre pour le hachage de données. Donc, peu importe la façon dont des ordinateurs plus rapides, vous pouvez le tordre jusqu'à ce facteur et encore de hachage des mots de passe à la vitesse que vous souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X