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 FrameworkOAuth 2.0 Device Authorization (RFC 8628)OAuth 2.0 Device Authorization GrantOAuth 2.1OAuth 2.1 Authorization FrameworkOpenID Connect Core 1.0OpenID Connect Core 1.0FIDO2 CTAP 2.2Client to Authenticator ProtocolFIDO UAF 1.1Universal Authentication FrameworkFIDO U2F 1.2Universal Second FactorOpenID Connect CIBA Core 1.0Client-Initiated Backchannel AuthenticationOAuth 2.0 PKCE (RFC 7636)Proof Key for Code Exchange by OAuth Public ClientsJSON Web Token (RFC 7519)JSON Web Token (JWT)OAuth 2.0 DPoP (RFC 9449)OAuth 2.0 Demonstrating Proof of PossessionSAML 2.0Security Assertion Markup Language 2.0SCIM 2.0 (RFC 7644)System for Cross-domain Identity Management: Protocol