Dans l’article précédent, nous avons vu comment déléguer l’authentification à des géants comme Google ou Microsoft via OAuth2. C’est un grand pas en avant, mais il reste un problème : pour se connecter chez Google, l’utilisateur tape souvent… un mot de passe.
Aujourd’hui, nous attaquons la racine du mal. Nous allons voir comment FIDO2 et WebAuthn permettent de supprimer définitivement le concept de “secret partagé” entre le client et le serveur.
Le problème du “Secret Partagé”
Le modèle classique fonctionne ainsi :
- Vous connaissez le mot de passe.
- Le serveur connaît le mot de passe (ou plutot son hash !!!).
- Pour entrer, vous montrez le mot de passe au serveur.
C’est symétrique. Si le serveur est piraté, votre secret est volé. Si vous le tapez sur un faux site, votre secret est volé.
La solution : La Cryptographie Asymétrique (Clé Publique / Privée)
FIDO2 repose sur le même principe mathématique que SSH ou HTTPS. Au lieu d’un seul secret, nous avons une paire de clés.
- La Clé Privée 🗝️ : Elle est générée dans votre appareil (Smartphone, PC, YubiKey). Elle ne quitte JAMAIS cet appareil. Personne ne peut la voir, même pas vous.
- La Clé Publique 📢 : Elle est envoyée au serveur. Comme son nom l’indique, elle est publique. Si un pirate la vole, il ne peut rien en faire. Elle sert uniquement à vérifier une signature, pas à la créer.
Comment se passe le login ? (Challenge-Response)
Fini l’envoi du mot de passe sur le réseau. Voici la “danse” cryptographique qui se produit en quelques millisecondes :
- User : “Je veux me connecter.”
- Serveur : “Ok, prouve que tu es toi. Voici un nombre aléatoire (le Challenge), par exemple
422184.” - User (Device) : L’appareil prend ce challenge et le signe avec sa Clé Privée. Il envoie le résultat (la signature) au serveur.
- Serveur : Il utilise la Clé Publique (qu’il a stockée lors de l’inscription) pour vérifier mathématiquement que la signature a bien été faite avec la Clé Privée correspondante.
Résultat : Le serveur a authentifié l’utilisateur sans jamais voir la clé privée. Aucun secret n’a transité sur le réseau.
Passkeys vs FIDO2 “Classique”
Jusqu’à récemment, la clé privée était liée au matériel (votre YubiKey ou la puce TPM de votre PC).
- Avantage : Sécurité maximale.
- Inconvénient : Si vous perdez votre clé/PC, vous perdez votre compte (sauf méthodes de récupération lourdes).
- Complexité : Gérer plusieurs appareils (PC, smartphone, tablette) était compliqué.
- Solution : Utiliser une clé FIDO2 par appareil, mais l’utilisateur devait gérer ça lui-même.
- Expérience Utilisateur : Pas très “grand public”.
C’est là qu’interviennent les Passkeys. Une Passkey est techniquement une clé FIDO2 (“Multi-Device Credential”), mais elle est synchronisée via le Cloud du fournisseur (iCloud Keychain pour Apple, Google Password Manager, Bitwarden).
- Avantage : Si vous perdez votre appareil, vous pouvez récupérer vos Passkeys sur un nouvel appareil en vous connectant à votre compte cloud.
- Inconvénient :
- Vous dépendez de la sécurité du fournisseur cloud (mais ils sont globalement assez bons là -dessus).
- Vous avez un point de centralisation (votre compte cloud) à protéger.
- Vos clefs privées sont stockées dans le cloud, et sont dépendantes des lois locales sur la vie privée…
- Compromis : Vous avez une sécurité très élevée (pas de secret partagé, pas de phishing possible) avec une expérience utilisateur fluide.
Si vous perdez votre iPhone, vos clés redescendent automatiquement sur votre nouvel iPhone dès que vous vous connectez à votre compte iCloud. C’est le compromis parfait entre sécurité “militaire” et expérience utilisateur “grand public”.
Pourquoi le Phishing est mort avec ces technologies
C’est la fonctionnalité “killer” de WebAuthn.
Lors de la création de la clé, le navigateur lie cryptographiquement la paire de clés au domaine du site web (l’origine).
- Vous créez une clé pour
google.com. - Un pirate vous envoie un mail : “Urgent, connectez-vous sur
g00gle.com”. - Le site ressemble trait pour trait à l’original.
- Vous cliquez pour vous authentifier.
Le navigateur intervient :
“Je suis actuellement sur
g00gle.com, mais la clé que tu me demandes a été créée pourgoogle.com. Je refuse de signer.”
L’authentification échoue silencieusement. L’utilisateur ne peut pas se faire avoir, même par inattention.
Conclusion
Nous avons un système robuste, résistant au phishing et pratique pour l’utilisateur. FIDO2 et les Passkeys représentent une avancée majeure dans la sécurisation de l’authentification web.
Quelques Ressources Utiles
- Standard : W3C Web Authentication Level
- Tutoriel : WebAuthn.io
- Ressource Dev : Passkeys.dev