ClientとAuthenticatorを分離する
ブラウザやOSが、メーカーの異なるAuthenticatorを共通プロトコルで利用できます。
Specification
ブラウザやOSなどのFIDO Clientと、PlatformまたはRoaming Authenticatorの間でCredential作成・署名を行うプロトコルを定義します。
Overview
CTAPは、ブラウザやOSなどのFIDO ClientとAuthenticatorの間で、Credential作成や署名を依頼するためのプロトコルです。Web開発者がCTAPを直接呼ぶことは通常ありませんが、WebAuthnの裏側で何が起きるかを理解するために重要です。
Authenticatorには端末内蔵のPlatform Authenticatorと、USB・NFC・BLEなどで接続するRoaming Authenticatorがあります。CTAP2は両者へ共通のコマンド、User Presence、User Verification、PIN/UV認証などを定義します。
Purpose and responsibilities
ブラウザやOSが、メーカーの異なるAuthenticatorを共通プロトコルで利用できます。
PINや生体認証の結果だけを利用し、認証要素そのものをRelying Partyへ公開しません。
makeCredential、getAssertion、Credential管理などのAuthenticator操作を共通化します。
Key concepts
Security considerations
仕様を実装するときは、正常系の通信だけでなく、値のすり替え、再利用、漏えいが起きた場合も考えます。
PIN/UV protocolでClientとAuthenticator間の機密性・完全性を保護します。
User PresenceとUser Verificationを混同せず、Relying Partyの要求に合ったflagsを確認します。
Authenticatorのtransportと物理的な利用環境を考慮します。
拡張機能はAuthenticatorとClient双方の対応状況を確認し、未認識データを安全に扱います。
Interactive flows
Relying Party固有の公開鍵CredentialをAuthenticator内で生成し、公開鍵とAttestationをサーバーへ登録するフローです。
図を再生する →FIDO2 CTAP 2.2 · Interactive flowFIDO2 / WebAuthn Authentication CeremonyAuthenticatorがRelying Partyのchallengeへ秘密鍵で署名し、パスワードを共有せずユーザーのCredential保有を証明するフローです。
図を再生する →Position and relationship
CTAP2はFIDO2のAuthenticator側プロトコルで、WebAuthnはWebアプリ側インターフェースです。従来のU2F互換を扱うCTAP1もありますが、新しいパスキー機能はCTAP2系の機能を利用します。
Other specifications