J'ai généré récemment un mot de passe pour un nouveau compte et les trois premiers caractères étaient "aa1".
Après avoir épuisé toutes les autres attaques, un pirate commencerait à forcer brutalement. En supposant qu'ils partent de "a", mon mot de passe "aa1" serait fissuré plus rapidement que, disons, "ba1", et cela plus rapidement que, disons, "za1".
Ce mot de passe était très long donc cette question est plus théorique que pratique. (À moins que la longueur des mots de passe ne soit limitée, bien sûr ...) Mes hypothèses sur le forçage brut et les mots de passe sont-elles exactes?
Il semblerait que cela dépende de la façon dont l'attaquant va renforcer brutalement votre mot de passe. Cependant, mon avis est qu'en fin de compte, cela n'a pas d'importance.
Un attaquant sérieux ne démarrera jamais depuis le début dans l'ordre alphanumérique, de aaaaaaaa
à 99999999
, à moins qu'ils ne sachent qu'ils peuvent le faire dans un délai raisonnable. Si cela va leur prendre mille ans, pourquoi devraient-ils utiliser cette méthode, sachant qu'ils devront nécessairement s'arrêter, disons, cccccccc
? Mais si l'attaquant sait qu'il peut essayer toutes les possibilités dans un délai raisonnable, peu importe que votre mot de passe soit parmi les premières combinaisons ou parmi les dernières, car à la fin il le trouvera quand même (dans un délai raisonnable) ).
La plupart des mots de passe sont encore faibles (par exemple, le nom de votre chien, plus peut-être votre date de naissance, etc.) et les attaquants n'aiment pas perdre trop de temps, encore moins des années pour déchiffrer les mots de passe. Ainsi, les attaquants utilisent normalement des dictionnaires et des modèles. Ils essaieront d'abord des mots de passe comme: pass123
, 123pass
, john90
, john91
, John92
, JOHN93
, 123456
, l1nux4dm1n
, etc. Si chaque tentative de dictionnaires et de modèles échoue, ils peuvent continuer et supposer que le mot de passe semble vraiment aléatoire. Combien de temps faut-il pour essayer tous les mots de passe possibles? Si cela peut être fait dans un délai raisonnable, ils pourraient tous les essayer (par exemple de aaaaaaaa
à 99999999
). Sinon, si l'attaquant suppose qu'il ne pourra jamais les essayer tous, il pourrait essayer de forcer le mot de passe avec quelques suppositions aléatoires (chaînes aléatoires, non ordonnées): 12hrisn589sjlf
, 9f2jcvew85hdye
, otnwc739vhe82b
, etc. Si l'attaquant a de la chance, il pourrait trouver le mot de passe, tôt ou tard. Cependant, si le mot de passe est trop fort, de sorte qu'il leur faudrait trop d'années pour le deviner, il vaut mieux abandonner ou penser à une attaque alternative (hameçonnage, surf sur l'épaule, enregistreurs de frappe, etc.)
L'entropie est vraiment la plus grande préoccupation, et l'entropie est déterminée par la quantité d'aléatoire dans votre processus de génération de mot de passe.
Prenons un mot de passe de 18 caractères comme exemple. Nous examinerons uniquement les caractères alphanumériques (62 caractères possibles). Cela donne:
log2(62**18) = 107
bits d'entropie
Si vous décidez de toujours convertir les 3 premiers caractères en Z pour rendre la force brute plus difficile, vous avez effectivement supprimé 3 caractères aléatoires de votre mot de passe, vous laissant avec:
log2(62**15) = 89
bits d'entropie
Ce qui est environ un facteur 1 000 000 plus faible. Bien sûr, les deux sont toujours absolument et complètement impossibles à forcer, donc si quelqu'un essaie de forcer votre mot de passe par brute, je ne m'inquiéterais pas.
Cependant, il convient de souligner à quel point il est impossible de forcer un tel mot de passe par force brute (juste au cas où mes liens ne vous auraient pas convaincu). Un sommet de la ligne de hachage MD5 peut essayer 200 milliards de hachages par seconde. C'est extrêmement rapide (c'est pourquoi MD5 n'est pas censé être utilisé pour les mots de passe). Même votre mot de passe plus faible (lorsque vous avez remplacé les trois premiers caractères par z
) a 7,6e26 combinaisons possibles. À 200 milliards de hachages par seconde, cela prendra seulement 120 [~ # ~] millions [~ # ~] ans pour essayer toutes les possibilités de mot de passe si le mot de passe a été haché avec MD5. Je ne pense pas que vous ayez à vous inquiéter.
aa
Alors, est-il préférable de commencer avec des caractères "supérieurs" pour rendre plus difficile pour quelqu'un de forcer brutalement votre mot de passe? Peut-être peut-être pas. Si un attaquant arrive au début de l'alphabet, alors, le vôtre sera craqué "plus vite" (mais toujours pas dans cette vie). Cependant, il n'y a aucune garantie que quelqu'un tentant une force brutale fonctionnerait dans cet ordre particulier. Par conséquent, il est impossible de deviner si un mot de passe commençant par aa
peut être plus craquable. Encore une fois cependant, si vous utilisez un mot de passe aléatoire long, il n'y a effectivement aucune chance qu'il soit piraté. Je ne m'en inquiéterais donc pas. En ce qui concerne les mots de passe la longueur est reine .
Je pense que le principe de Kerchkhoff est très applicable ici. Il s'agit, en un sens, d'un "principe" fondamental de la sécurité. L'idée derrière le principe de Kerchkhoff est que la sécurité d'un système doit être basée sur un, et un seul, secret/clé. L'idée est que plus il faut de "pièces" pour assurer la sécurité d'un système, plus il est probable que certaines pièces fuiront et qu'une brèche de sécurité se produira. Lorsque nous parlons de mots de passe, il est assez clair quelle est la "clé": le mot de passe. Plus précisément, une longue et aléatoire. Comme discuté ci-dessus, c'est vraiment tout ce dont vous avez besoin. En ajoutant d'autres "règles" au-dessus de votre mot de passe aléatoire, vous donnez simplement des indices potentiels pour permettre à un attaquant qui vous cible de deviner votre mot de passe.
Après avoir épuisé toutes les autres attaques, un pirate commencerait à forcer brutalement.
Dit qui?
Il n'y a que deux scénarios dans lesquels le forçage brutal est en fait une chose. L'un se produit lorsque l'attaquant dispose du hachage de mot de passe et l'autre lorsqu'il contrôle le logiciel contrôlant la connexion, car tout logiciel non totalement défectueux ne lui permettrait pas de forcer la force en premier lieu.
Le cas le plus courant est que l'attaquant possède une base de données de mots de passe. Il utilisera un logiciel de piratage comme John the Ripper. Il aura testé quelques millions de mots de passe possibles avant même de commencer par "aa". Dans la plupart des cas, à ce stade, il a déjà piraté plusieurs milliers de comptes car leur mot de passe était "mot de passe" ou "12345678". Ou - pour satisfaire le vérificateur factice de "force du mot de passe" - "Pass123!".
Il ne prendra probablement pas la peine de laisser son cracker entrer dans la véritable étape de la force brute, car il a mieux à faire avec son temps. Et vous ne savez pas vraiment si le forçage brutal commencerait réellement à aa ou non, car il y a de fortes chances que ce ne soit pas le cas.
Votre vrai problème est que dès que vous établissez des règles sur les mots de passe que vous considérez comme "mauvais", vous réduisez l'espace de recherche. Il se trouve que les politiques de mot de passe sont nuisibles. Regardez, l'auteur de JtR a même ne page à ce sujet sur son wiki. Bien sûr, le consultant $$$ qui a convaincu votre CISO d'adopter sa stupide politique de mot de passe n'a jamais lu cette page et ne sait probablement même pas que JtR existe toujours. :-)
Donc non, "aa1" n'est pas sensiblement moins sûr que "zz9". D'abord parce que le forçage brutal est la dernière arme, pas la première et ensuite parce qu'il n'y a aucune garantie que le logiciel de force brute démarre réellement en a et non en z. Je ne commencerais pas à un si je devais en écrire un. Je randomiserais l'alphabet et l'utiliserais, par exemple. Exactement parce que je pense que les gens évitent probablement "aaaaaaaa" comme mot de passe.
Beaucoup d'autres réponses se concentrent sur la raison pour laquelle un mot de passe commençant par "a" ne serait pas moins sûr que toute autre lettre de départ parce que vous supposez que l'attaquant le fait séquentiellement par rapport à parallèle, ou parce que vous supposez qu'ils le sont à partir de "a", alors qu'un attaquant qualifié ne le pourrait pas. En raison de ces arguments, aucune lettre de départ n'est moins sûre qu'une autre d'une attaque qualifiée.
Cependant, je dirais que contre un attaquant naïf, un mot de passe commençant par "a" est légèrement moins sûr, car ils seraient plus susceptibles de le faire de manière séquentielle et à partir de "a" en raison de leur manque de compétences et expérience.
En pratique, cependant, comme les autres réponses l'ont dit, cela ne fera aucune différence car en pratique, un mot de passe généré suffisamment longtemps ne pourra probablement jamais être forcé brutalement dans un laps de temps raisonnable, et éviter la lettre `` a 'ne ferait que réduire l'espace de recherche.
Lorsque vous supposez une attaque par force brute, un mot de passe commençant par "a" peut être plus faible. Si l'utilisation de "z" devient populaire, cela serait vrai pour "a" et "z", ce qui compliquerait l'évaluation du risque.
Supposons que nous connaissons un personnage qui est essayé avant les autres. L'attaquant n'a alors qu'à tester 1/26
de l'espace de recherche. La solution est de rendre votre mot de passe plus long. Pas seulement quand ça commence par "a", mais toujours.
Un attaquant commencera probablement avec des mots de passe courts pour une recherche par force brute *, donc votre plus long a une bien meilleure protection. Même s'il ne le fait pas, il devra tester beaucoup plus de mots de passe avant d'obtenir le vôtre.
Une attaque par dictionnaire ou une attaque mixte peut essayer "a", "aa", "aaaaaaaa" avant d'essayer "b". Il s'agit d'un jeu d'esprit entre l'attaquant et vous, donc choisir une phrase de passe aléatoire est la meilleure approche et rejeter ceux qui peuvent être dans les listes de mots est raisonnable (mais un mot de passe long aléatoire est peu susceptible de figurer dans une liste de mots, de toute façon).
*
Tester tous les mots de passe de 1 à 8 caractères ne nécessite qu'environ deux fois plus de temps que tester les 9 mots de passe de caractères commençant par "a", il est donc raisonnable de commencer par des mots plus courts, s'il y a une possibilité que le mot de passe soit court.
Un grand nombre des réponses existantes indiquent déjà qu'il y a peu à gagner en évitant simplement le a, et qu'il est très facile d'appliquer un "correctif" qui aggrave réellement votre situation.
CEPENDANT, conceptuellement, il semble également erroné d'ignorer complètement la façon dont les attaquants travaillent. Par conséquent, je présente cette direction de la solution, qui devrait fonctionner en théorie (mais peut être un peu difficile à appliquer dans la pratique):
Si votre modèle de menace définit qu'un attaquant est plus susceptible d'attaquer un modèle, il serait bon de rendre l'occurrence de ce modèle moins probable
Exemple:
Dans ce cas, il serait probablement bon de rendre le "a" 1% moins probable
Si vous avez (et gardez une trace de) la véritable menace contre vous, vous devriez être en mesure de réduire légèrement les risques de piratage de votre mot de passe. Malheureusement, vous auriez besoin d'une entreprise géante pour connaître l'état à tout moment, et vous auriez besoin de recréer des mots de passe chaque fois que le modèle de menace change. Par exemple parce que les attaquants apprennent également que vous corrigez les schémas de la semaine dernière.
En bref, réalisez que vous aviez raison sur le plan conceptuel, mais il est tout simplement impossible de l'implémenter correctement.
À strictement parler, oui, si le craquage se résume à la force brute, il y a plus de chances qu'un mot de passe commençant par "a" soit vérifié avant un mot de passe commençant par "z". Ce n'est pas nécessairement vrai, mais c'est possible.
Une chose importante à comprendre à propos de l'entropie des mots de passe est que vous devez le calculer par rapport à. le modèle que l'attaquant utilisera probablement pour casser les mots de passe, pas wrt. le modèle que vous avez utilisé pour le générer. Par exemple, si vous avez généré un mot de passe alphanumérique complètement aléatoire et que vous avez obtenu "passwordpassword123", il a la même entropie de "génération" que tout autre mot de passe aléatoire de la même longueur. Une entropie de "génération" élevée n'en fait cependant pas un bon mot de passe, car elle a une entropie de "craquage" très faible en supposant des attaques de dictionnaire typiques.
Il n'est pas rare de jeter des mots de passe générés aléatoirement exactement pour cette raison. Tout en supprimant réduit le nombre de mots de passe disponibles (et réduit ainsi la sécurité des mots de passe), il évite de générer un mot de passe qui serait très facile à déchiffrer.
Si vous vouliez faire quelque chose, tout ce que vous pouviez faire (en plus d'augmenter la longueur du mot de passe) serait de rejeter les mots de passe commençant par un "a". Vous avez maintenant supprimé 1/26e des mots de passe possibles et l'attaquant peut casser le mot de passe moyen 26/25 fois plus rapidement.
... et maintenant, les mots de passe les plus faibles commencent par un "b". Supprimons-nous ces éléments et faisons de "c" le nouveau premier caractère le plus faible? Vous voyez où cela va.
Les autres réponses ont bien expliqué pourquoi cela n'a pas d'importance, je voulais juste souligner qu'il est absurde d'essayer de résoudre ce problème en évitant certains mots de passe.
Pour ajouter aux nombreuses bonnes réponses ici, il convient de noter que même lorsqu'un attaquant utilise une attaque par force brute (ce qui est rare, compte tenu de toutes les meilleures options discutées), les bons outils ne font pas de force brute séquentielle.
Par exemple, le mode de force brute dans John the Ripper (dont @Tom mentionne ci-dessus) est appelé Mode incrémental , et bien qu'il couvre tout l'espace clé, il utilise un modèle basé sur la fréquence pour couvrir l'espace clé dans un ordre beaucoup plus efficace qu'une attaque AZ séquentielle.
Je me souviens également d'un ancien outil appelé PasswordsPro, qui ferait une force brute séquentielle, mais qui a commencé à la fin de la chaîne plutôt qu'au début (aaaa, aaab, aaac, etc.).