FIDO認証とは
FIDO(Fast IDentity Online)とは、公開鍵暗号を利用して安全なオンライン認証を実現するための認証技術・標準です。
従来のPassword認証では、Server側でPasswordを検証するための情報を保持する必要があり、Passwordの漏えい・使い回し・Phishingなどが大きな課題になります。
一方、FIDO認証では、Authenticatorが生成した秘密鍵(Private Key)を利用して認証データへ署名し、Server側はあらかじめ登録された公開鍵(Public Key)で署名を検証します。
秘密鍵はServerへ送信されず、指紋や顔などの生体情報も認証Serverへ送信する必要がありません。そのため、PasswordのようなShared Secretに依存しない、Phishing耐性の高い認証を実現できます。
Password認証とFIDO認証の違い
FIDO認証を理解するには、従来のPassword認証との違いを押さえると分かりやすくなります。
| 項目 | Password認証 | FIDO認証 |
|---|---|---|
| 認証の中心 | PasswordなどのShared Secret | 公開鍵暗号 |
| Server側 | Passwordを検証するための情報を保持 | Public Keyを保持 |
| Client側 | Passwordを入力 | Private KeyをAuthenticatorが利用 |
| 生体情報 | 通常は使用しない | User Verificationとして利用可能 |
| Phishing耐性 | Passwordを偽Siteへ入力するRiskがある | CredentialがRelying Partyに紐づくため高い |
FIDO認証を構成する要素
FIDO認証では、主にRelying Party、Client、Authenticatorを意識すると仕組みを理解しやすくなります。
- Relying Party(RP)
認証を行うWeb ServiceやApplication側です。CredentialのPublic Keyを登録し、認証時に署名を検証します。 - Client / User Agent
BrowserやOSなど、Relying PartyとAuthenticatorの間を仲介します。 - Authenticator
Private Keyを生成・利用する認証器です。SmartphoneやPCに組み込まれたPlatform Authenticatorや、FIDO Security Keyのような外部Authenticatorがあります。
指紋・顔認証・PINなどは、Authenticatorを操作しているユーザが本人であることを確認するために使用されます。
FIDO登録の仕組み
まず、FIDO認証を利用するためにCredentialを登録します。一般的な流れは以下の通りです。
- Relying PartyからClientへCredential登録要求を送ります。
- ユーザは指紋・顔認証・PINなどでUser Verificationを行います。
- Authenticatorが、対象のRelying Party向けにPublic Key / Private KeyのKey Pairを生成します。
- Private KeyはAuthenticator側で安全に管理され、外部へ送信されません。
- Public KeyやCredential IDなどの登録情報をRelying Partyへ返します。
- Relying PartyはPublic KeyをユーザAccountと関連付けて保存します。

FIDO認証の仕組み
登録済みのCredentialを使ってログインする際には、Serverが生成したChallengeに対してAuthenticatorが署名し、ServerがPublic Keyでその署名を検証します。
- Relying PartyがChallengeを生成し、Clientへ認証要求を送ります。
- ユーザは指紋・顔認証・PINなどでUser Verificationを行います。
- Authenticatorは、対象のRelying Partyに対応するPrivate Keyを使って認証データへ署名します。
- Clientは署名結果(Authentication Assertion)をRelying Partyへ返します。
- Relying Partyは登録済みのPublic Keyで署名を検証します。
- ChallengeやRelying Party情報などの検証にも問題がなければ、認証成功となります。

重要なのは、Private KeyそのものをServerへ送るのではなく、Private Keyを使った署名結果だけを送信することです。Serverは保存しているPublic Keyを使って署名を検証します。
FIDO2とは
FIDO2は、W3Cが標準化するWebAuthn(Web Authentication)と、FIDO Allianceが策定するCTAP(Client to Authenticator Protocol)を組み合わせた認証標準です。
WebAuthnは、Web ApplicationがPublic Key Credentialを作成・利用するためのBrowser APIを定義します。一方、CTAPはBrowserやOSと外部Authenticatorの間で通信するためのProtocolを定義します。
↓ WebAuthn
Browser / OS
↓ CTAP
Authenticator
Authenticatorは、SmartphoneやPCに組み込まれたPlatform Authenticatorの場合もあれば、USB・NFC・BLEなどで接続するFIDO Security KeyのようなRoaming Authenticatorの場合もあります。
Passkeyとは
Passkeyは、FIDO標準に基づく認証Credentialです。ユーザはPasswordを入力する代わりに、SmartphoneやPCの指紋・顔認証・PINなど、Device Unlockと同じ操作でWeb SiteやApplicationへSign-inできます。
Passkeyには、複数Device間で同期できるSynced Passkeyと、特定DeviceやSecurity Keyに紐づくDevice-bound Passkeyがあります。
PasskeyはFIDO2(WebAuthn / CTAP)の仕組みを利用しており、Passwordを利用しないUser Experienceを実現する代表的な方式として普及しています。
FIDO認証が安全な理由
Private KeyをServerへ送信しない
FIDO認証では、認証に利用するPrivate KeyはAuthenticator側で管理されます。Server側へ登録されるのはPublic Keyであり、認証時にもPrivate Keyそのものは送信されません。
生体情報をServerへ送信しない
指紋や顔認証を利用する場合でも、生体情報はAuthenticatorでユーザを確認するために利用されます。FIDO Protocolで生体情報そのものをRelying Partyへ送信する必要はありません。
Challenge-Responseにより再利用を防ぐ
認証のたびにServerがChallengeを生成し、そのChallengeを含む認証データへAuthenticatorが署名します。そのため、過去に取得した認証結果をそのまま再利用するReplay Attackを防止しやすい仕組みになっています。
Phishing耐性が高い
FIDO CredentialはRelying Partyに紐づいて作成・利用されます。そのため、ユーザが偽Siteに誘導されても、正規Site用のCredentialをそのまま偽Siteで利用することはできません。
FIDO・FIDO2・Passkeyの関係
| 用語 | 概要 |
|---|---|
| FIDO | 公開鍵暗号を利用した認証技術・仕様群の総称 |
| FIDO2 | WebAuthnとCTAPを組み合わせた認証標準 |
| WebAuthn | Web ApplicationからPublic Key Credentialを利用するためのWeb API |
| CTAP | Client PlatformとAuthenticator間のProtocol |
| Passkey | FIDO標準に基づくSign-in用のPublic Key Credential |
まとめ
FIDO認証は、PasswordなどのShared Secretではなく、Public Key / Private KeyのKey Pairを使って認証する仕組みです。
- Private KeyはAuthenticator側で管理し、Serverへ送信しない
- 指紋・顔認証・PINなどはUser Verificationとして利用する
- ServerはChallengeを発行し、Public Keyで署名を検証する
- FIDO2はWebAuthnとCTAPで構成される
- PasskeyはFIDO2を利用したPasswordless Sign-inの代表的なCredentialである
FIDOを理解すると、現在広く利用されているPasskeyが「単に指紋認証でログインする仕組み」ではなく、公開鍵暗号・Authenticator・Challenge-Responseによって安全性を実現していることが分かります。


コメント