La confidentialité de la longueur de votre mot de passe est-elle essentielle à la sécurité?
Est-ce que quelqu'un sachant que vous avez une longueur de mot de passe de 17, par exemple, rend le mot de passe considérablement plus facile à utiliser par la force brute?
Eh bien, commençons par les mathématiques: si nous supposons que votre mot de passe se compose de lettres inférieures, de lettres majuscules et de chiffres, vous pouvez choisir parmi 62 caractères (juste pour simplifier les mathématiques, les vrais mots de passe utilisent également des symboles). Un mot de passe de longueur 1 a 62 possibilités, un mot de passe de longueur 2 a 62 ^ 2 possibilités, ..., un mot de passe de longueur n a 62 ^ n possibilités.
Cela signifie donc que s'ils savent que votre mot de passe contient exactement 17 caractères, ils peuvent ignorer tous les mots de passe d'une longueur inférieure à 17 et il n'y a que 62 ^ 17 mots de passe à essayer.
Mais combien de mots de passe existe-t-il avec une longueur inférieure à 17, contre 62 ^ 17?
Eh bien, si nous additionnons 62 ^ n et divisons par 62 ^ 17, nous obtenons (somme de n = 1 à n = 16 de 62 ^ n)/62 ^ 17 = 0,016 ( lien vers le calcul ) , donc vérifier uniquement les mots de passe de longueur 17 n'est que 1,6% plus rapide que vérifier tous les mots de passe jusqu'à longueur 17
Si nous avons un schéma de mot de passe qui permet d'utiliser les 95 caractères ASCII -) imprimables , alors les économies de ne pas avoir à essayer les mots de passe moins de 17 gouttes à 1,06% ( lien vers le calcul ).
Une particularité mathématique intéressante à propos de ce rapport du nombre de mots de passe plus court que n, sur le nombre de mots de passe de longueur n, est qu'il ne dépend pas vraiment de n. En effet, nous sommes déjà très proches de l'asymptote de 1/95 = 0,0105. Ainsi, un attaquant obtient le même relatif, ou pourcentage, gain de temps grâce à cette astuce quelle que soit la longueur de votre mot de passe; c'est toujours entre 1% et 2%. Bien sûr, le temps absolu que cela prend augmente de plusieurs ordres de grandeur avec chaque nouveau personnage que vous ajoutez.
Les calculs ci-dessus supposent un brutal forceur simple qui essaiera a, b, c, ..., aa, ab, ... Ce qui est un bon modèle (ish) pour casser des mots de passe générés par ordinateur correctement aléatoires, mais c'est un terrible modèle pour deviner les mots de passe générés par l'homme.
Les vrais crackers de mots de passe sont basés sur un dictionnaire, essayant des mots (et des combinaisons de mots) du dictionnaire anglais, des listes de mots de passe divulgués, etc., donc ces calculs devraient être pris avec un grain de sel.
Un autre effet de la connaissance de votre longueur est qu'ils n'ont pas à essayer de mots de passe plus longs que 17 , ce qui, pour les algorithmes de forçage brutal qui essaient des combinaisons de dictionnaire mots, pourrait en fait être une énorme économie.
Comme mentionné par @SteveSether, @xeon et @CountIblis, divulguer la longueur (ou l'entropie) d'un mot de passe peut également affecter si un attaquant tente même de casser votre mot de passe en le dissuadant des mots de passe forts et en les attirant plutôt vers les mots faibles. Donc, si vous savez que vous avez un mot de passe solide, divulguez-le! Cependant, la divulgation des longueurs (ou entropies) de mot de passe pour tous les utilisateurs d'un système a pour effet de rendre les mots de passe forts plus forts et les mots de passe faibles plus faibles.
Conclusion:
Dire à quelqu'un la longueur de votre mot de passe n'est pas la pire chose que vous puissiez faire, mais je ne le ferais toujours pas.
Mis à part les calculs détaillés par @Mike, considérez également que le mot de passe longueur fuit partout:
Lorsqu'il est tapé, un spectateur sournois peut l'apprendre, soit en comptant le `` * '' à l'écran, soit en écoutant les frappes (dans ce dernier cas, il peut enregistrer le son avec son smartphone et le jouer comme son loisir).
Dans un scénario classique de "navigateur Web", le nom d'utilisateur et le mot de passe seront envoyés au serveur via un POST HTTPS. La couche SSL crypte les données, mais SSL ne cache pas les données longueur, donc un observateur de réseau passif apprendra également la longueur du mot de passe.
L'interface côté utilisateur et le système récepteur traiteront le mot de passe avec des fonctions dont le temps d'exécution et les modèles d'accès à la mémoire dépendront de la longueur du mot de passe. Les attaquants qui peuvent effectuer des mesures de synchronisation pourront généralement déduire la longueur du mot de passe à partir de ces mesures.
Par conséquent, une approche sensée consiste à considérer la longueur du mot de passe comme des données publiques. Certains attaquants n'y auront pas accès (le genre d'attaquants qui viennent de récupérer une copie de la base de données du serveur); d'autres le sauront. Il est très difficile de savoir "combien de secret" la longueur du mot de passe est, et puisque la sécurité est une question de quantification choses, il est préférable de supposer que tous les attaquants mai savent la longueur du mot de passe. Croire que vous pouvez garder le secret et estimer la sécurité sur la base de cette notion serait trop dangereux.
Révéler la longueur de votre mot de passe révèle quelque chose sur la force de votre mot de passe. Donc, vous donnez essentiellement à quelqu'un un indice sur la difficulté de deviner.
Donc, si votre mot de passe est très long (17 caractères dans votre exemple) ce sont des informations largement inutiles. Si le mot de passe est court (6 caractères), il indique à un attaquant que cela vaut la peine d'attaquer. Les attaquants poursuivent les cibles les plus faciles.
Je ne suis pas d'accord avec la réponse acceptée. Il est vrai que la longueur du mot de passe est presque inutile si tous les mots de passe sont créés aléatoirement par une machine. Cela ne s'applique plus si les mots de passe sont créés par les humains de la manière habituelle : basé sur un ou plusieurs mots du dictionnaire, mélangez les majuscules et les minuscules, remplacez certains caractères avec des chiffres ou des caractères spéciaux, et ajoutez des préfixes et suffixes (par exemple "! 1"), etc.
Examinons 2 scénarios, l'un est que nous avons 10'000'000 hachages de mots de passe et voulons trouver autant de mots de passe correspondants pour ces hachages que possible. L'autre est un hachage de mot de passe et nous voulons le casser. Dans les deux scénarios, la différence s'avère significative. Comme d'habitude, toutes les informations peuvent être utilisées abusivement lors d'une attaque, même si cela ne semble pas à première vue .
Nous pouvons simplement essayer des attaques par bruteforce sur tous les hachages de mot de passe sans aucun moyen de les distinguer si nous ne connaissons pas la longueur du mot de passe.
Si nous utilisons une attaque bruteforce exhaustive (qui garantit de trouver le mot de passe), connaître la longueur du mot de passe n'offrira qu'un gain très minime. Pourquoi? Bruteforcer tous les mots de passe à 7 chiffres prend environ 1 à 2% tant que la force brute force tous les mots de passe à 8 chiffres. La seule chose que nous gagnons en connaissant la longueur est que nous n'avons pas besoin de forcer brutalement tous les mots de passe à 7 chiffres (et plus petits) si nous savons déjà que le mot de passe a 8 chiffres. Sauf qu'une attaque par bruteforce nécessite des ressources presque infinies (puissance de calcul et/ou temps) et n'est donc pas quelque chose que nous pouvons ou allons faire.
Au lieu de cela, nous testons une série de mots de passe "probables" pour chaque longueur de mot de passe . Une façon de le faire est d'utiliser une attaque par dictionnaire . Tester les mots de passe probables coûte plusieurs ordres de grandeur moins cher que d'utiliser la force brute exhaustive, mais cela a un énorme inconvénient: une fois que nous avons essayé tous les mots de passe à 7 chiffres "probables" contre un hachage de mot de passe, mais que nous n'avons pas trouvé le mot de passe correspondant, nous ne le faisons pas savoir si le mot de passe correspondant à ce hachage de mot de passe est supérieur à 7 chiffres. Donc, à moins que nous ne sachions avec certitude que le mot de passe ne dépasse pas 7 chiffres, nous devons toujours tester ce hachage de mot de passe par rapport à tous les mots de passe "probables" à 8 chiffres, mots de passe à 9 chiffres, mots de passe à 10 chiffres, etc. - et lors du test de mots de passe probables, tout comme bruteforce exhaustive, le coût des tests de mots de passe plus longs augmente de façon exponentielle. Étant donné que nous savons maintenant que le mot de passe comporte 7 chiffres, nous n'avons pas à le tester par rapport à des mots de passe probables à 8, 9, 10, 11, 12 chiffres et même plus, ce qui économise une énorme quantité de travail.
Ça s'ameliore. Une fois que nous avons testé tous les mots de passe probables jusqu'à une longueur de, disons, 20 chiffres, nous pouvons maintenant dépenser nos ressources restantes pour une attaque par force brute sur ces hachages de mot de passe avec une petite longueur de mot de passe que notre recherche précédente de mots de passe "probables" n'a pas craqué . Supposons qu'il reste 2'000'000 hachages de mot de passe non fissurés et que 100'000 d'entre eux ont des mots de passe avec moins de 6 chiffres. Gardez à l'esprit que nous avons un budget limité. Les mots de passe à 6 chiffres ne coûtent pas cher à craquer. Mais parce que nous savons que 100 000 sont à 6 chiffres ou moins, nous devons maintenant forcer 100 000 mots de passe à 6 chiffres pour casser 100 000, au lieu de forcer brutalement 2 000 000 mots de passe à casser 100 000 6 chiffres des mots de passe. C'est 5% du travail pour le même résultat!
Si nous regardons tous les avantages combinés, le gain exact que nous recevons de la connaissance de la longueur des mots de passe dépend de la vitesse de notre méthode pour tester les mots de passe "probables", du taux de réussite respectif de notre méthode pour tester les mots de passe probables pour chaque longueur de mot de passe, le la distribution des longueurs de mot de passe dans la collection de hachage de mot de passe que nous voulons cracker, et la quantité de ressources dont nous disposons (vitesse de calcul, temps). Mais en connaissant la longueur des mots de passe, nous pouvons facilement augmenter le nombre de mots de passe que nous trouvons avec une quantité donnée de ressources plusieurs fois - si les nombres fonctionnent fortement en notre faveur, nous pouvons éventuellement réduire le coût des ressources pour casser 30% des mots de passe par un ordre de grandeur ou plus.
Ne connaissant pas la longueur du mot de passe, nous devons répartir nos ressources entre le forçage brutal de toutes les clés avec une longueur courte et le test des mots de passe probables avec une longueur plus longue. En supposant que nous dépensions la moitié de nos ressources sur chacun, la connaissance de la longueur du mot de passe nous permet de transmettre complètement l'une des 2 et donc de doubler nos ressources disponibles.
Nous obtenons également des informations supplémentaires qui peuvent être extrêmement précieuses lors d'une attaque ciblée:
Si le mot de passe est assez court pour le forcer brutalement, nous pouvons donner une limite supérieure sur le temps qu'il nous faut pour obtenir le mot de passe. Cela peut nous amener à tenter des attaques que nous n'aurions pas envisagées autrement.
Nous pouvons également calculer la probabilité de déchiffrer le mot de passe. Si nous savons que nous ne verrons probablement pas le mot de passe, nous pouvons dépenser nos ressources pour trouver d'autres moyens de compromettre le système.
Si nous avons 2 mots de passe différents du même utilisateur, nous pouvons voir s'il y a une chance qu'ils soient en fait le même mot de passe. S'ils ne varient que de 2 à 3 chiffres, nous pouvons faire une supposition éclairée que le mot de passe le plus long pourrait être le même que le plus court, plus un préfixe ou un suffixe.
Si nous obtenons encore plus d'informations sur le mot de passe, cela peut entraîner un gain beaucoup plus élevé que les 2 pièces individuellement . Par exemple, si nous découvrons que le mot de passe est un seul mot du dictionnaire Oxford, vous avez toujours la possibilité de le garder en sécurité si, par exemple, nous ne pouvons forcer qu'un mot de passe par minute. Mais si nous savons également que la longueur du mot de passe est de 17 chiffres, la partie est terminée.
Révéler la longueur du mot de passe influence. Si votre mot de passe est faible (mot de passe court), un attaquant peut se concentrer sur le cracker. Si le mot de passe est fort (mot de passe long), un attaquant pourrait explorer d'autres vecteurs d'attaque. Ainsi, la connaissance de la longueur du mot de passe permet à un pirate de choisir une meilleure stratégie tout en gagnant du temps.
En plus des réponses qui donnent un bon aperçu de votre question, il y a encore une chose à prendre en compte: lors de votre évaluation des risques vous devez supposer que l'attaquant sait tout sur la méthodologie que vous utilisez pour créer votre mot de passe.
En d'autres termes, si votre mot de passe est composé de quatre mots anglais moyens collés ensemble, tous en minuscules ( à la xkcd ), vous devez supposer (différemment que xkcd le fait, BTW) que l'attaquant obtiendra le dictionnaire pertinent et essayez seulement une combinaison de quatre mots.
Vous avez maintenant un espace clé (nombre de possibilités) que vous comparez au temps nécessaire pour vérifier ses éléments à [un nombre lié à des technologies et des environnements spécifiques] essais/seconde - et qui vous donne le temps statistique que votre mot de passe survivra à une attaque .
Maintenant, vous décidez si cela est assez long, avec vos propres critères (cycle de vie du mot de passe, temps de travail avec ce compte, âge de l'univers, ...)
Si nous prenons l'exemple xkcd, ce serait
La divulgation délibérée de la longueur du mot de passe, à condition que vous n'utilisiez que des mots de passe très longs, comme le souligne Steve Sether dans sa réponse, rendra moins probable que les pirates tentent de le deviner. Ainsi, vous améliorez réellement la sécurité en divulguant délibérément ces informations sur votre mot de passe.
Un attaquant n'utilisera pas d'attaque par force brute, essayant tous les mots de passe possibles, mais essaiera d'abord les mots de passe les plus probables. Un mot de passe de huit lettres totalement aléatoire peut être plus difficile à déchiffrer qu'un mot de passe de 17 lettres simple à deviner.
Par conséquent, l'attaquant n'essaiera pas tous les mots de passe courts en premier, mais essaiera des mots de passe de différentes longueurs tout au long de l'attaque. Donc, si vous avez un mot de passe de dix-huit lettres "hellohellohello123", vous n'êtes pas en sécurité; un mot de passe de huit lettres totalement aléatoire peut être plus sûr.
Le mot de passe dur à huit lettres est plus difficile à deviner car l'attaquant essaie également des choses comme "hellohellohello123" avant de vérifier les mots de passe à huit lettres. Si vous indiquez à l'attaquant la longueur du mot de passe, ce bit de correction disparaît. La perte est donc bien pire que celle de 1,26% mentionnée précédemment.
Anything qui réduit l'entropie de votre mot de passe réduit sa force.
Il se peut que même lorsque vous divulguez la longueur du mot de passe, le pool de mots de passe possible restant soit toujours assez important.
Concernant un exemple concret, l'ensemble de tous les mots de passe de longueur 17 est sûrement assez fort contre presque toutes les attaques. Pourvu que vous n'ayez pas révélé d'autres détails comme "Mon mot de passe de la longueur 17 contient le nom de mon chat, que personne ne connaît."
La longueur 17 implique 272843561753653169767435615050624325866274580142388791900214521038955085904188409449281578168966401 combinaisons (considérant 80 caractères possibles - ajout de caractères alphanumériques et spéciaux). Je suis presque sûr que cela suffit, compte tenu de notre puissance de traitement actuelle. Le nombre ci-dessus est de l'ordre de grandeur d'un chiffre suivi de 98 0.