Question:
Pourquoi n'utilisons-nous pas l'authentification à entrée unique?
Wissen Macht Frei
2016-11-02 13:03:23 UTC
view on stackexchange narkive permalink

L'authentification à deux entrées utilise à la fois le nom d'utilisateur (peut être disponible publiquement) et le mot de passe (gardé secret).

Pour des raisons de comparaison, supposons que la longueur du nom d'utilisateur est la même que la longueur du mot de passe, c'est-à-dire , n caractères. Supposons également que nous ne pouvons utiliser que des lettres insensibles à la casse de a à z. Si le nom d'utilisateur et le mot de passe sont gardés secrets, nous avons tout au plus besoin d'essais 26 ^ (2n) pour réussir l'authentification.

Considérons maintenant un nouveau système d'authentification avec une seule entrée, c'est-à-dire un mot de passe gardé secret de longueur 2n . Les caractères autorisés sont insensibles à la casse, répartis de a à z. Ce système a également besoin d'essais 26 ^ (2n) pour être réussi.

Questions

Pourquoi n'utilisons-nous pas l'authentification à entrée unique?

Nous utilisons une authentification à entrée unique.Le nom d'utilisateur est pour _identification_, pas pour l'authentification.Problème différent.Vois-le de cette façon;pourquoi avez-vous, en tant que personne, un nom * et * une clé de votre maison?Pourquoi pas juste la clé?
C'est déjà fait avec les empreintes digitales et le scan des yeux.Le problème est qu'il doit être unique pour tous les utilisateurs.Demander à un utilisateur de saisir sa propre authentification unique produira des erreurs telles que «elle existe déjà».
@marcelm que la logique est imparfaite;votre nom n'est pas utilisé lors de l'accès à votre maison, à moins que vous n'ayez une serrure high-tech vissée que vous devez adresser verbalement lorsque vous insérez la clé pour accéder avec succès;si quelque chose c'est * est * un exemple d'authentification d'entrée unique (la maison ne se soucie pas de l'OMS a la clé, juste que la clé rentre dans la serrure).
@DoktorJ dans votre exemple, l'adresse postale est le nom d'utilisateur.Si vous avez juste la clé (le mot de passe) mais pas l'adresse (le nom d'utilisateur), vous pouvez vous promener dans la ville en essayant la clé dans différentes portes mais simplement parce que vous entrez (la clé fonctionne dans une serrure; le même mot de passe `hunter2`est utilisé par plusieurs comptes) ne signifie pas que vous êtes entré dans la * bonne * maison.
@drewbenn Mais peu importe dans quelle maison vous entrez.Vous prenez juste ce qui a de la valeur et partez.Si vous entrez un mot de passe et que le système vous indique que le mot de passe est pris, vous pouvez immédiatement vous connecter à ce compte et faire de mauvaises choses sans aucun intérêt pour le compte de qui il appartient.
@DoktorJ La dernière fois que j'ai perdu la clé de ma maison et que j'ai contacté une agence de location, j'avais besoin de m'identifier (de manière convaincante) avant qu'elle n'en émette une nouvelle.
@the_lotus vous devriez faire de votre commentaire une réponse
Le schéma suggéré par les OP fonctionne bien, je l'ai vu dans Tahoe LAFS.
"Dang,` abc123` est déjà pris. Fudge, `abc1234` aussi?! Ces gens ont de la chance d'avoir choisi les plus faciles avant nous autres ..."
Vous pouvez considérer le nom d'utilisateur comme une forme de sel.Cela n'a pas à être secret, mais vous voulez qu'ils soient uniques.En fait, il est tout à fait inutile (juste compte tenu de la sécurité) d'avoir des noms d'utilisateur et des sels uniques pour leurs mots de passe, s'il existe un mappage 1 à 1.En pratique, cela peut être utile si vous souhaitez autoriser la modification des noms d'utilisateur sans changer le sel.(et devoir enregistrer un nouveau hachage)
Voir aussi cette question précédente (en plus des doublons): http://security.stackexchange.com/questions/2384/why-do-we-authenticate-by-prompting-a-user-to-enter-both-username-et mot de passe
@drewbenn Je dirais que l'adresse est semblable à l'URL, mais toujours avec une authentification à une seule entrée.Je n'ai pas * besoin * de l'adresse pour essayer ma clé dans une porte donnée.De même, avec une authentification à entrée unique, vous n'utilisez toujours qu'un seul jeton, il s'agit simplement de savoir si vous utilisez ce jeton sur le bon site ou non.
Dix réponses:
S.L. Barth - Reinstate Monica
2016-11-02 13:08:16 UTC
view on stackexchange narkive permalink

Lorsque vous vous inscrivez à un service, vous avez de bonnes chances d'obtenir "Ce nom est déjà utilisé, choisissez-en un autre" - ou quelque chose à cet effet.

Dans le système que vous proposez, cela vous dire que le code d'accès est en cours d'utilisation - super, ouvrez un nouveau navigateur et connectez-vous avec ce code d'accès! Vous venez de pirater le compte de quelqu'un d'autre.

Vous pouvez trouver n'importe quel nombre de codes d'accès existants, simplement en essayant de changer le vôtre.

Et si vous oubliez votre code d'accès ? Cela peut être atténué si le système connaît votre adresse e-mail et peut vous envoyer un nouveau code d'accès, mais vous seriez alors proche d'une authentification à deux entrées; vous pouvez aussi bien utiliser votre adresse e-mail pour vous connecter.

Donc, le but de «nom d'utilisateur» n'est pas d'augmenter le nombre d'essais nécessaires pour casser l'authentification, n'est-ce pas?
@SingleFighter En effet, ce n'est pas le cas.Notez que cela repose sur l'hypothèse que la longueur du nom d'utilisateur / mot de passe / code d'accès est fixe.En pratique, un bon système autorise des mots de passe de longueur arbitraire.
`vous pourriez aussi bien utiliser votre e-mail pour vous connecter alors .` - eh bien, il y a une bonne chose à propos de celle appelée [auth sans mot de passe] (https://www.sitepoint.com/passwordless-authentication-works/).Pour les services rarement utilisés, cela peut être émulé même si cela vous oblige à avoir le mot de passe mais vous permet de restaurer / réinitialiser le mot de passe par e-mail - vous pouvez simplement configurer un long mot de passe aléatoire que vous pouvez utiliser une fois et oublier.La prochaine fois que vous devez vous connecter, demandez simplement au système de réinitialiser le mot de passe et entrez un nouveau mot de passe aléatoire.:)
@IvanKolmychek Intéressant!J'ai longtemps pensé que quelque chose comme ça devrait être possible.J'aurais besoin de temps pour vérifier si cette méthode est aussi sûre que je l'espère.En attendant, pensez à publier cette méthode comme réponse.
Des codes aléatoires attribués provoqueraient-ils facilement des collisions s'il y avait beaucoup de codes disponibles?Si vous avez une petite base d'utilisateurs et un espace de code énorme, je pense que vous pourriez limiter les tentatives d'atténuation du problème, et réémettre périodiquement de nouveaux codes aléatoires à tout le monde pourrait réduire le risque d'un problème à gérable.J'imagine que (nombre total de tentatives autorisées par s * s entre la réédition) / (Espace de code / nombre d'utilisateurs) est quelque chose comme une chance de se briser
@notstoreboughtdirt si ces codes n'étaient jamais copiés et collés ou ne seraient pas mémorisés, vous pourriez avoir une très faible chance de rupture.Par exemple, vous pouvez utiliser base64 (a-z, A-Z, 1-9, -, /) la plupart des endroits où vous auriez besoin d'un tel code, et un code base64 de 20 caractères a 1,33 x 10 ^ 36 possibilités.Si chaque grain de sable sur terre était une nouvelle terre et que vous comptiez tous les grains de sable sur toutes les nouvelles terres, cela n'atteindrait pas 10 ^ 36, donc très sûr.En supposant que vous le limitiez à 10 tentatives / s, pour un milliard d'utilisateurs, c'est 10 à 18 ans avant la première collision.Je dirais assez sûr.
Les codes générés aléatoirement @notstoreboughtdirt: finissent par être comme l'authentification par paire de clés SSH: personne ne peut se souvenir de leur "vrai mot de passe", ce n'est simplement pas humainement faisable, donc ils le transportent dans un fichier crypté et se souviennent simplement de la phrase de passe de cryptage.Cela présente beaucoup d'avantages par rapport à la connexion par mot de passe ordinaire, mais aussi des problèmes d'utilisabilité.
Je ne me suis pas vraiment préoccupé des mathématiques, mais je pensais à une plus petite échelle.Et si le système ne comptait que quelques milliers d'utilisateurs et limitait le nombre total de connexions à seulement 10 par seconde.Le dos d'une enveloppe suggère que je n'aurais peut-être besoin que de 10 chiffres si je réémis chaque année.10 chiffres pourraient ne pas être trop odieux à mémoriser pour quelque chose qui mérite d'être protégé.
"vous avez de bonnes chances d'obtenir" Ce nom est déjà utilisé, choisissez-en un autre "" - cela dépend vraiment de l'entropie minimale requise pour le jeton, il pourrait être défini de manière arbitraire suffisamment élevé pour que vous soyez plus susceptible de gagner à la loteriejackpot tous les jours pour le reste de votre vie,
Je ne pense pas que cela puisse résoudre le problème du `` code d'accès oublié '', mais que diriez-vous d'un système qui prend une partie de votre part et l'utilise comme une graine pour un générateur de nombres aléatoires, régénérant silencieusement des doublons dans le back-end &vous remettre un jeton d'accès (nom d'utilisateur + mot de passe)?Cela présente l'avantage de n'avoir besoin que d'un seul champ pour se connecter pour les utilisateurs, mais l'inconvénient de ne pas pouvoir sélectionner leurs propres informations d'identification.
@Bruno pourquoi se donner la peine de collecter une graine?Surtout compte tenu du fait que cela nuit vraiment à la sécurité du système plus qu'il n'en ajoute, car il y a peu de choses * moins * aléatoires que les entrées fournies par des personnes à qui on demande de fournir un nombre et qui ne s'en soucient pas vraiment.Utilisez un générateur de nombres aléatoires cryptographiquement sécurisé et vous êtes beaucoup plus en sécurité avec beaucoup moins de "Pourquoi me font-ils choisir un nombre aléatoire?"de vos utilisateurs.
@TheEnvironmentalist vous avez raison, je me concentrais trop sur la préservation du scénario d'inscription d'origine de la réponse consistant à fournir une entrée.Vous n'avez pas du tout besoin de collecter une graine dans ce modèle.J'ai trop joué à Minecraft ...
Toby Speight
2016-11-02 19:52:48 UTC
view on stackexchange narkive permalink

Le nom d'utilisateur est un identifiant , une étiquette qui indique quel utilisateur vous êtes et identifie les ressources qui vous appartiennent (ou qui font référence à vous).

Le mot de passe est un

em> authentificateur , un moyen de prouver que vous êtes autorisé à assumer cette identité d'utilisateur.

Les noms d'utilisateurs ne peuvent pas être secrets, car un système d'information a besoin de ces connaissances en clair pour étiqueter ressources et pour autoriser votre utilisation des ressources. Les mots de passe doivent être secrets, même pour le service et ses opérateurs - c'est pourquoi les mots de passe stockés sont hachés avec une fonction à sens unique.

Par "ressources" ci-dessus, je suis être délibérément inclusif. Pour une connexion utilisateur, il peut s'agir de fichiers et de processus; en tant qu'utilisateur de base de données, vous disposez de tables et d'autres objets de base de données; pour un site Web, il peut s'agir de vos publications et de vos points de réputation.

Spot sur.L'identité et l'authentification sont * des informations différentes *.
@jpmc26 mais ils ne doivent pas forcément l'être, d'où la question plutôt intéressante
@TheEnvironmentalist: Vous pouvez fusionner à peu près deux informations en une longue chaîne, puis utiliser la logique ailleurs pour compenser la différence.Dans ce cas, vous vous retrouverez probablement avec un identifiant d'enregistrement non partagé pour identifier l'utilisateur et le lier une fois que le long jeton d'authentification est entré.Ainsi, l'utilisateur aurait toujours une identité, mais vous ne l'avez pas explicitement demandée et espérez que son jeton d'authentification est unique pour que vous puissiez le trouver.Il est plus courant (et je dirais qu'il vaut mieux) de garder les problèmes d'identité et d'authentification séparés et explicites.
Gremlin
2016-11-02 19:50:19 UTC
view on stackexchange narkive permalink

Nous l'utilisons dans certains cas.

Un exemple est la fonctionnalité partager à l'aide d'un lien de documents Google. Le lien contient une clé d'accès ou un ID de document de 45 caractères alphanumériques. C'est assez long pour à la fois garantir l'unicité et rendre difficile le forçage brutal.

Ce n'est pas une authentification, c'est une autorisation.Google n'a pas besoin de savoir qui vous êtes pour autoriser via un jeton d'URL.
@bunyaCloven C'est les deux.Avec, par exemple, un lien de réinitialisation du mot de passe, le lien fait référence à la fois au compte et à l'autorisation d'effectuer une action donnée (modifier le mot de passe) sur ce compte.La suggestion d'Eoin de clés basées sur des liens est un excellent exemple, qui résout les problèmes d'unicité et de vulnérabilité aux attaques de dictionnaire en choisissant le «mot de passe» pour vous, et en rendant trop long à la force brute et trop aléatoire pour appliquer un dictionnaireattaque.
@TheEnvironmentalist bunyaCloven est correct.Il n'y a pas de confirmation de votre identité ici.Toute personne disposant du lien est supposée être autorisée;leur identité n'est jamais remise en cause.
@TheEnvironmentalist Ce n'est pas le cas.Un lien de réinitialisation du mot de passe est un jeton d'autorisation qui est envoyé à une boîte aux lettres authentifiée.
@bunyaCloven Différences philosophiques, je suppose.Si vous supposez que l'exigence de connaissance (possession si vous voulez) dudit lien est suffisante pour l'authentification, non pas directement via la connaissance du mot de passe mais par proxy, alors c'est l'authentification.Si vous choisissez de définir l'authentification un peu plus traditionnellement comme exigeant un défi qui ne peut être résolu que par l'esprit seul, protégé par le fait qu'elle n'a jamais été partagée par opposition au fait qu'elle n'a jamais été trébuchée comme dans le second cas, alors ce n'est pas le cas.Tout dépend de l'endroit où vous tracez votre ligne dans le sable.
@TheEnvironmentalist Votre définition traditionnelle est une définition très étroite de l'authentification.Il ignore l'existence de clés privées, de mots de passe à usage unique, etc. en tant que mécanismes d'authentification
L'authentification nécessite une exigence de connaissances, c'est vrai;cependant, l'intention des données définit si la possession est à des fins d'authentification ou d'autorisation.Par exemple, utiliser une clé publique pour envoyer des données chiffrées implique une autorisation: tout le monde peut envoyer de telles données;Cependant, le chiffrement avec une clé publique implique une authentification: personne d'autre que vous ne peut envoyer de telles données qui peuvent être chiffrées par votre clé publique vérifiée.
Les clés API sont un autre exemple d'authentification à entrée unique.Il existe un grand nombre d'outils différents dans lesquels vous générez une clé API pour un utilisateur, qui est ensuite utilisée seule pour l'identification et l'authentification pour accéder à cet outil.L'inconvénient, bien sûr, est que l'utilisateur final ne peut pas spécifier ce qu'est cette clé, elle doit être choisie par le serveur afin qu'elle puisse être unique et sécurisée.
TheEnvironmentalist
2016-11-02 19:55:47 UTC
view on stackexchange narkive permalink

Ce système d'authentification à une seule entrée serait intéressant, mais il présente quelques problèmes de sécurité:

Le principal obstacle est l'exigence d'unicité. Pour que différents utilisateurs puissent se connecter à leurs comptes respectifs, les informations de connexion (généralement nom d'utilisateur + mot de passe) doivent être uniques. En théorie, cela signifie que dans un système classique à double entrée, les noms d'utilisateur ne doivent pas nécessairement être uniques tant qu'aucun utilisateur ne partage le même nom d'utilisateur et mot de passe. Le problème est que dans un système à entrée unique, le seul identifiant disponible est le mot de passe unique, ce qui signifie que chaque utilisateur devrait avoir un mot de passe différent les uns des autres, ce qui introduit un certain nombre de vulnérabilités:

  1. Vous pouvez supposer que dans tout service suffisamment populaire, un certain nombre de mots de passe évidents sont utilisés par quelqu'un . En essayant simplement de vous connecter avec des mots de passe tels que "mot de passe", "12345" et "Beatles", vous pourriez probablement accéder à au moins quelques comptes.
  2. Comme mentionné par S.L. Barth, n'importe qui pouvait trouver des mots de passe existants simplement en essayant de changer leur mot de passe jusqu'à ce qu'ils rencontrent un message "mot de passe déjà utilisé". Étant donné que les mots de passe doivent être uniques, vous devez empêcher un utilisateur de choisir un mot de passe existant, révélant ainsi que le mot de passe est déjà utilisé.
  3. Attaques de dictionnaire: il s'agit essentiellement de la somme logique de points 1 et 2. Si vous créez un compte, puis demandez à un script d'essayer de modifier le mot de passe à l'aide d'un dictionnaire de mots de passe, en enregistrant chaque mot de passe "déjà utilisé" qu'il rencontre en cours de route, vous pouvez rapidement et facilement créer une liste de des milliers, voire des millions de mots de passe existants, c'est tout ce dont vous auriez besoin pour accéder à tous ces comptes.

Notez qu'une sécurité intéressante et que vous en tirez est que s'il serait très facile de pénétrer dans n'importe quel nombre de comptes aléatoires (comme décrit ci-dessus), il serait beaucoup plus difficile de pénétrer dans n'importe quel compte lors d'une attaque ciblée. Parce que les mots de passe devraient être uniques, vous vous retrouveriez avec des mots de passe plus complexes dans un système à une seule entrée que dans les systèmes à double entrée actuels, et il n'y aurait pas de nom d'utilisateur que vous pourriez utiliser pour cibler un utilisateur particulier, donc la seule façon si vous vous connectez à un compte cible, vous vous frayez un chemin brutalement dans tous les comptes jusqu'à ce que vous obteniez le compte que vous recherchez. De plus, il serait plus difficile de confirmer que le compte auquel vous êtes connecté est le compte que vous recherchez, car vous ne pouvez pas utiliser le nom d'utilisateur comme preuve d'identité. C'est un effet de sécurité vraiment intéressant, alors bravo là-bas.

J'ai vu une «authentification à entrée unique» qui traite le problème n ° 2 en demandant à l'ordinateur plutôt qu'à l'utilisateur de générer les dernières lettres du mot de passe.
Que se passe-t-il alors lorsque je change d’ordinateur?Vais-je perdre mon compte?
Serge Ballesta
2016-11-02 17:18:27 UTC
view on stackexchange narkive permalink

Le nom d'utilisateur est un identifiant et ne devrait jamais changer (*). Les meilleures pratiques de sécurité recommandent de changer le mot de passe régulièrement et chaque fois qu'il aurait pu être compromis.

Comme ces 2 parties ont une durée de vie différente, il est préférable de les garder séparées.

(*) En fait, il existe des cas d'utilisation qui nécessitent un changement de nom d'utilisateur, par exemple lorsqu'il y a une fusion entre deux entités et deux utilisateurs différents utilisent le même nom d'utilisateur. Mais la durée de vie d'un nom d'utilisateur devrait être beaucoup plus longue que celle d'un mot de passe

Je crois que la question posée ** pourquoi ** cela doit être le cas.Pourquoi le nom d'utilisateur ne devrait-il jamais changer?Pourquoi le système à entrée unique n'est-il pas viable?
@TheEnvironmentalist bien, la question impliquait également que le nom d'utilisateur fait explicitement partie de la sécurité en assimilant son utilisation à celle d'un mot de passe.La réponse dit que ce n'est pas vrai et que les deux choses doivent être séparées.C'est une réponse valable.
Malheureusement, les noms d'utilisateurs doivent souvent changer.C'est pourquoi un identifiant unique est souvent utilisé pour mapper le nom d'utilisateur aux propriétés.
@BrianKnoblauch: Je sais que les noms d'utilisateur peuvent changer, mais leur durée de vie devrait être beaucoup plus longue que celle d'un mot de passe.Quoi qu'il en soit, j'ai modifié ma réponse.
Ces 2 parties ont une durée de vie différente car elles sont séparées et se voient attribuer des rôles différents, et non l'inverse.
Les meilleures pratiques en matière de sécurité recommandent de changer le mot de passe uniquement s'il existe une possibilité qu'il soit compromis.Changer pour changer ne fait que diminuer la sécurité car les tracas liés au changement introduisent généralement de nouveaux vecteurs de fuite.
John McNamara
2016-11-02 23:56:44 UTC
view on stackexchange narkive permalink

Mode de mot de passe principalement

et dans le passé, cela aurait nécessité des exigences de stockage / traitement supplémentaires beaucoup moins chères maintenant.

Il n'y a pas de raison technique significative à cela

> Docs, etc., lors de la génération d'une URL de document partagée.

Ils l'utilisent simplement pour accéder à ce document, pas pour l'identification.

ie

Ils ne le font pas connaître votre identité (pas de nom de connexion)

Mais l'url authentifie (est valide dans leur base de données)

et elle aussi vous accorde automatiquement une autorisation (pour afficher ou modifier ce document)

Le système peut facilement gérer la modification / la perte de mots de passe, de "pseudonymes", d'adresses e-mail, etc.

Les gens sont TRÈS habitués à choisir leur propre beaucoup plus court et des mots de passe beaucoup moins sécurisés qui rendraient cette approche trop peu sûre pour être pratique

Les gens sont également très habitués à la méthode «login» + «password» et prendraient une formation importante pour comprendre et faire confiance à une alternative.

Je pense que c'est parce que les gens s'attendent à pouvoir changer le mot de passe tout en étant toujours reconnus comme le même utilisateur.
@Agent_L, ils peuvent changer le mot de passe.Soit alors qu'ils étaient déjà connectés à leur compte, soit via le formulaire habituel «j'ai oublié mon mot de passe», où ils entraient simplement leur e-mail et rien d'autre.La seule restriction est que le mot de passe / jeton / ce que vous voulez appeler doit être d'une entropie suffisamment élevée.La plupart des gens ne sont tout simplement pas disposés à faire cela.
Mon mal de ne pas être clair, je ne parlais que de votre dernière phrase.Je ne parle pas des documents Google, car vous vous y connectez d'abord avec un identifiant et un mot de passe pour générer le lien d'authentification.Je voulais dire une situation générale où la connexion et le mot de passe sont fusionnés en une seule chaîne, cela donne l'impression que vous ne pouvez pas changer le mot de passe mais conserver votre identité.
João Angelo
2016-11-03 18:55:55 UTC
view on stackexchange narkive permalink

Wikipédia a ce qui suit à propos de l'authentification:

Contrairement à l'identification qui fait référence à l'acte de déclarer ou d'indiquer autrement une réclamation prétendument attestant une personne ou l'identité d'une chose, l'authentification est le processus de confirmation de cette identité .

(je souligne)

Dans le monde réel, imaginez que vous alliez à la banque:

  1. Vous: Bonjour, je m'appelle John Doe et je voudrais ouvrir un compte.
  2. Greffier: Pouvez-vous me fournir une preuve de votre identité?
  3. Vous: (Fournit une carte d'identité ou un permis de conduire)

Sur le point un, vous Vous vous êtes identifié comme étant John Doe et au troisième point, vous avez prouvé cette identité d'une manière à laquelle la banque a confiance. Dans le monde réel, votre identité a généralement été décidée par vos parents il y a longtemps lorsqu'ils ont choisi votre nom.

Dans le monde en ligne, les sites utilisant le processus traditionnel d'enregistrement à deux entrées vous permettent de choisissez votre identité et aussi la façon dont vous prouvez cette identité .

Il est vrai que vous pourriez essayer de fusionner à la fois l ' identité et la preuve dans la même donnée réelle, mais est-ce là vraiment un avantage ? Le nom de l'utilisateur et une autre donnée à utiliser comme preuve sont déjà compris par tout le monde, car ils correspondent quelque peu à la vie réelle. De plus, cela rend également la mise en œuvre sous-jacente beaucoup plus simple, comme indiqué dans d'autres réponses et commentaires.

Il est également vrai que le fait d'être obligé de toujours créer une identité et une preuve dans chaque site en ligne sur lequel vous allez est un peu ennuyeux . En particulier, étant donné que la partie identité doit être unique sur ce site et que vous êtes un utilisateur tardif, ce qui signifie que toutes les identités intéressantes ont déjà été choisies.

Au départ, cela a été résolu en acceptant votre adresse e-mail comme identité , de cette façon, l'utilisateur n'a pas besoin d'y penser et l'unicité est toujours assurée.

Cependant, certains vont même plus loin et essaient de simplifier encore plus le processus en autorisant ce que l'on appelle l'authentification sans mot de passe. Ce qui est cool ici, c'est que vous n'avez pas besoin de créer une nouvelle identité ni même un nouveau mot de passe pour prouver l'identité.

Un exemple de ceci est la implémentation Auth0 de l'authentification sans mot de passe qui permet à un utilisateur de s'authentifier sur un site via un lien fourni via son adresse e-mail ou un code à usage unique fourni par SMS.

Les connexions sans mot de passe dans Auth0 permettent aux utilisateurs de se connecter sans avoir à se souvenir d'un mot de passe. Cela améliore l'expérience utilisateur , en particulier sur les applications mobiles, car les utilisateurs n'auront besoin que d'une adresse e-mail ou d'un numéro de téléphone pour s'inscrire à votre application.

Sans mot de passe, votre application n'aura pas besoin pour mettre en œuvre une procédure de réinitialisation du mot de passe et les utilisateurs évitent la pratique non sécurisée consistant à utiliser le même mot de passe à de nombreuses fins .

(je souligne) sub>

Du point de vue de l'utilisateur, c'est très simple à réaliser et du point de vue du site utilisant ce type d'authentification, il est toujours possible d'identifier les utilisateurs récurrents soit en faisant correspondre leur adresse e-mail ou leur numéro de téléphone.

Si vous y réfléchissez, cela simplifie simplement ce que de nombreux utilisateurs faisaient auparavant. J'admets, par exemple, que plusieurs fois que je voulais m'authentifier sur un nouveau site, j'utiliserais simplement mon adresse e-mail et un mot de passe aléatoire dont je ne me souviendrais jamais et dans l'éventualité où mon navigateur perdrait la session ou le mot de passe stocké, je le ferais réinitialisez simplement le mot de passe.

Divulgation : je travaille chez Auth0.

"Il est vrai que vous pourriez essayer de fusionner à la fois l'identité et la preuve dans la même donnée, mais y a-t-il vraiment un avantage?"C'est la question intéressante.C'est trivial à faire, nous avons de nombreuses raisons pour lesquelles les utilisateurs ne l'aimeraient pas, mais y a-t-il des avantages pratiques uniques?
À mon avis, si nous obligons l'utilisateur à connaître et à garder cette seule donnée secrète pour toujours, ce sont tous des inconvénients et aucun avantage.D'autant plus que cette seule donnée devrait être générée de manière aléatoire par l'application, car permettre à l'utilisateur de la sélectionner ne fonctionnerait tout simplement pas.
Rien dans le schéma n'implique «pour toujours».Le jeton peut facilement être modifié par l'utilisateur par e-mail / SMS, tout comme les procédures actuelles «J'ai perdu mon mot de passe».
Si vous apportez des e-mails et des SMS au mix, vous avez déjà un autre élément en tant qu'identité d'utilisateur, même si l'utilisateur n'a pas à le saisir;c'est la chose sans mot de passe que j'ai mentionnée.Si vous utilisez vraiment une seule pièce pour l'identité et l'authentification, l'utilisateur a toute la responsabilité sur ses épaules.Vous pouvez permettre de le faire pivoter, mais l'utilisateur doit toujours connaître l'actuel ... pour toujours ou jusqu'à ce qu'il se lasse du site.
paparazzo
2016-11-02 23:27:36 UTC
view on stackexchange narkive permalink

L'authentification basée sur un certificat PKI est un peu comme un ID utilisateur et un mot de passe en un.

signez la clé publique

PKI

kubanczyk
2016-11-03 19:54:35 UTC
view on stackexchange narkive permalink

Ce n'est pas vraiment possible avec les mots de passe. C'est faisable avec n'importe quel schéma où la clé / secret / identifiant / jeton / tout ce qui est stocké sur l'ordinateur d'un client et non dans le cerveau humain.

Alambiqué? Retournez exactement la même chose: si vous avez une clé / secret / identifiant / jeton / quoi que ce soit suffisamment aléatoire et suffisamment compliqué, cela n'a même pas de sens de demander un nom d'utilisateur à un humain , un pseudo, un GUID, toute autre identification pour une authentification quotidienne. Le logiciel leur dira tout cela.

Si votre logiciel n'accepte pas les comptes suckpuppet , c'est le cas. (Certains sont les bienvenus. Par exemple, ssh est satisfait de "sockpuppets", différents comptes utilisés par un humain; il demande le nom du compte même si vous fournissez une clé RSA. Les clés privées Sockpuppet RSA placées les unes à côté des autres sur le même appareil seraient complication inutile, pas plus de sécurité.) Demander un pseudo est le moyen le plus simple de prendre en charge les sockpuppets.

La clé "suffisamment compliquée" implique que nous ne nous attendons jamais à une collision . Cela implique que nous ne nous attendons jamais à avoir besoin de le sel . Cela implique qu'un humain moyen ne s'en souvient pas . Et cela implique que nous n'avons pas besoin des bits supplémentaires de complexité de la mémoire humaine du nom d'utilisateur.

Réinitialisation du compte

Le seul problème est la réinitialisation après avoir perdu la clé ou après avoir été compromise. Cela signifie un appareil perdu ou compromis. Ici, nous devons utiliser une authentification plus sécurisée (également peut-être plus gênante). Avez-vous besoin que l'utilisateur se souvienne de son surnom ici? Si vous ne demandez à l'utilisateur que le nom de famille de jeune fille d'une mère, la collision est presque certaine. Cela ne signifie pas que vous avez besoin d'un surnom, cela signifie que l'authentification du nom de famille est trop faible! Toutes les attaques concerneraient les noms de jeune fille des mères pauvres. Mais vous devrez probablement demander un identifiant global en dehors de l'application, très probablement un numéro de mobile pour la vérification par SMS (cela exclut la menace d'un attaquant contrôlant votre mobile).

Un autre schéma est e -Vérification de la messagerie, nécessitant également un identifiant global en dehors de l'application (cela exclut la menace d'un attaquant contrôlant tout votre appareil, donc c'est vraiment faible dans ce paramètre).

Observez que, dans la plupart des cas les humains n'ont pas besoin de se souvenir de leur identifiant global, mais parfois ils doivent aller le vérifier et le saisir manuellement.

Le schéma alternatif est la vérification papier pré-partagée: demandez à l'utilisateur un mot de passe à usage unique numéro 04 de la carte papier qui leur a été envoyée lors de l'ouverture d'un compte. C'est un cas où je trouve pratique d'augmenter avec une authentification "trivial secret", de sorte que quasiment toute personne qui obtient une lettre ne réinitialise pas l'accès juste pour le plaisir ou par pure curiosité. Cela pourrait être "quel code postal avons-nous utilisé pour envoyer ce papier?", Cela pourrait être le nom de jeune fille redouté, mais cela pourrait aussi bien utiliser un surnom.

Mots de passe mémorisés par les humains

Le mot de passe, ou un court texte secret dont un humain pourrait se souvenir, est un schéma inférieur qui se fait attendre depuis longtemps. Les coûts inutiles associés incluent:

  • Page "Veuillez vous connecter"
  • "Ce pseudo est occupé" problème
  • "ce mot de passe est trop faible" problème
  • besoin d'un sel côté serveur (mise à niveau du secret faible en un secret vraiment aléatoire pour contrer les tables arc-en-ciel)
  • KeePass et bases de données similaires - solution trop compliquée à un problème simple consistant à faire fonctionner un schéma approprié sur d'anciennes invites de connexion

Tout cela disparaît avec le schéma de clé stocké par machine (symétrique ou asymétrique ce dernier suggéré).

Mirinth
2016-11-03 02:54:00 UTC
view on stackexchange narkive permalink

Nous ne l'utilisons pas parce que ce n'est pas pratique.

Imaginez que vous avez une énorme base de données d'utilisateurs, disons 8 milliards, parce que tout le monde sur terre utilise votre site Web. Quelqu'un vient de vous remettre sa clé d'entrée unique. Comment savoir s'ils sont dans la base de données?

Vous ne pouvez pas simplement stocker les clés et les rechercher car ce sont essentiellement des mots de passe en texte brut, et stocker les mots de passe en texte brut est une mauvaise chose. Vous ne pouvez pas le hacher quelques centaines de fois avec md5 non plus parce que vous seriez vulnérable aux tables arc-en-ciel. Vous devez utiliser un algorithme de hachage de mot de passe approprié comme bcrypt avec un gros sel aléatoire.

Vous avez maintenant une clé et une grande table de sels, et vous devez comprendre lequel va avec cette clé. Mais si vous pouviez rechercher le sel, vous auriez pu simplement rechercher la clé hachée en premier lieu! Vous êtes bloqué.

Votre seul choix est de hacher la clé avec les 8 milliards de sels, puis de rechercher la base de données 8 milliards de fois (une fois pour chaque clé). Beaucoup de gens suggèrent que vous définissiez le hachage pour prendre environ 1/10 de seconde. Imaginez: 8 milliards de hachages à 1/10 de seconde chacun prendraient 25 ans pour se connecter.

À moins que vos utilisateurs ne soient particulièrement patients, vous aurez besoin d'un grand nombre d'ordinateurs pour calculer tous ces hachages en parallèle, ce qui coûte beaucoup d'argent, que vos clients devront payer, ce qui rend la concurrence plus attractive. Sinon, vous devrez réduire le facteur de travail afin que les hachages soient faciles à calculer pour vous (et, par extension, pour les attaquants). Ou peut-être développer du matériel spécialisé qui a le même effet que de réduire le facteur de travail puisque vous pouvez parier que les attaquants l'achèteront aussi.

Tout cela est commodément évité en demandant à l'utilisateur de fournir un nom à la place. Le nom n'est pas secret, il peut donc être stocké sous forme de texte brut dans la base de données. Ensuite, la base de données peut trier ses tables par nom afin que le serveur puisse rechercher efficacement le sel associé au mot de passe de l'utilisateur.

C'est pourquoi nous aurons probablement toujours des noms d'utilisateur sous une forme ou une autre: nous avons besoin d'une clé de recherche pour rendre le processus de connexion efficace, et les demandes de sel et de hachage des mots de passe font de tout ce qui ressemble à un mot de passe un mauvais candidat pour la tâche.

C'est sûrement la réponse la plus pratique?Un système sensé ne stockera pas les mots de passe en texte brut ou simplement hachés.Il les stockerait comme hachés ** avec un sel **.Le nom d'utilisateur indique au système le sel à utiliser lors de la vérification du mot de passe.Sans cela, vous devrez utiliser tous les sels possibles contre le mot de passe saisi.
@Nick, ce n'est pas la seule façon dont les mots de passe sont salés, et IIRC pas l'approche Unix habituelle avec le fichier passwd traditionnel (ou, de manière équivalente, le fichier shadow passwd).Là, le sel est aléatoire et stocké comme les premiers caractères du mot de passe crypté.Il n'est donc pas nécessaire que le sel soit dérivé de l'identité de l'utilisateur.
@Mirinth, Je pense qu'il y a un défaut dans votre raisonnement.Si l'ID utilisateur fait partie du mot de passe, alors il devient * de facto * un sel pour le mot de passe.Ainsi, au lieu de tables arc-en-ciel pour les combinaisons sel + mot de passe, un attaquant aurait besoin de tables arc-en-ciel pour les combinaisons nom d'utilisateur + mot de passe.
Adressage * "nous avons besoin d'une clé de recherche pour rendre le processus de connexion efficace" *, c'est le processus qui pourrait encore être efficace.Les choses qui pourraient être particulièrement problématiques sont plus susceptibles d'être des actions de l'administrateur ou de l'opérateur - comment demanderiez-vous une réinitialisation de mot de passe, sans un identifiant que vous pourriez divulguer?(Notez que * "voici une liste des adresses e-mail que j'aurais pu utiliser lors de l'inscription" * n'est pas vraiment une réponse à cela, car vous avez ensuite introduit un équivalent de nom d'utilisateur dans la base de données).
** Salt ** est un texte aléatoire concaténé avec le mot de passe fourni par l'homme (lire: le mot de passe faible et faible est amélioré en un mot de passe aléatoire).Si le mot de passe est généré par ordinateur et entièrement aléatoire, il contient déjà tout le sel nécessaire.
8 milliards de lignes ne sont plus un énorme db: -]
@Toby: Uniquement si l'ID utilisateur est aléatoire.Les utilisateurs n'aiment pas se souvenir de choses aléatoires, vous pouvez donc vous attendre à ce qu'ils l'écrivent quelque part (et le laissent dans un endroit facile à voler) ou utilisent un gestionnaire de mots de passe qui ne se soucie pas du nombre de champs à remplir.
@TobySpeight `Il n'est donc pas nécessaire que le sel soit dérivé de l'identité de l'utilisateur` - Mais le sel est trouvé attaché au mot de passe ** haché **, sur l'enregistrement de cet utilisateur, une fois que nous savons qui est l'utilisateur.Le sel n'est pas fourni par l'utilisateur.Lorsque je tape "espadon" comme mot de passe, vous ne savez pas ce qu'est le sel.Maintenant, pour hacher cela * avec un sel *, j'ai besoin de savoir quel sel.Votre argument est à l'envers - sans savoir quel utilisateur je ne sais pas quel sel - et donc connaître l'utilisateur * est * important.
@Toby: Pourriez-vous expliquer comment les recherches peuvent encore être efficaces?S'il existe un moyen de rechercher le sel sans stocker le mot de passe non haché, je serais intéressé à le savoir.
«Il n'est donc pas nécessaire que le sel soit dérivé de l'identité de l'utilisateur» - vous ne le dérivez pas, ce serait trop facile.Le sel est généré de manière aléatoire et stocké dans le cadre de l'identité de l'utilisateur.Nous avons besoin de savoir quel utilisateur pour savoir quel sel aléatoire utiliser, nous sommes donc en mesure d'authentifier le mot de passe fourni.
@Minrith - si vous avez installé `mkpasswd`, vous pouvez essayer ceci par vous-même:` mkpasswd -s <<< password` utilisera un sel aléatoire à chaque fois, et vous obtiendrez un hachage différent.Mais spécifiez le hachage, par exemple`mkpasswd -s -S 00 <<< password` et vous obtiendrez toujours` 00xQPHYlVDIw6` (notez le `00` au début).C'est ce qui est stocké dans la base de données des utilisateurs.Lorsque vous vous connectez, votre mot de passe haché est recherché (en utilisant votre nom d'utilisateur ou votre identifiant), et les deux premiers caractères du mot de passe haché de la base de données sont utilisés comme sel lors du hachage du mot de passe avec lequel vous vous connectez.
Si c'est trop restreint pour un commentaire, posez-le sous forme de question (ou indiquez-moi une question existante) et je l'écrirai comme réponse.


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