【図解】FIDO認証の仕組みを徹底解説|FIDO2・WebAuthn・Passkeyまでわかりやすく解説

FIDO認証とは

FIDO(Fast IDentity Online)とは、公開鍵暗号を利用して安全なオンライン認証を実現するための認証技術・標準です。

従来のPassword認証では、Server側でPasswordを検証するための情報を保持する必要があり、Passwordの漏えい・使い回し・Phishingなどが大きな課題になります。

一方、FIDO認証では、Authenticatorが生成した秘密鍵(Private Key)を利用して認証データへ署名し、Server側はあらかじめ登録された公開鍵(Public Key)で署名を検証します。

秘密鍵はServerへ送信されず、指紋や顔などの生体情報も認証Serverへ送信する必要がありません。そのため、PasswordのようなShared Secretに依存しない、Phishing耐性の高い認証を実現できます。

ポイント:FIDOは「生体認証そのもの」ではありません。指紋・顔認証・PINなどは、Authenticatorを利用するユーザ本人を確認するUser Verificationとして利用されます。認証の中心となるのは公開鍵暗号です。

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を登録します。一般的な流れは以下の通りです。

  1. Relying PartyからClientへCredential登録要求を送ります。
  2. ユーザは指紋・顔認証・PINなどでUser Verificationを行います。
  3. Authenticatorが、対象のRelying Party向けにPublic Key / Private KeyのKey Pairを生成します。
  4. Private KeyはAuthenticator側で安全に管理され、外部へ送信されません。
  5. Public KeyやCredential IDなどの登録情報をRelying Partyへ返します。
  6. Relying PartyはPublic KeyをユーザAccountと関連付けて保存します。
注意:生体情報からPrivate Keyを生成するわけではありません。生体認証やPINは、Authenticator内のCredentialを利用するためのUser Verificationに使われます。

FIDO認証の仕組み

登録済みのCredentialを使ってログインする際には、Serverが生成したChallengeに対してAuthenticatorが署名し、ServerがPublic Keyでその署名を検証します。

  1. Relying PartyがChallengeを生成し、Clientへ認証要求を送ります。
  2. ユーザは指紋・顔認証・PINなどでUser Verificationを行います。
  3. Authenticatorは、対象のRelying Partyに対応するPrivate Keyを使って認証データへ署名します。
  4. Clientは署名結果(Authentication Assertion)をRelying Partyへ返します。
  5. Relying Partyは登録済みのPublic Keyで署名を検証します。
  6. 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を定義します。

Web Application / Relying Party
↓ 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公開鍵暗号を利用した認証技術・仕様群の総称
FIDO2WebAuthnとCTAPを組み合わせた認証標準
WebAuthnWeb ApplicationからPublic Key Credentialを利用するためのWeb API
CTAPClient PlatformとAuthenticator間のProtocol
PasskeyFIDO標準に基づく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によって安全性を実現していることが分かります。

参考資料

コメント