Temps de lecture : 14 minutes
Publié le 05/05/2019.
C'est une question qui revient souvent quand on me parle d'authentification et que j'explique que je n'utilise pas le lecteur d'empreintes digitales de mon smartphone. Il faut dire qu'a priori ce système semble n'avoir que des avantages : il reconnaît son utilisateur avec une bonne, voire excellente efficacité, et cela très rapidement et avec une marge d'erreur relativement faible.
Alors pourquoi diable est-ce que je m'enquiquine à continuer d'utiliser un code à quatre chiffres pour déverrouiller mon téléphone, et pourquoi est-ce que je continue de résister encore et toujours à cette technologie qui équipe aujourd'hui à peu près tous les smartphones hauts et milieu de gamme, et qui commence même à arriver sur certains appareils d'entrée de gamme ?
De l'authentification classique, par mot de passe
Fondamentalement, votre smartphone fonctionne exactement de la même façon que votre PC, qu'il soit dernier cri ou du siècle dernier. Lorsque vous tapez votre mot de passe et que votre système d'exploitation vous souhaite gentiment la bienvenue avant de vous laisser accéder à votre bureau, c'est parce qu'il a vérifié que votre saisie correspondait à ce qu'il avait enregistré dans sa base de données sous une forme illisible et difficile à décoder, y compris pour le système lui-même (on parle de hash). Commettez une seule petite erreur dans votre mot de passe, et le système vous enverra bouler, car votre mot de passe ne correspondra plus du tout au hash qu'il connaît.
Mot de passe | Hash (ici, avec l'algorithme SHA256) |
---|---|
m0td3p4ss3 |
bec9d0e7eace850d4c4ca5c1b76b245112ac3f5a688dfa1c8f6bc9ae8003fe09 |
m0td3pAss3 |
9eff92d294ca81743262f0c6e3f6c25961b5e15e65311fbf86db0944548e8b12 |
Comme le montre le tableau ci-dessus, le hash est donc un moyen de s'assurer que deux mots de passe, aussi ridicule soit la différence entre les deux, donnent deux versions codées radicalement différentes. Et comme le hash est un procédé à sens unique, il ne peut être déchiffré facilement. Bien sûr, le système n'a fondamentalement pas besoin d'une telle solution pour vérifier la correspondance entre deux mots de passe. Le hash est avant tout un élément de sécurité pour empêcher à une personne qui fourerait son nez dans la base de données, de pouvoir lire l'information, et il est donc important que chaque mot de passe donne un hash unique, auquel aucun autre mot de passe ne correspondra.
Ce procédé est fréquemment utilisé pour vérifier l'intégrité d'un fichier que vous venez de télécharger. Sur certains sites, vous pourrez ainsi remarquer la présence d'une mention listant des sommes de contrôles, généralement md5 ou sha1. Il vous suffit alors d'utiliser un outil dédié pour calculer la somme de contrôle de votre fichier téléchargé. Si ça correspond à celle présentée sur le site, votre fichier est correct. Pour les mots de passe, les algorithmes de hash utilisés sont généralement plus complexes, mais le principe est toujours le même.
Qu'en est-il de votre empreinte digitale ?
Des informations biométriques
Une des raisons qui pousse généralement à utiliser un système d'authentification biométrique (empreinte digitale, d'iris, reconnaissance faciale...), est la simplicité et la rapidité de mise en œuvre largement mise en avant par les fabriquants. Quiconque a déjà utilisé cette fonctionnalité sait de quoi je parle : posez votre doigt sur votre capteur (ou même carrément sur une zone de l'écran pour les tous derniers smartphones), et pouf ! votre appareil se déverrouille. Comment cela marche ?
Pas grand chose de plus que lorsque
vous saisissez un mot de passe, en fait : le système se contente de comparer avec
une version connue de votre empreinte, telle qu'elle a été enregistrée lorsque
vous avez effectué la configuration de votre système. Sauf qu'au lieu d'une
chaîne de caractères comme m0td3p4ss3
, c'est une version numérique de votre
empreinte digitale qui est utilisée (et c'est un des rares cas où vous pouvez
utiliser les termes numérique et digital dans une même phrase), c'est-à-dire
qu'elle est transformée en une suite de zéros et de uns. Et c'est la que commencent
les ennuis.
Car si pour un mot de passe aucune ambiguïté n'est permise, pour une empreinte biométrique en revanche, une myriade de facteurs peuvent entrer en jeu. Entre autres facteurs, citons la dégradation des doigts liée au vieillissement ou à une activité physique ou professionelle, la propreté du doigt, ou même la qualité du capteur lui-même. C'est pour tenter de répondre à ces problèmes (et à bien d'autres) qu'une marge d'erreur est incorporée au système d'authentification. Et qui dit marge d'erreur, dit risque accru d'obtenir des faux positifs. Peut-être avez-vous entendu parler de l'iPhone 5S qui pouvait être déverrouillé avec son téton ou son orteil, eh bien c'est exactement de cela que l'on parle ici.
Autre conséquence : il n'est plus possible d'utiliser un algorithme de hash pour masquer l'information. Non pas que ce n'est pas possible sur des informations binaires (en fait, c'est tout le contraire), mais cela compliquerait grandement la tâche de l'application de la marge d'erreur : le hash étant un procédé à sens unique, il n'est théoriquement pas possible de revenir à l'information d'origine, ce n'est pas conçu pour ça. Deux autres solutions peuvent donc être envisagées pour palier ce problème :
- soit on utilise à la place un algorithme de chiffrement, une technique de protection des données permettant par ailleurs de revenir à la donnée originelle par une méthode de déchiffrement (sécurisé, mais coûteux en temps)
- soit on ne chiffre pas du tout l'empreinte digitale, au risque qu'elle soit volée par une personne malintentionnée (absolument pas sécurisé).
Il est difficile de savoir laquelle de ces solutions a été choisie par les constructeurs et les éditeurs de logiciels, ces derniers communiquant assez peu à ce sujet et l'information n'étant de toute façon pas facile à vérifier sur le smartphone lui-même. On ne peut donc qu'espérer et leur faire confiance plus ou moins aveuglément.
De la sécurité informatique
Toute personne un peu calée en sécurité des systèmes vous le dira : la meilleure méthode d'authentification est celle qui mettra le plus de bâtons dans les roues d'un attaquant qui voudrait pirater votre compte sur un site dont il sait que vous l'utilisez.
Supposons que vous utilisiez le même mot de passe partout, tout le temps. Un beau jour, un des sites sur lesquels vous vous êtes inscrit(e) se fait pirater et les informations qui y étaient stockées se retrouvent dans la nature. Il se trouve que le site avait peu de considérations pour la sécurité des données des utilisateurs, puisque les mots de passe étaient stockés en clair, c'est-à-dire sans protection (ne riez pas, cela arrive encore aujourd'hui !) dans leur base de données. Déjà bien dans la mouise, le site décide en plus de garder cette information pour lui, ce qui fait que vous n'avez pas connaissance de l'information et donc ne pouvez pas réagir. Votre mot de passe peut alors être utilisé pour accéder à vos compte afin de voler les information qui s'y trouvent.
C'est très exactement pour cela que l'un des plus importants conseils de sécurité que l'on donne (et que pourtant personne ne suit) est d'utiliser un mot de passe différent pour chaque site. Et on ne peut pas dire qu'on ait beaucoup d'empreinte digitale à notre disposition pour appliquer cela, pas vrai ?
En me basant sur ce constat, j'ai commencé à réfléchir à ce qui faisait, selon moi, une bonne méthode d'authentification. J'en ai alors dégagé cinq critères, que j'ai pondérés afin de permettre une notation sur quinze d'un système d'authentification donné : si on répond par l'affirmative à une question, alors on ajoute tous les points qui lui sont associés, sinon on n'ajoute rien. Il n'y a pas de demi-mesure, si l'on ne sait pas répondre ou si cela dépend des cas, c'est automatiquement non.
- Exactitude (5 points) : une erreur, même infime, permet-elle de rejeter à coup sûr une tentative d'authentification ?
- Infinité (4 points) : ai-je une infinité de combinaisons possibles pour cette méthode d'authentification, de façon à pouvoir utiliser une combinaison par système (site, logiciel, etc.) ?
- Changeabilité (3 points) : puis-je modifier facilement et autant de fois que je souhaite la combinaison, par exemple si elle vient à être compromise ?
- Singularité (2 points) : la combinaison que j'utilise pour m'authentifier sera-t-elle invalide la prochaine fois que je tenterai de l'utiliser sur le même système, de sorte qu'un pirate qui écouterait la communication ne puisse rien en faire (man in the middle) ?
- Utilisabilité (1 point) : la méthode d'authentification est-elle facile à mettre en œuvre pour un utilisateur inexpérimenté ?
Note : l'utilisabilité ne tient pas compte ici de l'accessibilité pour les personnes possédant un handicap, c'est pourquoi je serais heureux si des lecteurs concernés par cela m'envoyaient leur témoignage à ce sujet :-)
Le tableau ci-dessous synthétise la note qu'obtiendraient différentes méthodes d'authentification avec ces critères. Un O signifie que le critère est validé.
Méthode d'authentification | Exactitude (5 points) |
Infinité (4 points) |
Changeabilité (3 points) |
Singularité (2 points) |
Utilisabilité (1 point) |
Note globale |
---|---|---|---|---|---|---|
Mot de passe | O | O | O | 12/15 | ||
Empreinte biométrique | O | 1/15 | ||||
Code PIN | O | O | O | 9/15 | ||
One-Time Password (OTP) | O | O | O | O | O | 15/15 |
Clé U2F | O | O | O | O | 12/15 |
Si le bon vieux mot de passe semble s'en sortir plutôt bien, la reconnaissance biométrique se plante méchamment : même le code à six chiffres utilisé par les banques en guise de mot de passe (au grand désespoir des experts en sécurité) semble plus sécurisé selon les critères que je propose (mais préférez tout de même un mot de passe, c'est bien plus sûr !).
Pour les plus curieux, le One-Time Password et la clé U2F font référence à deux protocoles d'authentifcation relativement récents. Le premier est souvent utilisé dans le cadre de l'authentification à deux étapes et se présente sous la forme d'un mot de passe à usage unique qui vous est fourni par diverses méthodes, comme une application type Google Authenticator, ou par un moyen de communication comme un e-mail ou un SMS.
La seconde, quant à elle, est une clé USB à connecter à son ordinateur. Cela signifie que l'authentification nécessite la possession d'un élément matériel pour permettre l'authentification, ce qui complexifie incroyablement le travail d'un pirate qui tenterait d'accéder à votre compte (sauf si vous égarez facilement vos affaires). En cas de compromission de la clé, un rachat est nécessaire, c'est pourquoi j'ai considéré sa changeabilité comme difficile, mais cela dépend surtout du prix de la clé et du temps nécessaire à son acquisition. Si toutefois cette technologie vous intéresse, vous pouvez regarder du côté de YubiKey (propriétaire) ou de Nitrokey (libre). Pensez à vérifier que la clé supporte le protocole standardisé FIDO (ou FIDO2) U2F avant de passer à l'achat. :)
Mais comment protéger efficacement mon compte, alors ?
Hasard du calendrier, cet article est publié quelques jours après la Journée internationale du mot de passe. Je profite donc de l'occasion pour rappeler les bonnes pratiques en termes de protection de ses comptes en ligne.
Il est généralement admis que pour assurer la sécurité de son compte, les conseils suivants sont à prendre en compte :
- Dans un premier temps, il est important de choisir un mot de passe robuste, c'est-à-dire un mot de passe long. Cela permet une résistance à l'attaque dite par force brute, qui consiste à essayer chaque combinaison possible une par une jusqu'à trouver la bonne. Les probabilités étant ce qu'elles sont, il sera bien plus difficile de retrouver un mot de passe très long qu'un mot de passe à quatre chiffres.
- Le mot de passe ne doit pas être un mot du dictionnaire. Il est fréquent de conjuguer une attaque par force brute avec une tentative avec des mots du dictionnaire. Même si cela peut être tentant, un mot issu d'une langue étrangère, même en klingon, n'est pas une bonne idée non plus, pour les mêmes raisons.
- En revanche, n'hésitez pas à utiliser plusieurs mots du dictionnaire pour former une phrase : cette méthode appelée XKCD (en référence au strip 936 sur le blog du même nom) permet de créer des mots de passe très résistants à la force brute, tout en restant très facile à mémoriser.
- Dans la mesure du possible, activez l'authentification à deux étapes. Elle consiste, une fois votre mot de passe entré, à vous demander une information que vous seul(e) connaissez. Si possible, évitez le SMS, ce protocole n'étant pas sécurisé et le messages pouvant être intercepté.
- Changez votre mot de passe régulièrement pour garantir une sécurité constante de votre compte. N'ignorez pas les alertes qu'un site pourrait vous envoyer si vos identifiants fuitent.
- Enfin, créez un mot de passe unique par site. Ainsi, si un de vos mots de passe se trouve compromis, seul le site concerné sera impacté, les autres resteront protégés.
Concernant ce dernier point, n'hésitez pas à utiliser un gestionnaire de mots de passe. Il en existe un grand nombre, les plus connus étant probablement Dashlane, KeePass, LastPass ou Bitwarden. Ils fournissent également un générateur de mots de passe de la longueur et de la complexité de votre choix pour vous aider à obtenir des mots de passe solides. Pour le mot de passe maître, la méthode XKCD mentionnée plus haut est un très bon choix.
Pour ce qui est de l'authentification à deux étapes, là aussi, de nombreuses applications existent comme Google Authenticator ou FreeOTP.
Comment savoir si mon mot de passe est compromis ?
Avoir un mot de passe robuste, c'est bien. Mais il peut arriver que le site sur lequel vous l'avez utilisé soit piraté et que votre mot de passe se retrouve dans la nature (typiquement, revendu sur le marché noir). Si la bonne pratique veut que les administrateurs du site préviennent ses utilisateurs de l'événement, il ne le font malheureusement pas toujours, craignant de voir leur base d'utilisateurs ou leur chiffre d'affaires dégringoler.
C'est pour répondre à cette problématique que l'expert en sécurité australien Troy Hunt a créé et mis à disposition le site Have I Been Pwned (« Est-ce que je suis cpmpromis ? »), sur lequel il recense toutes les adresses e-mail et mots de passe qui ont été victimes de piratage, n'hésitez pas à y jeter un œil de temps en temps. Certains gestionnaires de mots de passe comme Bitwarden proposent une intégration de ce service et vérifient régulièrement que vos mots de passe n'ont pas fuité.
Si vous êtes développeur(-se), sachez que Have I Been Pwned met à disposition une API que vous pouvez utiliser pour vérifier que les mots de passe de vos utilisateurs ne sont pas compromis. Si vous développez sous Symfony, vous serez heureux d'apprendre que la prochaine version du framework mettera à disposition une contrainte pour rejeter le mot de passe ou inviter l'utilisateur à le changer s'il est compromis.