Un mot de passe seul ne suffit plus. Le MFA (authentification multi-facteurs) bloque plus de 99% des attaques par credential stuffing. Mais tous les MFA ne se valent pas : le SMS est vulnérable au SIM swapping, le TOTP au phishing. Seuls WebAuthn et les passkeys offrent une résistance native au phishing. Ce guide vous explique ces différences et comment choisir.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »Ce guide vous explique l’authentification forte — du MFA classique aux passkeys. À la fin, vous saurez :
- Comprendre les facteurs d’authentification et leurs niveaux de sécurité
- Distinguer MFA classique (OTP) et MFA phishing-resistant (WebAuthn)
- Maîtriser les concepts WebAuthn, FIDO2 et passkeys
- Implémenter le step-up authentication pour les actions sensibles
Prérequis : avoir lu Les bases de l’IAM.
Pourquoi le mot de passe ne suffit plus
Section intitulée « Pourquoi le mot de passe ne suffit plus »Les mots de passe sont la cible #1 des attaquants :
- Phishing : l’utilisateur donne son mot de passe à un faux site
- Credential stuffing : réutilisation de mots de passe fuités
- Brute force : mots de passe faibles = devinables
- Keyloggers : malware qui capture les frappes
L’authentification multi-facteurs (MFA) ajoute une couche de protection : même si le mot de passe est volé, l’attaquant a besoin d’un second facteur.
Les trois facteurs d’authentification
Section intitulée « Les trois facteurs d’authentification »La sécurité de l’authentification repose sur ce que l’on appelle les facteurs. Chaque facteur représente une catégorie de preuve d’identité distincte. Plus vous combinez de facteurs différents, plus il devient difficile pour un attaquant de tous les compromettre.
| Facteur | Ce que c’est | Exemples |
|---|---|---|
| Connaissance | Ce que tu sais | Mot de passe, PIN, question secrète |
| Possession | Ce que tu as | Téléphone, clé FIDO2, carte à puce |
| Inhérence | Ce que tu es | Empreinte, visage, iris |
MFA = combinaison de facteurs différents
Section intitulée « MFA = combinaison de facteurs différents »Pour qu’une authentification soit considérée comme véritablement multi-facteurs, elle doit combiner des facteurs de catégories différentes. Combiner deux éléments de la même catégorie (deux mots de passe, par exemple) n’améliore pas significativement la sécurité.
| Combinaison | Validité |
|---|---|
| Mot de passe + PIN | ❌ Deux fois “connaissance” |
| Mot de passe + OTP téléphone | ✅ Connaissance + Possession |
| Empreinte + visage | ❌ Deux fois “inhérence” |
| Mot de passe + clé FIDO2 | ✅ Connaissance + Possession |
MFA classique vs MFA phishing-resistant
Section intitulée « MFA classique vs MFA phishing-resistant »MFA classique (vulnérable au phishing)
Section intitulée « MFA classique (vulnérable au phishing) »Les méthodes MFA traditionnelles ajoutent une couche de sécurité, mais elles restent vulnérables aux attaques de phishing sophistiquées. Un attaquant peut capturer le second facteur en temps réel et le rejouer immédiatement.
| Méthode | Fonctionnement | Vulnérabilité |
|---|---|---|
| SMS OTP | Code envoyé par SMS | SIM swap, interception |
| Email OTP | Code envoyé par email | Compromission email |
| TOTP (Google Authenticator) | Code temporel (30s) | Phishing en temps réel |
| Push notification | Validation sur l’app mobile | ”Fatigue MFA” (push bombing) |
Problème : Un attaquant peut créer un faux site qui demande l’OTP et le rejoue en temps réel vers le vrai site.
MFA phishing-resistant
Section intitulée « MFA phishing-resistant »Les méthodes phishing-resistant ont une propriété fondamentale : le credential est lié cryptographiquement à l’origine (l’URL du site). Même si un attaquant crée un faux site identique, le credential ne fonctionnera pas car l’origine ne correspond pas.
| Méthode | Fonctionnement | Protection |
|---|---|---|
| WebAuthn / FIDO2 | Clé cryptographique liée à l’origine | L’attaquant ne peut pas rejouer |
| Passkeys | WebAuthn synchronisé (cloud) | Phishing-resistant + UX simple |
| Smart card + PIN | Certificat sur carte à puce | Possession physique + PIN |
Clé : le credential est lié à l’origine (URL). Le faux site n’a pas la bonne origine, donc le credential ne fonctionne pas.
Niveaux d’assurance (NIST 800-63)
Section intitulée « Niveaux d’assurance (NIST 800-63) »Le NIST définit des Authenticator Assurance Levels (AAL) :
| Niveau | Exigence | Exemple |
|---|---|---|
| AAL1 | 1 facteur | Mot de passe seul |
| AAL2 | 2 facteurs | Mot de passe + OTP |
| AAL3 | 2 facteurs dont 1 hardware | Mot de passe + clé FIDO2 |
Quel niveau pour quel usage ?
Section intitulée « Quel niveau pour quel usage ? »Le choix du niveau d’assurance dépend de la sensibilité des données et des actions autorisées. Ne sur-sécurisez pas les accès à faible risque (friction utilisateur inutile), mais n’hésitez pas à exiger AAL3 pour les opérations critiques.
| Usage | Niveau recommandé |
|---|---|
| Lecture de contenu public | AAL1 (ou aucun) |
| Application SaaS standard | AAL2 |
| Admin systèmes, données sensibles | AAL3 |
| Paiements, signatures légales | AAL3 |
WebAuthn et FIDO2
Section intitulée « WebAuthn et FIDO2 »Qu’est-ce que FIDO2 ?
Section intitulée « Qu’est-ce que FIDO2 ? »FIDO2 est un ensemble de standards pour l’authentification sans mot de passe :
- WebAuthn : API web pour l’authentification (W3C)
- CTAP : protocole de communication avec les authenticators (FIDO Alliance)
Comment ça marche
Section intitulée « Comment ça marche »-
Enregistrement (Registration)
L’utilisateur génère une paire de clés (privée/publique). La clé publique est envoyée au serveur. La clé privée reste sur l’authenticator (clé FIDO2, téléphone).
-
Authentification (Authentication)
Le serveur envoie un “challenge” (valeur aléatoire). L’authenticator signe le challenge avec la clé privée. Le serveur vérifie la signature avec la clé publique.
Pourquoi c’est phishing-resistant
Section intitulée « Pourquoi c’est phishing-resistant »La clé privée est liée à l’origine (URL du site).
- Enregistrement sur
https://bank.example.com→ clé liée à cette origine - Faux site
https://bank-secure.attacker.com→ origine différente → la clé ne fonctionne pas
L’utilisateur n’a rien à comparer. Le navigateur vérifie automatiquement.
Types d’authenticators
Section intitulée « Types d’authenticators »WebAuthn supporte différents types d’authenticators selon que l’appareil est physiquement séparé (roaming), intégré à votre machine (platform), ou accessible via un mécanisme de pont comme un QR code (hybrid).
| Type | Exemple | Portabilité |
|---|---|---|
| Roaming | Clé FIDO2 (YubiKey) | Multi-appareils |
| Platform | Touch ID, Windows Hello | Lié à l’appareil |
| Hybrid | QR code + téléphone | Cross-device |
Passkeys : WebAuthn simplifié
Section intitulée « Passkeys : WebAuthn simplifié »Les passkeys sont des credentials WebAuthn synchronisés entre vos appareils.
Avant les passkeys
Section intitulée « Avant les passkeys »- Clé FIDO2 physique → une seule clé, si perdue = problème
- Platform authenticator → une clé par appareil → complexe à gérer
Avec les passkeys
Section intitulée « Avec les passkeys »- Le credential est synchronisé via iCloud Keychain, Google Password Manager, etc.
- Vous vous inscrivez sur un appareil → disponible sur tous vos appareils Apple/Google/Microsoft
- UX simplifiée : pas de clé physique à transporter
Fonctionnement technique
Section intitulée « Fonctionnement technique »Passkeys vs clés FIDO2 physiques
Section intitulée « Passkeys vs clés FIDO2 physiques »| Aspect | Passkeys | Clé FIDO2 physique |
|---|---|---|
| Portabilité | Tous vos appareils (sync) | Une seule clé physique |
| Récupération | Via le compte cloud | Clé de backup nécessaire |
| Perte | Récup via cloud | Perdue = perdue |
| Niveau de sécurité | AAL2-3 (dépend du provider) | AAL3 (hardware dédié) |
| Usage entreprise | En cours d’adoption | Standard |
Récupération de compte : le point faible
Section intitulée « Récupération de compte : le point faible »La récupération de compte est souvent le maillon faible du MFA.
Chaque méthode de récupération présente des vulnérabilités spécifiques. Un attaquant ciblera souvent la récupération plutôt que l’authentification principale si c’est le chemin le plus faible.
| Méthode de récupération | Risque |
|---|---|
| Email de récupération | Si l’email est compromis → game over |
| SMS de récupération | SIM swap |
| Questions secrètes | Réponses devinables (réseaux sociaux) |
| Support humain | Ingénierie sociale |
Bonnes pratiques
Section intitulée « Bonnes pratiques »- Codes de récupération : générés à l’enregistrement, stockés hors ligne
- Plusieurs authenticators : clé principale + clé de backup
- Enrôlement supervisé : vérification d’identité pour les utilisateurs sensibles
- Délai de récupération : 24-72h pour détecter les compromissions
Step-up authentication
Section intitulée « Step-up authentication »Le step-up authentication demande une authentification renforcée pour les actions sensibles.
Principe
Section intitulée « Principe »| Action | Niveau requis |
|---|---|
| Consulter son profil | Session normale |
| Changer son email | Re-authentification |
| Effectuer un virement | MFA obligatoire |
| Désactiver le MFA | MFA + confirmation admin |
Implémentation avec OIDC
Section intitulée « Implémentation avec OIDC »- La session initiale a un
acr(Authentication Context Class Reference) standard - Pour une action sensible, l’application demande un
acr_valuesplus élevé - L’IdP demande une ré-authentification avec le facteur requis
- Un nouveau token est émis avec le nouvel
acr
// Demande de step-upconst stepUpUrl = new URL('https://auth.example.com/authorize');stepUpUrl.searchParams.set('client_id', 'my-app');stepUpUrl.searchParams.set('response_type', 'code');stepUpUrl.searchParams.set('scope', 'openid');stepUpUrl.searchParams.set('acr_values', 'urn:example:mfa'); // Exige MFAstepUpUrl.searchParams.set('max_age', '0'); // Force ré-authMFA fatigue et push bombing
Section intitulée « MFA fatigue et push bombing »Le risque
Section intitulée « Le risque »Un attaquant qui a le mot de passe peut spammer les push notifications :
- L’attaquant tente de se connecter → push envoyé
- L’utilisateur refuse
- L’attaquant réessaie → nouveau push
- L’utilisateur fatigué finit par accepter (ou par erreur)
Mitigations
Section intitulée « Mitigations »| Mitigation | Description |
|---|---|
| Number matching | L’utilisateur doit entrer un code affiché sur le site |
| Contexte géographique | Afficher la localisation de la tentative |
| Rate limiting | Limiter le nombre de push par heure |
| Alerte anomalie | Notifier plusieurs refus consécutifs |
Configuration Keycloak MFA
Section intitulée « Configuration Keycloak MFA »Activer TOTP
Section intitulée « Activer TOTP »-
Realm Settings → Authentication → Required Actions
Activer “Configure OTP”
-
Authentication → Flows → Browser
Ajouter une étape “OTP Form” après le login
-
Première connexion utilisateur
L’utilisateur scanne un QR code pour enregistrer un TOTP
Activer WebAuthn
Section intitulée « Activer WebAuthn »-
Realm Settings → Authentication → WebAuthn Policy
Configurer les paramètres (attestation, algorithmes)
-
Authentication → Required Actions
Activer “WebAuthn Register”
-
Authentication → Flows → Browser
Ajouter “WebAuthn Authenticator” comme alternative ou requis
Erreurs fréquentes
Section intitulée « Erreurs fréquentes »| Erreur | Conséquence | Solution |
|---|---|---|
| Récupération par SMS seul | Bypass MFA via SIM swap | Codes de récupération hors ligne |
| Pas de backup authenticator | Lockout si perte de téléphone | Exiger 2 authenticators |
| TOTP présenté comme “secure” | Faux sentiment de sécurité | Éduquer sur le phishing TOTP |
| MFA optionnel pour les admins | Compte admin = cible facile | MFA obligatoire (AAL3) |
À retenir
Section intitulée « À retenir »Références
Section intitulée « Références »- NIST SP 800-63B — Authentication and Lifecycle Management
- WebAuthn Specification (W3C)
- FIDO Alliance
- Passkeys.dev