メインコンテンツへスキップ

FIDO/WebAuthnとは

この記事は約 2 分で読めます

FIDO (Fast IDentity Online) と WebAuthn は、パスワードに依存しない認証を実現するための国際標準規格です。FIDO Alliance が策定した技術仕様と、 W3C が Web 標準として勧告した WebAuthn API を組み合わせることで、ブラウザやアプリケーションから公開鍵暗号ベースの認証を利用できます。フィッシングへの耐性が設計に組み込まれており、サーバーにパスワードを預けない方式であるため、パスワード漏洩に起因する被害の経路を減らせます。

FIDO Alliance の設立と規格の進化

FIDO Alliance は 2012 年 7 月に、 PayPal 、 Lenovo 、 Nok Nok Labs 、 Validity 、 Infineon 、 Agnitio によって結成されました (対外発表は 2013 年 2 月)。Alliance は結成の目的として、強力な認証技術のあいだで相互運用性が欠けていること、そして利用者が多数の ID とパスワードを作成し記憶しなければならない負担を挙げています。 2014 年 12 月 9 日には FIDO 1.0 として 2 つの規格の最終版が公開されました。 UAF (Universal Authentication Framework) は生体認証などによるパスワードレスログインを、 U2F (Universal 2nd Factor) は USB や NFC で接続する認証器 (セキュリティキー) による二要素認証を対象とするものです。

その後、 W3C の WebAuthn API と FIDO Alliance の CTAP (Client to Authenticator Protocol) を組み合わせる FIDO2 の取り組みが進み、 WebAuthn は 2019 年 3 月 4 日に W3C 勧告 (公式の Web 標準) となりました。WebAuthn はブラウザ側の API 仕様、 CTAP は認証器 (セキュリティキーや生体認証デバイス) との通信プロトコルです。この 2 つが組み合わさることで、 Web ブラウザから直接ハードウェア認証器を利用できるようになりました。そして 2022 年以降は、パスキーとして FIDO2 の認証情報をクラウド同期する仕組みが主要な OS と資格情報マネージャーに実装され、専用の物理キーを持たない利用者でも使えるようになっています。

公開鍵暗号ベースの認証フロー

FIDO/WebAuthn の認証は、チャレンジ-レスポンス方式で動作します。従来のパスワード認証では「秘密の文字列」をサーバーに送信しますが、 FIDO でサーバーへ送るのは秘密鍵そのものではなく、チャレンジに対する署名です。秘密鍵を認証器の内部に留める構成が基本で、パスキーのように複数の端末へ同期する形態では、資格情報マネージャーの実装に応じて暗号化された状態で同期されます。

サーバーがランダムなチャレンジを生成
ブラウザが WebAuthn API を呼び出し
認証器が本人確認 (生体 / PIN)
秘密鍵でチャレンジに署名
サーバーが公開鍵で署名を検証

この方式では、サーバー側に保存されるのは公開鍵と認証情報の識別子などであり、認証の秘密そのものは保存されません。仮にサーバーが侵害されても、公開鍵から秘密鍵を求めることは現在知られている方法では現実的な時間で計算できないため、データ漏洩がそのまま認証情報の悪用には結び付きません。

フィッシング耐性の仕組み - オリジン検証

FIDO/WebAuthn がフィッシングに強い最大の理由は、認証にオリジン (ドメイン) の検証が組み込まれている点にあります。ブラウザは認証要求の発行元オリジンを clientData に記録し、認証器はそのハッシュと RP ID (サービスのドメイン) のハッシュを含む値に署名します。サーバーは受け取ったオリジンが自ら期待するものと一致するかを検証するため、攻撃者が偽サイト (例: examp1e.com) でユーザーに認証を求めても、正規サイト (example.com) 向けに登録された認証情報をそのまま流用することはできません。ユーザーが騙されて偽サイトにアクセスしても認証は成立せず、フィッシングの成立余地は大きく狭まります。ただし、パスワードなど別の認証手段へのフォールバックが残っていれば、そちらが狙われる余地は残ります。これはパスキー移行の課題を検討する上でも重要な観点です。

パスキーとの関係

パスキーは FIDO2/WebAuthn の実装形態の一つです。技術的には同じ公開鍵暗号ベースの認証ですが、パスキーは認証情報をクラウド経由で複数デバイスに同期できる点が従来の FIDO2 と異なります。従来の FIDO2 セキュリティキーは物理デバイスに紐づくため、紛失時のリカバリーが課題でした。同期型のパスキーは、 iCloud キーチェーンや Google パスワードマネージャーといった資格情報マネージャーを通じて複数の端末で同じパスキーを使えるようにすることで、この課題に対処しています。一方で、同期できる範囲は資格情報マネージャーの提供者ごとに決まり、鍵の保管を提供者に委ねる点は物理キーとの違いとして残ります。生体認証と組み合わせれば、端末のロックを解除するのと同じ操作でログインできます。

対応状況と実務上の考慮点

Chrome 、 Safari 、 Firefox 、 Edge の主要ブラウザはいずれも WebAuthn API に対応しています (細かな対応範囲はバージョンや OS によって異なるため、実装前に各ブラウザの資料で確認してください)。OS レベルでは Windows Hello 、 macOS / iOS の Touch ID / Face ID 、 Android の生体認証が FIDO2 認証器として機能します。企業導入では、 YubiKey などのハードウェアセキュリティキーを多要素認証の手段として用いる構成も採られます。

実務上の注意点として、 WebAuthn の導入にはサーバー側の対応も必要です。チャレンジの生成、公開鍵の保存、署名の検証ロジックを実装する必要があり、これらを扱うライブラリ (SimpleWebAuthn 、 py_webauthn など) が公開されているため、検証処理を自前で書く代わりに利用できます。また、暗号化の基礎知識、特に公開鍵暗号の仕組みを理解しておくと、トラブルシューティング時に役立ちます。生体認証のリスクや二段階認証の基本もあわせて把握しておくと、認証設計の全体像が見えてきます。

関連用語

この記事は役に立ちましたか?