WebAuthn は FIDO2 標準の認証レイヤーです。ユーザーが記憶する秘密に依存する代わりに、非対称暗号を使用します。登録時に、ユーザーの認証器(ハードウェアキー、セキュアエンクレーブ、TPM など)が依存パーティドメインにスコープされた秘密鍵と公開鍵のペアを生成します。ブラウザーは公開鍵と構成証明データをサーバーに送信し、サーバーはそれらを資格情報レコードとして保存します。秘密鍵はユーザーのデバイスから外部に出ることはありません。
認証フロー
ログイン時、サーバーはランダムなチャレンジを発行します。ブラウザーはこのチャレンジを認証器に転送し、認証器はユーザーの存在(ボタン押下など)を確認し、必要に応じてユーザー検証(PIN、生体認証)を強制し、保存された秘密鍵でチャレンジに署名します。サーバーは以前登録された公開鍵を使って署名を検証し、認証器の署名カウンターが増加していることを確認することでクローンキーへの対策を講じます。
パスキー
パスキーは WebAuthn 資格情報をデバイス間で利用可能にすることで拡張します。オペレーティングシステムはエンドツーエンド暗号化されたクラウドストレージを通じて資格情報を同期します。パスキーはデバイスのローカル認証方法(Touch ID、Face ID、Windows Hello、Android 生体認証)で解除でき、ブラウザーやデバイスをまたいで使用できます。これにより記憶や入力の手間をなくしながら、ハードウェアに裏付けられたセキュリティを維持します。
パスワードに対する優位性
- フィッシング耐性 – 認証器は各資格情報を特定のオリジンに紐付けます。フィッシングサイトが別ドメインのチャレンジに署名させることはできません。
- 共有秘密なし – パスワードデータベースがないため、資格情報漏洩のリスクが大幅に低下します。サーバーの資格情報ストアが侵害されても、攻撃者が得られるのは公開鍵だけです。
- 優れた UX – ユーザーは生体認証プロンプトを確認するかセキュリティキーにタッチするだけです。クロスデバイスパスキーにより、パスワードリセットや入力ミスがなくなります。
- 強力な多要素認証 – WebAuthn は「所持しているもの」(認証器)と「本人であること/知っていること」(生体認証または PIN)を単一のジェスチャーで満たし、最小限の手間で強力な MFA を実現します。
- リプレイ攻撃と資格情報スタッフィングへの耐性 – チャレンジは一回限りで使用され、秘密鍵はサービス間で再利用できないため、リプレイ攻撃や資格情報スタッフィングを阻止します。
