Question

Je lisais les avantages du salage et du hachage des mots de passe, mais une chose m'échappe encore ...

Lorsque je fournis un sel au hasard à chaque utilisateur, comment puis-je savoir en quoi il consiste lorsque je tente de les authentifier pour me connecter?

donc si je le fais ..

HASHPW = PW.RANDOMNUMBER

Je pourrais stocker le nombre aléatoire dans la base de données, mais cela semble tuer tout le point d'ajouter du sel .. n'est-ce pas? Je pourrais aussi utiliser un nombre non aléatoire pour chaque sel, mais cela tue aussi la raison du sel car s'ils le découvrent, ils ont tous les mots de passe de mes utilisateurs ...

Je viens juste de commencer à apprendre PHP et MySQL et des choses abstraites comme celle-ci me déroutent

Merci!

Était-ce utile?

La solution

Cela ne remet pas en cause le but du sel unique de le stocker. L'intérêt d'un sel unique est de protéger votre ensemble du référentiel des utilisateurs contre les attaques, et non d'un utilisateur individuel donné. Si un attaquant compromet votre base de données et est déterminé à craquer le compte d'un utilisateur en particulier, il le fera. Nous ne pouvons rien faire à ce sujet. Mais ils devront passer beaucoup de temps sur leur ordinateur, suffisamment pour qu’il ne soit pas possible de passer autant de temps sur chaque utilisateur - et protéger ainsi tous vos utilisateurs. Comparez cela à l’utilisation du même sel pour tous les utilisateurs - une fois que l’attaquant a le sel, les mêmes tables / processus peuvent être réexécutés contre tous les utilisateurs dans un temps relativement court.

Autres conseils

Salt est généré aléatoirement pour chaque utilisateur, mais il est enregistré quelque part dans la base de données. Vous recherchez le sel pour cet utilisateur particulier et vous l'utilisez pour l'authentifier.

Le fait est que, puisque sel est différent pour chaque utilisateur, vous ne pouvez pas utiliser un dictionnaire de hachages prédéfini pour mapper les mots de passe hachés sur le texte en clair ( attaque arc-en-ciel ).

Le sel empêche quelqu'un d'obtenir une copie de votre base de données de mots de passe cryptée et de mener une attaque hors ligne simultanément contre tous les mots de passe. Cela n'empêche pas les attaques contre un seul mot de passe.

Vous aimerez peut-être lire l’article de sécurité sur le mot de passe Unix original. Il explique très bien ce qu'est un sel et pourquoi nous en avons: http: //portal.acm.org/citation.cfm?id=359172

lors de la création du mot de passe haché, vous devez utiliser " double " sel

Créez un sel (random md5 ou sha1), puis utilisez un format similaire à sha1 ("- $ mot_de_passe - $ sel -"), puis stockez le mot de passe haché et le sel dans la base de données.

Ensuite, lors de l'authentification, recréez le hachage de la chaîne - $ pass - $ salt-- et comparez-le à la passe stockée dans la base de données.

Vous n'avez pas besoin d'un sel séparé pour chaque mot de passe.

Le but du salage est de résister aux tables arc-en-ciel - vous convertissez un mot de passe candidat en une nouvelle chaîne contenant votre sel; comme le sel est une chaîne privée que vous seul possédez, connaître le hachage d'un mot de passe salé n'aidera pas l'attaquant disposant d'une table arc-en-ciel à la volée.

Un attaquant intelligent peut essayer de construire une table arc-en-ciel sur mesure destinée uniquement à votre service en créant un compte et en modifiant son mot de passe pour mieux connaître le hash résultant. Si le sel est le même pour chaque utilisateur, il verra que le hachage "xyz123" correspond à "pomme", et remarque que le hachage d'un autre utilisateur est également "xyz123", il peut conclure que le mot de passe de cet utilisateur est "pomme". C'est à ce moment-là que la plupart des gens décident de stocker un sel unique pour chaque utilisateur.

Toutefois, ceci n'est pas nécessaire . Vous avez déjà une chaîne unique pour chaque utilisateur - le nom d'utilisateur. Ce n'est pas secret, donc ce n'est pas un bon sel; Cependant, la concaténation du nom d'utilisateur et d'un sel secret global est à la fois secrète et unique. Si vous stockez le hachage de (nom d'utilisateur + sel + mot de passe), il vous suffit de connaître la valeur sel globale unique au moment de la recherche.

(c’est vrai que cela pose un plus grand risque si une personne laisse échapper le sel global unique. Mais c’est une technique qui mérite d’être envisagée).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top