Aller au contenu
medium

MFA, WebAuthn et passkeys : l'authentification forte

12 min de lecture

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 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.

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.

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.

FacteurCe que c’estExemples
ConnaissanceCe que tu saisMot de passe, PIN, question secrète
PossessionCe que tu asTéléphone, clé FIDO2, carte à puce
InhérenceCe que tu esEmpreinte, visage, iris

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é.

CombinaisonValidité
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

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éthodeFonctionnementVulnérabilité
SMS OTPCode envoyé par SMSSIM swap, interception
Email OTPCode envoyé par emailCompromission email
TOTP (Google Authenticator)Code temporel (30s)Phishing en temps réel
Push notificationValidation 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.

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éthodeFonctionnementProtection
WebAuthn / FIDO2Clé cryptographique liée à l’origineL’attaquant ne peut pas rejouer
PasskeysWebAuthn synchronisé (cloud)Phishing-resistant + UX simple
Smart card + PINCertificat sur carte à pucePossession 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.

Le NIST définit des Authenticator Assurance Levels (AAL) :

NiveauExigenceExemple
AAL11 facteurMot de passe seul
AAL22 facteursMot de passe + OTP
AAL32 facteurs dont 1 hardwareMot de passe + clé FIDO2

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.

UsageNiveau recommandé
Lecture de contenu publicAAL1 (ou aucun)
Application SaaS standardAAL2
Admin systèmes, données sensiblesAAL3
Paiements, signatures légalesAAL3

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)
  1. 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).

  2. 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.

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.

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).

TypeExemplePortabilité
RoamingClé FIDO2 (YubiKey)Multi-appareils
PlatformTouch ID, Windows HelloLié à l’appareil
HybridQR code + téléphoneCross-device

Les passkeys sont des credentials WebAuthn synchronisés entre vos appareils.

  • Clé FIDO2 physique → une seule clé, si perdue = problème
  • Platform authenticator → une clé par appareil → complexe à gérer
  • 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

Synchronisation des passkeys entre appareils via le cloud provider avec chiffrement de bout en bout

AspectPasskeysClé FIDO2 physique
PortabilitéTous vos appareils (sync)Une seule clé physique
RécupérationVia le compte cloudClé de backup nécessaire
PerteRécup via cloudPerdue = perdue
Niveau de sécuritéAAL2-3 (dépend du provider)AAL3 (hardware dédié)
Usage entrepriseEn cours d’adoptionStandard

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érationRisque
Email de récupérationSi l’email est compromis → game over
SMS de récupérationSIM swap
Questions secrètesRéponses devinables (réseaux sociaux)
Support humainIngénierie sociale
  1. Codes de récupération : générés à l’enregistrement, stockés hors ligne
  2. Plusieurs authenticators : clé principale + clé de backup
  3. Enrôlement supervisé : vérification d’identité pour les utilisateurs sensibles
  4. Délai de récupération : 24-72h pour détecter les compromissions

Le step-up authentication demande une authentification renforcée pour les actions sensibles.

ActionNiveau requis
Consulter son profilSession normale
Changer son emailRe-authentification
Effectuer un virementMFA obligatoire
Désactiver le MFAMFA + confirmation admin
  1. La session initiale a un acr (Authentication Context Class Reference) standard
  2. Pour une action sensible, l’application demande un acr_values plus élevé
  3. L’IdP demande une ré-authentification avec le facteur requis
  4. Un nouveau token est émis avec le nouvel acr
// Demande de step-up
const 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 MFA
stepUpUrl.searchParams.set('max_age', '0'); // Force ré-auth

Un attaquant qui a le mot de passe peut spammer les push notifications :

  1. L’attaquant tente de se connecter → push envoyé
  2. L’utilisateur refuse
  3. L’attaquant réessaie → nouveau push
  4. L’utilisateur fatigué finit par accepter (ou par erreur)
MitigationDescription
Number matchingL’utilisateur doit entrer un code affiché sur le site
Contexte géographiqueAfficher la localisation de la tentative
Rate limitingLimiter le nombre de push par heure
Alerte anomalieNotifier plusieurs refus consécutifs
  1. Realm Settings → Authentication → Required Actions

    Activer “Configure OTP”

  2. Authentication → Flows → Browser

    Ajouter une étape “OTP Form” après le login

  3. Première connexion utilisateur

    L’utilisateur scanne un QR code pour enregistrer un TOTP

  1. Realm Settings → Authentication → WebAuthn Policy

    Configurer les paramètres (attestation, algorithmes)

  2. Authentication → Required Actions

    Activer “WebAuthn Register”

  3. Authentication → Flows → Browser

    Ajouter “WebAuthn Authenticator” comme alternative ou requis

ErreurConséquenceSolution
Récupération par SMS seulBypass MFA via SIM swapCodes de récupération hors ligne
Pas de backup authenticatorLockout si perte de téléphoneExiger 2 authenticators
TOTP présenté comme “secure”Faux sentiment de sécuritéÉduquer sur le phishing TOTP
MFA optionnel pour les adminsCompte admin = cible facileMFA obligatoire (AAL3)

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.