timing paving hertz bacterium pliable angelfish

Ou l'art de choisir et gérer ses mots de passe.

timing paving hertz bacterium pliable angelfish

Je m'étonne souvent de constater la négligence générale liée aux mots de passe - même parmi mes proches. Je propose donc cet article court et accessible pour vous apprendre à bien gérer vos mots de passe.

Cet article prend 10 minutes de votre temps, mais peut sauver votre vie. Littéralement. Donc s'il vous plaît, considérez sa lecture.

Cet article concerne à peu près tout le monde, pour à peu près tous les usages. Nous verrons quelques cas particuliers.

Qu'est-ce qu'un bon mot de passe ?

Pour répondre à cette question, j'ai coutume de me référer à xkcd :

xkcd

Un mot de passe avec un très bon compromis apprentissage/robustesse est donc une phrase de passe :

  • C'est facile à retenir, le cerveau humain étant habitué aux mots.
  • Et ça n'en demeure pas forcément moins robuste si bien généré.

L'idée est d'obtenir les mots qui composeront le mot de passe de façon aléatoire parmi une liste suffisamment grande (un dictionnaire) :

  • Pour limiter tout biais humain possible qui réduirait sa robustesse.
  • Pour garantir la qualité de son entropie.

Exit donc les mots/phrases de passe qui contiennent des informations personnelles, peu importe ce que vous en faites. Vous devrez reposer votre méthode de sélection purement sur l'aléatoire (grâce à des générateurs logiciels pseudo-aléatoires ou la méthode diceware). Il serait présomptueux de se faire confiance : nous ne sommes pas capables en tant qu'êtres humains de générer ne serait-ce que du pseudo-aléatoire.

Qu'est-ce que l'entropie ?

L'entropie est un concept qui permet généralement de quantifier la prédictibilité. Ce qui importe, avant tout, c'est d'avoir une entropie suffisamment grande pour contrer les attaques de bruteforce.

xkcd

En parallèle, il est inutile que l'entropie soit plus élevée que nécessaire, en plus de vous embêter vachement dans l'apprentissage de vos mots de passe. Recherchez l'efficience avec le bon compromis confort/sécurité.

Une entropie aux environs ou supérieure à 128 bits est déjà overkill.

La formule suivante permet généralement d'estimer l'entropie partant du principe que la génération se fait aléatoirement avec équiprobabilité :

Pour les pythonistes, on peut définir une lambda (fonction simple) :

from math import log2
E = lambda N, L : log2(N**L)

>>> E(26, 22)
103.40967379910403

Si l'on prend toutes les lettres de l'alphabet anglais (qui est plus ou moins le nôtre, excepté les caractères spéciaux), cela fait N=26. Si l'on considère les lettres en minuscule et majuscule, on monte à N=52, et ainsi de suite avec les chiffres (N+10) et symboles spéciaux...

Choisir une entropie adaptée :

  • Personnellement, je conseille des mots de passe avec au grand minimum une entropie de 50 bits (je conseille sans doute plus).
  • Au-delà de 100 bits, c'est déjà plus que nécessaire (probablement) et ce ne sont plus les attaques par bruteforce dont vous devriez vous soucier.
  • Un bon sweetspot qui correspond à la majorité des modèles de menace serait aux alentours de 80 bits d'entropie.
xkcd

Il va de soi que la robustesse d'un mot de passe ne garantit pas la sécurité d'un système... dont l'humain sera toujours la faille la plus grossière.

La méthode diceware

Lorsque vous générez une phrase de passe, vous reposez sur un dictionnaire qui est une source de mots (comme les lettres et l'alphabet). Le dictionnaire français par exemple, qui contient environ 60 000 mots. Il est cependant plus commun d'utiliser la liste diceware composée de 7776 possibilités : soit 6^5 = 7776 partant du principe que l'on lance 5 fois des dés à 6 faces.

Bien sûr, il n'est pas nécessaire de le faire IRL. Des gestionnaires de mots de passe tels que Bitwarden peuvent le faire à votre place.

Vous pouvez vous amuser avec ce site pour générer des exemples.

Par exemple pour obtenir le mot de passe du titre :
- 62335 : timing
- 44131 : paving
- 34134 : hertz
- 13134 : bacterium

Calculs d'entropie

Si l'on part de la formule précédente pour l'appliquer à la méthode diceware, N=6 et L=5 ce qui ajoute ~12.9 bits d'entropie par mot ajouté. Au total, c'est 7776^n possibilités où n est le nombre de mots.

  • 4 mots : vous obtiendrez ~51.6 bits d'entropie. C'est le minimum !
  • 6 mots : vous obtiendrez ~77.4 bits d'entropie. C'est très bien !
  • 8 mots : vous obtiendrez ~103.2 bits d'entropie. C'est très robuste !
  • 10 mots : vous l'avez deviné, ~129 bits. Probablement overkill !

Considérez cette phrase de passe (8 mots, soit ~ N=7776, L=8) :

nervous-scoring-shanty-swan-unscrew-unwell-endorphin-caddy

Elle est plus ou moins équivalente à ce mot de passe (N=95, L=16) :

AE34Q@Yce*T$r5v7

Mot de passe avec entropie équivalente sans symboles (N=62, L=17) :

sB2337egkP8i5vQMT

Mot de passe équivalent juste avec les minuscules (N=26, L=22) :

eakhokzjhrazeqyiqmbhyi

Certains diront qu'ils sont parfaitement capables de retenir l'un ou l'autre, et j'en fais partie (à force) ; voire même que la phrase de passe est bien trop longue ! Mais la réalité est que le cerveau humain est capable de retenir bien plus facilement une phrase de passe, chaque mot étant individuellement bien plus simple à retenir.

Considérations

Nous verrons ici quelques craintes relatives à l'usage de phrases de passe.

D'accord, mais qu'en est-il des attaques par dictionnaire ?

C'est une crainte compréhensible, mais elle adopte le mauvais point de vue. Diceware part du principe de l'équiprobabilité, chaque mot ajouté étant une possibilité parmi 7776 tirée aléatoirement. Tous les calculs que nous faisons avec l'entropie partent de ce principe, que ce soit pour les phrases de passe ou bien encore les mots de passe classiques qui peuvent être générés par un générateur logiciel.

Comme je l'ai expliqué plus haut, nous pouvons faire le rapport entre la liste de mots diceware et... l'alphabet. Au fond, c'est plus ou moins la même chose. Nous avons ajusté ci-dessus les calculs d'entropie suivant cette logique : une entropie avec paramètres N=7776 (liste de mots diceware) et L=8 (8 mots) est équivalente à un mot de passe avec N=26 (alphabet commun) et L=22 (22 caractères). Alphabets et symboles sont "connus" tout comme ces listes de mots, il n'y a pas d'obscurité là-dedans.

Et du coup c'est résistant aux attaques par bruteforce ?

Il est très difficile d'estimer les capacités réelles d'une attaque de bruteforce. Le plus souvent, ce sont les attaques par dictionnaire (renforcées avec vos informations personnelles) qui permettent de deviner facilement un mot de passe pour un attaquant peu sophistiqué.

Partant du principe que votre menace est un attaquant très sophistiqué capable de réaliser plus de 10^12 tentatives par seconde (d'après Snowden), 5 mots prendraient 165 jours, tandis que pour 6 mots... 3505 ans ! Et on parle de machines que seules des agences étatiques peuvent posséder et utiliser contre vous, si vous en valez vraiment la peine.

De plus, la loi de Moore déjà agonisante et vivant ses dernières années, la prochaine grande révolution sera probablement l'informatique quantique. Quoiqu'il en soit, vos mots de passe actuels seront le cadet de vos soucis tant qu'ils sont générés aléatoirement avec une entropie suffisante.

Libre à vous d'utiliser un autre dictionnaire. Par exemple BIP39 qui est un dictionnaire de 2048 mots avec 2048^n possibilités. Recalculez ensuite l'entropie en conséquence pour voir si elle correspond à votre menace.

Ai-je toujours besoin d'un truc aussi long ?

Alors évidemment, ne commencez pas à apprendre des phrases de passe hyper longues pour tout et n'importe quoi. La question du modèle de menace se pose en premier lieu, et il faut estimer l'entropie adaptée à sa menace. Pour la plupart des personnes, la méthode diceware avec 5 mots suffit amplement.

Enfin, l'idée n'est pas non plus d'apprendre autant de mots de passe que vous n'avez de comptes à protéger. Il est fortement conseillé d'utiliser un gestionnaire de mots de passe, mais forcément celui-ci doit être protégé par un mot de passe maître. C'est l'occasion d'employer la méthode diceware avec autant de mots que possible, puisque c'est la portée d'entrée au reste.

D'autres cas peuvent être des mots de passe liés au chiffrement, ou encore vos ordinateurs, et vos smartphones. Et à propos de ce dernier, j'ai quelques recommandations à faire.

Le cas d'un smartphone

Je vous conseille de définir en premier lieu votre modèle de menace. Si vous n'êtes pas le futur Edward Snowden, voici quelques conseils :

  • Fuyez absolument l'usage de schémas (patterns).
  • Utilisez des PIN d'au moins 6 chiffres, idéalement 8 (ou +).
  • Ou une phrase de passe d'au moins 3 mots, idéalement 4 (ou +).

Déjà, les schémas sont à bannir et de nombreuses études ont remis en question leur usage. Les humains ont tendance à définir des schémas très faciles à prédire, beaucoup trop simples et qui ne sont guères plus sécurisés qu'un PIN qui serait égal à votre date de naissance.

ndss_17.pdf (lancaster.ac.uk)

De plus, ils sont très vulnérables au shoulder surfing (attaques simplement par l'observation) ou recueil à partir des empreintes laissées sur l'écran.

Concernant les PINs, partant du principe que vous avez un iPhone ou un Google Pixel ou autre smartphone avec un élément sécurisé, vous pouvez choisir de faire confiance à la sécurité de cet élément sécurisé pour faire en sorte que même un PIN à 6 chiffres puisse fournir une excellente protection :

Aparté sur Google Titan M
Petite incursion dans le monde de la sécurité hardware et des enclaves sécurisées, avec la vedette Titan M, la puce de sécurité pensée par Google.

Sur un Google Pixel équipé de Titan M, un PIN à 4 chiffres généré aléatoirement peut prendre 650 ans à être bruteforce. Ceci grâce à un cooldown géré par Titan M : après 140 tentatives ratées, il y a un délai d'un jour entre chaque tentative qui est impossible à bypass depuis l'OS.

Et si je suis le futur Edward Snowden ?

Encore une fois, tout dépend de votre modèle de menace. Vous pouvez décider de ne pas faire confiance à Titan M dans le cas où vous soupçonnez qu'il puisse être exploité par un attaquant sophistiqué dans le temps, et d'utiliser dans ce cas une méthode de protection avec une grande entropie.

N'oubliez pas l'intérêt de l'authentification biométrique : elle ne vise pas à remplacer votre méthode principale, mais d'éviter de l'exposer à des shoulder surfing, particulièrement dans des endroits publics.

Une technologie de reconnaissance faciale (Face ID, Pixel 4) par rayons infrarouges est globalement plus sûre que l'utilisation d'empreintes. Mais ce n'est pas mal non plus... et la période COVID-19 avec les masques a au moins montré un avantage d'utiliser les empreintes.

Les gestionnaires de mots de passe

Il faut absolument ne pas répéter son utilisation de mots de passe, et disposer d'une flexibilité permettant de les changer à la volée. Bien sûr, on ne peut pas retenir autant de mots de passe qu'on n'a de comptes, et c'est ainsi qu'un gestionnaire de mots de passe intervient pour nous faciliter la vie.

La pratique du mot de passe unique pour tous les comptes est dangereuse, car pour un service qui a foiré sa sécurité, c'est tous vos mots de passe qui sont compromis et doivent être changés instantanément. Et le problème, c'est qu'une brèche n'est pas forcément publique day one...

Un gestionnaire de mots de passe permet, pour un mot de passe retenu, d'avoir autant de mots de passes différents que l'on souhaite. Si vous choisissez un bon gestionnaire et avec un bon mot de passe maître, vous avez peu de raisons de vous soucier de cette centralisation. Pour un mot de passe compromis, vous pouvez le changer sans vous soucier des autres.

Les mots de passe générés peuvent suivre les règles que vous souhaitez, mais comme vous ne comptez pas les retenir, vous pouvez choisir une entropie très élevée sans gêne (comme 64 ou + caractères avec l'ensemble ASCII).

On passera le cas des sites tiers qui limitent en 2021 à 16 caractères... Ah, sans doute les mêmes qui vous envoient votre mot de passe en clair par mail.

Je conseille de choisir parmi ces deux gestionnaires :

  • Bitwarden : synchronisation dans le cloud sur tous les appareils
  • KeePass : synchronisation locale et manuelle

Les deux sont open-source, agnostiques de la plateforme et implémentent un chiffrement robuste de leur base de données. Il n'est pas possible de consulter vos mots de passe sans déchiffrer la base de données au préalable.

Le choix de l'un ou l'autre se fait selon votre profil et modèle de menace :

  • Je tends à conseiller Bitwarden pour sa simplicité d'usage et son uniformité de clients audités. Pour les plus aventuriers, il est tout à fait possible d'auto-héberger sa propre instance de Bitwarden.
  • C'est moins évident pour KeePass (KeePassXC, KeePassDX...), et la synchronisation se fait manuellement entre différents appareils : ce qui rassurera cependant ceux qui ont peur de l'approche cloud-centrique de Bitwarden qui constitue une vulnérabilité potentielle.

Si possible, optez pour une authentication à deux facteurs en complément de votre mot de passe maître.

Enfin, il est judicieux d'utiliser leurs extensions aux navigateurs qui protègent de formes de phishing et permettent d'auto-compléter les mots de passe dans les champs appropriés sans besoin de faire passer vos mots de passe par votre presse-papiers, ce qui peut être un vecteur d'attaque selon le système utilisé.

Comme l'explique cet article, certaines extensions de gestionnaire de mots de passe foutent un peu la merde et affaiblissent la sécurité de votre navigateur. Je confirme que ce n'est pas le cas pour Bitwarden, mais c'est sûrement le cas pour d'autres gestionnaires plus négligents : soyez vigilants.

L'authentification à deux facteurs (2FA)

Un mot de passe c'est bien, mais avec un deuxième facteur, c'est mieux. De plus en plus de services proposent cette couche de sécurité supplémentaire qui permet quelques assurances. Si votre mot de passe est compromis, l'attaquant doit aussi compromettre votre deuxième facteur qui est soit :

  • Quelque chose que vous connaissez
  • Quelque chose que vous possédez
  • Quelque chose que vous êtes

Il existe plusieurs formes de 2FA, non-exhaustivement :

  • SMS : recevoir un code temporaire par SMS
  • TOTP : code temporaire généré avec 2 variables (le temps et une clé)
  • U2F/FIDO2 : authentification avec une clé de sécurité physique

Le 2FA par SMS est généralement à éviter. Il est vulnérable à de nombreux types d'attaques telles que le SIM jacking. Le TOTP est déjà bien meilleur, mais vulnérable lui aussi : au phishing (même si limité), au vol de la clé (permettant de dériver tous les codes TOTP que l'on souhaite), ou à la synchronisation du temps sur le serveur.

Une clé de sécurité implémentant le standard FIDO2 est la solution la plus robuste dont vous pouvez disposer, et peut même constituer un moyen d'authentifcation principal (vers un futur passwordless ?). Sur le web, on retrouve FIDO2 avec l'API WebAuthn standardisée et présente sur tous les navigateurs majeurs. Seul problème : une clé, ça coûte !

En résumé :

Conclusion

C'était un article plus court que d'habitude, qui change un peu des articles de plus de 6000 mots dernièrement... Je pense adopter ce format pour aborder des sujets du genre, ce qui peut convenir à un plus grand nombre de personnes ; car au final, le but est de vous aider à reprendre en main votre hygiène numérique.

Résumons brièvement :

  • Un compte = un mot de passe, ne réutilisez pas vos mots de passe
  • Mots de passe à retenir mentalement = phrases de passe (diceware)
  • Utilisez des mots de passe avec une entropie suffisante
  • Mais sans trop en faire non plus quand vous devez les retenir
  • Et de façon aléatoire, équiprobable : pas de choix personnel !
  • Utilisez un gestionnaire tel que Bitwarden ou KeePass
  • Activez où que possible l'authentifcation à deux facteurs (2FA)
  • En privilégiant : FIDO2 > TOTP >>> SMS (> rien ?)
  • Et pour SSH, pas de mot de passe mais des clés ed25519, évidemment

Tant pis pour le SEO avec ce titre.