FIDO2とは?WebAuthn・CTAP・パスキーの関係と、実装の前に決めること

FIDO2は、パスワードを使わずに公開鍵暗号でログインするための標準規格です。ブラウザ側のWebAuthnと、端末と認証器をつなぐCTAPの2つでできています。パスキーは、このFIDO2の仕組みで作られるログイン用の鍵の呼び名です。本記事では、開発や情報システムの担当者向けに、4つの言葉の関係と登録・認証の流れ、フィッシングに強い理由、実装の前に決めることを整理します。

FIDO2は、パスワードを使わずに公開鍵暗号でログインするための標準規格です。ブラウザ側のWebAuthnと、端末と認証器をつなぐCTAPの2つでできています。パスキーは、このFIDO2の仕組みで作られるログイン用の鍵の呼び名です。本記事では、開発や情報システムの担当者向けに、4つの言葉の関係と登録・認証の流れ、フィッシングに強い理由、実装の前に決めることを整理します。

FIDO2・WebAuthn・CTAP・パスキーの関係

まず、よく並んで出てくる4つの言葉の役割を整理しておきます。

自社サイトがWebAuthnでブラウザに頼み、ブラウザ・OSがCTAPで認証器とつながり、最後にサーバーが応答を検証する流れ。開発者が書くのはWebAuthnの呼び出しとサーバーでの検証です。
ログインの中で各規格が受け持つところ

4つの言葉の役割

  • FIDO2:WebAuthnとCTAPをまとめた規格群
  • WebAuthn:サイトがブラウザに鍵の作成と署名を要求するAPI
  • CTAP:ブラウザやOSと認証器をつなぐ通信プロトコル
  • パスキー:FIDO2で作るログイン用の鍵の呼び名

言葉

何を指すか

決めている団体

FIDO2

パスワードを使わない認証の規格群。WebAuthnとCTAPの総称

FIDO Alliance(W3Cと共同)

WebAuthn

Webサイトが、ブラウザを通して鍵の作成と署名を頼むためのAPI

W3C

CTAP

ブラウザやOSと、スマートフォン・セキュリティキーなどの認証器をつなぐ通信の決まり

FIDO Alliance

パスキー

FIDO2で作る、ログイン用の鍵の利用者向けの呼び名

(呼び名)

自社のサイトにパスキーを入れるとき、サイトの開発者が直接書くのはWebAuthnの呼び出しと、サーバー側での検証です。CTAPはブラウザやOSが受け持つので、通常は意識しなくてかまいません。

WebAuthnは2021年4月にLevel 2がW3Cの勧告になり、2026年8月にはLevel 3も勧告になりました。複数の端末での使い勝手を良くする機能などが追加されています。

出典:FIDO Alliance「FIDO2」、W3C「Web Authentication Level 3」

FIDO2の前にあったU2FとUAF

FIDO Allianceは、FIDO2より前に2つの規格を出しています。

  • U2Fは、IDとパスワードでログインした後、2つめの要素としてセキュリティキーを差して確認する方式です。パスワードは残ります。
  • UAFは、スマートフォンのアプリで、指紋やPINを使ってパスワードなしでログインする方式です。

FIDO2は、この考え方をWebブラウザで標準的に使えるようにしたものです。CTAPのうちCTAP1はU2Fの新しい名前で、これまでのセキュリティキーもそのまま使えます。

出典:FIDO Alliance「Specifications」

ソーシャルログイン・パスキーの導入をご検討中の方へ

LINE・Google・Apple・Yahoo! JAPAN・Facebook・X のログインとパスキーに、1つの実装で対応できます。対応SNS・料金・導入の流れを資料にまとめています。

登録と認証の流れ

パスキーの登録と認証の流れ。登録では端末で鍵のペアを作り公開鍵だけをサーバーに送る。認証では端末で秘密鍵で署名し、サーバーが公開鍵で検証する
登録では公開鍵だけがサーバーへ、認証では署名だけがサーバーへ届く

登録(navigator.credentials.create)

  1. サーバーが、毎回変わる乱数(チャレンジ)と、サイトの識別子(rpId)、会員を表すIDを渡す
  2. 利用者が指紋・顔認証やPINで本人を確かめ、認証器がこのサイト専用の鍵のペアを作る
  3. 公開鍵と、署名つきの応答がサーバーへ届く。認証器の種類を証明する情報(attestation)を付けることもできる
  4. サーバーは応答を検証し、公開鍵を会員に紐づけて保存する

認証(navigator.credentials.get)

  1. サーバーが新しいチャレンジを渡す
  2. 利用者が本人を確かめ、認証器が秘密鍵でチャレンジに署名する(assertion)
  3. サーバーは保存してある公開鍵で署名を確かめ、ログインを完了する

秘密鍵は最後まで認証器の外に出ません。サーバーに残るのは公開鍵だけなので、サーバーから情報が漏れても、ログインに使える秘密は出ていきません。

フィッシングに強い理由は、鍵がサイトに結び付くこと

パスキーは、作るときにrpIdと呼ぶサイトのドメインに結び付けられます。ブラウザは、いま開いているページのドメインがrpIdと合わなければ、その鍵を使わせません。さらに署名する中身には、ブラウザが記録した接続先(オリジン)とrpIdから作った値が入り、サーバーはそれも確かめます。

パスキーは作成時にrpIdに結び付けられ、ブラウザが開いているページのドメインと照合し、署名にオリジンとrpIdの値が入り、サーバーがそれを確かめる流れを示す図
偽サイトで鍵が使えない仕組み

そのため、利用者が本物そっくりの偽サイトに誘導されても、ブラウザは偽サイトのドメインで本物のサイトの鍵を使わせません。パスワードやワンタイムパスワードは、利用者が偽サイトに入力すると盗まれてしまいます。パスキーには、このように偽サイトで盗まれることがありません。パスキーがフィッシングに強いと言われるのは、このためです。

サーバーで確かめること

WebAuthnで安全にログインできるのは、サーバー側で応答をきちんと検証した場合だけです。ログイン(認証)のときは、次の項目を確かめます。

項目

確かめる内容

種類(type)

応答が認証(webauthn.get)のものであること

チャレンジ

サーバーが今回渡した乱数と一致すること。使い回しを防ぐ

オリジン

自社サイトの接続先であること。偽サイトからの応答はここで止まる

rpIdのハッシュ

自社のrpIdから作った値と一致すること

フラグ

利用者の操作(UP)と、本人確認(UV)が行われたこと

署名

登録時に保存した公開鍵で、署名が正しいと確かめられること

登録のときも同じように、チャレンジ・オリジン・rpIdを確かめてから公開鍵を保存します。確認が1つでも抜けると、フィッシングへの強さが失われるおそれがあります。自社で作る場合は、実績のあるライブラリを使い、検証を1つも省かないようにしてください。

認証器の種類と、同期パスキー・デバイス固定パスキー

種類

例

特徴

プラットフォーム認証器

スマートフォンやパソコンの生体認証(Face ID、Windows Helloなど)

端末に組み込まれていて、追加の機器が要らない

ローミング認証器

USB・NFC・Bluetoothのセキュリティキー。スマートフォンをQRコードでつなぐ方法も

持ち歩いて、別の端末でも使える

パスキーには、保存のされ方で2つの種類があります。

同期パスキーとデバイス固定パスキー

同期パスキー

デバイス固定パスキー

保存される場所

同じアカウントの複数の端末

1つの認証器の中だけ

機種変更・紛失

機種変更しても引き継がれる

端末をなくすと使えなくなる

よくある例

一般の会員向けサイトの多くの利用者

セキュリティキー

  • 同期パスキーは、パスワード管理の仕組みを通じて、同じアカウントの複数の端末で使えます。機種変更しても引き継がれます。
  • デバイス固定パスキーは、1つの認証器の中だけにあり、セキュリティキーに多い種類です。端末をなくすと使えなくなります。

一般の会員向けのサイトでは、多くの利用者が同期パスキーを使うと考えておくのが現実的です。

出典:passkeys.dev「Terms」

実装の前に決めること

WebAuthnを呼ぶときの設定には、後から変えにくいものがあります。特に注意したいのがrpIdです。rpIdを変えると登録済みのパスキーが使えなくなるので、最初に決めておきましょう。

最初に決めておくこと

  • rpIdを最初に決める:変えると登録済みのパスキーが使えなくなる
  • 残すログイン方法:パスキーを使えない端末の会員向けに用意する
  • 端末を替えたとき:パスキーをどう登録し直してもらうか決める

項目

決めること

考え方の目安

rpId

鍵を結び付けるドメイン

今のドメインか、その上位のドメインにできる。サブドメインごとにログイン画面があるなら、共通の上位ドメインにすると同じパスキーを使い回せる

ユーザー確認(userVerification)

生体認証やPINを必須にするか

required・preferred・discouragedから選ぶ。パスワードの代わりにするなら、本人確認を必須にするのが基本

attestation

認証器の種類の証明を求めるか

既定はnone。社員の端末を限定したいなどの事情が無ければ、求めないのが一般的

discoverable credential(residentKey)

IDを入れずにログインできる鍵にするか

パスキーとして使うなら必須(required)にする

このほか、使えない端末の会員向けにどのログイン方法を残すか、端末を替えたときにどう登録し直してもらうかも、運用として決めておく必要があります。進め方はパスキーの導入と実装の手順にまとめています。

出典:MDN「PublicKeyCredentialCreationOptions」

よくある質問

FIDO2とパスキーは同じものですか?

FIDO2は規格の名前で、パスキーはその規格で作るログイン用の鍵の呼び名です。パスキーは、IDを入れなくてもログインできる鍵(discoverable credential)を指します。

WebAuthnだけ実装すれば、パスキーに対応できますか?

ブラウザ側はWebAuthnの呼び出しで済みますが、サーバー側でチャレンジの発行、応答の検証、公開鍵の保存と会員への紐づけが必要です。この部分を自社で作るか、サービスに任せるかを選ぶことになります。選び方はパスキー認証サービスの比較と選び方をご覧ください。

セキュリティキーとパスキーは何が違いますか?

セキュリティキーは、パスキーを保存できる認証器の1つです。USBやNFCでつなぎ、鍵はキーの中だけに保存されるので、デバイス固定パスキーになります。スマートフォンやパソコンに保存するパスキーは、同期されることが多い点が違います。

生体認証の情報はサーバーに送られますか?

送られません。指紋や顔の情報は端末の中で本人を確かめるためだけに使われ、サーバーに届くのは公開鍵と署名です。

Login PlusならWebAuthnの画面と検証を任せられる

Login Plus のログイン画面。6つのソーシャルログインとパスキーに対応
Login Plus のログイン画面。6つのソーシャルログインとパスキーに対応

Login Plusは、FIDO2 / WebAuthnに準拠したパスキーの登録画面とログイン画面を提供し、検証まで受け持ちます。自社のサイトで作るのは、ボタンの設置と、戻ってきた結果の受け取り、登録されたパスキーを自社の会員IDに紐づける処理です。紐づけ用のAPIも用意しています。

1つの会員IDに、複数のSNSアカウントとパスキーを紐づけるイメージ図です。
パスキーを会員IDに紐づける
  • 今のメールアドレスとパスワードのログインを残したまま、パスキーを追加できる
  • 6つのソーシャルログイン(LINE・Yahoo! JAPAN・Google・Facebook・X・Apple)も同じ実装で使える
  • パスキーは標準機能として月額料金に含まれ、料金は月額30,000円から

実際のWebAuthnを使って、パスキーの登録とログインをパスキー認証のページのデモで試せます。仕組みの全体はパスキーとはもあわせてご覧ください。

ソーシャルログイン・パスキーの資料をお送りします

対応SNS・料金・実装の流れ・導入事例をまとめています。
「自社に導入できるか」のご相談も、同じフォームから承ります。

送信をもって個人情報の取り扱いに同意いただいたものとみなします。

個別のご相談は からもどうぞ。

送信をもって個人情報の取り扱いに同意いただいたものとみなします。

送信をもって個人情報の取り扱いに同意いただいたものとみなします。