商用環境でのアテステーション検証
概要
本ドキュメントでは、FIDO2 アテステーション検証を商用環境で運用する際の考慮事項を解説します。
このドキュメントで学べること:
- アテステーション検証を導入する前に決めるべきポリシー
- 認証器の多様性による問題と対処法
- 証明書関連のトラブルシューティング
- ユーザー影響を考慮した設計
- 運用時のベストプラクティス
対象読者:
- システム設計者
- インフラ/運用担当者
- セキュリティ担当者
📖 アテステーションの基礎については Attestation - 認証器の信頼性証明 を参照してください。
事前に決めておくべきポリシー
アテステーション検証を導入する前に、以下のポリシーを決定しておく必要があります。
ポリシー決定マトリクス
| 項目 | 内容 | 選択肢 | 推奨(一般) | 推奨(高セキュリティ) |
|---|---|---|---|---|
| Attestation Conveyance | 認証器に attestation 送信を要求するか | none / indirect / direct / enterprise | none | direct |
| Self Attestation | 証明書なしの自己署名を許可する か | 許可 / 拒否 | 許可 | 要検討 |
| fmt="none" | attestation なしの登録を許可するか | 許可 / 拒否 | 許可 | 拒否 |
| FIDO 認定レベル | 要求する最低認定レベル | 不問 / L1以上 / L2以上 | 不問 | L1以上 |
| 未知の認証器 | MDS に存在しない認証器を許可するか | 許可 / 拒否 | 許可 | 拒否 |
| 検証失敗時 | 検証エラー時の挙動 | 拒否 / 警告のみ | 警告のみ | 拒否 |
| 証明書検証方式 | ルート CA の管理方法 | TrustStore / MDS / 併用 | MDS | 併用 |
Attestation Conveyance の選択
┌─────────────────────────────────────────────────────────────────────────────┐
│ Attestation Conveyance の選択基準 │
├─────── ──────────────────────────────────────────────────────────────────────┤
│ │
│ 【none を選ぶべきケース】 │
│ - 一般消費者向けサービス │
│ - ユーザーのプライバシーを最優先 │
│ - 認証器の種類を制限したくない │
│ - パスワードレス認証の普及が目的 │
│ │
│ 【direct を選ぶべきケース】 │
│ - 企業の社内システム │
│ - 金融・医療など規制業界 │
│ - 特定の認証器のみを許可したい │
│ - 監査で認証器の種類を証明する必要がある │
│ │
│ 【enterprise を選ぶべきケース】 │
│ - 認証器を会社資産として管理 │
│ - 紛失・盗難時に個体を特定したい │
│ - 従業員の同意のもとで使用 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Attestation とプライバシー
「ユーザーのプライバシーを最優先」とは、認証器に関する情報を RP に送信しないことを意味します。
┌─────────────────────────────────────────────────────────────────────────────┐
│ Attestation で RP に伝わる情報 │
├──────────────────────────────────────────────────────────────────────── ─────┤
│ │
│ 【AAGUID から分かること】 │
│ - 認証器のモデル・製品名 │
│ - 例: 「このユーザーは YubiKey 5 NFC を使っている」 │
│ │
│ 【証明書チェーンから分かること】 │
│ - 製造元(Yubico、Apple、Google 等) │
│ - 製造時期・バッチ(証明書のシリアル番号等から推測可能な場合) │
│ - enterprise attestation の場合、認証器の個体識別情報 │
│ │
│ 【プライバシーリスクの具体例】 │
│ ────────────────────────────────────────────────────────────────────────── │
│ │
│ 1. クロスサイトトラッキング │
│ - 複数のサイトで同じ AAGUID が観測される │
│ - 「サイト A とサイト B に同じ認証器でアクセスしている」と推測可能 │
│ │
│ 2. ユーザー属性の推測 │
│ - YubiKey → セキュリティ意識が高い、または企業ユーザー │
│ - 古いモデルの認証器 → 長期間使用している、または経済的理由 │
│ - 特定企業の認証器 → その企業の従業員である可 能性 │
│ │
│ 3. 標的型攻撃への悪用 │
│ - 認証器の既知の脆弱性を狙った攻撃 │
│ - 特定モデルを使うユーザーを狙ったフィッシング │
│ │
│ 【attestation="none" が保護するもの】 │
│ ────────────────────────────────────────────────────────────────────────── │
│ - Attestation データを送信しない │
│ - AAGUID が 00000000-0000-0000-0000-000000000000 になることがある │
│ - RP は認証器の種類を知ることができない │
│ - ユーザーは「どの認証器を使っているか」を秘匿できる │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
一般消費者向けサービスでは、認証器の種類を知る必要がないケースが多いため、ユーザーのプライバシーを尊重して attestation="none" を選択することが推奨されます。
Self Attestation の扱い
┌─────────────────────────────────────────────────────────────────────────────┐
│ Self Attestation とは │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Self Attestation は、認証器が生成した鍵ペアの秘密鍵自身で署名する方式 │
│ - x5c(証明書チェーン)が含まれない │
│ - 認証器の製造元を証明できない │
│ - AAGUID は含まれるが、偽装される可能性がある │
│ │
│ 【許可する場合】 │
│ - より多くの認証器をサポートできる │
│ - 一部の正規認証器も Self Attestation を使用する │
│ │
│ 【拒否する場合】 │
│ - 認証器の正当性を検証できないリスクを排除 │
│ - ソフトウェア認証器の悪用を防止 │
│ - ただし、利用可能な認証器が減る │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
未知の認証器の扱い
MDS に登録されていない認証器をどう扱うかは重要な決定事項です。
| 方針 | メリット | デメリット |
|---|---|---|
| 許可 | 新しい認証器にも対応できる | セキュリティレベルが不明 |
| 拒否 | 信頼できる認証器のみに限定 | 新製品への対応が遅れる |
| 警告付き許可 | バランスが取れる | ユーザー体験が複雑になる |
検証失敗時の挙動
┌─────────────────────────────────────────────────────────────────────────────┐
│ 検証失敗時の挙動設計 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 【拒否(Strict モード)】 │
│ - 検証に失敗した場合、登録を拒否 │
│ - セキュリティは高いが、ユーザーが登録できないケースが発生 │
│ - 企業環境や高セキュリティ環境向け │
│ │
│ 【警告のみ(Permissive モード)】 │
│ - 検証に失敗しても登録は許可 │
│ - ログに警告を記録、監査用データとして保存 │
│ - 後からポリシーを厳格化する際のデータ収集に有用 │
│ - 一般消費者向けサービスの初期導入に適切 │
│ │
│ 【段階的導入の推奨】 │
│ Phase 1: 警告のみ(データ収集) │
│ Phase 2: 分析結果に基づきポリシー調整 │
│ Phase 3: 必要に応じて Strict モードへ移行 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
証明書検証方式の選択
証明書チェーン検証に使用するルート CA の管理方式を決定します。
┌───────────────────────────────────────────────────────────────────── ────────┐
│ 証明書検証方式の選択基準 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 【TrustStore のみ】 │
│ - 手動でルート CA 証明書を収集・登録 │
│ - オフラインで動作可能 │
│ - 許可する認証器を厳格に管理したい企業環境向け │
│ - 新しい認証器への対応に手動作業が必要 │
│ │
│ 【MDS のみ】 │
│ - MDS から AAGUID に対応するルート CA を動的に取得 │
│ - 新しい認証器に自動対応 │
│ - MDS への依存(障害時に影響) │
│ - 多様な認証器をサポートしたい一般向けサービス向け │
│ │
│ 【併用(推奨)】 │
│ - 主要なルート CA は TrustStore に事前登録 │
│ - TrustStore にないものは MDS から取得 │
│ - MDS 障害時も主要な認証器は動作 │
│ - 高可用性が求められる本番環境向け │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
| 方式 | 運用負荷 | 可用性 | 新認証器対応 | 推奨ケース |
|---|---|---|---|---|
| TrustStore のみ | 高(手動更新) | 高 | 遅い | 認証器限定の企業環境 |
| MDS のみ | 低 | MDS依存 | 即時 | 一般向けサービス |
| 併用 | 中 | 高 | 即時 | 本番環境(推奨) |
認証器の多様性による問題
"direct" を要求しても "none" が返る
┌─────────────────────────────────────────────────────────────────────────────┐
│ Attestation が返らないケース │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ RP が attestation="direct" を要求しても、認証器やブラウザが │
│ fmt="none" を返すケースがある │
│ │
│ 【原因】 │
│ 1. ブラウザのプライバシー設定 │
│ - 一部のブラウザは attestation を自動的に削除する設定がある │
│ │
│ 2. 認証器の実装 │
│ - 一部の認証器は attestation をサポートしていない │
│ - プラットフォーム認証器はプライバシー保護のため none を返すことがある │
│ │
│ 3. ユーザーの選択 │
│ - ブラウザが「認証器情報を送信しますか?」と確認し、ユーザーが拒否 │
│ │
│ 【対処法】 │
│ - fmt="none" を許可するかどうかを事前に決定しておく │
│ - 許可しない場合、ユーザーに別の認証器を使うよう案内 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘