Les mots de passe sont une calamité de l'informatique. Rectification : l'authentification des humains est une calamité de l'informatique, et les mots de passe sont la moins mauvaise solution connue — et cette solution est quand même pourrie. Les solutions plus technologiques au problème de l'authentification, par exemple avoir un gadget embarqué contenant les clés d'authentification, qu'on déverrouille par un PIN (et qui s'autodétruit ou demande un PUK si on entre quatre PIN incorrects) sont encore inutilisables en pratique, faute de standards, faute de support matériel généralisé, faute de protocoles de communication établis, etc., sans compter les difficultés pratiques accrues en cas de perte, d'oubli ou de casse du gadget. Les idées comme les empreintes digitales sont des conneries : une empreinte digitale n'a rien de secret (on la laisse traîner partout, justement, même sans le vouloir), peut se récupérer à partir d'une photo et se reproduire de manière à tromper les lecteurs, et elle ne peut pas être changée en cas de fuite, bref, ce n'est certainement pas un secret d'authentification, c'est au mieux un identifiant (login). On est donc coincés avec les mots de passe.
Or les mots de passe sont sujets à un nombre incroyable de contraintes contradictoires. Ils doivent être mémorisables par un humain et faciles à taper, et en même temps être essentiellement impossibles à trouver par essais successifs, donc contenir beaucoup de hasard (d'entropie). Ils ne doivent pas être partagés entre différents systèmes, ou en tout cas entre différents niveaux de sécurité, mais en même temps l'humain a une mémoire très limitée et ne peut pas en retenir plus qu'une poignée. Il doit y avoir moyen de les réinitialiser en cas de perte, mais en même temps cette procédure ne doit pas permettre des attaques. Etc. Toutes ces contraintes se contredisent les unes les autres, et il n'est pas surprenant que les gens fassent des choses mauvaises.
Une question, par exemple, est celle du choix entre l'utilisation
d'un petit nombre de caractères un peu exotiques (ponctuation et
autres ASCII non-alphabétiques) et un grand nombre
de caractères moins exotiques (on a tendance à appeler ça
une passphrase, par opposition
à password dans ce cas).
Un célèbre dessin d'xkcd recommande
la passphrase (à partir de l'exemple de correct horse battery
staple
, très facile à mémoriser). Ce dessin oublie pourtant un
paramètre majeur : la difficulté à taper. Ma
passphrase PGP est constituée de 8 mots choisis parmi un
dictionnaire d'environ 100000 mots, pour une entropie de
8×log₂(100000)>128 bits. Eh bien 8 mots aléatoires (donc pas
courants du tout) à taper à l'aveugle, c'est extrêmement
difficile, il m'est arrivé de devoir m'y reprendre à plus de trente
fois avant d'y arriver ; même si j'essaie de taper lentement, lettre
par lettre, je me retrouve souvent à ne plus savoir où j'en suis, à
être coincé entre ma mémoire procédurale et ma tentative de faire les
choses lentement. Bref, ce conseil est catastrophique, au moins pour
moi : je ne comprends pas qu'il soit si souvent répété.
La frappe pose ses propres problèmes, même pour des mots de passe courts. Parfois on croit avoir un bon mot de passe et on se rend compte que le taper sur un smartphone est insupportablement pénible parce qu'il y a des caractères qu'il faut chercher à des endroits introuvables sur le clavier. Ou alors le mot de passe est très pénible à taper sur un clavier français, ou au contraire sur un clavier américain. Ou alors il comporte une succession entre un caractère shifté et un caractère non-shifté, et en tapant vite on relâche trop lentement la touche shift (j'ai eu plein de problèmes avec ça). Le problème de la vitesse de frappe est vraiment crucial : je dois taper des mots de passe parfois des dizaines et des dizaines de fois d'affilée pour faire des mises à jour sur plein de machines (je ne veux pas les rendre dépendantes d'une seule machine, ou accessibles depuis une seule clé d'authentification, pour ne pas avoir un point d'attaque unique).
Et que dire des caractères spéciaux ? Il est recommandé d'en
mettre beaucoup dans un mot de passe court, mais plein de caractères
peuvent poser problème. J'ai eu, ou j'ai eu vent de, toutes sortes de
difficultés avec des caractères particuliers. L'espace, par exemple,
que beaucoup de gens imaginent impossible dans un mot de passe. Ou
encore, le caractère ~
(tilde) en début de mot de passe
pose un problème pénible avec ssh
, je laisse les geeks
essayer de deviner lequel (indice : on tape souvent son mot de passe
juste après la touche entrée). Et bien sûr, il est une mauvaise idée
d'avoir des caractères non-ASCII dans un mot de
passe. Que de contraintes contradictoires !
Je fais souvent aux gens qui ont des problèmes de mémoire la
recommandation suivante pour les mots de passe importants : coupez
votre mot de passe en deux : mémorisez-en une moitié que vous ne
changerez pas, ou pas trop, et qui ne soit pas trop difficile à
retenir, et écrivez l'autre moitié sur un morceau de papier dans votre
portefeuille, laquelle moitié peut donc contenir des caractères
vraiment exotiques, et aussi varier d'une machine à une autre ou d'un
système d'authentification à un autre. Ce n'est pas idéal, mais il
vaut mieux avoir un mot de passe comme implant^97w:C
qu'une seule moitié de ce truc.
Indépendamment de l'idée d'écrire la moitié sur un papier, couper un mot de passe en deux peut être une idée raisonnable : par exemple, avoir un bout commun aux mots de passe de tous les systèmes importants, et un bout qui varie d'un système à l'autre, pour que la connaissance d'un mot de passe ne donne pas trivialement les autres (de nouveau, ce n'est pas parfait, parce que si c'est répandu ça simplifie les attaques — mais rien d'humainement faisable n'est parfait).
On peut aussi recycler les mots de passe : avoir plusieurs niveaux de sécurité, et à chaque fois qu'on change de mot de passe, l'introduire au niveau de sécurité le plus important, et reprendre le précédent de ce niveau-là pour le mettre au niveau un peu moins important, etc. (ou au moins, faire ça avec la partie qu'on retient vraiment, ou la partie commune à différents systèmes). Ça diminue l'effort de mémoire sans trop compromettre la sécurité.
Les mots de passe sans importance, il vaut mieux les confier au
navigateur ou les écrire dans un simple fichier protégé contre la
lecture, et ne pas chercher à les retenir. Je ne sais combien de
sites Web marchands m'obligent à avoir un mot de passe pour un compte
chez eux, je déteste ça, je génère un truc aléatoire
avec pwgen
et je le stocke dans un simple fichier texte.
Je me fous pas mal que quelqu'un puisse accéder à mon compte Amazon,
ou même mon compte Facebook (je précise que je ne stocke aucun numéro
de carte de crédit sur Amazon, il faut être fou pour ça : j'utilise
des numéros de carte de crédit à usage unique, et le mot de passe
utilisé pour ça ne sert que pour ça et n'est inscrit que dans
ma mémoire ; si je l'oublie, ma banque m'en enverra un nouveau par
recommandé). Ceci étant, mon PC est accessible en
permanence si j'ai besoin de retrouver un mot de passe « faible » : je
ne sais pas ce que je ferais si ce n'était pas le cas et que j'avais
besoin d'en lire un.
Il existe des gestionnaires de mots de passe qui stockent ces machins pour vous en les chiffrant (déjà, les navigateurs Web ont ça, mais il en existe aussi comme applications séparées) : encore faut-il avoir une bonne clé, donc une bonne passphrase, pour chiffrer les mots de passe eux-mêmes. Et il faut un système qui rende les mots de passe accessibles tout le temps. Ça peut marcher pour certains, mais quand il s'agit de mots de passe qui doivent marcher tout le temps, même quand la machine est dans un mode de secours, il peut y avoir problème.
Bref, que de contraintes impossibles à réconcilier.
La raison qui m'amène à raconter tout ça, c'est qu'aujourd'hui j'ai
été obligé de changer de mot de passe : je n'arrivais pas à accéder à
un service Web interne de mon école, il a été suggéré que c'était
peut-être à cause d'un caractère exotique dans mon mot de passe, j'ai
donc essayé de le changer pour tester (en fait, ce n'était pas le
problème) ; mais quand j'ai voulu remettre l'ancien, pas moyen : il ne
passait pas un des tests à la con pour les mots de passe faibles (je
dis à la con
, parce que je suis absolument certain que ce mot
de passe était très bon selon toute mesure raisonnable de force des
mots de passe). Je n'ai donc pas le droit de revenir à mon ancien mot
de passe.
Est-ce grave ? Je n'en mourrai pas, mais c'est pénible. Parce que
pour des raisons de cohérence (et pour ne pas devoir retenir des
choses inutiles en plus), j'ai dû, du coup, changer mon mot de passe
sur quinze ordinateurs ou systèmes différents. Dont des portables que
j'ai dû retrouver dans mon foutoir chez moi : rien que ça m'a fait
perdre de bonnes heures. Les nouveaux mots de passe que j'ai mis sont
moins commode à taper (ne serait-ce que parce qu'il est plus long que
l'ancien) : ça va me faire perdre plein de temps en plus à chaque fois
que je serai sur le clavier tactile pourri de mon smartphone. Et même
s'ils étaient aussi bons, d'ici que je m'y habitue, je vais aussi
perdre énormément de temps à me tromper. Et ce n'est pas tout : le
mot de passe sur les ordinateurs de mon école servait aussi
d'authentification wifi (ce qui est d'ailleurs un grave problème de
séparation des niveaux de
sécurité[#]), par exemple sur le
système Eduroam — tout ça est donc aussi à re-rentrer, et le plus
souvent on ne peut pas juste re-rentrer le mot de passe, il faut aussi
re-rentrer tout un tas de
paramètres barbares
avec des noms comme identité d'itinérance
et, pour commencer,
trouver à quel endroit il faut entrer ces choses-là.
Je suis donc assez furieux, et je me défoule en rantant sur mon blog.
[#] Voici le problème : je veux que mon téléphone mobile puisse se connecter au réseau Wifi quand je suis dans mon école. D'un autre côté, je ne veux pas entrer dans mon téléphone mobile, qui est relativement facilement volable, le mot de passe qui permet de lire mes mails (professionnels). D'où contradiction, si c'est le même mot de passe qui permet de lire mes mails et de me connecter au Wifi. Ou alors il faudrait chiffrer mon téléphone : mais dans ce cas, il demandera un PIN à chaque fois que je voudrai m'en servir, ce qui d'une part est excessivement pénible (encore, si j'avais des choses à protéger, ce serait une chose, mais je fais justement attention à ne rien stocker de vraiment confidentiel sur mon téléphone, précisément pour ne pas avoir à le chiffrer : ce serait idiot d'avoir à le faire uniquement pour le mot de passe du Wifi de mon école !), et d'autre part cela voudrait dire que des tiers ne pourraient pas s'en servir pour contacter mes proches s'il m'arrive un accident, et je trouve ça inacceptable. Que de tracas !