共有秘密をなくす
サーバーは公開鍵を保存するため、データベースが漏えいしてもパスワードのようなログイン可能な秘密が直接流出しません。
Specification
Webアプリケーションが公開鍵Credentialを作成・利用するためのブラウザAPIと、Relying Partyが登録・認証応答を検証する手順を定義します。
Overview
WebAuthnは、Webサイトが公開鍵Credentialを使ってユーザーを強く認証するためのブラウザAPIです。パスキー、端末の生体認証、PIN、Security Keyなどの違いを、Relying Partyが共通のAPIで扱えるようにします。
登録時にAuthenticatorがサイト専用の鍵ペアを作り、公開鍵だけをRelying Partyへ登録します。認証時にはサーバーのchallengeへ秘密鍵で署名します。秘密鍵、生体情報、PINはWebサイトへ送られません。
Purpose and responsibilities
サーバーは公開鍵を保存するため、データベースが漏えいしてもパスワードのようなログイン可能な秘密が直接流出しません。
CredentialはRP IDとoriginへ結び付くため、偽サイトから本物のサイト用Credentialを利用できません。
Platform Authenticatorと外付けSecurity Keyをnavigator.credentials.create/getという共通APIで扱います。
Key concepts
Security considerations
仕様を実装するときは、正常系の通信だけでなく、値のすり替え、再利用、漏えいが起きた場合も考えます。
challengeはランダムかつ一度限りにし、セッションと関連付けます。
clientDataJSONのtype、challenge、originとauthenticatorDataのRP ID hash、flagsを検証します。
登録時は許可algorithm、attestation方針、userVerification要件を明確にします。
アカウント復旧と複数Credential登録を設計し、端末紛失時に安全に失効できるようにします。
Interactive flows
Relying Party固有の公開鍵CredentialをAuthenticator内で生成し、公開鍵とAttestationをサーバーへ登録するフローです。
図を再生する →FIDO2 WebAuthn Level 3 · Interactive flowFIDO2 / WebAuthn Authentication CeremonyAuthenticatorがRelying Partyのchallengeへ秘密鍵で署名し、パスワードを共有せずユーザーのCredential保有を証明するフローです。
図を再生する →Position and relationship
WebAuthnはRelying Partyとブラウザ間のWeb API・検証手順を定義し、CTAPはブラウザやOSとAuthenticator間の通信を定義します。この2つを組み合わせた認証エコシステムがFIDO2です。
Other specifications