Journal Générateur de mot de passe

Posté par . Licence CC by-sa
16
26
déc.
2015

Salut à tous,

je voulais vous faire partager un petit projet que j'ai récemment mis en ligne mais que j'utilisais depuis de nombreuse années afin de générer mes mots de passe: Password Grids

Je l'ai récemment ré-écrit, d'une part en JS afin d'avoir une version qui marche 100% offline (tirant également parti d'HTML5), ainsi qu'une version en ligne de commande écrite en Scala.

L'idée est de faire un générateur de mots de passe avec 2 éléments de sécurités:
- un master password
- un pattern de sélection dans les grilles

Password Grids

Les grilles étant simplement basées sur cette construction:

Alphabet(SHA512(<master password>-<grid number>-<identifier>)))

L'avantage du pattern dans la grille c'est qu'il n'est pas possible de vous le voler facilement (à part une caméra qui suit le mouvement de vos yeux) et vous permet de générer vos mots de passe même si vous n'êtes pas seul.

Évidemment, si le master password est compromis et que l'attaquant découvre plusieurs de vos mots de passe, le pattern pourra être déduit.

A ce qui est extrait depuis la grille (~8 caractères) il faut au moins en ajouter 2:
- 1 caractère spécial
- 1 lettre minuscule

Vu qu'il y a également une probabilité non négligeable de ne pas avoir de chiffres venant de la grille, on peut aussi convertir une des lettres majuscules du pattern en minuscule et ajouter 1 caractère spécial + 1 chiffre.

Avec une longueur de 10 caractères et le mélange majuscule-minuscule-chiffre-spécial, les mots de passe générés passent quasiment partout.

Pour l'identifiant, je conseille de choisir une approche minimaliste et si besoin d'augmenter la granularité.

Par exemple, si vous n'avez qu'un compte à quelque part, utilisez juste le nom générique du genre 'facebook', 'twitter', … Votre compte gmail principal 'gmail', si vous en avez d'autres '<user>@gmail'. Si un système oblige à changer le mot de passe régulièrement 1@<system>, 2@<system>, …

Pour plus de détails allez voir la documentation.

Pour finir un des mes XKCD préféré sur ce thème:

XKCD

Joyeuse fêtes !

  • # Indéterministe

    Posté par . Évalué à 4. Dernière modification le 26/12/15 à 16:09.

    Vous faites bien de montrer cette image XKCD. Car autant votre programme est utile pour générer une grille de mots de passes forts en dérivant un mot de passe faible, autant l'on peut toujours vous faire avouer votre mot de passe maître et ainsi retrouver les mots de passes forts.

    Ce qu'il manque véritablement, c'est un mode "non-déterministe" qui ne dépend d'aucune entrée, donc aucun mot de passe maître, qui générerait une grille purement aléatoire (avec un bon générateur au lieu de "Math.random()").
    Comme indiqué par cette ancienne page, cela permet de créer des mots de passes littéralement jetables, au cas où l'on voudrait pouvoir perdre le mot de passe à tout jamais (en détruisant le morceau de papier) sans possibilité de la recréer, car aucune information dans votre cerveau ne permettra de recréer la grille.

    • [^] # Re: Indéterministe

      Posté par . Évalué à 5.

      Bon, comme toujours il peut y avoir différentes approches et ce n'était pas le but de faire des grilles jetables dans ce cas.

      Sur linuxfr la plupart des visiteurs sont capables de comprendre les compromis en terme de sécurité des différentes approches possibles, mais mon but premier en faisant la version web était de rendre accessible à des néophytes une manière plus sûre que celle d'utiliser un même mot de passe sur une multitude de sites différents.

      Avec mon approche, on a au moins une manière assez simple, d'avoir des mots de passe sûrs. Après comme d'hab il faut faire attentions aux éléments de sécurités principaux.

      J'aime bien également ne pas avoir à dépendre d'un gestionnaire de password, mais bon ça, chacun ses goûts…

      • [^] # Re: Indéterministe

        Posté par . Évalué à 2.

        J'ai bien compris que c'était différent, c'était juste une fonctionnalité en plus que vous pouviez rajouter (libre à vous) étant donné qu'elle correspondait bien à l'image XKCD.

        J'aime bien également ne pas avoir à dépendre d'un gestionnaire de password, mais bon ça, chacun ses goûts…

        Le mot de passe "jetable" n'en dépend pas particulièrement.


        Autres suggestions sans rapport avec les mots de passes jetables : si les grilles sont destinées à être imprimées, il serait bien d'avoir une feuille CSS dédiée à l'impression ("media=print") pour n'afficher que la grille dans ce cas.
        Si chaque site a une grille dédiée, comment se souvenir à quelle grille correspond un site ? Ne faudrait-il pas afficher le nom du site au dessus de la grille ? Et que ce soit visible à l'impression, avec la possibilité de le supprimer avec une bonne vieille paire de ciseaux. (Ok, pas mal d'imprimantes stockent sur disque tous les documents imprimés)

        • [^] # Re: Indéterministe

          Posté par . Évalué à 1.

          Oui, merci.

          Ma phrase sur les gestionnaire de mot de passe n'avait pas de lien direct avec ce qu'on disait avant (c'est juste que c'est aussi une approche avec un master password).

          Non les grilles ne sont pas destinées à être imprimées, elles sont différentes pour chaque identifiant, il faut donc y puiser le mot de passe puis fermer la "fenêtre".

          C'est fait exprès de n'afficher que le minimum d'informations, il est préférable qu'on ne puisse même pas voir a quel identifiant/site correspond la grille en cours, seul celui qui vient de taper l'identifiant le sait.

          Un autre site génère qqc qui correspond plus à l'approche dont vous parlez: http://www.passwordcard.org/fr

          • [^] # Re: Indéterministe

            Posté par . Évalué à 0.

            Si ce n'est pas fait pour imprimer, soit.

            Un autre site génère qqc qui correspond plus à l'approche dont vous parlez: http://www.passwordcard.org/fr

            Malheureusement, la génération de la grille semble faite côté serveur, ce qui est plutôt mauvais pour l'aspect jetable. De plus, la graine l'aléatoire est fournie, ce qui n'est pas très bon non plus.

  • # Itou

    Posté par (page perso) . Évalué à 3.

    J'ai le même!

    En deux versions:

    http://devnewton.bci.im

    • [^] # Re: Itou

      Posté par . Évalué à 2.

      passgrid
      passgrid is a KISS password grid generator and manager powered by java, spring boot and mongodb.

      Spring + MongoDB, peut-on encore parler de KISS dans ce cas ;)

  • # Motivation du projet

    Posté par . Évalué à 2.

    Aujourd'hui, la plupart des gens sont conscients qu'il faut se faire un 'bon' mot de passe plutôt qu'un truc à la noix tel '123456'. Je vois pas mal de gens dans mon entourage qui tournent avec 2 mots de passe: celui important et celui qui ne l'est pas.

    Par contre, ils ré-utilisent leur bon mot de passe à différentes places (souvent accompagné de leur email/user).

    En fait, ils ne se rendent pas compte, qu'il suffit d'un seul site, qui soit malhonnète, ou qui se fasse pirater, pour que leur super mot de passe ne soit plus secret du tout.

    A partir de là, toute solution basée sur une génération et qui évite une réutilisation du mot de passe est déjà un énorme pas en avant (je sais, on était au bord du gouffre ;p).

    J'ai déjà partiellement converti 2-3 personnes de mon entourage à remplacer leur système par celui-ci mais c'est toujours difficile d'en expliquer le fonctionnement, d'où viennent ces grilles, … c'est pour ça que j'ai passé pas mal de temps supplémentaire sur la version web afin d'essayer de rendre tout ça un peu user-friendly et avec le tutorial, ça rend le tout plus compréhensible.

  • # gné

    Posté par . Évalué à 2.

    Alors moi j'utilise l'extension pwgen.
    Un site me demande un mot de passe pour créer un compte, je clique, je colle. Mon navigateur demande si il doit s'en rappeler. Je dis oui. Je tape mon master password. En plus ça se synchronise au cas où j'en ai besoin sur un autre pc.

    Qu'est ce que je loupe à ne pas utiliser une grille ?
    En suivant le tutoriel, au demeurant très bien fait, je ne comprends pas la lourdeur du processus : pattern, préfixe, etc.

    • [^] # Re: gné

      Posté par . Évalué à 2.

      On va dire que l'avantage c'est de ne pas dépendre d'un logiciel, d'une synchronisation, tu peux y accéder depuis un smartphone sans rien installer de plus, …

      Le pattern est également un élément de sécurité supplémentaire au cas ou quelqu'un se ferait voler son master password.

      L'avantage aussi, c'est que c'est une méthode générique, qui marche pour tout et pas uniquement pour des password concernant de sites web (je ne dis pas que pwgen n'est pas générique, je ne le connais pas), et même si quelqu'un t'observe il n'aura pas d'infos sur ton mot de passe (suivant les gestionnaires de mots de passe j'imagine qu'il est également difficile de voir le mot passe vu qu'il est éventuellement très long ou masqué).

      Mais je te l'accorde volontiers, c'est un choix personnel, un gestionnaire de mot passe bien utilisé peut largement faire l'affaire.

      • [^] # Re: gné

        Posté par (page perso) . Évalué à 1.

        l'avantage c'est de ne pas dépendre d'un logiciel, d'une synchronisation, tu peux y accéder depuis un smartphone sans rien installer de plus

        Alors, ça va sans doute en faire hurler plus d’un, mais pour ma part, mes mots de passes les plus importants (tous générés aléatoirement, sans « master secret » commun ou quoi que ce soit dans le genre) sont stockés… sur un bout de papier au format « carte de crédit ».

        Je ne dépends d’aucun logiciel pour les retrouver et je peux les utiliser depuis n’importe où sans aucune synchronisation préalable.

        Je considère qu’ils sont plus à l’abri dans mon porte-feuille, hors de portée de toute attaque informatique, que sur mon ordinateur connecté à Internet (a fortiori dans un gestionnaire de mots de passe, sachant que les bad guys ont bien compris l’intérêt qu’il y avait à s’attaquer à ces outils).

    • [^] # Re: gné

      Posté par . Évalué à 1.

      Et concernant la lourdeur: oui, c'est un peu fastidieux à expliquer, mais une fois qu'on à l'habitude de son pattern/préfixe, le tout va très vite et je lis mon mot de passe en quelques secondes après génération :)

      Si certains site n'imposaient pas des restrictions complètement stupides sur le contenu des mots de passe alors il n'y aurait pas besoin d'ajouter ces "compléments". Mais comme il y en a, je préfère faire un schéma qui s'adapte, plutôt que de devoir gérer une série d'exception qui n'accepteront pas les mots de passe venant directement de la grille.

      • [^] # Re: gné

        Posté par . Évalué à 1.

        Peut être que le but n'est pas clair non plus.
        Si le but est de pouvoir bloquer l'accès aux données en brulant la grille, il manque l'aspect non déterministe comme le dit BFG.
        Si le but est de dériver des mots de passe à partir d'un mot de passe maitre et d'un identifiant de site web, il y a des extensions pour ça.
        Si le but est de générer une grille imprimable pour tout usage, pourquoi pas. Dans ce cas, on retombe sur le non déterministe il ne fait pas mettre de paramètre à la génération.

        Car si la grille est trouvé ou peut être reconstruite, il ne faudra pas très longtemps pour retrouver ou faire avouer le pattern.
        Tu parles de 2800 milliard de possibilités mais dans la pratique, un utilisateur va privilégier un pattern continu, pas trop tordu (disons max 2 virages). Je ne me suis pas lancé dans le calcul mais ça doit à la portée d'un simple pc. Ou d'une clé à molette.

        Aussi, à force de taper un mot de passe, tu finis par t'en rappeler sans avoir besoin de la grille. Donc, clé à molette, tout ça.

        Enfin, cela ne passe pas bien à l'échelle. J'ai plus de deux cents mots de passe gérés par mon navigateur. Je me vois pas gérer deux cents grilles.

        Je pense que ce système de grille est bien, en mode non déterministe, pour un mot de passe vital que tu ne rentre pas tous les jours. Genre un mot de passe de PKI ou de chiffrement de disque serveur.

        • [^] # Re: gné

          Posté par . Évalué à 3.

          un utilisateur va privilégier un pattern continu, pas trop tordu (disons max 2 virages)

          Il y a un peu plus que ça. Tu peut prendre 2 lignes disjointes par exemple comme un « = ».

          Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

          • [^] # Re: gné

            Posté par . Évalué à 2.

            C'est vrai qu'en incluant des formes connues on augmente pas mal les possibilités.

        • [^] # Re: gné

          Posté par . Évalué à 1.

          Salut, voir mon commentaire plus bas, car tu confonds ce que j'ai fait avec un système de grille fixe.

          Les 2'800 milliards ne viennent pas du pattern. C'est les différents caractères possibles (26 + 10) ^ 8, donc pour un mot de passe de 8 caractères aléatoires dans cet alphabet.

          Le pattern est une sécurité additionnelle. Ne pas oublier qu'on peut aussi attaquer le master password s'il est faible.

      • [^] # Re: gné

        Posté par . Évalué à 5.

        Puisque tout le monde donne la sienne, j'utilise keepassx. Pour moi l'intérêt c'est :

        • ne jamais montrer les mots de passe
        • permet de définir des expirations pour me pousser à changer certains mot de passe régulièrement
        • la possibilité d'enregistrer n'importe quoi (c'est un cas un peu tordu - pas prévu -, mais je stocke des clef SSH dedans)
        • la possibilité d'avoir des informations en plus (pour des mots de passe windows, j'ai aussi le domaine)
        • très simple à comprendre :)

        Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

        • [^] # Re: gné

          Posté par . Évalué à 1.

          Oui mais
          1) tu dépends de keepassx :)
          2) tu n'as pas la deuxième sécurité du pattern, si ton master password est compromis tous les mots de passes sont compromis (après je dis pas, si on est dans un cas ou ton pc est hacké et tout passe au keylogger, un attaquant aura vite fait dans mon système aussi d'avoir le master password + mot de passe finale et obtiendra le pattern).

          Un système comme le mien je peux y accéder depuis d'importe où et dans un cas extrême on peut même le refaire "à la main" avec juste du sha-512.

          Compromis toussa… comme disait mon maitre chinois, la vérité est dans chacun d'entre nous

          • [^] # Re: gné

            Posté par . Évalué à 3.

            1) tu dépends de keepassx :)

            Non, c'est un format connu et utilisé par plusieurs gestionnaire de mot de passe dont une appli android. Amplement suffisant pour le commun des mortel (après si tu cherche à pouvoir t'authentifier sur un site, même quand tu n'a pas internet c'est un autre problème)

            2) tu n'as pas la deuxième sécurité du pattern, si ton master password est compromis tous les mots de passes sont compromis

            Cette sécurité me semble théorique. Dans quel cas est-ce que l'attaquant connais l'un sans pouvoir déduire l'autre ? C'est utile pour une appli web car c'est un élément bloquant pour que le créateur du site (ou un gars sur le réseau), mais dans ce cas là ce n'est pas une sécurité en plus, c'est l'unique sécurité !

            Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

            • [^] # Re: gné

              Posté par . Évalué à 1.

              Cette sécurité me semble théorique. Dans quel cas est-ce que l'attaquant connais l'un sans pouvoir déduire l'autre ?

              Se faire voler un mot de passe parce qu'on l'a noté ou réutilisé sur un site qui l'a mal protégé est possible non ? Cela n'implique pas une autre perte simultanée.

              Le fait que l'un soit une string (le master password) et l'autre un élément issu d'un logique "visuelle" implique qu'ils ne seront pas stocké / utilisé de la même manière. Un master password pourra être (même si c'est mal) réutilisé ailleurs, le pattern probablement pas.

              Finalement, le pattern peut-être faible ou extrêmement fort, tout dépend du choix de l'utilisateur. S'il est faible alors on s'expose a une attaque brute force tout comme pour le master password.

              Keepassx est un système avec stockage sécurisé alors que le mien est une approche sans stockage.

              C'est utile pour une appli web car c'est un élément bloquant pour que le créateur du site (ou un gars sur le réseau), mais dans ce cas là ce n'est pas une sécurité en plus, c'est l'unique sécurité !

              Les grilles ne doivent bien évidement pas être accessibles ou transiter en clair sur le réseau. C'est pour ça que ma webapp est totalement réalisée en javascript et donc exécutée uniquement côté client.

          • [^] # Re: gné

            Posté par . Évalué à 3.

            1) tu dépends de keepassx :)

            ça a été déjà dit, le format est ouvert, et pas mal de logiciels existent sur pas mal de plateformes. Tu dépends d'un logiciel, ça oui. Logiciel que tu peux avoir sur toi (clé usb, smartphone).

            2) tu n'as pas la deuxième sécurité du pattern

            Si, tu peux utiliser une authentification supplémentaire à l'aide d'un fichier clé que tu stockes de manière séparée de la base de données.

            J'ajouterais quelques avantages des gestionnaires de mot de passe:
            * Ils saisissent ton nom d'utilisateur et ton mot de passe pour toi. Et ça, quand on y a goûté, on ne s'en passe plus.
            * Tu peux changer un mot de passe. Avec ton système, si j'ai bien compris, tu ne peux pas sans toucher à ton master password ou à ton pattern.
            * Autres avantages comme avoir la liste de ses comptes, la protection contre les attaques brute-force, et même contre les keyloggers, stocker d'autres informations (numéro de carte bancaire, numéro de passeport, clés ssh, etc.)

  • # two factors

    Posté par . Évalué à 1.

    Je reformule un peu mon dernier commentaire.

    En terme d'authentification, la grille permet une authentification forte car combinant deux facteurs: something you know : le pattern et something you own : la grille.

    Avec le limitations que j'évoquais :
    Il faut qu'elle soit non déterministe.
    Il ne faut pas en abuser car ce que tu possèdes, la grille, à force de la lire, va devenir ce que tu sais. Et tu retombe sur une authentification faible, c-à-d avec un seul facteur.
    Il ne passe pas à l'échelle : impossible de gérer des centaines de grilles et de mémoriser des centaines de patterns.

    • [^] # Re: two factors

      Posté par . Évalué à 1.

      Salut,

      ce dont tu parles n'est pas mon système. Il ne s'agit pas d'une grille aléatoire que l'on garde.

      La grille change, pas le pattern ni le master password.

      Le système passe très bien à l’échelle, je gère des centaines de mots de passe avec.

      Quand tu as besoin d'un mot de passe, soit:
      1) tu le sait par cœur (quand on l'utilise souvent)
      2) tu lances la grille, tu tapes le master password et l'identifiant et tu "lis" ton mot de passe et basta

      Donc pas de grilles à mémoriser et un seul pattern à avoir.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.