Lorsque vous voulez vous connecter sur un site web, dans un écrasante majorité des cas, on vous demande un couple identifiant / mot de passe. Cependant, régulièrement, on voit passer des articles, des commentaires, qui critiquent ce système. Et ce n’est pas franchement rassurant.
Afin de comprendre le pourquoi de ces articles, il est donc nécessaire de comprendre comment fonctionne le système du mot de passe. C’est justement ce que nous allons voir dans cet article, dans les grandes lignes. Nous verrons ensuite pourquoi, si c’est un très bon système en théorie, il se révèle mauvais en pratique.

Eh oui, la théorie et la pratique ne se rejoignent pas toujours, d’autant plus lorsque nous prenons en compte la composante humaine.
Comment fonctionne un système utilisant un mot de passe ?
Du côté de l’utilisateur, un système de mot de passe est plutôt simple à utiliser. Lors de l’inscription, il suffit en effet de renseigner un mot de passe qui devra être indiqué chaque fois que l’on veut se connecter.
Du côté du développeur, ce n’est franchement pas beaucoup plus compliqué, et tout se passe dans la base de données qui liste tous les utilisateurs. À côté de chaque utilisateur est ainsi stocké le mot de passe indiqué lors de l’inscription. Lorsque l’utilisateur cherche à se connecter, on compare le mot de passe entré avec celui enregistré dans la base de données et, s’ils correspondent, c’est bon.
Votre mot de passe aux yeux de tous
On en parle nous-mêmes parfois : il arrive que des pirates parviennent à mettre la main sur la base de données de certains sites web. Avec le système simpliste que nous venons de voir, il obtient directement les mots de passe des utilisateurs. Et ça, c’est pas cool. D’ailleurs, même si on oublie les pirates, un simple administrateur du site en question connaît votre mot de passe avec un tel système…
C’est pourquoi, dans la pratique, ce n’est pas votre mot de passe qui est stocké dans la base de données (sauf sur les sites web développés avec les pieds que vous devez absolument fuir).
Votre mot de passe aussi a son empreinte
La problématique est alors la suivante : on veut stocker quelque chose qui représente le mot de passe, pour qu’on puisse continuer à identifier l’utilisateur et lui seul, mais sans pour autant pouvoir retrouver le mot de passe. Délicat, n’est-ce pas ?
C’est ici que des maths un peu (très peu) poussées apparaissent. On évitera de parler en détail des algorithmes qui de toute façon sont nombreux, mais l’idée générale est la suivante : on prend le mot de passe, et on le transforme pour obtenir une chaîne de caractères, appelée empreinte, qui n’a à la fin rien à voir avec l’originale.
Un exemple ? Vous partez d’une chaîne de caractères quelconque (votre mot de passe), comme “chaton trop mignon”, et vous obtenez un résultat du style “84ce4d2b9147616396e9ebef2eb27628”. C’est cette chaîne qui est stockée dans la base de données.
Lorsque vous cherchez à vous connecter par la suite, on applique la même opération au mot de passe que vous entrez, et on compare les résultats. Comme on ne peut obtenir qu’une seule empreinte à partir d’un même mot de passe, on est sûr que c’est le bon mot de passe.
Mais on ne peut pas retrouver le mot de passe original pour autant. En effet, il est mathématiquement impossible de faire le chemin arrière, pour une raison simple : à une empreinte donnée peuvent correspondre plusieurs chaînes de caractères initiales. Lorsque deux textes initiaux donnent la même empreinte, on appelle cela une collision.
Une empreinte pas si unique
C’est plutôt simple à comprendre en fait : on prend tous les caractères possibles et imaginables (toutes les lettres, accents, etc.), et on transforme cette suite de caractères en un mot d’une longueur prédéfinie (32 ou 40 par exemple), et ne pouvant contenir qu’un nombre fini de caractères différents (les chiffres de 0 à 9 et les lettres minuscules de a à f souvent). Il est impossible de faire une application qui puisse être inversée dans un tel cas.
Ensuite, tout est une question de probabilités. Si en théorie à partir de l’empreinte de départ il suffirait de générer une collision pour faire croire au système que le mot de passe est le bon, dans la pratique, il est difficile de générer de telles collisions (pour les meilleurs algorithmes).
Un système robuste… en théorie
Théoriquement, il est tout à fait possible de retrouver le mot de passe initial qui correspond à une empreinte donnée : il suffit de tester tous les mots de passe possibles et imaginables. D’autres méthodes plus optimisées comme les tables arc-en-ciel existent mais, basiquement, c’est l’idée.
Mais revenons à la pratique si vous le voulez bien. Imaginez que vous vouliez cracker un mot de passe de quatre lettres (de a à z, en minuscules). Vous les listez tous : “aaaa”, “aaab”, … , “zzzz” et vous calculez les empreintes pour comparer avec celle que vous avez. Si l’empreinte correspond, c’est gagné, vous avez le mot de passe (ou une collision, ce qui revient au même).
Pour ce simple exemple, cela nous donne pas moins de 264 = 456976 possibilités. Ça commence déjà à chiffrer, et on parle seulement de chaînes très courtes et simples. Complexifiez en augmentant le nombre de caractères, et surtout le nombre de ceux que vous autorisez (majuscules, chiffres, spéciaux), et vous vous retrouvez facilement à devoir attendre plusieurs millions d’années avant de tomber sur le bon mot de passe.
Plusieurs millions d’années, c’est long. Du coup, si vous, en tant qu’utilisateur, vous choisissez un mot de passe complexe, avec un bon nombre de caractères et surtout des caractères différents, faisant varier minuscules, majuscules, chiffres et caractères spéciaux, alors vous avez peu de chances que quelqu’un puisse le deviner ou le craquer.
Mais la pratique est toute autre
Seulement voila, vous êtes humains. Le nom de votre chien ou la date de naissance de votre fille est plus facile à mémoriser qu’une chaîne aléatoire comme “efzg654e^|#‘de”, c’est un fait. Alors vous choisissez un mot de passe simple. Et vous êtes une cible facile.
Peut-être pas vous personnellement, mais votre voisin par exemple. En tout cas, une chose est sûre : beaucoup de personnes sont concernées par cet état de fait. Et c’est en cela que le système du mot de passe est mauvais en pratique : en obligeant l’utilisateur à retenir quelque chose, on a rendu le système vulnérable.
Car les failles sont nombreuses. Un mot de passe trop simpliste est simple à deviner pour quelqu’un qui vous connaît, mais aussi pour quelqu’un qui teste toutes les chaînes possibles. Quant au fait d’utiliser un même mot de passe sur plusieurs sites, inutile de dire que c’est une mauvaise idée : tous les sites ne sont pas égaux en terme de sécurité et, si l’on devine votre mot de passe sur l’un de ceux-là, vous êtes dans de beaux draps. Surtout si votre mot de passe PayPal ou autre chose du genre n’est lui-même pas unique.
Par ailleurs, même en oubliant la composante humaine, nos algorithmes de calculs d’empreintes ne sont pas parfaits. Le fait qu’ils ne soient pas réversibles est une force car on ne peut pas retrouver facilement le mot de passe à partir de l’empreinte. Mais c’est aussi une faiblesse : on peut créer des collisions.
Ainsi, le système MD5 par exemple est connu comme n’étant plus fiable, pour la simple et bonne raison que nous savons depuis quelques années qu’il est “facile” de créer des collisions. Un site utilisant MD5 n’est ainsi pas beaucoup plus sécurisé qu’un site stockant les mots de passe en clair. Et cet algorithme est encore très largement répandu.
Que faire ?
Tout espoir n’est pas perdu, et il n’est pas nécessaire de vivre dans une grotte pour être en sécurité. Choisir un mot de passe robuste, long, utilisant beaucoup de caractères différents, et surtout unique pour chaque service est la première chose à faire. Utilisez la technologie : votre navigateur peut stocker les mots de passe à la place de votre cerveau, utilisez-le !
Ensuite, n’hésitez pas à abuser des sécurités supplémentaires, comme la double authentification par exemple : en plus du mot de passe, on vous envoie un code unique par SMS (par exemple), et vous devez le recopier. C’est déjà une excellente sécurité en soi.
Article bien sympathique et a relayé pour que tout le monde le comprenne.
Par contre, le coup du: “votre navigateur peut stocker les mots de passe à la place de votre cerveau, utilisez-le !”, je ne suis pas trop chaud… Il y a dans le passé eu pas mal de hack via ces services qui ce retrouve maintenant synchronisé (par défaut bien souvent) dans le navigateur ou OS directement, ceci afin de les retrouver sur tous les appareils que l’on utilise.
Le plus prudent, à mon sens, s’il on ne veut pas les mémoriser: reste un bon vieux keypass avec un plugin pour chrome par exemple. Sinon il faut s’en rappeler.
Après, pour ceux qui ont peur du sérum de vérité il reste l’option de mettre n’importe quoi en mot de passe a chaque fois et d’utiliser la fonction mot de passe oublié, mais par contre il faut une sécurité béton sur l’adresse mail rattaché et un changement de mot de passe très fréquent.
N’oublions pas que chaque compte créé sur le net demande généralement une adresse mail et que bien souvent il s’agit toujours de la même… La boite mail clef de voûte des comptes d’authentification?
Oui, c’est vrai que dès que les mots de passe partent dans un cloud, quel qu’il soit, il y a un risque. Après, quitte à utiliser un plugin, autant utiliser directement la fonctionnalité du navigateur en désactivant la synchronisation pour les mots de passe (c’est possible de choisir ce qu’on veut synchroniser avec Firefox par exemple, je pense qu’il ne doit pas être le seul à le permettre).
Le problème de se rappeler de son mot de passe, c’est qu’il faudra toujours un moyen mnémotechnique : la grosse majorité des personnes ne retiendra jamais une suite de caractères qui ne signifie rien (sauf si elle est tapée tous les jours, à la rigueur). Si on peut construire des mots de passe complexes avec de tels moyens, peu de personnes vont malheureusement le faire.
L’idée du mot de passe oublié n’est pas si bête, et on peut l’étendre à l’authentification sans mot de passe. C’est justement l’objet d’un nouvel article que je suis en train de préparer.
A mon sens, un keypass avec une extension chrome et/ou une application Android est une bonne idée. Cela permet de générer des mots de passes long (17 caractères par exemple) avec des majuscules, minuscules, chiffres et caractères spéciaux et ceci sans avoir à le retenir.
Il suffit d’utiliser un seul mot de passe compliqué pour les protéger tous. (J’utilise LastPass, c’est pratique !)