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:
- Utiliser un relativement algorithme de hachage sécurisé.
- Sel chaque mot de passe avant qu'il soit haché.
- L'utilisation d'un unique et long de sel pour chaque mot de passe, et de stocker le sel avec le mot de passe.
-
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:
- Jeff Atwood: .NET Simplifié de Chiffrement (idéal pour un aperçu de hachage)
- Jeff Atwood: je viens de connecté en tant que vous
- Jeff Atwood: Vous êtes probablement stocker les mots de passe de manière incorrecte
- 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.