FIDO2 WebAuthn Level 3

Web Authentication: Public Key Credentials

Webアプリケーションが公開鍵Credentialを作成・利用するためのブラウザAPIと、Relying Partyが登録・認証応答を検証する手順を定義します。

STATUSW3C Web Authentication specificationFLOWS2 documentedPrimary specification ↗

この仕様は、
何を解決するのか。

パスキーやSecurity KeyをWebアプリへ導入し、登録・認証Ceremonyの検証項目を理解したい人向けです。

WebAuthnは、Webサイトが公開鍵Credentialを使ってユーザーを強く認証するためのブラウザAPIです。パスキー、端末の生体認証、PIN、Security Keyなどの違いを、Relying Partyが共通のAPIで扱えるようにします。

登録時にAuthenticatorがサイト専用の鍵ペアを作り、公開鍵だけをRelying Partyへ登録します。認証時にはサーバーのchallengeへ秘密鍵で署名します。秘密鍵、生体情報、PINはWebサイトへ送られません。

仕様が定める、大切なこと。

01

共有秘密をなくす

サーバーは公開鍵を保存するため、データベースが漏えいしてもパスワードのようなログイン可能な秘密が直接流出しません。

02

フィッシングへ強くする

CredentialはRP IDとoriginへ結び付くため、偽サイトから本物のサイト用Credentialを利用できません。

03

Authenticatorを共通化する

Platform Authenticatorと外付けSecurity Keyをnavigator.credentials.create/getという共通APIで扱います。

01PublicKeyCredential02Registration Ceremony03Authentication Ceremony04RP ID / Origin05Attestation / Assertion

安全に使うための確認事項。

仕様を実装するときは、正常系の通信だけでなく、値のすり替え、再利用、漏えいが起きた場合も考えます。

  1. 01

    challengeはランダムかつ一度限りにし、セッションと関連付けます。

  2. 02

    clientDataJSONのtype、challenge、originとauthenticatorDataのRP ID hash、flagsを検証します。

  3. 03

    登録時は許可algorithm、attestation方針、userVerification要件を明確にします。

  4. 04

    アカウント復旧と複数Credential登録を設計し、端末紛失時に安全に失効できるようにします。

この仕様に属するフロー

ほかの仕様との関係

WebAuthnはRelying Partyとブラウザ間のWeb API・検証手順を定義し、CTAPはブラウザやOSとAuthenticator間の通信を定義します。この2つを組み合わせた認証エコシステムがFIDO2です。

OAuth 2.0 (RFC 6749)The OAuth 2.0 Authorization Framework→OAuth 2.0 Device Authorization (RFC 8628)OAuth 2.0 Device Authorization Grant→OAuth 2.1OAuth 2.1 Authorization Framework→OpenID Connect Core 1.0OpenID Connect Core 1.0→FIDO2 CTAP 2.2Client to Authenticator Protocol→FIDO UAF 1.1Universal Authentication Framework→FIDO U2F 1.2Universal Second Factor→OpenID Connect CIBA Core 1.0Client-Initiated Backchannel Authentication→OAuth 2.0 PKCE (RFC 7636)Proof Key for Code Exchange by OAuth Public Clients→JSON Web Token (RFC 7519)JSON Web Token (JWT)→OAuth 2.0 DPoP (RFC 9449)OAuth 2.0 Demonstrating Proof of Possession→SAML 2.0Security Assertion Markup Language 2.0→SCIM 2.0 (RFC 7644)System for Cross-domain Identity Management: Protocol→