はじめに
〜パスワードの時代を終わらせるオープン標準〜
「パスワード弱い」「漏えいした」「フィッシングされた」──そんな問題が毎日のように起きる中で登場したヒーローが FIDO2。
WebAuthn や Passkey の“母体となる標準”であり、パスワードレス時代の主役だ。
この記事では、技術・仕組み・実装ポイントまで気持ちよく解説する。
FIDO2 の構成
FIDO2 は以下 2 つの標準の総称:
| 規格 | 役割 |
|---|---|
| WebAuthn (Web Authentication API) | ブラウザとサーバー間の認証を定義 |
| CTAP2 (Client To Authenticator Protocol) | デバイス(指紋/FaceID/セキュリティキー)とブラウザの通信 |
シンプルに言うと:
WebAuthn = 表舞台
CTAP2 = 裏側で働く黒衣の忍者
二人が手を取り合って、最強のパスワードレス認証を成立させている。
FIDO2が解決する問題
1. パスワードの漏洩問題
そもそも パスワードを「持たない」。
攻撃者は盗むものがない。
2. フィッシング完全無効化
rpId(Relying Party ID)=ドメイン名が一致しないと鍵は反応しない。
偽サイトは一発で拒否される。
3. データベース侵害に強い
サーバー側には 公開鍵しか保存されない。
仮に漏えいしても問題なし。
4. 生体情報はデバイス外に出ない
指紋・顔データは OS 内で閉じる。
サーバーに送ることは一切ない。
認証の仕組み(図で直感的に理解)
登録 (Registration)
認証 (Authentication)
FIDO2 の鍵の正体
FIDO2 ではアカウントごとにデバイスが公開鍵ペアを生成する。
-
秘密鍵
- デバイス内の TPM / Secure Enclave に保存
- 外に出せない
- 生体認証(指紋/顔)でローカル解錠
-
公開鍵
- サーバーに保存
- 認証時に署名チェックに使う
つまり「盗めない・漏れない・釣られない」。
Passkey との関係
Passkey は FIDO2 のクラウド同期版。
| 項目 | Passkey | 従来のFIDO2 |
|---|---|---|
| 鍵の同期 | あり(iCloud/Google) | なし |
| UX | デバイス間でスムーズ | デバイス限定 |
| 安全性 | 暗号化された状態で同期 | デバイスローカル |
Apple / Google / Microsoft が一斉に推してる理由はここにある。
実装ポイント(エンジニア向け)
Web(React / JS)
WebAuthn を直接使える。
登録
navigator.credentials.create({
publicKey: {
challenge,
rp: { name: "Example" },
user: { id, name, displayName },
pubKeyCredParams: [{ type: "public-key", alg: -7 }]
}
});
認証
navigator.credentials.get({
publicKey: {
challenge,
allowCredentials
}
});
Android (Kotlin)
Credential Manager + Passkey が現在の正攻法。
val request = GetCredentialRequest(
GetPublicKeyCredentialOption(json)
)
val result = credentialManager.getCredential(request)
Flutter
-
passkeys(iOS/Android) -
web_authn(Web)
final credential = await Passkeys.authenticate(
challenge: challenge,
rpId: 'example.com',
);
FIDO2 のセキュリティ評価
攻撃視点の比較をしておくと理解が深まる。
| 攻撃 | パスワード | FIDO2 |
|---|---|---|
| フィッシング | 成功する | 100%失敗 |
| リスト攻撃 | 成功する | 鍵が存在しない |
| 中間者攻撃 | 影響あり | origin署名で無効 |
| デバイス盗難 | 危険 | 生体認証+TPMで保護 |
まとめ:FIDO2 は“安全で楽な未来”そのもの
FIDO2 / WebAuthn / Passkey は、
「パスワードという時代の呪い」を終わらせる技術。
- 秘密鍵は外に出ない
- 生体情報も外に出ない
- 偽サイトには絶対に反応しない
- クロスプラットフォーム
- UX はむしろパスワードより速い
Web・モバイル・アプリ関係なく、
2025〜2030年の認証のデフォルトになる。