Selon XKCD: Password Strength , si le mot de passe consiste en "quatre mots communs aléatoires", il sera sécurisé et mémorable.
Je veux créer une application Web et faire en sorte que les utilisateurs créent leurs mots de passe de cette façon. Chaque mot de passe doit avoir au moins 16 caractères et doit être composé d'une phrase d'au moins 4 mots pour le rendre plus sûr et mémorable. Mais cela permettra à l'attaquant de savoir que tous les mots de passe sont comme ça. Est-ce une mauvaise idée?
Quelles sont les meilleures façons de forcer des mots de passe plus sécurisés et mémorisables à la fois?
Ce n'est pas nécessairement une mauvaise idée. L'attaquant peut savoir que le mot de passe est dans ce format, étant donné que les 4 mots sont suffisamment aléatoires. Mais voici la chose, il existe d'autres bonnes façons de créer un mot de passe fort et mémorable. Limiter vos utilisateurs à celui que vous aimez n'est pas très sympa. Par exemple, j'utilise le gestionnaire de mots de passe avec des mots de passe longs vraiment aléatoires, ce qui est encore mieux que ce que vous proposez, mais je ne pouvais pas le faire sur votre site.
Plus important encore, si la raison pour laquelle vous voulez le faire est de forcer les utilisateurs à utiliser un mot de passe fort, puis générez le mot de passe de 4 mots pour eux. Vous pouvez générer un tel mot de passe en ayant un dictionnaire, puis en choisissant un nombre aléatoire entre 1 et le nombre de mots dans votre dictionnaire et en prenant ce mot. Faites-le 4 fois et vous avez un mot de passe. Vous pouvez vous inspirer ici . Ceci est important, car la plupart des utilisateurs peuvent ne pas choisir 4 mots vraiment aléatoires, mais plutôt 4 mots facilement devinables. Dans un tel scénario, ce serait pire que de les laisser choisir un mot de passe.
Vous faites allusion à Principe de Kerckhoff . Lorsque nous concevons des systèmes cryptographiques, nous supposons que l'attaquant saura tout sur votre système, à l'exception des parties dérivées de l'entropie (clés/mots de passe/etc, généralement) - c'est parce que nous ne pouvons pas garantir qu'ils ne connaissent pas les détails, mais doit supposer qu'ils ne connaissent pas nos clés générées. Tout schéma de génération de mot de passe suit ce raisonnement - si un schéma de mot de passe est sécurisé, alors vous pouvez croire qu'un attaquant sachant quel schéma vous utilisez n'est pas un problème.
La raison pour laquelle ce n'est pas un problème est due au fonctionnement des espaces de noms de mots de passe. Si vous exigez qu'un utilisateur génère un mot de passe basé sur une liste de logiciels connus, telle que la liste EFF, et que vous exigez qu'il soit d'au moins 4 mots, alors nous pouvons calculer la complexité de l'espace de noms.
Tout d'abord, nous allons déterminer l'espace de noms d'un seul mot - Dans la liste des dés d'EFF, vous lancez cinq dés à six faces et choisissez le résultat qui apparaît. Puisqu'il y a cinq positions avec six options, nous pouvons calculer 6 ^ 5, ce qui nous donne 7776 - cela signifie simplement qu'il y a 7776 mots différents possibles pour chaque endroit.
Maintenant, nous pouvons calculer la complexité minimale de l'espace de noms de quatre de ces mots. Cela se fait simplement en prenant le nombre de mots possibles et en le portant à la puissance du nombre de mots du mot de passe - 7776 ^ 4. Cela nous donne 3656158440062976 (3,6 Quadrillions) différents mots de passe possibles de quatre mots de diceware EFF.
Maintenant, pour deviner combien de temps cela prendrait, nous devons faire quelques hypothèses -
Vous utilisez un bon algorithme de hachage - scrypt, bcrypt, PBKDF2, etc.
L'attaquant possède du matériel grand public. - Nous examinerons quelques références pour un tableau de 8x 1080 TI, qui sont en haut de gamme au moment de l'écriture, mais ne devraient pas être considérés comme le taux de hachage maximum - la NSA, etc. a probablement du matériel spécial juste pour le hachage mots de passe le plus rapidement possible.
Nous pouvons voir d'après ce benchmark que dans OpenCL, un attaquant avec 8x 1080 Ti peut attaquer de bons algorithmes aux taux suivants:
Donc, pour notre espace de noms donné de 3,6 quadrillions de mots de passe possibles, nous pouvons calculer les délais attendus suivants - veuillez garder à l'esprit qu'en moyenne, 50% de l'espace de noms devra être épuisé, pas 100%.
Ainsi, nous pouvons voir que vous devez également implémenter un bon algorithme de hachage.
Deux choses manquent à cet algorithme - tout d'abord, nous n'avons pas omis les mots de moins de 4 caractères. La liste des dicesware EFF contient de nombreux mots de 3 caractères. Si vous augmentez la longueur minimale de Word, vous réduisez l'espace de noms. Je pense que la liste EFF contient ~ 500 mots de 3 caractères, mais c'est une supposition. Ainsi, l'espace de noms est légèrement moins complexe.
Deuxièmement, nous avons traité ces mots de passe de manière aléatoire. Parce que vous vouliez plutôt des phrases, nous devons garder à l'esprit que les phrases ne sont pas aléatoires. Si vous voulez que les phrases aient du sens, alors vous pouvez effectuer des attaques contre elles - vous pouvez utiliser des chaînes de Markov et d'autres trucs amusants pour générer des phrases probables plutôt qu'une brute brute forçant le mot de passe. Je n'ai pas de statistiques sur la façon dont c'est plus facile que le forçage brutal, donc je vais aller de l'avant et dire que vous devriez supposer que cela fait une énorme différence et est beaucoup plus faible.
Vous n'endommagez pas la sécurité des mots de passe en disant à l'attaquant que le mot de passe comporte au moins 16 caractères et comprend 4 mots ou plus. Cela revient à dire que le mot de passe doit avoir au moins 10 caractères, avoir au moins une lettre majuscule, un chiffre et un symbole. Droite?
Avec 4 mots, le coût d'une bruteforce est supérieur à 10 caractères aléatoires. Si vous demandez à l'utilisateur d'utiliser au moins une lettre majuscule, le coût augmente encore plus.
Selon le dictionnaire Oxford, l'anglais compte un peu moins de 175 000 mots. Il y a 8,64 × 1020 combinaisons possibles. En utilisant les 95 caractères d'un clavier anglais, vous disposez de 5,98 × 1019 combinaisons possibles.
Mémorisation. Un mot de passe à 4 mots sera certainement plus facile à retenir qu'un mot de passe aléatoire, mais cela ne signifie pas que l'utilisateur moyen s'en souviendra sans l'écrire ou utiliser un gestionnaire de mots de passe de toute façon (il y a juste trop de mots de passe différents à retenir de nos jours). La mémorisation est donc utile et excellente, mais elle pourrait ne pas être aussi utile que vous le pensez.
Sécurité. Un mot de passe à 4 mots sera plus sûr que le mot de passe moyen uniquement si les mots sont choisis au hasard parmi un ensemble de mots suffisamment grand. Selon this article, j'ai trouvé que l'entropie du mot de passe utilisé par un utilisateur moyen devrait être d'environ 21 bits (221 = 2,1 × 106), ce qui est inquiétant. Si vous choisissez 4 mots au hasard dans une liste des 1000 mots anglais les plus courants, vous aurez 10004 = 1012 possibilités, donc un mot de passe qui est 1 million de fois plus difficile à utiliser que le mot de passe moyen.
Donc, d'une manière générale, votre idée n'est pas mauvaise, tant que vous ne laissez pas vos utilisateurs choisir leurs propres mots, ou qu'ils finiront par choisir des mots de passe comme "pass pass pass pass" ou "1 2 3 4", etc. Et bien sûr, tout cela parle en général, car il y a certainement des cas spécifiques où votre méthode diminuerait réellement la sécurité du mot de passe. Par exemple, votre méthode diminuerait la sécurité de mon mot de passe car j'ai tendance à utiliser de longs mots de passe aléatoires par défaut, donc si vous m'obligiez à utiliser votre méthode sur votre application j'utiliserais un mot de passe moins sécurisé que d'habitude. La même chose est probablement vraie pour des communautés comme celle-ci, où j'espère que l'entropie moyenne des mots de passe est bien supérieure à 21 bits et probablement supérieure à vos mots de passe à 4 mots.
Vous ne pouvez pas forcer les utilisateurs à utiliser des mots de passe sécurisés et mémorables.
Cette réponse à une question connexe résume la bande dessinée en soulignant que l'aspect humain des politiques de mot de passe, et non l'aspect informatique, "devrait souvent être la préoccupation primordiale".
@ réponse d'Adonalsium couvre bien l'aspect informatique. Utiliser diceware est relativement bon pour l'aspect humain sans être mauvais pour l'aspect informatique, c'est donc un moyen acceptable de générer des mots de passe.
Mais si vous voulez la mémorisation, vous ne pouvez pas dicter aux utilisateurs comment générer des mots de passe. Vous ne pouvez pas non plus exiger qu'ils utilisent des mots de passe que vous générez pour eux.
Il y a quelques choses évidentes à éviter, comme restreindre la longueur des mots de passe à quelque chose de trop court, exiger des caractères d'une liste particulière (comme les chiffres ou la ponctuation), ou interdire les caractères d'une liste particulière (comme les espaces ou les guillemets). Alors, comment pouvez-vous les éviter tout en ayant besoin de mots de passe sécurisés?
Vous devez estimer une limite inférieure à l'entropie du mot de passe entré et définir votre politique pour n'accepter que les mots de passe avec une estimation supérieure à un minimum (éventuellement basé sur le temps de crack minimum souhaité). Le seul outil d'estimation de ce genre que je connaisse est zxcvbn (qui ne rejette malheureusement pas "la bonne alimentation de la batterie pour chevaux").
Cela permettra l'utilisation de mots de passe générés aléatoirement relativement courts et de mots de passe de logiciels de diagnostic relativement longs, sans exiger ni l'un ni l'autre, ou permettre que l'un ou l'autre soit inadéquat. L'utilisateur peut choisir la méthode qui lui convient le mieux et vous pouvez exiger le niveau de résistance aux fissures dont vous avez besoin.
La génération et la recommandation de mots de passe de diceware pourraient être utiles, et je pense que c'est une bonne idée, mais je devrais m'assurer que ce processus n'a pas introduit de nouvelles vulnérabilités avant de l'utiliser moi-même. (Une autre chose à propos de laquelle fournir des liens, si vous le faites.)
(Je serais également enclin à ce qu'un singe chaos de sécurité des mots de passe essaie constamment de casser les mots de passe de vos utilisateurs et de forcer une réinitialisation chaque fois qu'il réussit. Mais je ne suis pas sûr que cela réussisse plus souvent sur des mots de passe faibles que sur des mots de passe malchanceux. )
Mon conseil est pas. Je ne discuterai même pas de l'application de la sécurité mot de passe (vous avez déjà reçu un commentaire sur un mot de passe de 32 caractères aléatoires généré par un gestionnaire de mots de passe), mais plus de l'effet sur la sécurité globale.
Vous ajoutez une contrainte pour les utilisateurs finaux. Certains (sans instruction) utilisent toujours le même mot de passe. Ils s'en souviennent à peine et ne veulent pas être dérangés par une nouvelle, ils n'utiliseront donc pas votre application Web s'ils le peuvent. D'autres diront: c'est une bonne idée, mais je ne m'en souviendrai pas longtemps ... écrivons-la sur cette feuille! Ceux qui sont habitués à un bon gestionnaire de mots de passe diront comme c'est stupide que je ne puisse pas utiliser mon générateur aléatoire! et encore une fois évitera l'application s'ils le peuvent.
Le seul cas d'utilisation où je peux accepter les règles de mot de passe concerne le mot de passe principal dans un environnement d'entreprise. Les employés sont censés l'utiliser tous les jours (tous les jours ouvrables ...) et un seul est normalement nécessaire, grâce aux solutions Single Sign On, donc ne pas en garder le souvenir ne devrait pas être un problème. Pour tous les autres cas d'utilisation, l'utilisateur final est supposé être responsable de ses propres données et mon avis est que tout ce qui dépasse une longueur minimale est une contrainte ennuyeux, et je ferai de mon mieux pour ne pas utiliser ce site.
Je ne pense pas que vous puissiez avoir une application de mot de passe utile. La force du diceware AKA de la méthode XKCD dépend du fait que les mots de la phrase sont aléatoires. Quatre mots choisis, en particulier quatre mots choisis qui font une phrase sont une phrase secrète très faible et il n'y a aucun moyen de vérifier si les mots qu'ils saisissent sont aléatoires ou choisis.
Non, mais donnez un avertissement à l'utilisateur qui essaie de définir un mot de passe complètement non sécurisé et faites-lui confirmer qu'il veut vraiment le définir.
Forcer les gens à définir un mot de passe supérieur à ce qu'ils peuvent mémoriser les obligera non seulement à l'écrire, mais aussi à l'écrire au hasard et dans un endroit peu sûr.
De plus, dans certaines organisations, la possibilité d'utiliser une phrase de passe sécurisée (par complexité) mais partagée (au sein d'une équipe autorisée) et/ou pré-documentée (sous verrou et clé) est souhaitable - des directives de mot de passe qui rejettent certains mots de passe raisonnablement sécurisés peuvent devenir un réel ennui ici. Scénario d'utilisation: "Veuillez définir la phrase de passe complexe que cette équipe utilise pour tous les fournisseurs de type XYZ, afin qu'il n'y ait pas de tracas au cas où un autre membre de cette équipe aurait besoin d'y accéder de toute urgence en votre absence".