Une authentification par mot de passe sur le web est vite problématique. Avec la multiplication des sites web, chacun avec son compte, on a vite fait d’utiliser le même mot de passe pour un même type de site, voire le même mot de passe partout. Tôt où tard on finit par s’authentifier sur une machine publique, chez un voisin, sur un wifi public, ou alors un des services finit par avoir une faille de sécurité, voire quelqu’un a posé un spyware sur notre machine habituelle.
Problématique simple : Je veux que personne ne puisse s’authentifier sur mes comptes frauduleusement, et le mot de passe n’est pas la solution.
Mots de passes uniques
Palliatif simple : Je génère un mot de passe par site. Je l’ai fait un temps, mais on atteint vite les limite de ce qu’on peut retenir de tête, même en utilisant une astuce pour déterminer le mot de passe en fonction du site (genre faire changer une partie du mot de passe en fonction du site). Au final la facilité reprend le dessus et on utilise trop souvent le même, ou des trop proches.
C’est encore plus vrai pour les mots de passe « sensibles » (comptes mails principaux, machines perso, machine pro) où le mot de passe devrait être complexe, différent à chaque fois, et renouvelé au minimum à chaque changement de société ou de prestataire. Jusqu’à quatre mots de passe forts c’est encore gérable, après ça devient ingérable, surtout si certains sont peu utilisés (donc vite oubliés).
Générateurs automatiques de mots de passe
Dans la même lignée on peut utiliser un système automatique pour générer un mot de passe à partir du nom ou de l’URL du service, ou aléatoirement en tenant à jour une liste de mots de passe. C’est mieux, mais on reste dépendant de cet algorithme. Si je suis à l’extérieur, je risque de ne plus y avoir accès. Ensuite ça ne pallie qu’une partie du problème : ça n’empêche pas le mot de passe de se diffuser, et d’être utilisé frauduleusement par un tiers. Ça limite juste les dégâts si c’est le service tiers qui a un problème de sécurité.
OpenID
OpenID c’est une manière de résoudre le problème par l’autre bout. On centralise la gestion de l’authentification sur un seul site, et tous peuvent ensuite y faire appel. Du coup je n’ai aucun seul mot de passe à retenir : celui de mon compte openid. Je peux faire en sorte qu’il soit complexe, transmis sur une connexion sécurisée, et je ne crains pas les failles applicatives des services tiers.
Ça résout certaines questions, mais en pose d’autres : Comment est-ce que je m’authentifie sur le serveur OpenId ? si c’est un mot de passe alors j’ai un risque d’autant plus grand s’il est découvert. Tous mes services en dépendent.
RSA SecurID
SecurID c’est le système classique en entreprise. On vous donne une sorte de porte clef personnel qui génère un mot de passe unique toutes les 15 secondes. Naturellement chaque porte clef est initialisé différemment donc seul le votre donne accès à votre compte. Le mot de passe est à usage unique, et totalement sans intérêt passé une minute. Les risques d’accès frauduleux sont donc fortement limités.
Malheureusement ça ne semble pas vraiment convenir à un usage personnel courant. Tout d’abord je n’ai qu’un seul support physique, et aucun accès de secours. Si je perds mon accès, je dois me reposer sur un administrateur tiers qui me redonne un nouveau support et le lie à mon compte.
En vacances, ou simplement si je n’ai pas ma veste avec moi, il peut arriver que je n’ai pas mon support. Sous réserve que je considère mon accès comme « sans risques » je souhaite pouvoir passer sans le jeton d’authentification forte. Là je n’avais pas ce choix.
Ensuite le jeton repose sur un système de clefs et de secrets qui est détenu par Verisign. C’est un point qui est sensible pour moi, d’autant qu’il y a eu une faille chez eux récemment et qu’on se demande si les secrets n’ont pas été divulgués. Un système open source sans serveur tiers me semble indispensable.
Enfin, pour éviter qu’il suffise de voler le porte clef plastique pour avoir accès à mon compte, je devais ajouter un PIN de quatre chiffres. Ce qui m’étonne c’est que ce PIN n’est pas à saisir sur le porte clef, mais à côté du jeton d’authentification, dans le formulaire web. Quiconque regarde mon clavier, écoute sur le réseau, ou a réussi à poser un spyware sur ma machine connaitra ce PIN. Bref, il n’est pas si secret que ça.
Pour ma société, voire pour l’accès à mon compte en banque (et encore), pourquoi pas. Pour le reste, bof bof.
Google 2 steps verification
Le système Google est pour moi un peu plus souple déjà. Il utilise une application sur mon smartphone et pas un porte clef tiers mais le système semble similaire. Ca n’a l’air de rien mais le téléphone a beaucoup plus de chances d’être avec moi. Il intervient après l’authentification par mot de passe (d’où le nom de « deux étapes ») et on peut forcer la seconde étape à ne pas être redemandée à chaque fois pour la même machine qu’on sait « sûre ».
Pour autant je ne suis pas toujours avec mon téléphone, et il peut tomber hors batterie. Dans ces conditions, et si j’ai confiance dans le poste et la connexion sur lesquels je suis, j’aurai aimé pouvoir saisir un mot de passe spécifique qui zappe l’authentification forte. Ça fonctionne tant que c’est exceptionnel mais Google ne me le propose pas. Google me propose par contre de générer une série de mots de passe à usage unique. Malheureusement l’usage unique est potentiellement gênant et surtout ça implique de les noter quelque part, avec le risque de les perdre ou de se les faire voler. Bref, on peut mieux faire même si j’apprécie l’intention.
Pour ne pas risquer de perdre des accès et comme il n’y a pas d’administrateur humain tiers, je peux proposer à Google un second numéro de téléphone qui sert en backup, si jamais je perds le premier. Là aussi c’est positif. Maintenant personnellement j’ai un téléphone perso, un de boulot, je risque parfois d’avoir l’un et pas l’autre. J’aurai aimé autoriser les deux à me servir pour l’authentification forte et ce n’est pas proposé.
Point positif, google garde une compatibilité avec toutes les applications qui continuent à utiliser un simple mot de passe comme interface. Je peux faire générer autant de mot de passe que je veux (ils sont longs et complexes) et les affecter à des applications. J’ai ensuite la liste des applications dans mon interface d’administration et je peux en ajouter ou en retirer à la volée. Le résultat c’est que je peux valider ou refuser chaque application indépendamment, sans secret partagé entre toutes.
Côté sécurité, rien ne m’indique qu’il est impossible de copier le logiciel présent sur mon téléphone portable (ou les mots de passe à usage unique que j’ai en backup) et l’utiliser sans que je ne le sache. Techniquement ça ne prend pas longtemps pour quelqu’un qui a accès à mon téléphone, 10 minutes au plus. J’aurai aimé un système qui détecte que deux téléphones distincts utilisent la même clef et me l’indique. Si c’est présent Google n’en parle pas.
Enfin, tout ça est « google-only ». Je peux certes utiliser google en openid, mais ça reste centralisé. J’aurai aimé quelque chose d’utilisable partout, y compris sur mes serveurs.
Clefs SSH
En rédigeant tout ça je me suis rendu compte que j’utilisais déjà un système assez ressemblant : les clefs SSH. Pour me connecter à mes serveurs j’utilise des clefs privées. J’ai une clef par source, toutes différentes. Je peux autoriser facilement une nouvelle source, ou en griller une existante, sans mettre à jour. J’ai aussi un mot de passe de secours que je peux utiliser quand je suis à l’extérieur.
Malheureusement là c’est uniquement pour ssh, et mes authentifications se font à 90% sur des formulaires web. Ca demande aussi d’avoir ses clefs ssh sur soi, or le scénario d’authentification forte est surtout utile justement quand je suis ailleurs que chez moi, ou avec une machine qui n’est pas une machine de confiance.
Je n’ai non plus aucun système qui m’assure que ma clef n’a pas été copiée et utilisée par un tiers.
Et vous ? Qu’avez-vous pour vos authentifications fortes ?
En regardant j’aimerai :
- Authentification par un système de clefs privée/publique géré par une appli sur mon téléphone portable
- Possibilité de gérer une liste de clefs autorisées (une par téléphone portable) pour ajouter/retirer facilement un accès
- Le jeton renvoyé par le téléphone est obtenu par une combinaison d’un mot de passe ou PIN et de la clef (il faut les deux, et donc le mot de passe n’est pas saisit sur le PC public mais sur mon propre téléphone)
- Un système de numéro incrémental est associé au jeton d’accès afin de repérer si un tiers utilise une de mes clefs après l’avoir copiée (si le numéro est égal ou plus faible que la dernière fois le serveur refuse l’accès, je saurai donc que quelqu’un utilise ma clef ailleurs et je pourrai la supprimer des autorisations)
- Authentification alternative par un mot de passe que je choisis moi, pour quand je n’ai pas mes téléphones et que je suis prêt à prendre le risque
- Authentification alternative par mot de passe pour les API, logiciels, etc. (mot de passe généré, long/complexe)
- Possibilité de gérer une liste de mots de passe autorisés (un par application/API) pour ajouter/retirer facilement un accès
Laisser un commentaire