Question:
Comment prouver que le système d'authentification fonctionne et que le client utilise le mauvais mot de passe?
Mario Trucco
2016-11-09 21:17:05 UTC
view on stackexchange narkive permalink

Parfois (bien que rarement), certains de nos utilisateurs disent que leur mot de passe ne fonctionne pas: ils disent qu'ils ont tapé le bon mot de passe mais qu'ils ont reçu le message "mauvais mot de passe" .

Nous leur disons d'utiliser la fonction de réinitialisation du mot de passe , ce qu'ils font, mais ils conservent le sentiment que le système d'authentification ne fonctionne parfois pas .

Nous pensons que leur mot de passe n'est pas ce dont ils se souviennent, mais comme nous ne le stockons pas en texte brut, avons-nous un moyen de prouver que c'est le cas?

À certaines occasions nous avons pu leur montrer qu'à une certaine date, ils avaient changé leur mot de passe, puis l'avaient oublié, et ils étaient satisfaits. Mais ce n'est pas toujours le cas.

Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (http://chat.stackexchange.com/rooms/48508/discussion-on-question-by-mario-trucco-how-to-prove-that-authentication-system-w).
Neuf réponses:
Bryan Field
2016-11-09 22:14:41 UTC
view on stackexchange narkive permalink

Il n'y a pas de moyen très rapide de le prouver, car le hachage est conçu pour ne pas être réversible .

Vous pouvez récupérer le mot de passe revendiqué et générer manuellement le hash comme @TechTreeDev suggéré. Vous devriez utiliser un hachage salé (c'est-à-dire BCrypt), alors assurez-vous d'utiliser le même sel.

  • Si le hachage généré manuellement correspond, alors vous avez prouvé un problème dans la connexion code.

  • Il est plus probable que le hachage généré soit différent, alors vous avez exclu les problèmes de code de connexion , mais il se peut que un problème avec la configuration du mot de passe , ou une erreur dans votre génération manuelle.

C'est à peu près tout ce que vous pouvez faire pour vérifier le mot de passe d'une seule personne . Au-delà de cela, nous passons au test du système.

  • Si vous soupçonnez un cas de pointe intermittent / aléatoire, vous pouvez créer un script de test de singe pour configurer les mots de passe puis essayez-les. Cette approche est probablement exagérée.

  • La meilleure chose à faire est de revoir votre code de connexion et tous les points qui réinitialisent le mot de passe . Le code doit être aussi court et concis que possible. D'après mon expérience, le meilleur moyen d'éliminer les problèmes de cas extrêmes est la révision du code, car ces cas limites ne sont souvent pas couverts par les tests manuels.

Quelques points à préciser recherchez:

  • Assurez-vous que le paramètre maxlength est cohérent (ou mieux encore, absent) sur tout mot de passe <input> s. Vous recherchez une cohérence entre la configuration du mot de passe et le formulaire de connexion.

  • Assurez-vous qu'il n'y a pas de troncature côté serveur.

  • Assurez-vous que le codage est cohérent. Si un caractère non ASCII est utilisé dans le mot de passe, le formulaire de configuration du mot de passe et les formulaires de connexion doivent se comporter exactement de la même manière.

  • De même, ne supprimez pas automatiquement les caractères espaces ou non ASCII du mot de passe. C'est le genre de chose que vous pouvez facilement saisir avec une révision de code si votre code est concis.

Enfin, quelques astuces humaines:

  • Vérifiez d'abord qu'ils utilisent le nom d'utilisateur correct .

  • Vérifiez que le paramètre de verrouillage des majuscules est correct.

  • Donnez au service client un journal de chaque date / heure de connexion ou de réinitialisation du mot de passe. S'il y a eu au moins une connexion depuis la dernière réinitialisation alors ils savent que le système a fonctionné correctement.

    Tant que le code de connexion est inchangé, et que le hachage est inchangé depuis le dernier succès, alors vous pouvez être raisonnablement certain que le problème doit être un mot de passe mal saisi.

  • Passez en revue l ' UX de l'erreur de mot de passe incorrect , en fournissant à l'utilisateur quelques conseils simples et des explications fiables sur les possibilités. Cela peut réduire les appels au service client.

  • Il peut être utile d ' informer par e-mail le client lorsqu'un mot de passe est réinitialisé pour le rappeler. (ou un autre membre de la famille en cas de comptes partagés)

Parallèlement à l'étape d'encodage, je vérifierais également que toute validation de données ou filtrage de caractères effectué est également cohérent.LinkedIn m'a permis une fois de mettre le |caractère dans un mot de passe et connectez-vous parfaitement à leur site Web.Mais leur application mobile n'a apparemment pas accepté les mots de passe avec ce caractère et a refusé de m'authentifier jusqu'à ce que je le supprime.
Les deux premiers conseils humains sont importants et main dans la main.Il n'est pas rare de couper et de convertir le nom d'utilisateur fourni par l'utilisateur et le nom d'utilisateur de base de données en un seul cas afin qu'ils correspondent correctement.Ceci est particulièrement utile lorsque les téléphones portables souhaitent limiter automatiquement le premier caractère.Nous pouvons sembler transmettre à tout le monde la sensibilité à la casse avec des mots de passe, mais ce n'est malheureusement pas le cas avec les noms d'utilisateur.C'est l'une des fois où vous devrez peut-être sacrifier la sécurité au profit de la convivialité.
Astuce humaine supplémentaire: vérifiez qu'ils utilisent la même ** langue de saisie ** et la ** disposition du clavier ** que lors de la création du mot de passe.S'ils ont plusieurs langues installées sur leur PC, ils peuvent avoir accidentellement frappé la combinaison de touches qui bascule vers la langue suivante, de sorte que les touches sur lesquelles ils appuient ne produisent pas les caractères qu'ils attendent.
Dans les connexions Terminal Server, le problème est parfois que s'il n'y a pas un délai suffisamment long entre l'appui sur la touche Maj et la touche alphabétique pour la lettre majuscule que vous voulez taper, le signal de décalage arrive trop tard au serveur et le champ de mot de passe obtient lelettre minuscule comme entrée.Cela m'a donné à plusieurs reprises le sentiment d'être complètement stupide et de ne pas me souvenir de mon mot de passe.Cependant, cela est limité à mstsc, je n'ai jamais eu ce problème avec les connexions Web.
J'ai eu une expérience similaire où la touche Majuscule ne se libérait pas assez rapidement / fortement sur un clavier d'ordinateur portable de moindre qualité, ce qui m'a obligé à capitaliser une lettre supplémentaire par accident.On dirait que le retard de votre expérience terminale était plus important.
Je ne suis pas sûr que la révision du code soit la bonne façon de détecter les caractères de suppression de votre mot de passe, car cela devrait être automatisé.Incluez des mots de passe qui testent toutes les éventualités dans votre suite de tests d'intégration et assurez-vous que les hachages stockés dans la base de données correspondent toujours aux mots de passe saisis.
Je suis d'accord qu'il ne faut pas supprimer les espaces * dans * un mot de passe, mais un cas pourrait être fait pour au moins * couper * les espaces.Un espace accidentel au début ou à la fin est assez courant.Je connais certaines personnes qui ajoutent instinctivement un espace à la fin de chaque entrée (je suppose parce qu'elles sont tellement habituées à ajouter un espace après les mots).
Quoi que vous fassiez: ** N'entraînez pas les utilisateurs à donner leur mot de passe à quiconque **
Les espaces de premier plan ont également été un gros problème pour les utilisateurs.Les gens sont tellement habitués à frapper la barre d'espace pour ramener les ordinateurs du sommeil qu'ils le font instinctivement sur les écrans de connexion ...
Je pense que nous sommes tous d'accord pour ne pas supprimer les espaces internes.Personnellement, je ne pense pas qu'il soit approprié de supprimer non plus les espaces blancs de début ou de fin.(Les ordinateurs devraient être prévisibles à mon humble avis) Cela étant dit, il semble que Google fasse cela.
Autre élément: assurez-vous que le hachage est toujours effectué par le SGBD cible ou le serveur LDAP, et non par votre propre code.De cette façon, vous êtes beaucoup moins susceptible d'introduire un bogue de hachage, et votre propre code devient beaucoup plus transparent, par exemple.`SELECT COUNT (*) FROM USERS WHERE USERNAME =?AND PASSWORD = H (?) `Pour une fonction de hachage` H`, où le résultat est 1 en cas de succès et 0 en cas d'échec, et de même `INSERT INTO USERS (USERNAME, PASSWORD) VALUES (?, H (?))` Pourle même «H».
@EJP, Ce n'est pas une bonne idée car les mots de passe peuvent être exposés via le journal des déclarations, binlog ou `show processlist`.En outre, il est plus important de choisir le bon algorithme de hachage (c'est-à-dire BCrypt, scrypt, Argon2) et certains serveurs de base de données (c'est-à-dire MySQL) n'offrent pas ces choix en interne.
Journalisation des changements de mot de passe.Vous pouvez dire, vous avez changé votre mot de passe le ... et la dernière connexion ... et vous n'avez pas réussi à vous connecter ...
"Ne pas supprimer automatiquement" s'applique également au nom d'utilisateur.Mais il en va de même pour "ne pas arrêter automatiquement le décapage", ce qui m'a déjà causé des problèmes (en tant qu'utilisateur)
À des fins de débogage, je ferais en sorte que la journalisation des changements de mot de passe stocke le hachage dans le journal (non affiché à l'utilisateur). Cela vous permet de vérifier rapidement qu'il n'y a pas eu de changement de mot de passe par inadvertance depuis.
@BrianKnoblauch J'ai remarqué que certaines personnes utilisent également la barre d'espace au lieu de Backspace, en particulier les personnes plus âgées et les personnes non averties en technologie.
Avoir des hachages différents ne prouve pas grand-chose - vous pouvez avoir un problème avec votre code de génération de hachage.
SQB
2016-11-10 04:03:27 UTC
view on stackexchange narkive permalink

Il y a un moyen de le savoir avec certitude, c'est de calculer le hachage de ce que l'utilisateur a entré, en utilisant le même sel, et en le comparant avec ce que vous avez. Cependant, c'est ce que fait déjà le processus de connexion et l'utilisateur ne le croit pas. Pourquoi devraient-ils y croire quand vous le faites pour eux?


Au lieu de cela, vous pourriez faire ce que j'ai vu beaucoup ces derniers temps, dans Windows 10 par exemple, mais aussi sur des sites Web:

Donnez à l'utilisateur un moyen de vérifier ce qu'il a saisi.

Bien sûr, lors de la connexion, les caractères doivent être représentés par des points ou d'autres caractères, donc les snoopers ne peuvent pas voir le mot de passe en regardant par-dessus l'épaule de l'utilisateur.

Mais tant qu'il est dans le champ de saisie, il n'a pas encore été chiffré ou haché. Fournissez donc un bouton qui transforme ces points en caractères réels.
De cette façon, après avoir entré le mauvais mot de passe, ils peuvent le saisir à nouveau et voir ce qu'ils viennent de saisir. Ou ils peuvent s'enregistrer avant de se connecter.

CapsLocks oubliés, Shifts suspendus, fautes de frappe; ils peuvent tous être détectés par l'utilisateur de cette façon.

Oui, une excellente idée.Comme la plupart des sites ne l'implémentent pas (encore) et que la plupart d'entre eux ne l'implémenteront jamais, j'utilise le module complémentaire FIrefox: "Afficher mon mot de passe".
CoffeDeveloper
2016-11-10 15:48:38 UTC
view on stackexchange narkive permalink

Pour améliorer votre expérience utilisateur, vous devez tout d'abord ajouter une interface utilisateur pour informer les utilisateurs des conditions suivantes:

  • Verrouillage des majuscules activé
  • Avertissement s'il y a des espaces à la fin dans le nom d'utilisateur
  • Attention s'il y a des espaces à la fin du mot de passe
  • évitez d'utiliser des espaces dans les e-mails (si vous utilisez l'e-mail au lieu du nom d'utilisateur)
  • empêche l'utilisation et supprime automatiquement les nouvelles lignes (il existe plusieurs nouvelles variantes de ligne)
  • empêcher l'utilisation et supprimer automatiquement les caractères de contrôle
  • si vous utilisez Javascript, certains navigateurs l'ont désactivé, vous devez donc déplacer ces étapes sur le serveur

Également lorsque le mot de passe inséré est incorrect, affichez le message suivant:

Le mot de passe ou le nom d'utilisateur / mail est incorrect, veuillez taper en faisant attention aux lettres minuscules ou majuscules et à tous les nombres de symboles, ils doivent correspondre parfaitement . Évitez de faire du copier-coller, car la copie de texte peut parfois ajouter des espaces et / ou des retours à la ligne supplémentaires indésirables.

Gardez à l'esprit que vos utilisateurs ont peut-être raison ! Une fois, j'ai eu un vieux téléphone qui ne me permettait pas de me connecter à une page Web, je ne sais pas si c'était un problème d'encodage de texte mais mon mot de passe était alphanumérique et fonctionnait parfaitement sur un PC.

Ce message décourage implicitement l'utilisation de gestionnaires de mots de passe.J'utilise le plus l'option de remplissage automatique sur mon gestionnaire, mais juste après cela vient généralement l'option copier-coller lorsque le remplissage automatique ne fonctionne pas à cause du flash / nom de domaine / code de champ de saisie / incompatibilité générale.
Il contient également une épissure de virgule.
@Nzall Il ne dit pas d'empêcher techniquement les gens de coller.Les personnes qui utilisent des gestionnaires de mots de passe savent ce qu'elles font - les personnes qui copient et collent à partir d'un fichier texte, d'un message électronique, d'un document Word sont susceptibles d'introduire des espaces blancs indésirables.
Out of Band
2016-11-10 04:24:35 UTC
view on stackexchange narkive permalink

La réponse acceptée en couvre vraiment la majeure partie. Mais en supposant que j'aie essayé toutes les suggestions et que je ne puisse toujours pas trouver le problème, j'essaierais alors de détecter l'erreur quand cela se produit. Pour ce faire, vous pouvez ajouter un code qui enregistre le mot de passe en clair reçu si un utilisateur ne parvient pas à se connecter deux fois de suite (afin de filtrer tous les utilisateurs qui viennent de faire une erreur stupide et de la corriger lors du deuxième essai).

Afin de ne pas affaiblir la sécurité de votre système, vous ne pouviez activer la connexion par mot de passe que lorsqu'il y avait effectivement un utilisateur sur le téléphone qui avait des difficultés à se connecter, et ne connecter que son mot de passe, avec son / son consentement.

La journalisation du mot de passe réel que votre application voit présente l'avantage que vous voyez exactement ce que voit votre application. Après quelques appels d'utilisateurs désespérés, vous pourriez commencer à trouver un modèle dans leurs mots de passe (par exemple, espace de fin, caractères spéciaux, etc.) qui indiquait un problème dans votre code de connexion, ou vous pourriez voir qu'ils voulaient dire pour taper "mysweetheart" mais tapez "myseetheart" à la place, ce qui signifierait que les problèmes de connexion étaient très probablement des erreurs de l'utilisateur.

Cela semble louche.Je ne ferais jamais confiance à un système une fois que je savais qu'un administrateur pouvait voir mon mot de passe en clair.
Je suis d'accord sur le principe, mais la triste vérité est que les administrateurs de tous les serveurs qui servent vos pages Web de connexion PEUVENT très probablement voir votre mot de passe s'ils le souhaitent.Alors, comment savez-vous que les services que vous utilisez tous les jours ne le font pas?La seule chose qui garde votre mot de passe confidentiel est leur moralité et les règlements de l'entreprise.
Ángel
2016-11-09 23:28:38 UTC
view on stackexchange narkive permalink

Je ne pense pas que l'exécution manuelle des étapes de hachage de mot de passe serait la solution. Si vous avez détecté que cela échoue, bien sûr, vous pouvez le faire à bas niveau pour déboguer, mais vos clients l'oublieront presque immédiatement.

Ici, le problème est qu'ils utilisent un mauvais mot de passe , soit parce qu'ils l'ont mal saisi, soit parce qu'ils pensent vraiment en avoir utilisé un autre que celui qu'ils ont utilisé.

Pour écarter le premier cas, faites-leur écrire le mot de passe prévu dans un éditeur de texte (par exemple, le bloc-notes ), coupez-le dans le presse-papiers et collez-le dans le champ du mot de passe. Le mot de passe est montré au client pendant le processus, ce qui supprime les cas où une mauvaise lettre est pressée, le verrouillage des majuscules a été défini ... (bien sûr, nous nous attendons à ce qu'ils le fassent à un moment où personne d'autre ne regarde leur écran )

Le deuxième cas est plus difficile, car nous ne voulons pas inciter les clients à conserver un fichier texte avec leurs mots de passe. Idéalement, vous convaincriez vos clients d'utiliser un gestionnaire de mots de passe comme KeePass. Ensuite, si le mot de passe - le même qui fonctionnait auparavant - est correctement copié depuis le gestionnaire de mots de passe, vous pouvez être tout à fait certain qu'il s'agit bien du bon mot de passe.

Autre que cela, qui nécessite vraiment un changement de l'esprit de vos clients, vous pouvez demander à vos clients de:

  • créer un nouveau mot de passe
  • changer leur mot de passe en le collant
  • essayer de vous connecter avec le même mot de passe qu'ils ont dans le presse-papiers

autant de fois qu'ils le souhaitent, afin d'essayer de le reproduire.

Nick
2016-11-10 04:17:37 UTC
view on stackexchange narkive permalink

En supposant que vous vous connectiez chaque fois qu'un utilisateur se connecte, vous pourrez peut-être montrer qu'il a pu se connecter depuis la dernière modification de son mot de passe, ce serait au moins suffisant pour écarter certains problèmes potentiels.

Joshua
2016-11-12 23:30:59 UTC
view on stackexchange narkive permalink

En rencontrant quatre systèmes d'authentification différents avec cette propriété réelle, il est assez facile de vérifier dans chaque cas.

Cas n ° 1: le système échoue de manière aléatoire. En cas d'échec, le compteur de connexion incorrect n'est pas incrémenté. (Je n'ai pas pu inspecter l'intérieur, mais je suis presque sûr que ce qui se passe, c'est qu'il perd parfois la connexion avec un autre serveur et signale simplement un mot de passe incorrect lorsque cela se produit.)

Cas n ° 2: Le système a explosé lorsque je mets une apostrophe dans mon mot de passe. Démontrer que le champ du mot de passe était soumis à une injection SQL était trivial.

Cas n ° 3: Un mot de passe valide a été rejeté par un filtre de caractères sur l'écran de connexion que l'écran de mot de passe n'avait pas. C'était aussi simple de démontrer le problème.

Cas n ° 4: Le système ne me laissait pas me connecter car il interprétait le signe arobase comme une ligne d'arrêt. Booo. La connexion par telnetting au port FTP a prouvé que j'avais le bon mot de passe.

b04ty
2016-11-10 21:42:05 UTC
view on stackexchange narkive permalink

Vous pouvez stocker les derniers mots de passe (hachés) de chaque utilisateur dans votre base de données. Si le mot de passe entré ne correspond pas au mot de passe actuel, comparez-le aux anciens. S'il y a une correspondance, présentez un message «Vous avez entré un ancien mot de passe - réessayez», ou un code d'erreur à cet effet (ainsi, lorsqu'ils vous contactent, vous pouvez demander «Voyez-vous le code d'erreur 47? Cela signifie que vous avez utilisé un ancien mot de passe. ")

De cette façon, vous pouvez être assez sûr que le système de connexion fonctionne car il a effectué au moins quelques recherches de mot de passe et l'utilisateur reçoit des informations indiquant qu'il a oublié son nouveau mot de passe.

Cela permettrait égalementd'introduireun défaut del'énumération d'utilisateur, bien que-siun mot de passeDBest vidé,et l'utilisateurmodifie sonmot de passe suivantcela,un attaquantavecla déchargepeut encoreconfirmerque l'utilisateur existe.S'ils obtiennent simplement l'erreur standard, ils ne peuvent pas le dire une fois que le mot de passe a été modifié.C'est une mince possibilité, mais quand même.
Cela sacrifie une certaine sécurité.Il y a une discussion plus détaillée ici: [Est-ce que Facebook stockant d'anciens mots de passe compromet la sécurité?] (Http://security.stackexchange.com/questions/137641/does-facebook-storing-old-passwords-compromise-security)
Bryan Field
2016-11-11 00:58:49 UTC
view on stackexchange narkive permalink

Je publie une deuxième réponse à laquelle j'ai pensé hier, mais je n'étais pas sûr que ce soit souhaitable.

Vous pouvez créer un journal temporaire des mots de passe définis / réinitialisés et tentés sous une forme cryptée. Les experts en sécurité (moi y compris) frémiraient à cette idée de crypter (au lieu de hacher) les mots de passe (ou même de tentatives de mot de passe incorrectes), je vous suggère donc trois précautions si vous décidez que vous devez commencer à enregistrer ces informations.

  1. Soumettez les informations à un ordinateur séparé / isolé afin que si le serveur principal est compromis, le journal des mots de passe est toujours sécurisé.
  2. Utilisez la clé publique (asymétrique ) cryptage pour les informations enregistrées. La clé privée (décryptage) n'est stockée que dans un environnement isolé pour que le développeur puisse examiner les données enregistrées.
  3. Planifiez une tâche (ou codez-la) afin que ce journal temporaire soit désactivé à une date donnée ou lorsqu'un nombre suffisant de tests a réussi.
Je ne suis pas sûr que sacrifier la sécurité de tout le monde juste pour prouver que des gens stupides ont tort soit une bonne idée.C'est un risque énorme, même si toutes les précautions sont prises.Également à partir de la question, il semble que le service client aurait besoin d'accéder à ces informations, il se peut donc qu'ils ne soient pas aussi fiables que les développeurs.Enfin, le test du système de mot de passe peut (et doit) être fait avec des tests unitaires sur une base de données de démonstration.
Suivre les précautions 1 et 2 cela peut être un risque acceptable, à condition que le terme isolé soit suivi attentivement.(c'est-à-dire un ordinateur sans accès direct à Internet, et seulement quelques services réseau pour un seul développeur à utiliser) Cela pourrait cependant être une pente glissante de tentation.Évidemment, les mettre à disposition du service client serait un risque énorme!(c'est-à-dire que ce ne serait pas très bien isolé)
Si vous voulez faire quelque chose comme ça, mettez un champ dans le fichier qui indique si une telle journalisation doit être utilisée et ne l'activez que sur les personnes qui se plaignent.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...