Avec la numérisation permanente de notre société, la gestion des mots de passe et des certificats est devenue un point essentiel de notre sécurité.

Cet article est le troisième et dernier d’une série de billets sur le sujet :

  1. Robustesse d’un mot de passe ;
  2. Le chiffrement, symétrie et asymétrie ;
  3. La gestion des mots de passe.

Cet article peut être lu sans avoir préalablement lu les deux autres même si je vous conseille d’y jeter un œil, ne serait-ce que pour votre culture générale.

# Les mots de passe

Un petit rappel pour commencer. Les mots de passes sont une ressource critique à notre ère numérique. Ils sont censés protéger, entre autres, l’accès à nos données privées.

Vos mots de passes doivent absolument être tenus secrets, de vos ami·e·s, de vos collègues de travail, de vos partenaires. De plus, un mot de passe ne doit jamais être utilisé sur des systèmes différents, pour éviter des complications lors d’une faille de sécurité.

Dernière point, ils doivent être longs et aléatoires. On parle actuellement de plus de quinze caractères. Et il est préférable de les rallonger plutôt que de rajouter des caractères spéciaux qui rendent leur écriture difficile selon le périphérique que vous utilisez.

Tout ceci est expliqué dans mon billet sur la robustesse d’un mot de passe.

# Le problème

Maintenant qu’on sait qu’il faut des mots de passe compliqués et différents partout, il nous faut trouver une solution pour nous en rappeler si, comme moi, vous faites partie de la grande partie de la population qui n’en est pas capable. Pour se faire une petite idée du nombre de mots de passe dont nous devons nous rappeler, listons ensemble les besoins :

  • réseaux sociaux ;
  • mails ;
  • plateformes de vente, d’apprentissage, ou autre ;
  • les accès aux données de votre entreprise ;
  • votre compte bancaire ;
  • les sites tout pourris mais où vous allez quand même de temps en temps.

En rajoutant toutes les utilisations que je n’ai pas listées ici, on arrive facilement à une trentaine de mots de passe. Le but n’étant pas d’en avoir le plus, mais j’ai actuellement 110 occasions différentes d’entrer un mot de passe, certaines utilisations sont évidemment plus fréquentes que d’autres, par exemple pour me connecter à mon serveur, ou utiliser ma clé de chiffrement pour les mails, mais il me faut quand même une manière de me rappeler de tous.

# Les solutions

N’ayant pas été un précurseur sur le sujet, je vais vous expliquer les différentes solutions par lesquelles je suis passé et pourquoi je les ai quittées.

# Le mot de passe unique

On a déjà éliminé cette option, mais il me paraissait important de rappeler que c’est un fonctionnement fréquent de part sa simplicité, même pour les personnes formées en informatique. Nous, humains, avons la fâcheuse tendance de rester dans notre zone de confort, même lorsque nous sommes convaincus de faire une erreur.

En vrai, je n’utilisais pas un seul mot de passe mais quelques-uns que j’avais classé en fonction de leur utilisation, du moins sécurisé au plus sécurisé. Je tournais principalement avec trois mots de passes différents.

Cette méthode est évidemment à proscrire.

# La carte codée

Je ne sais pas s’il existe un autre nom pour cet outil. Lorsque j’ai décrété que mon petit jeu aux trois mots de passe avait suffisamment duré, il m’a fallu trouver une nouvelle solution. À ce moment-là, je n’arrivais pas à trouver une solution qui me convienne, j’ai donc décidé de faire ma solution. J’ai créé un script Python qui me génère une table comme la suivante :

0 1 2 3 4 5 6 7 8 9
AB _ } J G ,D N Z k xT t
CD ]D g ' 5 R e 6 o V c
EF t, XQ T 7 F / ? m @E jp
GH K t J S z 6 L f =h 4r
IJ H J m j bF * M r 8 {
KL w I s %E { U _ # A B
MN l W # 1 K P d c H i
OP H V + o e W u ( L4 aK
QR 4N Q / c ! 2 V Y mJ Xq
ST ] I a % L n D 2z B Rn
UV I p K !} T 76 l s L R#
WX l L ? ( c .z X T e J
YZ Z X} h b# d 70 6 z R rw

Exemple de carte codée

Le code du script Python
#! /usr/bin/env python

import string
import random
from random import sample

def randChar(nb):
	specialChar = ",?!'=()%*+/_.-[]#@{}"
	charList = specialChar + string.digits + string.ascii_letters
	s = sample(charList, nb)
	for i in range(nb):
		if random.random() < 0.2:
			s[i] = s[i] + sample(charList, 1)[0]
	return s

def randTab(x,y):
	tab = []
	for i in range(y):
		tab.insert(len(tab), [])
		tab[i] = randChar(x)
	return tab

def printtab(tab):
	f = open('test.out', 'w')
	for i in range(len(tab[0])):
		f.write('\t' + str(i))
	for i in range(len(tab)):
		f.write('\n' + string.ascii_uppercase[i*2:(i+1)*2])
		for j in range(len(tab[i])):
			f.write('\t' + tab[i][j])
	f.write('\n')
	f.close()

tab = randTab(10, 13)
printtab(tab)

Alors, vous allez me dire qu’est-ce que j’en fais de cette grille ? Tout simplement, j’utilise une fonction de hachage. Par exemple, j’utilise un code à quatre chiffres 1584 et la fonction de hachage est d’associer le code aux quatre premières lettres du nom de domaine. Dans le cas où j’ai besoin d’un mot de passe pour le site trolliet.info, je regarde les codes à l’intersection des chiffres et des lettres TROL. J’obtiens donc :

  • T1 => I ;
  • R5 => 2 ;
  • O8 => L4 ;
  • L4 => { .

Le mot de passe généré est donc I2L4{. Je peux facilement rallonger ma clé pour avoir un mot de passe plus long et/ou modifier mon code pour avoir plus de caractères par “case”. Avec le même code, pour le site ognon.ch, j’arrive au mot de passe V6He. Il m’est également possible de modifier la manière dont je “lis” le nom de domaine. Tout est possible, commencer par la fin, prendre un caractère sur deux, à vous de décider de la méthode au moment où vous commencez, il faut juste s’y tenir ensuite.

Le grand intérêt de cette méthode est que j’avais ma petite carte toujours sur moi, je peux donc aisément accéder à mes mots de passe sans avoir besoin de dépendre d’une structure externe pour cela. Tous les mots de passes se génèrent de la même manière, il faut uniquement se rappeler du code et de la “fonction de hachage”. Et un petit bonus, à priori si je perds ma carte, la personne y ayant accès ne peut pas en déduire mes mots de passe car il lui faudrait le code et la “fonction de hachage”.

J’ai utilisé cette méthode pendant plusieurs années, avec un code à huit chiffres et des “cases” comportant entre deux et trois symboles. Donc des mots de passe qui sont d’une longueur comprise entre seize et vingt-quatre symboles. Parfaitement en accord avec les recommandations actuelles.

Il y a quand même un gros problème dans le cas d’un mot de passe compromis. Dans ce cas, la seule solution est de modifier la carte codée et donc de modifier tous vos mots de passe.

L’autre petit problème est que nous ne pouvons pas adapter le mot de passe. Si une plateforme pose des contraintes ne correspondant pas aux nôtres, par exemple la longueur (maximum douze caractères, pourquoi ?), cette solution n’est plus utilisable, il faut donc utiliser une autre méthode en parallèle, perso j’avais un mot de passe générique pour ce genre de plateforme pourrie, pardon, de contrainte pourrie…

# Gestionnaire intégré au navigateur

Les navigateurs classiques proposent chacun de se rappeler des mots de passe. Je suis un utilisateur de Firefox1 depuis de nombreuses années et il propose évidemment cette option.

Étant donné que la majorité de nos usages des mots de passe se font sur Internet, avoir un navigateur qui s’en rappelle est bien pratique. J’ai utilisé cette fonctionnalité en parallèle à la carte codée pendant une bonne partie de mon usage de cette dernière.

Sans mot de passe sécurisant le stockage des mots de passe, votre navigateur ne peut pas les enregistrer autrement qu’en clair. Ce que cela sous-entend c’est que n’importe quelle personne qui aurait accès à votre machine a potentiellement accès à ces derniers. Il est donc impératif de configurer un master password, quel que soit le nom qu’a cette fonctionnalité sur votre navigateur.

Firefox et Chrome, et certainement d’autres, proposent une option pour synchroniser ses informations (historique, marques pages, options, etc.) et bien évidemment ses mots de passe. En imaginant que les informations soient chiffrées2 et donc illisibles par les personnes travaillant chez Mozilla ou Google, cette solution est pratique. Elle permet de ne plus se soucier de cette problématique sans avoir vraiment besoin de réfléchir à comment implémenter une solution.

Mais il faut pouvoir faire confiance à l’entreprise qui gère le navigateur et cette solution se limite uniquement à navigation sur Internet.

# Gestionnaire dédié

L’étape supplémentaire est de passer par un logiciel dédié, externe au navigateur. Ça résout la seconde problématique énoncée précédemment, à savoir la portée du gestionnaire, mais cela ne règle pas du tout la question de la confiance.

Il y a maintenant différentes options qui s’offrent à nous. Vous connaissez mon positionnement face à la sécurité et au respect de la vie privée, du coup je vais me limiter à des solutions libres afin d’avoir au moins une chance de savoir s’il fait n’importe quoi.

Les gestionnaires de mots de passe utilisent principalement AES comme algorithme de chiffrement, qui est donc symétrique. Petit rappel, cela signifie qu’il utilise la même clé pour chiffrer et pour déchiffrer les informations à sécuriser.

# KeePassXC

KeePassXC est un fork3 de KeePassX qui lui-même est un portage du projet KeePass sous GNU/Linux, ce dernier étant développé en C#, un langage de Microsoft qui nécessitait une librairie particulière (C#) peu fonctionnelle sur les systèmes non Microsoft. Le passage à KeePassXC à été fait à cause du manque d’activité de développement du projet KeePassX.

Ce logiciel, très simple d’utilisation et donc multi-plateforme (il fonctionne sous GNU/Linux, Windows et MacOS), fonctionne avec un stockage local. Il enregistre sa base de donnée dans un fichier et la déchiffre lorsque vous en avez besoin. Il a plein d’options pour augmenter la sécurité ou pour l’intégrer à votre navigateur préféré. Il intègre évidemment un générateur de mots de passe, simple mais fonctionnel. J’en profite pour vous rappeler, comme expliqué dans le premier article de la série, qu’il vous faut des mots de passes de plus de quinze symboles si vous voulez être sécurisés. Il est également possible de rajouter plein d’informations pour chaque entrée, comme le nom d’utilisateur, l’adresse web, une date d’expiration, je vous laisserai découvrir le logiciel s’il vous intéresse.

L’énorme avantage de cette solution fait également sa faiblesse, il ne nécessite rien d’autre que votre ordinateur pour fonctionner mais il ne permet donc pas de synchroniser les données sur différents appareils. Alors c’est évidemment contournable, par exemple en utilisant une clé usb pour transférer le fichier de base de donnée sur un autre appareil. Il est également possible de le synchroniser sur un “cloud”, du genre Nextcloud ou Dropbox. Dans ce cas précis, on ajoute un acteur dans la chaîne et il faut donc s’assurer de lui faire confiance. Personnellement je ne fais pas confiance à Dropbox, je fais confiance au logiciel Nextcloud, mais ce dernier devant être hébergé sur un serveur, je dois m’assurer de la confiance que j’ai en l’hébergeur. Dans mon cas, l’hébergeur c’est moi donc je me fais assez confiance.

# Bitwarden

Si la partie locale vous pose problème, il existe des gestionnaires en ligne. Pour cela, je vous recommande chaudement de choisir un service dans lequel vous avez confiance. Au même titre que Nextcloud, Bitwarden est un logiciel libre que vous pouvez héberger vous-même. Évidemment, s’héberger n’est pas à la portée de tout le monde, du moins sans un peu de formation, mais cette option permet d’héberger une instance dans votre entreprise ou dans votre association et ainsi garder complètement la main sur le logiciel.

Dans le cas où vous voudriez tester, ou utiliser activement, sans avoir de moyen d’installer votre propre instance, Bitwarden propose sa propre instance. L’offre est gratuite pour un usage privé et il existe des forfaits payants pour des utilisations à plusieurs avec des partages de mots de passe. L’offre la plus chère est à 36 € par année par personne, ce qui reste tout à fait correct.

Bitwarden possède également des applications mobiles pour être utilisé sur tous vos périphériques. C’est une solution que je recommande de préférence avec votre propre hébergement. Si cela n’est pas possible, individuellement ou en entreprise / association, il faut bien faire attention à la confiance que vous mettez dans l’entreprise hébergeant votre instance. La base de donnée est bien évidemment chiffrée et normalement illisible par l’hébergeur, mais il est toujours compliqué de savoir précisément ce que font les informaticiens, surtout si vous n’êtes pas à l’aise avec cette technologie.

# Mon utilisation

Personnellement, je n’utilise aucune de ces deux options. J’aime beaucoup la simplicité de KeePassXC et la flexibilité de Bitwarden, j’ai donc opté pour une solution qui me permet d’avoir les deux.
Attention, ma solution me convient car j’ai mon propre serveur et que du coup j’ai plus de liberté qu’un utilisateur ou une utilisatrice moyenne et que j’ai les connaissances qui me permettent de le faire.
J’utilise Pass qui fonctionne de manière très semblable à KeePassXC, malgré le fait qu’il n’ait pas d’interface graphique. Il enregistre les mots de passe (et autres informations) dans des fichiers chiffrés séparés, ce qui permet de versionner sa base de donnée avec un logiciel de gestion de versions. Je synchronise également ces versions sur un serveur dédié hébergé chez Infomaniak, ce qui me garantit un contrôle presque total sur mes données et une disponibilité permanente.

Bref, tout ça pour vous dire que ma solution est très proche de celles dont je vous ai parlé ici, juste un poil plus geek.

# Conclusion

Maintenant que vous avez franchi le pas et que vous utilisez un gestionnaire de mots de passe, profitez-en pour modifier tous vos mots de passe et de générer des nouveaux, aléatoires et longs (mettez trente caractères, ce n’est plus à vous de vous en rappeler). Il vous reste uniquement un mot de passe à retenir maintenant, celui qui sécurise l’accès à votre gestionnaire.

Pour cela, j’utilise la méthode diceware, qui consiste à piocher aléatoirement, avec des jets de dés, des mots dans une liste du dictionnaire. Les mots de passes ainsi générés ont une entropie de 77 bits s’ils sont constitués de six mots, je considère que c’est suffisant pour sécuriser l’accès à une donnée dont moi seul ai l’accès. On peut aisément monter à sept ou huit mots pour obtenir une entropie de respectivement 90 bits et 103 bits.

Évidemment, il y a plein d’alternatives. Je pense avoir survolé les différents fonctionnements, à vous d’utiliser une autre solution si vous trouvez mieux.


  1. En vrai, je suis actuellement principalement sur Qutebrowser qui offre des avantages de navigation au clavier et de configuration mais ce n’est pas le sujet du billet. ↩︎

  2. Voir mon article sur le chiffrement si vous ne savez pas ce que c’est. ↩︎

  3. Un fork, littéralement une fourchette, est une action fréquente dans le logiciel libre lorsque certaines personnes ne sont plus en accord certaines caractéristiques du projet de base. Par exemple, si le développement est jugé trop lent, il est usuel de faire un fork du projet et de le développer en parallèle. Les deux projets vont donc se distancer petit à petit. C’est ce qui s’est passé avec OpenOffice lors de son rachat par Sun, une partie de la communauté a préféré créer une fondation indépendante, The Document Foundation et de continuer à développer le fork sous le nom de LibreOffice↩︎