Activer l'authentification forte avec WebAuthn

Problème

L'hameçonnage est le principal problème de sécurité sur le Web: 81% des piratages de comptes l'an dernier provenaient de mots de passe peu sécurisés ou volés. La réponse collective du secteur à ce problème a été l'authentification multifacteur, mais les implémentations sont fragmentées et la plupart ne traitent toujours pas correctement l'hameçonnage. Nous travaillons avec la FIDO Alliance depuis 2013 et, plus récemment, avec le W3C, afin de mettre en œuvre un protocole standard de protection contre l'hameçonnage qui peut être utilisé par n'importe quelle application Web.

Qu'est-ce que WebAuthn ?

L'API Web Authentication permet aux applications Web d'accéder aux authentificateurs via l'user-agent. Il s'agit souvent de jetons matériels accessibles via USB/BLE/NFC ou de modules intégrés directement dans la plate-forme, afin de générer et de remettre en question des identifiants de clé publique eTLD+k. Cela permet d'appliquer divers cas d'utilisation, par exemple:

  • Authentification à deux facteurs simple et résistante à l'hameçonnage (à utiliser avec un mot de passe).
  • Réautorisation biométrique sans mot de passe
  • Authentification à deux facteurs simple et résistante à l'hameçonnage, sans mot de passe (à utiliser pour les comptes sans mot de passe)

L'API est en bonne voie pour être implémentée par la plupart des principaux navigateurs. Elle vise à simplifier l'interface utilisateur rencontrée lorsque vous devez prouver votre identité en ligne et à réduire considérablement l'hameçonnage.

WebAuthn étend l'API Credential Management et ajoute un nouveau type d'identifiants appelé PublicKeyCredential. WebAuthn élimine la communication entre le navigateur et un authentificateur, et permet à un utilisateur de:

  1. Créer et enregistrer des identifiants de clé publique pour un site Web
  2. Authentifiez-vous auprès d'un site Web en prouvant que vous êtes le propriétaire de la clé privée correspondante.

Les authentificateurs sont des appareils qui peuvent générer des paires de clés privées/publiques et recueillir le consentement des utilisateurs. Vous pouvez accorder le consentement pour la signature d'un simple geste, par lecture d'une empreinte digitale ou par d'autres méthodes, à condition que l'utilisateur respecte les exigences de la norme FIDO2 (il existe un programme de certification pour les authentificateurs par FIDO Alliance). Les authentificateurs peuvent être intégrés à la plate-forme (comme les lecteurs d'empreinte digitale sur les smartphones) ou connectés via USB, Bluetooth à basse consommation (BLE) ou technologie NFC (communication en champ proche).

Fonctionnement

Créer une paire de clés et enregistrer un utilisateur

Lorsqu'un utilisateur souhaite enregistrer un identifiant sur un site Web (appelé "partie de confiance" par WebAuthn):

  1. Le tiers de confiance génère un défi.
  2. Le tiers de confiance demande au navigateur, via l'API Gestionnaire d'identifiants, de générer un nouvel identifiant pour le tiers de confiance, en spécifiant les fonctionnalités de l'appareil (par exemple, si l'appareil fournit sa propre authentification utilisateur (avec la biométrie, etc.).
  3. Une fois que l'authentificateur a obtenu le consentement de l'utilisateur, il génère une paire de clés et renvoie la clé publique et l'attestation signée facultative au site Web.
  4. L'application Web transfère la clé publique au serveur.
  5. Le serveur stocke la clé publique, associée à l'identité de l'utilisateur, afin de mémoriser les identifiants pour les futures authentifications.
let credential = await navigator.credentials.create({ publicKey: {
  challenge: new Uint8Array([117, 61, 252, 231, 191, 241, ...]),
  rp: { id: "acme.com", name: "ACME Corporation" },
  user: {
    id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
    name: "jamiedoe",
    displayName: "Jamie Doe"
  },
  pubKeyCredParams: [ {type: "public-key", alg: -7} ]
}});

Authentifier un utilisateur

Lorsqu'un site Web doit obtenir la preuve qu'il interagit avec le bon utilisateur:

  1. Le tiers de confiance génère une question d'authentification et fournit au navigateur une liste d'identifiants enregistrés pour l'utilisateur. Il peut également indiquer où rechercher l'identifiant, par exemple sur un authentificateur local intégré, ou sur un authentificateur externe via USB, BLE, etc.
  2. Le navigateur demande à l'authentificateur de signer la question d'authentification.
  3. Si l'authentificateur contient l'un des identifiants fournis, il renvoie une assertion signée à l'application Web après avoir reçu le consentement de l'utilisateur.
  4. L'application Web transmet l'assertion signée au serveur pour que le tiers de confiance puisse la vérifier.
  5. Une fois validé par le serveur, le flux d'authentification est considéré comme réussi.
let credential = await navigator.credentials.get({ publicKey: {
  challenge: new Uint8Array([139, 66, 181, 87, 7, 203, ...]),
  rpId: "acme.com",
  allowCredentials: [{
    type: "public-key",
    id: new Uint8Array([64, 66, 25, 78, 168, 226, 174, ...])
  }],
  userVerification: "required",
}});

Essayez WebAuthn à l'adresse https://webauthndemo.appspot.com/.

Étapes suivantes

La version bêta de Chrome 67 est compatible avec navigator.credentials.get({publicKey: ...}) et navigator.credentials.create({publicKey:... }), et permet d'utiliser des authentificateurs U2F/CTAP 1 via le transport USB sur ordinateur.

Les prochaines versions prendront en charge davantage de transports tels que BLE et NFC, ainsi que le nouveau protocole filaire CTAP 2. Nous travaillons également sur des flux plus avancés compatibles avec CTAP 2 et WebAuthn, tels que les authentificateurs protégés par code PIN, la sélection locale de comptes (au lieu de saisir un nom d'utilisateur ou un mot de passe) et l'enregistrement par empreinte digitale.

Notez que Microsoft Edge est également compatible avec l'API et Firefox est compatible avec WebAuthn à partir de Firefox 60.

Ressources

Nous travaillons sur une documentation plus détaillée:

La session Nouveautés de l'inscription et de la connexion sur le Web de la conférence Google I/O 2018 a couvert WebAuthn.