Question:
Sur les formulaires de connexion en deux étapes, pourquoi est-ce le nom de connexion et non le mot de passe qui est demandé en premier?
Out of Band
2015-09-09 19:15:47 UTC
view on stackexchange narkive permalink

Il existe plusieurs formulaires de connexion (par exemple, Google) sur Internet où vous entrez d'abord votre nom de connexion, puis, une fois qu'il est soumis, vous pouvez entrer votre mot de passe.

L'un des avantages est , Je suppose que le serveur peut extraire une image qu'il connaît et l'afficher à l'utilisateur pour aider à déjouer les schémas de phishing simples.

Ma question est de savoir pourquoi personne ne fait l'inverse - demandez d'abord un mot de passe, puis le nom de connexion.

Je peux voir la réponse évidente (que le mot de passe n'est peut-être pas unique et que le serveur ne saurait donc pas à qui afficher les images anti-hameçonnage), mais que ne me convainc pas. Désactiver immédiatement les comptes qui partagent des mots de passe ou au moins forcer les utilisateurs à changer leurs mots de passe en une chaîne unique la prochaine fois qu'ils se connecteront pourrait être un moyen de contourner ce problème et, en passant, cela résoudrait le phénomène des mots de passe "123456".

Un autre problème que je peux voir est que dans un scénario de phishing où un utilisateur entre correctement son mot de passe et remarque ensuite que les mauvaises images lui sont affichées, il a déjà abandonné son mot de passe et tout ce qui reste à faire au phisher est d'identifier qui cela mot de passe appartient à.

Ce que j'aimerais savoir, c'est si la séquence login-then-password est principalement due à des considérations de convention ou d'interface utilisateur ou s'il existe d'autres problèmes de sécurité avec l'inversion de la séquence à demander le mot de passe en premier (en plus des deux que j'ai mentionnés).

Forcer des mots de passe uniques a un problème de sécurité critique: lorsque je le déclencherais, je saurais qu'il y a au moins un compte qui utilise le même mot de passe que j'ai essayé. Les noms de compte ne sont généralement pas considérés comme secrets, donc je peux maintenant essayer ce mot de passe avec tous les comptes que je connais.
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/29031/discussion-on-question-by-pascal-schuppli-on-two-step-login-forms-why-is- il-le).
"il a déjà abandonné son mot de passe et il ne lui reste plus qu'à identifier à qui appartient ce mot de passe." le lien. Ensuite, il y a de fortes chances que, dans le cas de Google, par exemple, le nom d'utilisateur soit simplement l'adresse e-mail sur laquelle la personne a reçu le courrier, ce qui est à partir de ce moment des informations également disponibles.
L'autre problème avec les mots de passe uniques est l'expérience utilisateur. Sur un petit système avec 20 utilisateurs, cela peut fonctionner, mais imaginez essayer de créer un mot de passe unique pour gmail. Il est déjà assez difficile de trouver un nom d'utilisateur unique. À ce stade, vous pouvez également attribuer automatiquement des mots de passe et supposer que ce sera sur une note autocollante en quelques secondes.
** C'est pourquoi vous ne devriez pas boire et poser des questions en ligne. **
Huit réponses:
Thomas Pornin
2015-09-09 19:28:47 UTC
view on stackexchange narkive permalink

Un mot de passe unique n'est pas nécessairement vérifiable par lui-même. En particulier, si le serveur fait les choses correctement, alors il stocke non pas les mots de passe eux-mêmes, mais la sortie d'une fonction de hachage de mot de passe calculée sur le mot de passe. Une fonction de hachage de mot de passe (par opposition à une simple fonction de hachage) inclut quelques fonctionnalités supplémentaires, y compris un sel (pour de très bonnes raisons de sécurité). La vérification d'un mot de passe nécessite alors la connaissance du sel correspondant. Puisque le sel est spécifique à une instance (le point du sel est que les utilisateurs distincts ont leurs propres sels), l'identité de l'utilisateur est requise (l'identité de l'utilisateur est utilisée comme clé d'indexation pour le sel).

SilverlightFox
2015-09-09 19:37:10 UTC
view on stackexchange narkive permalink

D'une part, le serveur ne saurait pas si le mot de passe seul correspond à n'importe quel compte.

Dans un système sécurisé, les mots de passe sont salés puis hachés.

Dans une démo simpliste, supposons que j'ai eu trois utilisateurs:

  Nom d'utilisateur Passwordbob foobaralice foobarmaggie foobar  

Lorsque ces mots de passe sont définis, un sel est ajouté et un hachage est généré:

  Nom de l'utilisateur Salt Valeur à hacher Hash resultbob ABCDEF ABCDEFfoobar 778f9aab91717e420e447d7e4cdd84f1alice 123456 123456foobar 17e9191daecc5b8be26779209769b275maggie ZXCVBN2802SEL sont stockés de la même manière, même si le mot de passe peut correspondre. Il s'agit d'une étape de sécurité importante à prendre pour empêcher l'utilisation de tables arc-en-ciel sur une liste de mots de passe extraite.  

Cela rend impossible de déterminer quel compte est connecté sur la base du mot de passe seul, car le sel est l'utilisation n'est pas connue. Cela est dû au fait que le nom d'utilisateur est utilisé comme clé pour la recherche, et sans que cela ne soit fourni au serveur, le mot de passe entré à l'étape 1 ne peut pas être mis en correspondance sans essayer chaque hachage dans la table utilisateur jusqu'à ce qu'une correspondance soit trouvée. Sur un système correctement configuré, ce serait trop lent, car vous utilisez un algorithme lent (voir note de bas de page).

De plus, ce serait une fuite massive d'informations de sécurité si le système vous disait que votre mot de passe était utilisé par un autre.

L'exemple ci-dessus est à des fins d'illustration uniquement et utilise MD5. N'utilisez jamais MD5 pour hacher les mots de passe - utilisez bcrypt, scrypt ou pbkdf2.

Attends quoi? Le sel à utiliser * est * connu, il est stocké là juste à côté du hachage du mot de passe ...
Le nom d'utilisateur est utilisé comme clé pour rechercher le hachage à utiliser. L'OP demandait pourquoi un système ne pouvait pas demander le mot de passe en premier - la raison en est que le système ne saurait pas avec quel sel hacher le mot de passe entré sans le nom d'utilisateur à rechercher.
Personne n'a dit que le mot de passe devait être haché avant que le nom d'utilisateur ne soit obtenu ... la question était une question frontale, pas une question principale.
"parce que le sel à utiliser n'est pas connu." -> Juste au cas où cela causerait de la confusion, le problème est que vous ne connaissez pas le bon sel pour le mot de passe pour lequel vous calculez le hachage. Théoriquement, vous pouvez parcourir chaque compte et calculer le hachage en fonction du sel et du mot de passe. Cependant, ce serait trop lent pour être pratique si vous avez plus de quelques utilisateurs.
@underscore_d: Vous avez manqué la partie cruciale de mon commentaire.
@Mehrdad Alors je l'ai fait! Pardon. Je vais supprimer mon commentaire idiot maintenant.
Black
2015-09-10 02:07:43 UTC
view on stackexchange narkive permalink

En gros, vous ne demandez pas "Y a-t-il une raison pour laquelle nous n'avons pas de mots de passe publics et de noms d'utilisateur privés?"

Ce ne sont que des chaînes de texte. Votre idée d'appliquer des mots de passe uniques signifie simplement que les noms d'utilisateur sont uniques. L'étiquette que vous appliquez à une zone de texte n'a pas d'importance. Nous appelons la chaîne privée un mot de passe et la chaîne unique un nom d'utilisateur ou un ID utilisateur car c'est unique.

Sur le plan de la sécurité et de la regarder dans l'ordre normal de connexion / mot de passe : Si vous exigiez que les deux soient uniques, vous ouvririez une attaque contre la base de données, car chaque mot de passe vérifié serait vérifié par rapport à chaque utilisateur de la base de données car vous avez exigé que vos mots de passe soient uniques . Donc, les deux uniques ne fonctionnent pas. Les deux non uniques ne fonctionnent pas car vous ne savez pas à quel compte accède. Donc, cela ne laisse qu'une seule chaîne unique. Si vous créez une seule chaîne de texte unique, autant en faire une donnée publique et vérifier cela en premier (et nous appelons ces données Login / ID / Username).

@PascalSchuppli Il dit que, même si vous n'aviez pas l'intention d'échanger les significations des mots de passe et des noms d'utilisateur, il n'y a aucun moyen d'implémenter ce système de manière à ne pas changer leur signification. Si le mot de passe vient en premier, il doit être non salé. S'il n'est pas salé, il se trouve dans un fichier quelque part en texte brut. Si c'est en texte brut, alors vous avez besoin d'une information qui _n'est pas_, et votre seul candidat à ce moment-là serait le nom d'utilisateur. Vous devrez donc saler le nom d'utilisateur avec le mot de passe et ...
stocker le hachage du nom d'utilisateur salé. _Alors_ le système serait sécurisé. Mais en même temps, vous auriez complètement inversé les définitions d'un mot de passe et d'un nom d'utilisateur.
@PascalSchuppli Vos mots de passe perdent leur entropie car votre attaquant obtient un avantage parallèle sur le système. Si 1 million de mots de passe ont été créés, c'est 1 million de moins que vous devez vérifier, même si vous faites fonctionner votre système. C'est comme générer un mot de passe au hasard mais le jeter si ce n'est pas un mot. Ce système n'est pas sécurisé. Et comme cela a été dit, si vous ne le faites pas «fonctionner» (s'il existe une méthode pour vérifier plus d'un utilisateur d'une fois, comme le formulaire de changement de mot de passe, inscrivez-vous) alors vous obtenez 1 million de ces contrôles d'entropie réduite chacun l'heure à laquelle vous envoyez une demande.
@PascalSchuppli * "Les noms d'utilisateur sont facilement devinables même s'ils ne sont pas de notoriété publique de par leur conception" * De toute évidence, vous n'avez jamais rencontré de système utilisant la convention (certes terrible): "Votre nom d'utilisateur est h0j7k # X1P% 3. Votre mot de passe par défaut est votre nom de famille. " Ils existent (bien que je ne sache pas pourquoi).
Keavon
2015-09-10 04:10:25 UTC
view on stackexchange narkive permalink

Imaginons une analogie ...

Je suis un messager envoyé par mon roi pour délivrer un message à un certain château de la Vallée des Châteaux. Je sais à quoi ressemble le château où je veux aller et on m'a donné une phrase de passe à dire au garde afin que je puisse être laissé entrer dans le château.

J'ai deux options pour faire ceci:

  1. Comme vous vous en doutez, la manière conventionnelle de le faire est de monter au château où j'ai été envoyé, puis de leur indiquer la phrase de passe à laisser entrer. C'est d'abord utiliser mes informations publiques (le château, visible par quiconque veut le regarder) pour se connecter avec mes informations privées (la phrase de passe).

  2. Mais il existe un moyen inverse pour fais ça. Je peux avoir un klaxon et crier ma phrase secrète dans toute la vallée pour que le public puisse l'écouter. Puisque le château que j'ai l'intention de visiter a entendu ma phrase de passe (avec tous les autres châteaux et les habitants potentiellement néfastes de la vallée), le château que je visite devrait savoir pour m'attendre.

    Je continue alors à cheval vers le bon château et traversez son pont-levis ouvert. Mais ils laisseraient n'importe qui entrer par ce pont-levis ouvert! Maintenant que mes informations privées ont été partagées avec le monde, n'importe qui peut monter entre les châteaux et entrer dans celui avec la porte ouverte.

    Si je ne suis pas ici pour crier moi-même cela dans une corne, habitants de la vallée pouvaient se tenir au sommet d'une colline avec leur propre klaxon, criant du charabia à travers la vallée jusqu'à ce qu'ils entendent le bruit sourd de l'ouverture d'un pont-levis; sachant qu'ils ont bien deviné une phrase secrète, ils doivent simplement passer d'un château à l'autre jusqu'à ce qu'ils en trouvent un ouvert.

La première option est la façon dont cela se fait habituellement. Il n'y a aucune raison de changer cette convention. L'alternative est possible, mais en partageant d'abord vos informations privées, vous facilitez beaucoup la tâche de deviner le mot de passe de tout le monde à la fois avant de vous authentifier avec des informations publiques, c'est-à-dire aller à chaque château ou essayer tout le public noms de compte. Avec des milliers de châteaux dans cette vallée ou des comptes sur un site Web, il est fort probable que quelqu'un devine un mot de passe facile, puis il est beaucoup plus facile de le faire simplement correspondre avec l'un des quelques milliers de châteaux ou noms de comptes publics.

A + analogie, relirait
L'ordre dans lequel les informations sont collectées n'a pas d'importance pour savoir si les informations peuvent être cryptées ou non. La dernière phrase de la réponse compense cela, cependant, car cela / pourrait / permettre des attaques plus faciles du mécanisme d'invite fournit un retour immédiat pour un mot de passe invalide avant de demander le nom d'utilisateur. Mais c'est en quelque sorte un problème secondaire.
Doryx
2015-09-10 09:00:55 UTC
view on stackexchange narkive permalink

Google ne vous demande pas de saisir d'abord votre adresse e-mail pour des raisons de sécurité. Il vous faut entrer votre e-mail / nom d'utilisateur, donc si vous vous connectez à un domaine professionnel ou éducatif qui souhaite avoir sa propre page de destination pour SSO / SAML

C'est un bon point (les perspectives sur le Web font de même). Il peut cependant y avoir une raison secondaire de sécurité / réduction de charge / limitation du taux auquel les comptes peuvent être sondés.
C'est peut-être vrai pour Google, mais de nombreux systèmes ** font ** vous avez d'abord saisi votre nom d'utilisateur pour une raison de sécurité: [authentification mutuelle] (https://en.wikipedia.org/wiki/Mutual_authentication).
dannysauer
2015-09-10 17:28:25 UTC
view on stackexchange narkive permalink

Si vous demandez d'abord le mot de passe, vous devez conserver la valeur "secret" dans un certain état pendant que vous attendez le nom d'utilisateur. Avec une application Web, vous devrez généralement effectuer ce stockage d'une manière ou d'une autre pour qu'un nouveau processus puisse lire la valeur, car le nom d'utilisateur entrerait lors d'une deuxième demande. Cela augmente la fenêtre d'opportunité pour que la chaîne de mot de passe soit divulguée, à la fois en termes de temps et en termes de moyens d'accéder aux données.

En demandant d'abord le nom d'utilisateur, la vérification du mot de passe utilise le hachage salé (ou non) peuvent déjà avoir accès à tout ce qui est nécessaire pour vérifier le mot de passe immédiatement, et le système n'a besoin que du mot de passe lui-même disponible pendant un minimum de temps. Il est généralement préférable de disposer de données sensibles le moins longtemps possible.

Et c'est une convention. En demandant d'abord le mot de passe, vous finirez par entraîner les utilisateurs à saisir accidentellement leur mot de passe dans les champs de nom d'utilisateur ailleurs, ce qui entraînera probablement une divulgation via les journaux.

Ne faites pas cela. :)

Plus un pour saisir les mots de passe dans les champs de nom d'utilisateur. Gros non-non en effet
Et plus un pour mentionner le fait apparemment souvent négligé que prendre d'abord le (artiste anciennement connu sous le nom de) `` mot de passe '' ne nécessite pas qu'il soit entièrement non salé, car il pourrait être salé plus tard, mais le délai fournit une autre faille de sécurité dans ce domaine. (plutôt étrange, ou même juste échange de définition).
Ombongi Moraa
2015-09-10 16:07:41 UTC
view on stackexchange narkive permalink

Pour ajouter; le mécanisme d ' identification vs authentification / vérification est décidé lors du développement de l'application. L'identification est 1: plusieurs , la vérification / authentification est 1: 1

  1: 1 - correspond à un ensemble de résultats présélectionné; 1: many - correspond à tous les résultats de la base de données  

Les noms d'utilisateur comme ceux de gmail sont uniques. Ce n'est pas obligatoire pour toutes les applications, mais cela facilite certainement la vie de l'algorithme de vérification par opposition à l'algorithme d'identification.

Considérez le nom d'utilisateur populaire puis l'authentification par mot de passe pour gmail:

  1. entrez le nom d'utilisateur;

    gmail correspond au nom d'utilisateur unique avec tous les autres noms d'utilisateur uniques; Oui, entrez le mot de passe; Aucune correspondance, aucun accès.

  2. Entrez le mot de passe.

    gmail correspond simplement au 1 nom d'utilisateur avec le 1 mot de passe stocké dans n'importe quel format; Aucune correspondance, l'authentification a échoué. Oui, accédez à votre messagerie.

À mon humble avis.

De l'autre côté, l'identification (1: plusieurs), le processus de correspondance de gmail serait comme ceci:

  1. entrez le mot de passe; et comme @SilverlightFox l'a clairement indiqué, de nombreux comptes peuvent avoir le même mot de passe.

      l'algorithme de correspondance fait correspondre le mot de passe à TOUS les noms d'utilisateur enregistrés dans la base de données gmail.  

    Un ensemble de résultats trop prudent peut contenir 10 noms d'utilisateur.

  2. Entrez le nom d'utilisateur;

La question de savoir si les noms d'utilisateurs sont uniques ou peuvent être identiques, décidera de la durée de plus du processus d'authentification et du nombre de correspondances trouvées. Si plusieurs correspondances, nous devrons implémenter l'authentification de connexion en 3 étapes.

L'authentification en deux étapes facilite la vie du développeur et de l'algorithme.

jhash
2015-09-28 23:44:10 UTC
view on stackexchange narkive permalink

Dans le cas de Google et de la plupart de la configuration de l'authentification fractionnée, le système utilise essentiellement l'ID utilisateur pour identifier le risque associé et déterminer le processus de connexion approprié qu'il doit exécuter pour l'utilisateur.

Au cas où de la plupart de ces situations, l'identifiant d'utilisateur entré par personne n'est qu'une entrée considérée. Parallèlement à cela, de nombreuses autres informations (comme l'adresse IP à partir de laquelle vous accédez, l'appareil que l'utilisateur utilise - une signature d'appareil est générée et transmise avec l'identifiant de l'utilisateur) sont transmises à un moteur de détermination des risques (dans la plupart des banques). mais ne peut pas toujours être utilisé) qui peut fournir un processus de connexion suggéré. En plus de cela, le système vérifie la politique de connexion associée à l'utilisateur (c'est-à-dire s'il a activé le multi-facteur par exemple). Sur la base de la détermination finale, la plupart du temps, vous pouvez simplement obtenir un écran de mot de passe simple, mais dans certains cas, vous pouvez être invité à opter pour un processus d'authentification multiple (par exemple, OTP basé sur un téléphone, etc.).



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...