Modifier : mise à jour pour mettre davantage l'accent sur l'objectif - la tranquillité d'esprit pour l'utilisateur, et non le renforcement de la sécurité.
Après en lisant quelques discussions ici sur le hachage des mots de passe côté client, je me demande toujours si cela pourrait être correct de l'utiliser dans une situation particulière.
Plus précisément, j'aimerais avoir le client - un programme Java - hacher leur mot de passe en utilisant quelque chose comme PBKDF2, en utilisant comme sel une combinaison de leur adresse e-mail et d'un bloc d'octets constant spécifique à l'application . L'idée étant que le hachage est reproductible pour l'authentification, mais, espérons-le, pas vulnérable aux attaques de rétro-ingénierie (pour découvrir le mot de passe littéral) autres que la force brute si les données du serveur sont compromises.
Objectif:
Le hachage côté client est pour la tranquillité d'esprit de l'utilisateur que son mot de passe littéral n'est jamais reçu par le serveur, même s'il y a quand même l'assurance de le hacher dans le stockage. Un autre avantage secondaire (ou peut-être une responsabilité?) Est que le coût de hachage d'un PBKDF2 itéré ou similaire incombe au client.
Les caractéristiques de l'environnement sont:
Problèmes:
- "Évitez de concevoir des schémas d'authentification maison."
- Le sel est déterministe pour chaque utilisateur, même si les hachages produits seront spécifiques à cette application à cause des octets supplémentaires (identiques) jetés dans le sel. Est-ce mauvais?
- Les authentifications côté serveur se produiront sans retard significatif, sans frais de hachage. Cela augmente-t-il la vulnérabilité aux attaques d'authentification par force brute distribuée?
- Les clients non fiables peuvent fournir un hachage faible pour leurs propres comptes. En fait, pas trop inquiet à ce sujet.
- Le serveur devrait-il répéter les hachages du client avant de les stocker?
Pensées?