Chapitre 313 minIntermédiaire
Passkeys, FIDO2 et WebAuthn : se connecter sans mot de passe
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- expliquer comment une passkey prouve l'identité par un défi signé ;
- dire pourquoi une passkey résiste à l'hameçonnage ;
- choisir entre passkey synchronisée et clé liée à un appareil ;
- savoir ce qu'une application stocke et vérifie.
4 exercices corrigés1 schéma
Une passkey (en français « clé d'accès ») est un identifiant de connexion qui remplace le mot de passe par une paire de clés cryptographiques : la clé privée reste sur ton appareil, le site ne garde que la clé publique. Pour te connecter, ton appareil signe un défi envoyé par le site, après que tu l'as déverrouillé avec ton empreinte, ton visage ou un code PIN. Les passkeys reposent sur les normes FIDO2 et WebAuthn ; elles résistent à l'hameçonnage, ce qu'aucun mot de passe ni code à usage unique ne fait.
Pourquoi se passer du mot de passe
Le mot de passe a trois défauts que la MFA atténue sans les supprimer :
- c'est un secret partagé : le serveur en garde une empreinte, qui peut fuiter et être cassée (chapitre 4) ;
- il se réutilise : le même mot de passe ouvre souvent plusieurs sites, et une fuite sur l'un compromet les autres (credential stuffing) ;
- il se saisit n'importe où : rien n'empêche l'utilisateur de le taper sur un faux site qui imite le vrai.
Une passkey règle les trois d'un coup. Le serveur ne stocke qu'une clé publique, inutile à un voleur. Chaque site reçoit une paire de clés différente. Et la clé privée ne signe que pour le nom de domaine pour lequel elle a été créée : sur sorbier-logistique-connexion.example, la passkey de sorbier.example ne répond tout simplement pas.
FIDO2, WebAuthn, CTAP : qui fait quoi
| Nom | Ce que c'est | Qui le publie |
|---|---|---|
| FIDO2 | Le nom de l'ensemble des normes d'authentification sans mot de passe | L'Alliance FIDO, avec le W3C |
| WebAuthn (Web Authentication) | L'interface JavaScript du navigateur qu'utilise un site pour créer et utiliser des clés : navigator.credentials.create() et navigator.credentials.get() | Le W3C |
| CTAP (Client to Authenticator Protocol) | Le protocole entre le navigateur (ou le système) et un authentificateur externe, par USB, NFC ou Bluetooth | L'Alliance FIDO |
| Passkey | Le nom grand public d'un identifiant FIDO2 « découvrable » : l'appareil retrouve tout seul le compte, sans que l'utilisateur tape un identifiant | Terme adopté par Apple, Google et Microsoft |
L'authentificateur est le composant qui détient la clé privée. Il en existe deux familles :
- les authentificateurs de plateforme, intégrés à l'appareil : Windows Hello (avec le TPM du PC), Touch ID et Face ID sur Apple, le déverrouillage d'Android ;
- les authentificateurs itinérants : une clé de sécurité USB ou NFC que l'on branche sur n'importe quel poste.
Passkeys synchronisées ou liées à un appareil
Une passkey peut rester dans un seul appareil, ou être copiée de façon chiffrée entre tes appareils par ton trousseau (iCloud, gestionnaire de mots de passe de Google, gestionnaire de mots de passe tiers).
| Type | Avantage | Inconvénient | Pour qui |
|---|---|---|---|
| Synchronisée | Survit à la perte d'un téléphone, disponible sur tous tes appareils | La sécurité dépend du compte qui synchronise | Grand public, la plupart des salariés |
| Liée à un appareil (clé de sécurité, TPM) | La clé privée ne quitte jamais le matériel | Perdre l'appareil, c'est perdre la clé : il en faut une seconde | Administrateurs, comptes très sensibles |
Une entreprise peut exiger des authentificateurs précis grâce à l'attestation : à la création, l'authentificateur peut fournir un certificat de son fabricant qui prouve son modèle. Microsoft Entra ID permet ainsi de n'autoriser que certaines clés de sécurité pour les administrateurs.
L'enregistrement et la connexion, pas à pas
Le W3C appelle ces deux échanges des cérémonies.
L'enregistrement (création de la passkey), une fois par appareil :
- l'utilisateur, déjà authentifié (ou en cours d'inscription), clique sur « Créer une passkey » ;
- le serveur envoie un défi aléatoire, l'identifiant du site (relying party ID, par exemple
sorbier.example) et un identifiant opaque de l'utilisateur ; - le navigateur vérifie que la page est bien servie par ce domaine, puis transmet la demande à l'authentificateur ;
- l'utilisateur se vérifie localement (empreinte, visage, PIN) ;
- l'authentificateur génère une nouvelle paire de clés pour ce site, garde la clé privée et renvoie la clé publique avec un identifiant de clé (credential ID) ;
- le serveur vérifie la réponse et enregistre la clé publique pour ce compte.
La connexion, à chaque fois :
Le défi change à chaque connexion : une signature interceptée ne peut pas être rejouée. L'empreinte digitale ou le visage ne quittent jamais l'appareil : ils servent seulement à autoriser l'usage de la clé privée.
Côté SLAM : ce que l'application stocke et vérifie
Pour chaque passkey d'un utilisateur, la base de l'application garde quelques colonnes :
| Colonne | Contenu | Sensible ? |
|---|---|---|
credential_id | L'identifiant de la clé, renvoyé par l'authentificateur | Non |
cle_publique | La clé publique, au format COSE | Non : elle ne permet pas de se connecter |
compteur | Le dernier compteur de signatures | Non |
id_utilisateur | Le compte auquel elle appartient | Donnée personnelle |
date_creation, derniere_utilisation, libelle | Pour que l'utilisateur gère ses appareils (« iPhone de Julie ») | Données personnelles |
Côté navigateur, l'appel à WebAuthn ressemble à ceci (simplifié : les champs binaires arrivent du serveur encodés et doivent être convertis en ArrayBuffer) :
// Connexion : le serveur a fourni un défi aléatoire à usage unique
const assertion = await navigator.credentials.get({
publicKey: {
challenge: defiRecuDuServeur, // ArrayBuffer, au moins 16 octets aléatoires
rpId: 'sorbier.example', // le domaine du site
userVerification: 'required', // empreinte, visage ou PIN exigés
timeout: 60000,
},
});
// On renvoie au serveur : assertion.id, la signature et les données signées
await fetch('/api/passkeys/verifier', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(serialiser(assertion)), // fonction de conversion en base64url
});
Le serveur, lui, ne vérifie pas la signature à la main : il utilise une bibliothèque maintenue (il en existe pour Node.js, PHP, Java, C# et Python). Elle contrôle que le défi est celui qu'il a émis, que l'origine est la bonne, que l'utilisateur a été vérifié, puis vérifie la signature avec la clé publique enregistrée.
Côté SISR : les passkeys dans l'entreprise
Dans un parc Windows, Antoine Mercier, responsable informatique de Sorbier Logistique, dispose de trois options :
- Windows Hello for Business : chaque poste crée une clé liée à son TPM, déverrouillée par PIN ou biométrie. Le salarié n'utilise plus son mot de passe au quotidien ;
- les passkeys dans Microsoft Entra ID : sur une application d'authentification ou sur une clé de sécurité, pour se connecter aux services Microsoft 365 et aux applications fédérées (chapitre 6) ;
- les clés de sécurité FIDO2 pour les administrateurs, avec une politique qui interdit les autres méthodes sur ces comptes.
Le plus difficile n'est pas technique : il faut organiser l'enrôlement (remettre les clés, vérifier l'identité de la personne au moment où elle crée sa passkey) et la récupération en cas de perte. Une procédure de secours qui revient au mot de passe seul recrée la faiblesse qu'on voulait supprimer.
Les limites à connaître
- La récupération : un compte protégé uniquement par une passkey liée à un appareil perdu est inaccessible. Il faut au moins deux authentificateurs, ou une procédure de vérification d'identité.
- La compatibilité : les systèmes et navigateurs récents gèrent tous WebAuthn, mais un vieux poste ou une application métier ancienne peut ne pas le permettre.
- La transition : tant que le mot de passe reste accepté en parallèle, l'attaquant peut toujours tenter de le voler. Le bénéfice complet arrive quand le mot de passe est désactivé pour le compte.
- L'appareil déverrouillé : une passkey synchronisée protège mal si l'appareil n'a pas de verrouillage ou si le compte de synchronisation est lui-même mal protégé.
Comment l'E7 l'interroge
Les passkeys sont récentes et peu de sujets officiels les ont encore citées par leur nom. Mais elles sont la bonne réponse dès qu'un sujet demande une authentification résistante à l'hameçonnage, une alternative au mot de passe pour des comptes sensibles, ou la façon de stocker un moyen d'authentification sans risque en cas de fuite de la base.
- SLAM : expliquer pourquoi la fuite de la table des clés publiques n'est pas grave ; dire ce que le serveur doit vérifier dans une réponse WebAuthn ; comparer passkey et mot de passe haché.
- SISR : proposer une authentification des administrateurs qui résiste à l'hameçonnage ; expliquer l'intérêt d'avoir deux clés de sécurité par administrateur.
Pour aller plus loin. Une passkey est une paire de clés asymétriques : le principe de la clé publique et de la clé privée est expliqué dans le chapitre Chiffrement asymétrique du cours Cryptographie.
Exercices
Exercice 1 sur 4 La base qui fuit Réussi À revoir
La table passkey d'une application est volée lors d'une intrusion : credential_id, cle_publique, compteur, id_utilisateur.
- L'attaquant peut-il se connecter aux comptes ? Justifie.
- Compare avec le vol d'une table de mots de passe hachés avec bcrypt.
Voir la réponseMasquer la réponse de l'exercice 1
- Non. Pour se connecter, il faut signer le défi du serveur avec la clé privée, qui n'a jamais quitté les appareils des utilisateurs. La clé publique permet seulement de vérifier une signature, pas d'en produire une. La fuite reste une violation de données personnelles (les identifiants des utilisateurs, les libellés des appareils) à traiter selon le RGPD, mais elle ne compromet pas les comptes.
- Avec des empreintes bcrypt, l'attaquant peut lancer une attaque hors ligne et retrouver les mots de passe faibles, puis les essayer sur d'autres sites si les utilisateurs les ont réutilisés. Avec des passkeys, il n'y a rien à casser.
Tu avais trouvé ?
Exercice 2 sur 4 Le faux site Réussi À revoir
Sofiane Benali reçoit un courriel qui imite le portail RH et contient un lien vers portail-sorbier.example. Le vrai portail est rh.sorbier.example et Sofiane s'y connecte avec une passkey.
- Que se passe-t-il s'il clique et tente de se connecter ?
- Que se serait-il passé avec un mot de passe et un code TOTP ?
Voir la réponseMasquer la réponse de l'exercice 2
- Le navigateur cherche une passkey pour le domaine du faux site. Il n'en trouve aucune : la passkey de Sofiane a été créée pour
sorbier.example, et le navigateur refuse de l'utiliser ailleurs. Aucune signature n'est produite, l'attaque échoue sans que Sofiane ait besoin de repérer l'adresse. - Sofiane aurait tapé son mot de passe puis son code sur la fausse page. Le kit d'hameçonnage les aurait relayés au vrai portail en moins de 30 secondes et aurait récupéré la session.
Tu avais trouvé ?
Exercice 3 sur 4 Remettre les étapes dans l'ordre Réussi À revoir
Range les étapes d'une connexion par passkey dans l'ordre : (a) le serveur vérifie la signature avec la clé publique ; (b) l'utilisateur pose son doigt sur le capteur ; (c) le serveur envoie un défi aléatoire ; (d) l'authentificateur signe le défi avec la clé privée ; (e) le navigateur vérifie le domaine de la page.
Voir la réponseMasquer la réponse de l'exercice 3
(c), (e), (b), (d), (a). Le défi vient toujours en premier, du serveur ; la vérification locale de l'utilisateur précède la signature, puisqu'elle sert à autoriser l'usage de la clé privée.
Tu avais trouvé ?
Exercice 4 sur 4 Synchronisée ou liée à l'appareil ? Réussi À revoir
Pour chaque profil, choisis le type de passkey le plus adapté et justifie.
- Les 14 salariés de Sorbier Logistique pour leur messagerie.
- Antoine Mercier pour son compte d'administrateur du domaine.
Voir la réponseMasquer la réponse de l'exercice 4
- Synchronisée : la perte ou le changement de téléphone ne bloque pas le salarié, ce qui limite les appels au support et les procédures de secours risquées.
- Liée à un appareil (deux clés de sécurité FIDO2, l'une rangée en lieu sûr) : la clé privée ne quitte jamais le matériel et la politique peut interdire toute autre méthode sur ce compte. C'est le compte le plus critique de l'organisation.
Tu avais trouvé ?