Tout d'abord, quelques termes importants:
Hashing - Action de prendre une chaîne et de produire une séquence de caractères qui ne peut pas être rétablie dans la chaîne d'origine.
Cryptage symétrique - (généralement simplement appelé `` cryptage '') - Action de prendre une chaîne et de produire une séquence de caractères pouvant être déchiffrée dans la chaîne d'origine grâce à l'utilisation de la même clé de cryptage qui l'a cryptée.
Rainbow Table - une table de recherche qui contient toutes les variations de caractères hachés dans un algorithme de hachage spécifique.
Salt - une chaîne aléatoire connue ajoutée à la chaîne d'origine avant qu'elle ne soit hachée.
Pour le .NET Framework, Bcrypt n'a pas encore d' implémentation de référence vérifiée . Ceci est important car il n'y a aucun moyen de savoir s'il existe de graves défauts dans une implémentation existante. Vous pouvez obtenir une implémentation de BCrypt pour .NET ici . Je ne connais pas assez la cryptographie pour dire si c'est une bonne ou une mauvaise implémentation. La cryptographie est un domaine très profond. N'essayez pas de créer votre propre algorithme de chiffrement . Sérieusement.
Si vous prévoyez de mettre en œuvre votre propre sécurité par mot de passe (soupir), vous devez faire plusieurs choses:
- Utilisez un algorithme de hachage relativement sécurisé .
- Salez chaque mot de passe avant qu'il ne soit haché.
- Utilisez un sel unique et long pour chaque mot de passe et stockez le sel avec le mot de passe.
- Exiger des mots de passe forts .
Malheureusement, même si vous faites tout cela, un pirate informatique déterminé pourrait toujours trouver les mots de passe, cela lui prendrait vraiment beaucoup de temps. C'est votre principal ennemi: le temps .
L' algorithme bcrypt fonctionne car il faut cinq ordres de grandeur de plus pour hacher un mot de passe que MD5 ; (et toujours beaucoup plus long que AES ou SHA-512). Cela oblige le pirate à passer beaucoup plus de temps à créer une table arc-en-ciel pour rechercher vos mots de passe, ce qui rend beaucoup moins probable que vos mots de passe soient en danger d'être piratés.
Si vous salez et hachez vos mots de passe et que chaque sel est différent, alors un pirate potentiel devrait créer une table arc-en-ciel pour chaque variante de sel , juste pour avoir une table arc-en-ciel pour un mot de passe salé + haché. Cela signifie que si vous avez 1 million d'utilisateurs, un hacker doit générer 1 million de tables arc-en-ciel. Si vous utilisez le même sel pour chaque utilisateur, le pirate n'a qu'à générer 1 table arc-en-ciel pour pirater votre système avec succès.
Si vous ne saluez pas vos mots de passe, tout ce qu'un attaquant a à faire est de récupérer une table Rainbow existante pour chaque implémentation (AES, SHA-512, MD5) et de voir si l'une correspond au hachage. Cela a déjà été fait , un attaquant n'a pas besoin de calculer lui-même ces tables Rainbow .
Même avec tout cela, vous devez utiliser de bonnes pratiques de sécurité . S'ils peuvent utiliser avec succès un autre vecteur d'attaque (XSS, SQL Injection, CSRF, et. Al. ) Sur votre site, une bonne sécurité par mot de passe n'a pas d'importance. Cela ressemble à une déclaration controversée, mais pensez-y: si je peux obtenir toutes vos informations utilisateur via une attaque par injection SQL, ou si je peux amener vos utilisateurs à me donner leurs cookies via XSS, peu importe la qualité de votre mot de passe la sécurité est .
Autres ressources:
- Jeff Atwood: .NET Encryption Simplified (idéal pour un aperçu du hachage)
- Jeff Atwood: Je viens de me connecter en tant que vous
- Jeff Atwood: Vous stockez probablement les mots de passe de manière incorrecte
- Jeff Atwood: Speed Hashing
Remarque: veuillez recommander d'autres bonnes ressources. J'ai dû lire une douzaine d'articles rédigés par des dizaines d'auteurs, mais peu écrivent aussi clairement sur le sujet que Jeff. Veuillez modifier les articles au fur et à mesure que vous les trouvez.