web-dev-qa-db-fra.com

Est-ce une erreur d'utiliser un mot de passe qui a déjà été utilisé (par quiconque)?

Il y a quelques mois, kutschkem a répondu à une question sur HIBP avec ceci :

Supposons que chaque personne sur terre ait utilisé jusqu'à 1000 mots de passe jusqu'à présent. Cela fait environ 10 billions de mots de passe, ce qui est ~ 243 si je ne me trompe pas. Choisir un mot de passe existant au hasard est donc à peu près aussi bon qu'un mot de passe de caractère sensible à la casse de 8 à 9 caractères vraiment aléatoire. Pas très bien. Voir cette réponse .

Cela signifie essentiellement que, en théorie, non seulement on ne doit pas réutiliser un mot de passe, on ne doit pas réutiliser un mot de passe qui a été utilisé par qui que ce soit. Les mots de passe qui ont été utilisés auparavant sont fondamentalement une grosse attaque de dictionnaire en attente de se produire.

J'ai été rappelé à nouveau par la discussion entre Mike Ounsworth et Conor Mancone dans les commentaires sur cette réponse à propos de la mise sur liste noire du haut [~ # ~] n [~ # ~] mots de passe par rapport à l'ensemble de la base de données HIBP.

Les mathématiques de Kutschkem sont-elles correctes? Est-ce que cela rend la conclusion correcte?

Le calcul est peut-être juste. On pourrait affiner et compliquer autant qu'on le voudrait, mais cela n'ajoute pas vraiment au point. Je vais donc laisser ça.

En outre, dans la pratique, il est plus facile - et peut-être plus rapide - de rechercher un mot de passe de caractère aléatoire avec une longueur fixe que de vérifier des mots de passe uniques dans une liste. Une liste de mots de passe avec 243 les mots de passe avec une longueur moyenne de mot de passe de 8 caractères seraient d'environ 64 TB en taille, si mon calcul est correct. Cela devrait être stocké quelque part à proximité du processeur pour être lu avec le même vitesse que le processeur calcule les hachages.

La conclusion est cependant pas juste. La question n'est pas de savoir si un mot de passe a déjà été utilisé, mais si le mot de passe a déjà été inclus dans une violation.

Si les mots de passe violés ont ensuite été rendus publics, ils sont désormais disponibles sur Internet. Les mots de passe ne sont désormais plus des mots de passe qui ont été utilisés, mais un très petit sous-ensemble d'entre eux. Et pour aggraver les choses, ce sous-ensemble est utilisé dans les listes de mots par de nombreuses personnes à travers le monde pour vérifier si elles ont été réutilisées. Ainsi, la chance que quelqu'un vérifie un hachage par rapport à ce mot de passe est beaucoup plus élevée que la chance qu'il vérifie un hachage par rapport à un mot de passe inconnu, même s'il a été utilisé quelque part.

Je n'utiliserais donc pas un mot de passe inclus dans la base de données HIBP, simplement parce que ces mots de passe ont plus de chances d'être inclus dans les listes de mots.

32
Martin Weil

Mike Ounsworth ici (auteur du fil auquel vous faites référence)

C'est une excellente excuse pour faire un peu de calcul de fond! Le facteur à considérer ici est que lorsque vous obtenez des nombres comme 243, vous devez commencer à prendre en compte le nombre de disques durs, de processeurs et d'électricité nécessaires pour stocker et utiliser ces données.

Pour rendre les mathématiques faciles, disons que chacun de ces 243 le mot de passe est stocké sous forme de hachage SHA-1 (comme c'est le cas avec la base de données HIBP) . Chaque valeur SHA-1 est de 160 bits ou 20 octets. 243 * 20 octets = 176 téraoctets. Plus grand que mon ordinateur portable, mais changez pour un service cloud.

En allant dans l'autre sens, imaginez que vous avez une base de données des 243 mots de passe en clair. Vous mettez la main sur le hachage du mot de passe d'un administrateur et vous souhaitez le forcer brutalement contre votre base de données. Prenons le cas le plus simple et le moins sûr; c'est un hachage SHA-256 non salé. C'est le problème que les plates-formes minières Bitcoin ont été construites pour bébé! Prenons ce mineur Bitcoin comme référence approximative: 3000 USD, 50TH/s (téra-hachage par seconde), et consomme 1975 W.

Selon mes calculs hâtifs, l'une de ces unités prendrait 2^43 / (50,000,000,000,000 / s) = 0.2s pour essayer tous les mots de passe, en supposant qu'une base de données puisse lui fournir 176 TB de données aussi rapidement).

En réalité, les mots de passe sont (enfin, devraient l'être) stockés avec PBKDF2 ou Argon2 salés. Cela change considérablement le jeu car ces fonctions de hachage sont destinées à empêcher ce type d'attaque. Ces fonctions de hachage peuvent être réglées aussi lentement que vous le souhaitez au moment où vous stockez le mot de passe comme hachage. Supposons que vous le régliez à ~ 0,1 s par hachage. Maintenant, tout à coup, vous regardez des chiffres comme "des milliers de siècles" et "la consommation d'énergie de la planète".


TL; DR: c'est une excellente question à poser!

La réponse est que si vous choisissez un mot de passe dont vous vous souvenez et que vous pourriez entrer en collision avec quelqu'un d'autre sur Internet, votre choix de mot de passe est moins important que le site que vous lui donnez pour le stocker en toute sécurité.

À mon humble avis, en choisissant un mot de passe, vous n'essayez pas d'empêcher un attaquant suffisamment dédié de le déchiffrer; au lieu de cela, vous essayez de rendre les choses assez difficiles pour qu'ils poursuivent une cible plus douce. "Je n'ai pas besoin de dépasser un ours, j'ai juste besoin de dépasser mon ami" .

Bien sûr, si vous utilisez un gestionnaire de mots de passe avec un mot de passe de 32 caractères complètement aléatoire, vous entrez dans le domaine de la force cryptographique de "l'âge de l'univers" et de la "puissance de sortie d'une grande étoile". Alors fais ça!

23
Mike Ounsworth

Je vois quelques erreurs logiques avec cette déclaration - tout d'abord, comment le sauriez-vous jamais?
Si Joe Schmoe a utilisé un mot de passe spécifique en 2007 - 2009 pour son PC Windows, et qu'il n'a jamais été piraté, et que la machine est mise à la poubelle et brûlée, il n'y aurait aucun enregistrement de celui-ci nulle part.
Par conséquent, à moins qu'un mot de passe n'ait été piraté ou publié d'une autre manière, vous ne pouvez pas le savoir et ne pouvez donc pas éviter de le réutiliser.

En dehors de cela, sur les 2 ^ 43 mots de passe estimés jamais utilisés, probablement 2 ^ 42,9 sont des doublons, et la liste tient sur un seul disque dur.

11
Aganju

Un mot de passe alphanumérique à casse mixte pour des longueurs comprises entre 1 et 9 (inclus) a un espace de clé de 13 759 005 997 841 642, soit entre 253 et 254.

Le calcul est une approximation décente, mais pas une supposition raisonnable de la serviette.

Cependant, ce n'est pas parce que les calculs sont faux que cette conclusion n'est pas valide.

Les humains sont mauvais aux mots de passe. Nous les mémorisons, les réutilisons et les générons à partir de mots faciles à retenir.

Ainsi, une force brute naïve de mots de passe générera de nombreuses possibilités que les gens n'ont jamais mémorisées, n'ont jamais réutilisées et ne sont pas similaires aux mots dans un langage humain.

L'utilisation d'un dictionnaire de mots de passe précédemment divulgués est probablement le moyen le plus rapide de deviner les mots de passe, car vous savez que quelqu'un, quelque part, a déjà utilisé ce mot de passe auparavant. Les humains étant humains, il est plus probable que ce mot de passe sera utilisé à nouveau qu'il est probable que toute valeur aléatoire corresponde à un mot de passe.

Pour cette raison, mon opinion ferme est que c'est une erreur d'utiliser un mot de passe qui n'était pas généré de façon aléatoire, mais je suis d'accord avec le sentiment que c'est une erreur de utilisez un mot de passe que quiconque a déjà utilisé, quelle que soit la façon dont il a été généré.

4
Ghedipunk

Les mathématiques de Kutschkem sont-elles correctes?

Ce que kutschkem semble dire, c'est:

  1. Si environ 7⋅109 les gens ont choisi 1000 mots de passe chacun, il y aurait environ 243 mots de passe utilisés.

    Cela semble être une approximation raisonnable: log2(1000⋅7⋅109) ≈ 42,7; arrondissez à 43. (Je n'évalue pas la question empirique du nombre de mots de passe que les gens ont choisis - je vérifie seulement la multiplication!)

  2. Il y a environ 243 Mots de passe à 8 caractères.

    Ceci est une estimation légèrement faible: si nous comptons uniquement les mots de passe alphabétiques US-ASCII, avec des distinctions de casse ("mot de passe de caractère sensible à la casse de 8 à 9 caractères vraiment aléatoire"), il y a 2 à 26 caractères possibles et2[(2⋅26)9] ≈ 45,6; arrondissez-le à 43.

Mais si tout le monde a choisi des mots de passe alphabétiques à 8 caractères uniformément au hasard comme celui-ci, il est essentiellement garanti qu'ils entreraient en collision à un moment donné!

Supposons que nous choisissions les mots de passe de manière uniforme et aléatoire dans un espace de k possibilités. S'il y a n mots de passe dans le monde, la probabilité d'une collision par le paradoxe d'anniversaire est au plus n 2/ k . Lorsque k et n sont identiques, cette limite ne signifie pas quoi que ce soit, mais la probabilité est extrêmement proche de 1.

Mais supposons que tous aient choisi nos 1000 mots de passe chacun indépendamment et uniformément au hasard parmi 2128 possibilités: par exemple, des phrases de 10 mots avec une liste de 7776 mots ou des chaînes graphiques US-ASCII de 20 caractères. Alors n = 243 et k = 2128, donc la probabilité d'une collision entre deux des mots de passe choisis par les sept milliards de personnes est au plus n 2/ k = (243)2/ 2128= 286−128= 1/242- moins d'un sur mille milliards.

Je recommande que si vous voulez la sécurité par mot de passe vous devriez laisser un ordinateur choisir un mot de passe uniformément pour vous au hasard parmi plus de 2128 possibilités. (Pour les services qui utilisent des hachages de mot de passe non salés, peut-être doubler la longueur pour atténuer les attaques multi-cibles.)

Est-ce que cela rend la conclusion correcte?

La conclusion - il ne faut pas réutiliser un mot de passe utilisé par quiconque - semble prendre comme prémisse que mon objectif en tant qu'utilisateur est d'empêcher quiconque forme devinant le mot de passe. Peut-être qu'en tant qu'utilisateur, je me fiche de savoir si quelqu'un peut deviner mon mot de passe et il est plus important que je m'en souvienne. On peut créer des comptes jetables tout le temps - voir, par exemple , BugMeNot - pour renverser la surveillance de masse basée sur la publicité qui repose sur suivi des utilisateurs par connexion pour des publicités de plus grande valeur.

1

Je pense que cela dépend de la façon dont les mots de passe sont traités sur le système ciblé.

Pour un système qui utilise les meilleures pratiques de salage et de hachage, les listes de mots de passe ne sont utiles que dans une attaque par force brute. Un attaquant devrait compiler une recherche de hachage pour chaque compte, en utilisant son sel spécifique. Il s'agit en fait d'une attaque par force brute contre le fichier de mot de passe (ou la table); avec le hachage cryptographiquement sécurisé, c'est impossible sur un grand espace de mot de passe (le hachage de chaque mot de passe prend un temps non trivial). Un attaquant pourrait prioriser les mots de passe connus avant toutes les autres possibilités, mais c'est toujours un grand espace.

Pour un système qui utilise moins que les meilleures pratiques, cela dépendrait des failles de sécurité spécifiques quant à la manière dont une liste de mots de passe utilisés connus pourrait accélérer une attaque.

Comme vous ne pouvez pas être certain des mesures en place sur un système donné, il peut être prudent d'éviter les mots de passe connus, mais vous ne donnez pas nécessairement une porte ouverte à un pirate en utilisant un mot de passe obscur qui a été utilisé. par quelqu'un d'autre à un moment donné.

0
Zenilogix

Je ne pense pas que des mathématiques soient nécessaires autres que la théorie des ensembles. Le but d'un mot de passe est d'agir comme une méthode d'authentification, vous êtes ce que vous dites être parce que vous connaissez le secret. Idéalement, ce "secret" devrait être aléatoire pour empêcher les attaques par force brute. Autrement dit, les attaques contre la plate-forme à laquelle les informations d'identification sont destinées. Le forçage brutal est un dernier recours car il n'est pas efficace, vous essayez littéralement aveuglément toutes les permutations possibles pour ce "secret". Ici, vous avez trois ensembles:

  1. L'ensemble de toutes les permutations possibles.
  2. Le sous-ensemble de # 1, l'ensemble de toutes les permutations possibles utilisées par tout le monde, jamais, connu ou non.
  3. Le sous-ensemble de # 2, l'ensemble de toutes les permutations possibles qui sont connues (violations).

Le numéro 3 n'est utile que pour réduire l'attaque car son nombre de permutations est inférieur à # 2 et certainement inférieur à # 1. Logiquement, on peut supposer que # 2 n'est pas réalisable simplement par le fait que personne n'a une collection de tous les mots de passe utilisés. Cependant, le point important, je pense, est que le numéro 2 ne serait pas très utile en soi. L'idée est de réduire votre attaque pour augmenter son efficacité. À moins que la cible ne soit une cible de grande valeur, le n ° 2 est probablement déjà trop grand pour être utile pour couper l'attaque. Une attaque par dictionnaire, utilisant des termes de dictionnaire réels ou simplement des variantes de mot de passe courantes, est utile en grande partie parce que l'espace de permutation est beaucoup plus petit qu'une force brute exhaustive. # 2 augmente cet espace au point d'être impossible pour l'attaquant autant que pour l'utilisateur.

Ironiquement, je dirais que si le # 2 était réellement libéré par un peu de magie, éviter toute permutation dans cette liste pourrait le rendre plus vulnérable, car vous réduisez l'espace de permutation potentiel qu'un attaquant devrait couvrir, pour la même longueur de mot de passe .

Un attaquant, si # 2 était disponible, essaierait très probablement de ne l'utiliser que comme outil pour effectuer une meilleure attaque par force brute en créant un dictionnaire à partir des mots de passe les plus fréquents de cet ensemble.

Cela dit, il convient de noter que l'intégralité de la base de données HIBP représente toujours un sous-ensemble relativement petit de toutes les permutations. Ainsi, il est toujours efficace de l'utiliser en entier comme attaque par dictionnaire. Un attaquant peut toujours couper à la fréquence la plus élevée s'il veut plus d'efficacité, mais ce ne serait pas une exigence, contrairement à # 2.

0
Jarrod Christman