FIDO2
Fast Identity Online 2の略称。パスワードに依存しない、公開鍵暗号を用いた強力な認証標準。FIDO Allianceが策定し、WebAuthnとCTAP2から構成される。
概要
FIDO2は、パスワードレス認証を実現する技術標準。デバイス内で秘密鍵を生成・保管し、公開鍵をサーバーに登録することで、フィッシング耐性のある強力な認証を実現する。
主要コンポーネント
1. WebAuthn(Web Authentication API)
ブラウザとWebサービス間の認証プロトコル。W3C標準。
Webサービス(Relying Party)
↓
WebブラウザのWebAuthn API
↓
認証器(Authenticator)
2. CTAP2(Client to Authenticator Protocol 2)
ブラウザと外部認証器(セキュリティキー、スマホ等)間の通信プロトコル。
ブラウザ
↓ CTAP2
認証器(USB、NFC、Bluetooth)
技術的仕組み
登録(Registration)
1. ユーザーがサービスにアカウント登録
↓
2. サーバーがチャレンジ(ランダムな値)を生成
↓
3. 認証器が公開鍵ペアを生成(秘密鍵はデバイス内に保管)
↓
4. 認証器が公開鍵をサーバーに送信
↓
5. サーバーが公開鍵を登録
認証(Authentication)
1. ユーザーがログイン試行
↓
2. サーバーがチャレンジを生成
↓
3. 認証器が秘密鍵でチャレンジに署名
↓
4. サーバーが公開鍵で署名を検証
↓
5. 検証成功でログイン完了
セキュリティ特性
- 秘密鍵の非抽出性: デバイス外に出ない
- フィッシング耐性: ドメインごとに異なる鍵ペア
- リプレイ攻撃耐性: チャレンジは毎回異なる
- 中間者攻撃耐性: TLS通信とドメイン検証
認証器の種類
プラットフォーム認証器(Platform Authenticator)
デバイスに内蔵された認証器。
- Windows Hello: 顔認証、指紋、PIN
- Touch ID / Face ID: Appleデバイス
- Android Biometric: 指紋、顔認証
外部認証器(Roaming Authenticator)
外付けのセキュリティキー。
- YubiKey: USB、NFC対応
- Titan Security Key: Googleのセキュリティキー
- スマホ: BluetoothでPCと連携
パスキー(Passkey)
FIDO2を利用した、クラウド同期可能な認証情報。
従来のFIDO2との違い
| 項目 | 従来のFIDO2 | パスキー |
|---|---|---|
| 秘密鍵の保管 | デバイスローカル | クラウド同期可 |
| 複数デバイス | 再登録が必要 | 自動同期 |
| バックアップ | なし | あり |
| 例 | YubiKey | iCloud Keychain, Google Password Manager |
パスキーのエコシステム
iCloud Keychain(Appleデバイス間で同期)
Google Password Manager(Androidデバイス間で同期)
1Password、Bitwarden等(サードパーティ)
eKYCとの統合可能性
現状
犯収法のワ・ヘ・ホ方式は、FIDO2を直接利用していない。
統合の可能性
FIDO2 + JPKI:
- マイナンバーカードの秘密鍵をFIDO2認証器として利用
- スマホ搭載マイナンバーカードでパスキー対応
FIDO2 + 顔認証:
- プラットフォーム認証器(Face ID等)で生体認証
- 本人確認書類との顔照合と組み合わせ
リスクベースアプローチ:
実装例
ユーザー登録(JavaScript)
// サーバーからチャレンジを取得
const response = await fetch('/webauthn/register/begin');
const options = await response.json();
// WebAuthn APIで認証器を呼び出し
const credential = await navigator.credentials.create({
publicKey: options
});
// 公開鍵をサーバーに送信
await fetch('/webauthn/register/finish', {
method: 'POST',
body: JSON.stringify(credential)
});
ログイン(JavaScript)
// サーバーからチャレンジを取得
const response = await fetch('/webauthn/login/begin');
const options = await response.json();
// WebAuthn APIで署名
const assertion = await navigator.credentials.get({
publicKey: options
});
// 署名をサーバーに送信
await fetch('/webauthn/login/finish', {
method: 'POST',
body: JSON.stringify(assertion)
});
利用シーン
Webサービスのログイン
- GitHub、Google、Microsoft、Dropbox等が対応
- パスワード不要でログイン
金融サービス
- 銀行、証券、クレジットカード会社
- MFA(多要素認証)の一部として利用
企業のアクセス管理
- VPN、社内システムへのログイン
- セキュリティキーによる強固な認証
公的個人認証(JPKI)との比較
| 観点 | FIDO2 | JPKI |
|---|---|---|
| 標準化団体 | FIDO Alliance + W3C | 日本政府(J-LIS) |
| 認証器 | セキュリティキー、スマホ、PC | マイナンバーカード |
| 秘密鍵の保管 | デバイス内SE/TPM | ICチップ |
| 公開鍵の登録先 | 各サービス | J-LIS認証局 |
| 証明書 | なし | 電子証明書あり |
| 基本4情報 | なし | 署名用証明書に含まれる |
| 法的効力 | サービス依存 | 電子署名法で実印相当 |
| UX | 生体認証で簡単 | PIN入力が手間 |
課題と展望
現状の課題
- 普及率: まだパスワードが主流
- ユーザー理解: 仕組みが理解されていない
- リカバリー: デバイス紛失時の対応
- クロスプラットフォーム: エコシステム間の移行
今後の展望
スマホ搭載マイナンバーカード:
- ICチップ不要、スマホ内SEで秘密鍵保管
- パスキーとして機能
デジタルウォレット統合:
AI連携:
- 行動パターン分析で異常検知
- リスクベースアプローチと組み合わせ