Activer l'authentification forte avec WebAuthn

Problème

L'hameçonnage est le principal problème de sécurité sur le Web: 81% des comptes de piratage l’année dernière, utilisaient des mots de passe faibles ou volés. Le collectif du secteur la réponse à ce problème a été l'authentification multifacteur, mais sont fragmentées et la plupart ne permettent toujours pas de lutter de manière adéquate contre l'hameçonnage. Nous travaillons avec l'Alliance FIDO depuis 2013 et, plus récemment, avec le W3C pour la mise en œuvre antihameçonnage qui peut être utilisé par n'importe quelle application Web.

Qu'est-ce que WebAuthn ?

L'API Web Authentication fournit des données d'accès aux authentificateurs, qui sont souvent accessibles via les user-agents des jetons matériels accessibles via USB/BLE/NFC ou des modules intégrés directement Google Cloud, qui permet de générer et de remettre en question d'identifiants de clé publique (eTLD+k). Cela permet différents cas d'utilisation, par exemple:

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

L'API est en passe d'être implémentée par la plupart des principaux navigateurs et est destinée à simplifier l'interface utilisateur lorsque vous devez prouver votre identité en ligne et considérablement le hameçonnage.

WebAuthn étend l'API Credential Management et ajoute de nouvelles type d'identifiant appelé PublicKeyCredential. WebAuthn extrait les 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 .

Les authentificateurs sont des appareils qui peuvent générer des paires de clés privées/publiques le consentement des utilisateurs. Le consentement pour la signature peut être accordé d'un simple geste, lecture d'empreinte digitale ou par d'autres méthodes, tant qu'elles sont conformes à la norme FIDO2 (un programme de certification vous permet authentificateurs de l'Alliance FIDO). Les authentificateurs peuvent être intégrés (comme les lecteurs d'empreinte digitale sur les smartphones) ou connectés via USB, Bluetooth à basse consommation (BLE) ou NFC (communication en champ proche).

Fonctionnement

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

Lorsqu'un utilisateur souhaite enregistrer des identifiants sur un site Web (appelé WebAuthn). comme la "partie de confiance"):

  1. Le tiers de confiance génère un test.
  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 par exemple, si l'appareil fournit sa propre authentification utilisateur (avec données biométriques, etc.).
  3. Une fois que l'authentificateur a obtenu le consentement de l'utilisateur, il génère un clé publique et renvoie la clé publique et l'attestation signée facultative au sur votre 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 de 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 la bonne utilisateur:

  1. Le tiers de confiance génère un test et fournit une liste au navigateur d'identifiants enregistrés pour l'utilisateur. Elle peut également indiquer où recherchez l'identifiant, par exemple sur un authentificateur intégré local externe via USB, BLE, etc.
  2. Le navigateur demande à l'authentificateur de signer le test.
  3. Si l'authentificateur contient l'un des identifiants fournis, renvoie une assertion signée à l'application Web après avoir reçu le consentement de l'utilisateur.
  4. L'application Web transfère l'assertion signée au serveur pour le tiers de confiance à vérifier.
  5. Une fois vérifié par le serveur, le flux d'authentification est considéré 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 par vous-même à l'adresse https://webauthndemo.appspot.com/.

Quelles sont les prochaines étapes ?

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

Les prochaines versions prendront en charge d'autres moyens de transport, tels que BLE, NFC et au nouveau protocole CTAP 2. Nous travaillons également sur des flux plus avancés par CTAP 2 et WebAuthn, comme les authentificateurs protégés par un code, une sélection de comptes (au lieu de saisir un nom d'utilisateur ou un mot de passe) ; 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 concernant l'inscription et la connexion sur le Web lors de la conférence Google I/O 2018 sur WebAuthn.