認証

WebAuthn うぇぶおーとん

パスキーFIDO2生体認証公開鍵暗号パスワードレス多要素認証
WebAuthnについて教えて

簡単に言うとこんな感じ!

「パスワードなしでログインできる仕組みの世界標準ルール」だよ!指紋やFaceIDで「本人確認」して、パスワードを入力しなくてもサイトにログインできるようにする技術の取り決めなんだ。フィッシング詐欺にも強くて、今いちばん注目されている認証の仕組みってこと!


WebAuthnとは

WebAuthn(Web Authentication) は、W3C(World Wide Web Consortium)とFIDO Alliance(ファイドー・アライアンス)が共同で策定した、パスワードに頼らないWeb認証の国際標準仕様です。2019年にW3C勧告(正式な国際標準)となり、現在はChrome・Safari・Firefox・Edgeといった主要ブラウザすべてで利用できます。

仕組みの核心は公開鍵暗号方式です。ユーザーがサービスに登録するとき、デバイス(スマートフォンやPCなど)の中に「秘密鍵」を生成して安全に保管し、「公開鍵」だけをサービス側のサーバーに送ります。ログイン時はサーバーからの「チャレンジ(使い捨ての乱数)」に対して、デバイスが秘密鍵で署名して返すだけ。パスワードはネットワーク上を一切流れないため、フィッシングやパスワード漏洩のリスクを根本から排除できます。

利用者から見ると「指紋認証やFaceIDでログイン」「PINを入力してログイン」という体験になります。実際には裏側でWebAuthnが動いており、パスキー(Passkey) と呼ばれる新しい認証情報の形式で普及が進んでいます。Google・Apple・Microsoftが足並みをそろえてパスキーを推進しており、認証のしくみはいまWebAuthnを中心に大きく変わりつつあります。


WebAuthnの仕組みと構成要素

WebAuthnには登場人物が3つあります。

登場人物英語名役割
ユーザーのデバイス(認証器)Authenticator(オーセンティケーター)鍵の生成・保管・署名を行う。スマホの指紋センサーやFaceIDなど
ブラウザClientデバイスとサーバーの間を仲介するWebAuthn APIを提供
WebサービスRelying Party(RP)ログインを受け付けるサービス側。公開鍵を保管する

登録フロー(初回)

ユーザー操作               ブラウザ(Client)          サーバー(RP)
    |                           |                          |
    |── 「登録」ボタン押す ──>  |                          |
    |                           |── 登録リクエスト ──────> |
    |                           |<── チャレンジ発行 ───── |
    |<─ 生体認証を求める ──────|                          |
    |── 指紋認証 ─────────>   |                          |
    |                           |  デバイス内で鍵ペア生成  |
    |                           |── 公開鍵 + 署名 ───────>|
    |                           |                  公開鍵を保存|
    |<── 登録完了 ─────────── |                          |

ログインフロー(2回目以降)

ユーザー操作               ブラウザ(Client)          サーバー(RP)
    |                           |                          |
    |── 「ログイン」ボタン ──>  |                          |
    |                           |── 認証リクエスト ───────>|
    |                           |<── チャレンジ発行 ────── |
    |<─ 生体認証を求める ──────|                          |
    |── 指紋認証 ─────────>   |                          |
    |                           |  秘密鍵でチャレンジに署名|
    |                           |── 署名 ────────────────>|
    |                           |              公開鍵で検証|
    |<── ログイン成功 ───────── |                          |

なぜフィッシングに強いのか

WebAuthnは登録時にサービスのドメイン(origin)を鍵と紐づけて記録します。偽サイト(例: bank-login.evil.com)に誘導されても、正規ドメイン(bank.com)向けの鍵は使われないため、そもそも認証が成立しません。パスワードなら気づかずに入力してしまいますが、WebAuthnにはその余地がありません。


歴史と背景

  • 2012年 — FIDO Alliance設立。業界横断でパスワードレス認証の標準化を目指す
  • 2014年 — FIDO 1.0(UAF・U2F)仕様を公開。ハードウェアトークンや生体認証の基礎を策定
  • 2016年 — W3CとFIDO Allianceが協力し、WebブラウザAPI(WebAuthn)の仕様策定を開始
  • 2018年 — Chrome・Firefox・Edgeがいち早くWebAuthnをサポート
  • 2019年3月 — W3C勧告として正式な国際標準に。FIDO2の中核仕様として位置づけられる
  • 2020年〜 — Apple(Safari・iOS)も対応完了。主要プラットフォームが出揃う
  • 2022年5月 — Google・Apple・Microsoftが「パスキー(Passkey)」として共同プロモーションを開始。OS標準機能として組み込みが進む
  • 2023年〜現在 — Amazon・GitHub・Yahoo! JAPANなど主要サービスがパスキー対応。急速に普及フェーズへ

パスワードは1960年代のメインフレーム時代から使われてきた仕組みです。しかしフィッシング・リスト型攻撃・パスワード使い回しなどの問題が深刻化し、「パスワードそのものをなくす」という発想でWebAuthnが生まれました。


WebAuthn・FIDO2・パスキーの関係

混乱しやすい3つの言葉の関係を整理します。

FIDO2(規格の総称) WebAuthn(W3C勧告) ブラウザとサーバーが話す「言語の仕様」 CTAP Client to Authenticator Protocol ブラウザ↔認証デバイス間 (YubiKeyなどと通信する プロトコル) パスキー(Passkey) WebAuthnを使った認証情報の 「ユーザー向けブランド名」 iCloud Keychain・Google Password Managerなどで デバイス間同期も可能 FIDO2 = WebAuthn(W3C) + CTAP(FIDO Alliance)の組み合わせ
用語何者か誰が決めた
FIDO2パスワードレス認証の規格セット(総称)FIDO Alliance
WebAuthnブラウザとサーバー間のAPI仕様W3C + FIDO Alliance
CTAPブラウザと外部認証器(YubiKeyなど)間のプロトコルFIDO Alliance
パスキー(Passkey)WebAuthnを使った認証情報のユーザー向け呼称Google・Apple・Microsoft

認証器の種類

種類特徴
プラットフォーム認証器TouchID・FaceID・Windows Helloデバイス内蔵。持ち運び不要
ローミング認証器YubiKey・Titan Security Key物理キー。どのデバイスでも使える

関連する規格・RFC

規格・RFC番号内容
W3C Web Authentication Level 2WebAuthnの現行勧告(2021年)。APIの詳細仕様
FIDO2 / CTAP 2.1認証器とクライアント間の通信プロトコル
RFC 8809WebAuthnのアテステーション証明書フォーマット
RFC 9421HTTP Message Signatures(WebAuthn周辺技術)

関連用語

  • パスキー — WebAuthnを使った認証情報のユーザー向け呼称。iCloudやGoogleアカウントで同期できる
  • FIDO2 — WebAuthnとCTAPを合わせたパスワードレス認証の規格セット
  • 多要素認証(MFA) — 「知識・所持・生体」の複数要素を組み合わせる認証方式
  • 公開鍵暗号 — 暗号化と復号に異なる鍵ペアを使う暗号方式。WebAuthnの根幹技術
  • OAuth認可の標準仕様。認証と混同されやすいが役割が異なる
  • [シングルサインオン(SSO)](./s