La cryptographie pour les nuls I : Keepassx

Comme tout le monde, vous avez plusieurs mots de passe à mémoriser : boîtes mails (avec un « s » car vous en avez bien évidemment plusieurs), comptes sur divers sites (amazon, ebay, banque, facebook satan [1], forum ubuntu-fr…). Du coup, comme tout le monde, vous utilisez partout le même. Grossière erreur ! Si l’un de ces sites se fait pirater, c’est tous vos comptes qui sont compromis ! Ce qui, faut-il le préciser, n’est pas une bonne chose : non seulement le vilain pourra accéder à vos données sur le site maintenant piraté mais aussi sur les autres. Il pourra aussi éventuellement se faire passer pour vous ou utiliser les informations acquises pour payer avec votre carte bleue. Ce qui n’est guère enthousiasmant.

« Que faire ? », me demanderez-vous. « Installez Keepassx », vous répondrai-je.

De la nécessité de stocker ses mots de passe

Tout d’abord, j’espère que l’introduction ci-dessus vous a montré qu’il faut utiliser différents mots de passes pour les différents sites que vous utilisez. Néanmoins, mémoriser plusieurs mots de passe peut s’avérer difficile, et ce d’autant plus qu’ils doivent être « bon ». En effet, les vilains pas beaux qui veulent pirater vos comptes peuvent employer une méthode très simple : essayer tous les mots de passes possibles jusqu’à tomber sur le bon. Pour se prémunir contre cela, il n’y a pas des dizaines de manières de procédé : il faut des mots de passe compliqués. 8 caractères sont un minimum strict, la présence d’au moins un chiffre et de lettres de différentes casses [2] aussi. De plus, l’essai de tous les mots de passe possibles, appelé « attaque par la force brute » voire « brut-force » pour les intimes anglophones ne consiste pas seulement en un essai de toutes les combinaisons de lettres possibles. En effet, le procédé peut être amélioré en utilisant des dictionnaires : dès lors, on essaie d’abord toutes les combinaisons de mots du dictionnaire, d’où la nécessité d’un mot de passe encore plus compliqué. Illustrations :

  • aaa ou 123456 ou encore azertyuiop : très mauvais mots de passe. De part leur simplicité, ils sont très répandus et par conséquent parmi les premiers à être testés (cf. sources données en fin d’article). Vous pouvez presque considérer les informations publiées avec un tel mot de passe (tout pourri) comme publiques, c’est à dire que tout un chacun peut non seulement les lire mais les modifier, ce qui peut être encore plus embêtant.
  • john781124 : mieux, mais la date de naissance est aussi un motif (trop) classique. Cela peut être suffisant pour des choses de peu d’importance (inscription sur des forums par exemple), mais est trop faible pour une application nécessitant une vraie sécurité : mot de passe root sous GNU/Linux, mot de passe bancaire, données chiffrées sur votre ordinateur [3], etc. Et ne venez pas pleurer si votre compte se fait pirater !
  • J0h24n,11 ou N'epmcqàjd12Eacd'èépmmlm. : respectivement mieux et vraiment beaucoup beaucoup mieux. Le premier est obtenu à partir du prénom et de la date de naissance mais il a été amélioré en remplaçant le « o » par un « 0 » (zéro), en mettant le jour de naissance dans le nom et en ajoutant un ponctuation. Plus efficace que le précedent, il est par contre plus difficile à mémoriser. Le deuxième est très robuste et en fait assez facile à mémoriser : les fans de Lovecraft savent bien ceci : « N’est pas mort ce qui à jamais dort. Et au cours d’ères étranges peut mourir même la mort. ». Prenez la première lettre de chaque mot, gardez la ponctuation et séparez les phrases par un nombre (12 ici) et vous obtenez un beau mot de passe en béton armé !

    Ces mots de passes, en particulier ceux du type du deuxième sont adaptés à la protection d’informations sensibles. En fait, en tant qu’humains, vous ne pourrez pas faire beaucoup mieux…

  • DfASXxYv9egtwyDEudfkKx8FZPk ou 4rig9sFVL0xAiT9x+amcUdmLe/Q : Impossible en théorie [4] de faire mieux ! En effet, il s’agit ici de séquences de lettres, chiffres et ponctuation presque aléatoires (on dit « pseudo-aléatories »). Si elles étaient parfaitement aléatoires, il n’y aurait absolument aucun moyen autre que la force brute pour les obtenir. En pratique, même si les séquences ne sont que pseudo-aléatoires, la force brute reste la seule possibilité (à moins de vraiment utiliser un générateur pseudo-aléatoire en carton).

Néanmoins, même s’il est possible de mémoriser quelques très bon mots de passe, il vous en faut en fait de très nombreux. Donc vous ne pouvez pas les mémoriser : il faut les stocker. L’idée de keepassx (et d’autres logiciels du même acabit, comme passwordsafe) est de stocker des mots de passe en les protégeant… À l’aide d’un mot de passe ! Celui-ci, appelé « maître », se doit d’être particulièrement solide. Le mien par exemple fait aux alentours de 20 caractères avec majuscules, minuscules, ponctuations, chiffres et lettres accentuées. Mais il ne peut pas être aléatoire car vous allez devoir le mémoriser (en fait, c’est le seul).

Utilisation de Keepassx

Lors donc, intéressons-nous de plus près à ce logiciel. Tout d’abord, pourquoi vous parle-je de celui-ci en particulier ? Parce que je le connais bien (c’est celui que j’utilise) et parce qu’il est multi-plateforme : il tourne aussi bien sous GNU/Linux que sous Windows ou Mac OS. Enfin, c’est ce que tout le monde dit, moi je n’ai testé que la version GNU/Linux [5].

Installation

  • GNU/Linux : Sous ubuntu, ouvrez un Terminal (Applications > Accessoires > Terminal). Là, tapez « sudo apt-get install keepassx », puis faites « Entrée ». Ensuite, tapez votre mot de passe (rien ne s’affiche, c’est normal) puis re-faites « Entrée ». Une fois que les messages cryptiques ont fini de défiler, c’est bon ! Vous pouvez le trouver dans le menu Applications > ??????. Ceux qui ne sont pas sous Ubuntu auront reconnu une bête installation de paquet. Au pire, les sources sont dispos.
  • Windows : comme toujours, télécharger le .zip sur le site du programme, dézippez le (clic droit > ouvrir avec winzip… Du moins je suppose ^^). Ensuite, pour lancer le programme, cliquez simplement sur KeePassW.exe. Notez que vous pouvez mettre le dossier ainsi obtenu sur clef USB afin d’être sûr d’y avoir toujours accès ! C’est ce que je fais personnellement, mais nous y reviendrons.
  • Mac OS : … Euh… Aucune idée. Vous pouvez le télécharger ici, mais je ne sais pas ce qu’il faut faire après. Peut-être qu’en priant suffisamment fort, le fantôme de Steeve Jobs vous viendra en aide ? EDIT : une bonne âme a fourni des explications sur le sujet dans les commentaires ; louée soit-elle !

Création de votre base de données chiffrées

Maintenant, créons une base de données contenant vos mots de passe. Dans mon immense bonté, j’ai même fait des captures d’écran pour vous faciliter encore plus la tâche ! Gardez à l’esprit que je n’ai cependant testé que la version GNU/Linux et que des différences peuvent exister avec les autres. Je serais cependant surpris qu’elles soient autres que cosmétiques.

  1. Lancement : création d’une base de donnée chiffrée

    Capture d'écran montrant la création d'une nouvelle base de données chiffrée par Keepassx

    Voici la fenêtre qui s’ouvre quand vous lancez keepassx pour la première fois. Comme vous pouvez le constater, on vous demande de définir la « clef maître ». Celle-ci est le mot de passe qui vous sera demandé à chaque fois que vous lancerez l’application pour retrouver vos mots de passe. C’est sur lui que repose la sécurité de toutes vos données, alors choisissez en un bon. Et ne l’oubliez pas ! Si vraiment vous n’êtes pas sûrs de vous, vous pouvez l’écrire sur un papier que vous garderez dans votre porte-feuille (ou encore mieux, écrivez juste un moyen mnémo-technique).

    Il est également possible d’utiliser un fichier comme mot de passe. À vous de voir, si vous ne savez pas quoi faire, choisissez un mot de passe 😉

  2. Confirmation du mot de passe

    Capture d'écran montrant la fenêtre de confirmation du mot de passe.

    Tout est dans le titre : il faut que vous retapiez votre mot de passe. J’ai bien dit « retapez » hein, pas « copiez-collez ». Le but étant de vérifier que vous n’avez pas fait de faute de frappe, ce serait dommage de contourner cette sécurité.

  3. Fenêtre principale

    Passons au chose sérieuses ! Regardons à quoi ressemble l’interface principale de Keepassx. Pour bien commencer, voilà une capture d’écran :

    Capture de la fenêtre principale de Keepassx

    Vous pouvez dors et déjà noter la présence d’icônes classique dans la deuxième barre horizontale en partant du haut : une feuille blanche pour créer une nouvelle base de données, un disquette sortant d’un dossier pour l’ouverture d’une base de données déjà existante, une disquette pour la sauvegarde et une clef jaune pour l’ajout d’une nouvelle entrée. Notez au passage qu’une description rapide de l’action effectuée par chaque bouton apparaît en plaçant la souris dessus sans cliquer.

    La notion d’entrée est cruciale pour le fonctionnement de ce logiciel, je propose donc [6] que nous nous intéressions de plus près à cette notion. Pour Keepassx, une entrée est l’ensemble constitué d’un nom d’utilisateur, du mot de passe qui lui est associé et d’autres informations facultatives, comme l’adresse du site considéré, un quelconque commentaire, une date d’expiration et même un éventuel fichier à joindre à l’ensemble. Ce fichier sera d’ailleurs chiffré lui aussi [7].

    La barre latérale à gauche de l’interface montre les différents groupes d’entrées. Celles-ci sont regroupées pour permettre des les retrouver plus simplement. Cela n’a rien d’obligatoire, mais c’est quand vachement pratique ! Pour ajouter un nouveau groupe, cliquez simplement sur l’onglet « groupes » dans la barre horizontale (tout en haut), puis cliquez sur « ajouter un groupe ».

Ajout et consultation d’une entrée

Maintenant que le programme est lancé, il s’agit de l’utiliser !

  1. Nouvelle entrée

    Comme dit précédemment, l’information est stockée dans des « entrées ». Nous allons donc en créer une. Pour cela, cliquez sur la clef jaune dans la barre d’icône ou bien faites un clic droit sur le groupe dans lequel vous voulez mettre cette entrée et choisissez « ajouter une nouvelle entrée. Ceci devrait apparaître :

    Capture de la fenêtre de création d'une nouvelle entrée

    C’est assez clair : il faut que vous remplissiez les différents champs pour pouvoir stocker les informations voulues. Notez qu’il est possible en faisant un clic droit sur une entrée dans l’écran principal de copier le mot de passe et le nom d’utilisateur. Du coup, le mot de passe ne sera jamais affiché en clair (à moins que vous ne le demandiez explicitement) ! Mais intéressons-nous de plus près au champ « mot de passe ».

  2. Génération d’un mot de passe

    Comme précédemment, il faut le taper deux fois. Néanmoins, si vous voulez créer un nouveau compte sur un site, ou bien si vous voulez remplacez un mot de passe en carton existant, vous pouvez en générer un quasi-aléatoire. Puisque vous n’avez pas besoin de mémoriser les mots de passe, autant en profiter pour prendre des trucs solides ! CLiquez sur l’icône « Gén. » à côté des champs « mot de passe ». La fenêtre suivante apparaît:

    Capture de la fenêtre de génération d'un nouveau mot de passe

    Je vous conseille les réglages que j’ai utilisé. Cependant, il se peut que certains sites interdisent par exemple les caractères spéciaux. Dans ce cas, décochez simplement la case correspondante. Si la longueur est limitée, vous pouvez également la diminuer.

    La case « activer la collecte d’aléas » permet, si elle est cochée, d’augmenter « l’aléatoiritude » [8] du mot de passe généré. Pour cela, lors de la génération, une nouvelle fenêtre va apparaître:

    Capture de la fenêtre de génération des aléas

    Comme expliqué dans la nouvelle fenêtre, agitez la souris et tapez n’importe quoi au clavier pendant la durée nécessaire. Le but est d’avoir des mouvements aléatoires, donc faire des ronds avec la souris n’est pas une bonne idée…

  3. Sauvegarde

    Pour sauvegarder votre base de données, il suffit de cliquer sur la disquette de la barre d’icône puis de créer un fichier à l’endroit où vous voulez, ayant le nom que vous voulez. Il sera bien de stocker cette base de données à plusieurs endroits, par exemple sur une clef USB que vous avez toujours sur vous (j’en ai une dans mon porte-clefs) sur laquelle vous pouvez mettre le fichier .exe de Keepassx. Comme ça, vous pourrez accéder à vos mots de passe sur le PC sous Windows de vos amis [9].

  4. Lecture

    Pour accéder aux informations que vous venez d’enregistrer, il suffit de lancer Keepassx. S’il n’ouvre pas la bonne base de données tout seul, il faut la lui préciser soit lorsque cela est demandé (au lancement), soit en cliquant sur l’icône « ouvrir » (deuxième en partant de la gauche).

    Pour lire le contenu d’une entrée, le plus simple est de faire un clic droit dessus : on vous proposera de copier le mot de passe ou le nom d’utilisateur : même pas besoin de l’afficher à l’écran ! Sinon, vous pouvez cliquer sur « afficher/modifer » pour tout voir. Mais ça ne devrait pas souvent être la peine.

Conclusion

Un article plus long que la moyenne (en particulier du fait du nombre de captures d’écran) qui était j’espère suffisamment accessible pour que même les plus novices le comprenne. Comme toujours, n’hésitez pas à me poser des questions dans les commentaires ! Prochaine épisode : « La cryptographie pour les nuls II : truecrypt » aucours duquel nous verrons comment utiliser vos mots de passes en béton pour protéger vos données sur votre ordinateur (ou sur votre clef USB).

Sources

  • Un document (pdf en anglais disponible ici) rédigé par Imperva (en), une société américaine spécialisée dans la sécurité des données, après qu’un hacker ait mis la main sur 32 millions de mots de passe qu’il a publié de façon totalement anonymisée (c’est à dire que les logins correspondant n’étaient pas révélés, le but n’était donc manifestement pas de nuire).
  • Cet article (en) expliquant comment fonctionne un « casseur de mot de passe » puis des méthodes pour s’en prémunir a été écrit par Bruce Schneier, un sommité mondial en sécurité de l’information. En fait, il y a même des « Bruce Schneier Facts » (en) calqués sur les « Chuck Norris Facts ». Attention cependant, un niveau correct en cryptologie et/ou théorie de la complexité est nécessaire pour les apprécier à leur juste valeur…

[1] (retour) Hmmm ? Subtilité ? Et puis quoi encore ?
[2] (retour) On appelle « casse » le fait pour une lettre d’être en majuscule ou en minuscule. En l’occurrence, il faut que vous mélangiez majuscules et minuscules.
[3] (retour) Un article sur comment chiffrer vos données personnelles sur votre ordinateur devrait suivre sous peu.
[4] (retour) En théorie seulement, en pratique, pour que cela soit parfait, il faudrait un générateur de nombres parfaitement aléatoires. Cela n’existe pas à l’heure actuelle, mais il en existe tout de même de bons. Pour les besoins de la démonstration, j’ai utilisé celui d’openssl avec la commande openssl rand -base64 20 (20 étant le nombre d’octets générés) même s’il est imparfait, comme tous (à des degrés divers cependant).
[5] (retour) Je vais pas installer windows juste pour ça, non mais 😮
[6] (retour) Mais sans vous laisser le choix parce que bon, hein, c’est moi le chef quand même. Non mais.
[7] (retour) Techiquement, Keepassx peut donc être utilisé pour stocker autre chose que des mots de passe de façon sécurisée. Néanmoins, il n’a pas été conçu dans cette optique et n’est par conséquent pas vraiment adapté à cet usage. Bien sûr, cette fonctionnalité peut dépanner ; cependant, je recommande plutôt pour cela truecrypt (qui sera lui aussi le sujet d’un article).
[8] (retour) Oui, bon, vous avez compris hein. Ne chipotez pas.
[9] (retour) Et vous faire ainsi piquer tous les mots de passe que vous utiliserez chez lui parce qu’il aura 15 virus différents d’installés sur sa machine dont 3 enverront les mots de passe qu’ils ont vu aux chinois du FBI travaillant pour le KGB :P. Oui, « référence nécessaire », certes. Tant pis.

23 réflexions au sujet de « La cryptographie pour les nuls I : Keepassx »

  1. À un moment (dans la note 4 en fait) tu dis :
    « En théorie seulement, en pratique, pour que cela soit parfait, il faudrait un générateur de nombres parfaitement aléatoires. Cela n’existe pas à l’heure actuelle, mais il en existe tout de même de bons. »
    Ça n’existe vraiment pas ?
    Même ceux basés sur des phénomènes physiques ? Certaines cartes pour applications « sensibles » ont un RNG en hard qui se base, en général, sur le bruit thermique des composants environnants. C’est pas parfaitement aléatoire ce genre de trucs ?

    • Déjà, il faudrait définir parfaitement aléatoire 😛 Sinon en effet, j’aurais du être plus précis : « il n’existe pas de générateur de nombres aléatoires logiciels parfaits à l’heure actuelle ». On va dire que c’était une simplification pédagogique *sifflote*

      Les générateurs basés sur des phénomènes physiques doivent être bien meilleurs… Mais bon, le traitement informatique derrière garantit-il toujours le caractère aléatoire ? Dans mon cours de théorie de la complexité, on définit un générateur de nombre aléatoire comme une fonction qui prend en entrée une string d’une longueur quelconque, « vraiment » aléatoire, et renvoie une chaîne beaucoup plus longue qui « a l’air » aléatoire elle aussi ; le « a l’air » ayant une définition mathématique passablement compliquée. En gros, on ne sait pas si de telles fonctions existent : si P=NP, alors non. Sinon, oui.

      En résumé : avec des phénomènes physique, on a une bien meilleure seed, mais on est toujours « coincé » par l’algo générant la longue séquence aléatoire à partir de celui-ci. Sauf à user directement la sortie du capteur, auquel cas il a intérêt à avoir une sacrée cadence :/

      • Pour le logiciel, on est d’accord 🙂

        Ouais, je me doutais bien que l’algo (voire l’échantillonage) qu’il y a derrière risquais de poser problème. Je t’avoue que je ne sais pas vraiment comment c’est fichu (précisement) ces machins-là :/

        Pour utiliser directement la sortie capteur (je ne sais pas si ça se fait, mais de toutes façons t’as au minimum une étape d‘échantillonage) ça resterait jouable vu que certains ont une bonne cadence. Mais c’est sur que ça restera plus lent que du pur logiciel. Mais ça c’est un problème souvent rencontré : qualité vs quantité (rien que sous Linux avec /dev/random vs /dev/urandom)

  2. (Rapport au commentaire précédent : KDE ≠ Qt. Qt, c’est pas du GTK, mais c’est bien quand même. KDE, c’est fait en une surcouche de Qt toute moche qui n’en reconnait pas la configuration, et… voilà, quoi)

    Sinon, tu n’es donc pas d’accord avec http://xkcd.com/936/ ?

    Pour les utilisateurs de Mac OS, si ça n’a pas changé : un .dmg, c’est une image disque. Quand on double-clique dessus, elle est montée (comme une clef USB ou un CD), et on peut attraper le répertoire qui sert d’exécutable pour le glisser-déplacer dans le répertoire destiné à contenir les applications (opération qui ne demande aucun mot de passe ni privilège particulier, me semble-t-il). Cool, non ?

    Sinon, faute de frappe dans la dernière source : « a été écrit par Bruce Schneier » et non pas « pas » 😉

    • Merci pour la faute de frappe, corrigée ; ainsi que pour l’explication pour Mac (j’ai rajouté un lien dans le corps du texte).

      En ce qui concerne le xkcd, je trouve qu’il passe un peu rapidement sur les attaques par dictionnaires. Ce qui ne veut pas dire que son point de vue ne se défend pas, mais sa méthode serait beaucoup moins puissante si elle se généralisait (généralisation des attaques par dictionnaire « simple »). Pour plus de détails, voilà un post sur le sujet trouvé dans les bas-fonds de l’Internet.

  3. Dans l’exemple John Bob utilise un mot de passe de 7 caractères…
    Si la durée de vie d’un mot de passe de 8 caractères est d’un an en brute force méthode… je ne donne pas cher de la durée de vie d’un mot de passe de 7 caractères…

        • Si, je donne le truc qui consiste à prendre les premières lettres de chaque mots d’une phrase qu’on connaît par cœur. Après, il y en a sans doute d’autres mais celui-ci marche bien et il est Schneier approved (cf. article du guardian de la rubrique « source »).

          • Oui, la première, la dernière, la seconde… un truc… mais finalement on pourrait faire des dictionnaires de trucs… j’en parle dans le message suivant…

  4. « Le mien par exemple fait aux alentours de 20 caractères avec majuscules, minuscules, ponctuations, chiffres et lettres accentuées. Mais il ne peut pas être aléatoire car vous allez devoir le mémoriser (en fait, c’est le seul). »
    Voici deux mots de passe très facile à retenir mais qui ne résistent pas forcément aux attaques dictionnaire :
    UsvQcdlhJlaplqJlmàcmCmmdTldlhTldleÇfuetc
    eseitsleeleraeeaeàssssetzaslezasluaanttd
    il suffirait de placer des chiffres à quelques endroits suivant une règle pour rendre ces deux mots de passe incassables.

    Mais bon, mon oncle dit que plus l’armure est grosse, plus perforant est l’obus…

    • Pour répondre à ton message juste au-dessus, non, on ne peut pas faire de tables de tous les « trucs » pour la simple raison qu’une telle table devrait être énorme ; et elle ne serait de toute façon pas très utile.

      Le problème, c’est qu’on peut imaginer un très grands nombres de tels trucs, tant et si bien qu’une telle table devrait contenir toutes les chaînes de caractères possibles dans l’alphabet auquel tu te restreins (ou au moins avoir une taille de cet ordre de grandeur) : autant la régénérer à chaque fois, ça économisera de la place en mémoire. Parce que même si on se limite aux chaînes de caractères de 10 caractères contenant seulement les lettres de l’alphabet, on en obtient 26^10 = 141 167 095 653 376 : il va te falloir un sacré disque dur. Et si tu veux stocker les chaînes de 20 caractères avec minuscules/majuscules et chiffres, sache qu’il y en a (26*2+10)^20 (de l’ordre de 10^36) : ça fait beaucoup.

      Donc en gros non, on ne peut techniquement pas stocker tous les « trucs » d’une qualité raisonnable ; en tout cas pas en l’état actuel des choses.

      • Ok. Nous non, nous ne pouvons pas stocker …

        Ni même la NSA en 2010 avec une capacité de stockage de 1 Yo… 1 Yo ( 1 yottaoctets = 10²⁴ octets). Mais ils stockent tout internet sur un an apparemment.

        Donc on peut casser les clés RSA avec un algorithme basé sur l’asymétrie des processeurs (la faille de sécurité de tous les processeurs PC, une histoire de prédicteur de branchement) mais les mots de passes résisteraient ?

        Cool !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

What is 10 + 15 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)