Mon équipe est responsable de la création et de la gestion de nombreux mots de passe (centaines), que nous faisons presque exclusivement par programme (toutes les générations sont suffisamment aléatoires). Nous exploitons une variété d'outils pour automatiser différents aspects de notre infrastructure, y compris mais non limité à Ansibles, Docker, Jenkins et Terraform. Ces outils ont tous leurs propres particularités quant à la manière dont ils consomment et exposent des chaînes dans divers contextes, dont les coquilles de POSIX ou les environnements d'exécution ressemblant à une coque sont notés spécifiquement. Nous appelons fréquemment ces outils d'une autre, passons au contexte entre alors à diverses fins.
Le problème: il est frustrant de manière frustrante de consacrer beaucoup de temps à enquêter sur des bugs mystérieux, seulement pour savoir que la cause fondamentale était la corruption de (ou non-analysé correctement) un mot de passe à un moment donné dans la chaîne de contexte qui passe, souvent (Mais pas toujours) dans un contexte de sélection de coquille POSIX, en raison de la présence de caractères spéciaux dans le mot de passe.
La question: étant donné une exigence de complexité de mot de passe qui est exprimée en longueur de mot de passe pour un ensemble de caractères donné, existe-t-il une différence dans une perspective de sécurité dans la réalisation de la même complexité en construisant un mot de passe de plus grande longueur, à partir d'un ensemble réduit?
Pour mettre cela concrètement: si nous avons généré des mots de passe "suffisamment puissants" de longueur x à partir des 95 caractères imprimables ASCII, et nous réduisons le jeu de caractères sur les 62 minuscules, majuscules et numériques = ASCII caractères, il y aura une perte de sécurité de mot de passe que ce soit en construisant des mots de passe de longueur y, où 62 ^ y> = 95 ^ x?
Edit: Veuillez lire ceci comme une question technique sur la définition de la complexité du mot de passe. Pour nos besoins, veuillez supposer que la génération de mot de passe est vraiment aléatoire. La définition de "suffisamment forte" est en dehors du champ d'application de cette question; Le principe est qu'il est acceptable.
Mise à jour : Oups, je n'ai pas réellement répondu à la question posée. Au lieu de cela, j'ai répondu uniquement sur le titre. Donc, voici un deuxième coup.
En se concentrant sur
si nous avons généré des mots de passe "suffisamment forts" de longueur x à partir du 95 imprimable ASCII caractères, et nous réduisons le jeu de caractères sur les 62 minuscules, majuscule et numeric ASCII caractères, il y aura une perte de sécurité de mot de passe que ce soit en construisant des mots de passe de longueur y, où 62 ^ y> = 95 ^ x?
Non, il n'y aura aucune perte de force. En supposant que vous sélectionnez à partir du personnage, vous sélectionnez uniformément (ou assez proche de manière uniforme), les magnitudes de 62 ^ y et 95 ^ x sont exactement ce que vous devez regarder.
Beaucoup de gens, y compris certains dans la communauté de sécurité, sont venus à la croyance erronée que des caractères spéciaux rendent les mots de passe plus forts simplement en étant des caractères spéciaux. Si vous entendez au fil des décennies, vous devez ajouter des caractères spéciaux à un mot de passe pour créer un bon mot de passe, il est naturel de supposer qu'il y a quelque chose de spécial à ce sujet.
Mais de retour quand c'était un bon conseil, c'était un bon conseil pour différentes raisons. Il a changé les habitudes des gens dans la création de mots de passe générés par l'homme. C'était une astuce psychologique à conduire vers une distribution plus flatteuse du choix du mot de passe humain. En tant que tel, le bénéfice réel de ces exigences n'était pas clair à la fois aux utilisateurs et aux personnes qui définissent les exigences. Et afin que les gens ont conclu que des caractères spéciaux rendent automatiquement les mots de passe plus forts.
Mais lorsque nous avons généré des mots de passe par des systèmes qui produisent une distribution uniforme pour commencer (donc non pas humain créé), le calcul est simple et 62 ^ y> = 95 ^ x est tout ce dont vous avez besoin pour considérer.
La force du mot de passe est une fonction du système qui l'a généré. Permettez-moi de citer - quelque chose que j'ai écrit il y a neuf ans sur la question.
La force d'un système de création de mot de passe n'est pas du nombre de lettres, de chiffres et de symboles qui vous retrouvent, mais combien de façons pourriez-vous obtenir un résultat différent en utilisant le même système. [...]
Je ne peux pas trop insister sur le point que nous devons examiner le système au lieu d'une seule sortie du système. Laissez-moi illustrer cela avec un exemple ridicule. Les mots de passe
F9GndpVkfB44VdvwfUgTxGH7A8t
etrE67AjbDCUotaju9H49sMFgYszA
Chaque ressemble à des mots de passe extrêmement puissants. Basé sur leurs longueurs et l'utilisation des majuscules et des minuscules et des chiffres, tout système de test de force de mot de passe dirait qu'il s'agit de mots de passe extrêmement puissants. Mais supposons que le système par lequel ils ont été générés étaient les suivants: retourner une pièce de monnaie. Si cela vient des têtes, utilisezF9GndpVkfB44VdvwfUgTxGH7A8t
, et si cela vient des queues, utilisezrE67AjbDCUotaju9H49sMFgYszA
.Ce système ne produit que deux résultats. Et même si les mots de passe ont l'air forts, les mots de passe générés par ce système sont extrêmement faibles. Bien sûr, personne ne recommanderait un système qui n'a produit que deux résultats, mais les gens recommandent des systèmes qui produisent un nombre de résultats beaucoup plus limité que celui que l'on pourrait penser en inspectant un résultat individuel du système. C'est parce que les humains sont beaucoup plus prévisibles que ce que nous aimons croire.
C'est un exemple extrême et artificiel, mais j'espère que cela contribue à faire le point. Les propriétés statistiques de l'ensemble des mots de passe possibles Un système peut générer est où provient la force (ou la faiblesse).
Vous avez déjà quelques bonnes réponses à votre question actuelle, je vais répondre à la question que vous n'avez pas demandé et vous donner la bonne réponse:
Maintenant, j'ai peut-être un peu mal compris que vous avez mal compris, mais vous parlez de passer dans le contexte d'un système à un autre, et cela ressemble au moment où vous faites ce "contexte" peut inclure des mots de passe, causant des problèmes lorsque différents systèmes doivent échapper à des caractères spéciaux de différentes manières. . Bien sûr, vous pouvez supprimer des caractères spéciaux et augmenter la longueur pour maintenir l'entropie, mais en fonction de votre question, je suppose que les étapes suivantes vous aideront beaucoup plus à long terme:
Cela aidera considérablement avec vos problèmes immédiats et améliorera également votre posture de sécurité. Il s'agit donc d'un de ces cas où la "droite" d'une perspective de sécurité est également la chose "facile" (à long terme). Fais-moi confiance, même si vous devriez évidemment être un travail nécessaire pour que cela se produise, il sera beaucoup plus facile de gérer tout cela avec un responsable secret. Cela vous permettra également de faire pivoter plus facilement vos secrets si nécessaire et les gardera hors de mille pages de configuration différentes.
En outre, pourquoi appelez-vous ces "mots de passe"? Je n'appelles pas normalement des secrets que vous utilisez pour vous authentifier dans un contexte serveur à serveur "mots de passe". Ce n'est nécessairement qu'une question de nommage non plus. Les identifiants d'accès au serveur à serveur ont généralement des options pour des éléments tels que la rotation, l'expiration (si nécessaire), les autorisations et elles sont (souvent) de base64 codées de manière à pouvoir facilement se déplacer entre les systèmes sans ces sortes de problèmes. En conséquence, je suppose que vous pouvez avoir un problème plus fondamental de se cacher en arrière-plan ici.