WebAuthn (Web Authentication) est l'API normalisée par le W3C qui permet à un site web de demander au navigateur la création et l'utilisation d'identifiants cryptographiques à la place d'un mot de passe. Avec le protocole CTAP, elle constitue l'ensemble FIDO2.
Les deux opérations
navigator.credentials.create()— enregistrement : l'authentificateur génère une paire de clés propre au site, renvoie la clé publique accompagnée d'une attestation ;navigator.credentials.get()— authentification : l'authentificateur signe un défi envoyé par le serveur, après vérification de la présence et, si demandé, de l'utilisateur.
La clé privée ne quitte jamais l'élément sécurisé. Le serveur, appelé relying party, ne conserve qu'une clé publique, sans valeur en cas de fuite de sa base.
Le mécanisme qui fait la différence
Le navigateur inclut l'origine réelle — le domaine affiché dans la barre d'adresse — dans les données signées, et refuse d'utiliser une clé enregistrée pour un autre domaine. Un site imitant la page de connexion n'obtient donc rien d'exploitable : c'est la liaison à l'origine, fondement de la résistance au phishing de FIDO2.
Deux précisions utiles. WebAuthn ne concerne que la couche navigateur et application : le dialogue avec une clé USB ou NFC relève de CTAP. Et l'API authentifie l'ouverture de session ; la protection du cookie émis ensuite, comme la robustesse de la procédure de récupération, restent à la charge de l'application.
Aller plus loin : définition de FIDO2 · définition de CTAP · passkey, FIDO2, WebAuthn : démêler les termes · l'authentification cognitive