Vignette mots de passe et caractere speciaux

Souvent remis en cause, le mot de passe reste encore LE moyen d’authentification incontournable pour votre sécurité… Et pour garantir sa robustesse, les recommandations sont nombreuses et parfois contradictoires : longueur, complexité, diversité, composition, renouvellement plus ou moins périodique… Nous sommes même régulièrement obligés, selon les plateformes, d’y faire figurer des caractères spéciaux.
Cette semaine Jimmy Rundstadler, consultant et “Practice Leader” chez Davidson s’interroge sur ce dernier critère et son efficacité pour nous livrer le fruit de ses réflexions. Le débat est ouvert !

Est-ce vraiment une bonne idée d’imposer la présence de caractères spéciaux pour la création de mots de passe ?

Au premier abord, peut-être que votre réaction à cette question sera semblable à la mienne :
Si si, c’est une bonne idée, la plupart des sites nous disent même que nos mots de passe sont plus sécurisés si on met majuscule + chiffre + caractère spécial. En plus c’est ce que l’on n’arrête pas de nous répéter donc ça doit être bien, non ?

Mais le doute a probablement commencé à s’installer dès la lecture du titre de l’article. Ce sentiment s’est encore accentué au clic qui vous a conduit jusqu’ici, puis vous vous êtes peut-être dit “c’est vrai que c’est quand même moins pratique à retenir“… et c’est une bonne chose, car c’est là, quand on commence à prendre un léger recul, qu’on peut questionner ce modèle et se forger son propre avis…

Les “a priori” qui nous rassurent

Mais d’ailleurs pourquoi partons-nous avec cet a priori ? Pourquoi pensons-nous naturellement qu’un mot de passe complexe à retenir, ou tout du moins contenant des caractères spéciaux, est plus sécurisé ?

En premier lieu, notre sens logique nous indique, à raison, qu’il y a tout simplement plus de probabilités de deviner un caractère si on se limite à l’alphabet, plutôt que d’inclure l’alphabet de plusieurs langues, les ponctuations, les chiffres, la casse (c’est à dire la différence minuscule/majuscule), etc.

Exemple : pour un seul caractère, il y 26 possibilités pour l’alphabet français en minuscule contre 62 possibilités (26+26+10) toujours pour un seul caractère pouvant être cette fois ci un chiffre ou faisant partie de l’alphabet français en minuscule ou en majuscule.

A priori, augmenter les possibilités sur un unique caractère est donc une très bonne idée et c’est effectivement le cas. Pourtant, c’est loin d’être la plus efficace et elle peut parfois être contre-productive. Nous allons y revenir.

Leet speak mots de passe

Un des avantages certains au fait d’imposer la présence d’une majuscule, d’un chiffre ou d’un caractère spécial, est de limiter la possibilité d’attaque par dictionnaire. C’est-à-dire le mode opératoire qui consiste à tester les mots de passe les plus utilisés ou les termes composant une ou plusieurs langues.
Attention cependant à ne pas recourir au Leet Speak (technique visant à remplacer des lettres par certains caractères qui visuellement sont proches, par exemple un S en 5 ou un E en 3), qui rendrait de nouveau nos mots de passes vulnérables à ce type d’attaque.

Ce qui nous fait douter

Revenons-en maintenant à nos moutons. Voici une situation que j’aurais pu rencontrer et qui va sûrement vous parler.

J’ai besoin d’un nouveau mot de passe, je saisis donc “password1234”. Mais je me dis alors qu’il serait temps de suivre à la lettre les recommandations pour le “sécuriser”. J’efface donc le dernier caractère pour ajouter un caractère spécial à un mot de passe, qui soit tout de même mémorisable. Le résultat : “password123!“.

Là, et ça vous est sûrement déjà arrivé, je me heurte à un refus : Erreur, “Votre mot de passe doit contenir au moins une majuscule, un chiffre et un caractère spécial”. Bon, soit, je relève mes manches, me demande au passage pourquoi on a attendu que j’invente un mot de passe et le saisisse avant de me prévenir des règles qui s’appliquent spécifiquement à ce site, puis je le remplace et opte pour “Password123!”.

Encore une alerte rouge, cette fois-ci on m’indique que “!” n’est pas un caractère accepté… Je pousse un long soupir, relève encore un peu plus mes manches et remplace “!” par “?” tout en me demandant si cette fois sera la bonne ou pas. Bingo, ça passe ! “Password123?” remplit tous les critères !

Mais finalement, quelques minutes passent et une question s’impose : “Password123?” est-il réellement plus sécurisé que “password1234” ?

Penchons-nous un peu plus en détail sur la question, en prenant arbitrairement 10 possibilités de caractères spéciaux, pour simplifier les calculs et réduire un tout petit peu les ordres de grandeur. Cela nous fait donc :
10 caractères spéciaux + 26 minuscules + 26 majuscules + 10 chiffres = 72 possibilités pour un caractère totalement libre. Dans les 2 cas, mon mot de passe fait 12 caractères.

Commençons par “password1234” :
72^12 = 19 408 409 961 765 342 806 016 possibilités

Comparons maintenant au mot passe qui respecte les règles du site, “Password123?”, et pour lequel il faut au moins un chiffre (10 possibilités), une majuscule (26 possibilités), un caractère spécial (10 possibilités) et une liberté de saisie pour le reste :
10+26+10+72^(12-3) = 51 998 697 814 229 038 possibilités avec 12-3 car sur les 12 caractères, 3 ont des règles imposées.

À cet instant, je commence à me poser de sérieuses questions, car en m’imposant ces règles pour renforcer mon mot de passe, on m’a enlevé 19 408 409 961 765 342 806 016 – 51 998 697 814 229 038 = 19 408 357 963 067 528 576 978 possibilités de mot de passe ! Le but n’était-il pas de le rendre plus sécurisé ?

Pourtant une attaque par “brute force”, c’est-à-dire tout simplement une attaque qui teste toutes les possibilités une par une, prendra beaucoup moins de temps pour trouver mon mot de passe que si je l’avais moi-même choisi, sans toutes ces contraintes ! Mon sens logique, de nouveau à raison, m’indique cette fois-ci que plus on m’impose des règles de saisie, plus on “filtre” mes possibilités de saisie. Dit autrement, on m’impose un peu plus mon mot de passe en limitant mes choix.

Ce qui pose réellement soucis

Allons un peu plus loin dans la démarche. Pour ce faire, j’opte cette fois-ci pour un ordre de grandeur beaucoup plus parlant, avec des mots de passe ne comprenant qu’un ou deux caractères, toujours avec 10 caractères spéciaux autorisés.

Pour rappel, selon nos critères, le nombre de possibilités sur un seul caractère : 26 minuscules + 26 majuscules + 10 chiffres + 10 caractères spéciaux = 72 possibilités.

Regardons maintenant le nombre de possibilités en utilisant uniquement les 26 minuscules de notre alphabet.
Sur un seul caractère, 26 possibilités, c’est plus faible que si on utilise les caractères spéciaux.
Montons désormais à 2 caractères 26^2 = 676 possibilités !

Pour 2 caractères, si on m’impose la présence d’au moins un caractère spécial (10 possibilités selon nos critères), nous avons 2*(72*10) = 1440 possibilités, soit le même ordre de grandeur que précédemment et 72^2 = 5184 possibilités dans le cas où on me laisse libre de ma saisie

Récapitulons :

Comme on peut le voir ci-dessus, 2 éléments changent significativement l’ordre de grandeur du nombre de possibilités nécessaires pour deviner un mot de passe : sa longueur et la possibilité de le choisir librement. L’ordre de grandeur est même démultiplié lorsqu’on encourage les 2 à la fois. Malgré notre à priori de départ, le fait d’imposer un caractère spécial, semble quant à lui, n’avoir que très peu d’effet.

Définitivement, mon mot de passe sera beaucoup plus difficile à deviner si on me laisse libre de choisir la taille et les caractères qui le composent plutôt qu’en m’imposant l’utilisation de caractères spéciaux !

Les “origines du mal”

On l’aura compris, la problématique provient surtout du fait d’imposer une règle de saisie de mot de passe, comme par exemple le fait d’imposer une longueur maximum, ou d’imposer la saisie de caractères spéciaux. Initialement mis en place pour accompagner l’utilisateur dans la conception d’un mot de passe robuste, ce modèle présente rapidement ses limites. Plus ces règles sont contraignantes, plus cela restreint le nombre de tentatives nécessaires pour le deviner, que ce soit avec une attaque en brute force, par dictionnaire ou par simple déduction.

On pensera en particulier à certains sites qui imposent de ne saisir que des chiffres sur 6 ou 8 caractères… Il y a alors de très fortes chances que le mot de passe corresponde à une date vécue par l’utilisateur. En considérant que les derniers caractères correspondent généralement à une année, en connaissant la population cible du site ainsi attaquée, il suffit alors de tester toutes les dates.

Mots de passe applications et réseaux sociaux

Un exemple ? Si notre site est principalement destiné à une population jeune, disons 18-25 ans, on pourrait alors imaginer qu’il y a de fortes chances que la plupart des mots de passe soient des dates de naissance : étant donné qu’on est en 2021, les dates auraient donc une forte probabilité d’être entre 1995 et 2004. En prenant large, 10 années ayant chacune environ 365 jours, cela fait donc environ 3650 possibilités… Le pire étant que tester toutes les combinaisons possibles en devient presque envisageable manuellement !

Avec un peu d’imagination et une petite dose de recherche sur Internet ou sur les réseaux sociaux, on peut même très vite trouver toutes les dates importantes pour une personne donnée (sa date de naissance ou celles de ses proches, date de mariage, d’adoption d’animaux, etc.).

Ce type d’attaque ne nécessite aucune compétence technique et peut également porter ses fruits même lorsque nos données ne sont pas directement exposées sur le net. En procédant par ingénierie sociale, c’est-à-dire par simple influence psychologique voire par manipulation, nous pourrions même donner de nous-même ces précieuses informations.

Ce qu’il nous faut retenir, c’est que même en ayant inclus les chiffres, la casse (différence minuscule/majuscule) et les caractères spéciaux, ce qui fragilise principalement nos mots de passe, c’est avant toute chose leur faible longueur. Avec les possibilités offertes aujourd’hui en termes de puissance, on peut même, pour quelques euros, tester des millions de possibilités de mots de passe en moins d’une journée (cf : source). Je vous laisse donc imaginer à quel point vos mots de passes de 6 ou 8 caractères, même incluant au moins un caractère spécial, un chiffre et une majuscule sont peu “sécurisés” et surtout pendant combien de temps ils résisteraient face à une attaque en brute force d’une telle puissance !

Finalement comment faire avec ces fichus mots de passe ?

Comme on l’a vu ensemble, avoir un plus grand spectre possible de caractères représente un avantage, mais bien moindre que le nombre consécutif de caractères utilisés. Voici donc mes conseils.

Pour les utilisateurs :

  • Privilégiez les phrases de passe autant que possible car elles sont plus longues que les mots de passe et incluent naturellement des caractères spéciaux, tout en étant faciles à retenir.
  • Si le nombre de caractères est limité, privilégiez l’utilisation de mots de passe complexes. Ils auront peu de chance de faire partie d’un dictionnaire, ne sont pas facilement déductibles à partir de votre profil et présentent en effet potentiellement des caractères spéciaux. Évitez alors de remplacer certaines lettres par des chiffres qui y ressemblent, comme par exemple, mettre un 5 au lieu d’un S. Cette technique, appelée Leet Speak, est suffisamment connue pour ne plus représenter une complexité suffisante depuis longtemps et ne rend donc pas beaucoup plus difficile l’accès à vos mots de passe.
  • Privilégiez un gestionnaire de mot de passe (comme Keepass, un outil gratuit et Open Source) ou une approche en phrase de passe mais ne prenant que la 1ère lettre de chaque mot, en phonétique ou un mixte des deux prenant en compte les contraintes de taille imposée : exemple, “j’aime la pizza” peut devenir “J’mLaπza”.

Quelques recommandations sur le site de l’ANSSI, sur le site gouv.fr et un générateur sur le site de la CNIL.

Pour les développeurs :

  • Pourquoi imposer un maximum de 6, 8 ou 12 caractères quand on sait qu’en base, le stockage se fait généralement par défaut sur 255 caractères. Pourquoi d’ailleurs ne pas aller au-delà de 255 caractères ?
  • Côté technique, à quel moment et comment gérez-vous le chiffrement des mots de passe ?
  • Permettre la saisie de mot de passe ou de phrase de passe en n’importe quelle langue (en utilisant un encodage permissif) afin d’encourager l’utilisation naturelle des caractères spéciaux (accents, apostrophe, ponctuation, alphabet différent, etc.). Attention toutefois à ne pas négliger les attaques par injection vers vos bases de données.
  • Limiter le nombre d’essais dans une période donnée, pour ralentir artificiellement les attaques par brute force ou par dictionnaire.
  • Prévenir par tout moyen l’utilisateur lorsqu’il y a un nombre d’essais infructueux sur son compte, afin de l’alerter d’une action suspecte et de lui permettre de mettre en œuvre les dispositions nécessaires (suppression de ses données de paiement, etc.).
  • Réfléchir à des moyens alternatifs ou complémentaires de saisie (ex : double authentification, identification biométrique, saisie par autre chose que le clavier, etc..), des moyens alternatifs d’enregistrement des mots de passe (ex : tiers de confiance) voire, pourquoi pas, des solutions “PasswordLess” ?

En conclusion

Définitivement, de mon point de vue, un “bon” de mot de passe doit à la fois être difficile à deviner (que ça soit par déduction, par brute force, par dictionnaire, etc.) et également extrêmement simple à retenir. On veillera donc à privilégier une phrase de passe (ou un long mot de passe) plutôt qu’un mot de passe comportant absolument des caractères spéciaux. Le mieux restant tout de même de mixer les 2, sans que cela ne soit imposé.

De nombreuses alternatives se dessinent, avec par exemple l’identification adaptative ou auto-gérée via blockchain ainsi que la biométrie, pour permettre une authentification toujours plus fiable sur l’ensemble de nos services.
Et selon vous, le mot de passe, ce mal aimé, a-t-il encore de beaux jours devant lui face aux besoins accrus en termes de sécurité, de performance et d’expérience utilisateur ?

Jimmy RUNDSTADLER
Agiliste, Software Craftsman/Développeur; Formateur occasionnel

Passionné depuis toujours par l’informatique, les progrès scientifiques et technologiques, et depuis le début de ma carrière par tout ce qui a trait aux mouvement Agiles, Lean et Software Craftsmanship, j’ai rejoint Davidson dans le but de mettre à disposition mes connaissances et compétences aux services des sociétés, et plus particulièrement en ce qui tend à la transformation technique et organisationnelle.

Mon leitmotiv est d’en apprendre toujours un peu plus chaque jour, mais aussi et surtout de transmettre et partager ce que j’ai appris. C’est pourquoi, au quotidien, au-delà de mon activité de consultant en développement logiciel, j’anime régulièrement des ateliers et des sessions d’initiation ou de formations auprès de professionnels.

Retrouvez-le sur Linkedin