1. 認証と認可入門 MOC
- 認証と認可の基本
- 認証 (Authentication) の定義 (あなたは誰? - Who you are)
- 認可 (Authorization) の定義 (あなたは何ができる? - What you are allowed to do)
- 認証と認可の明確な違いと比較
(オプション) アカウンティング (Accounting) の定義 (あなたは何をした? - What you did)
AAA (Authentication, Authorization, Accounting)
- アイデンティティ (Identity) の概念
アイデンティティと属性
デジタルアイデンティティ
ID管理 (Identity Management - IdM / Identity and Access Management - IAM)
- 認証と認可の重要性 (セキュリティの第一防衛線)
- 認証・認可の基本フロー (ログイン→セッション/トークン発行→リソースへのアクセス要求→認可チェック)
2.1. 認証の要素 (Factors of Authentication) MOC
- 知識情報 (Something you know): パスワード, PIN, 秘密の質問
- 所持情報 (Something you have): スマートフォン, ハードウェアトークン, スマートカード, ICカード
- 生体情報 (Something you are): 指紋, 顔, 虹彩, 静脈
- シングルファクタ認証 (SFA) vs. 多要素認証 (MFA)
2.2. パスワードベース認証 MOC
- パスワード認証の仕組み (ユーザー名とパスワードの検証)
- パスワードの安全な保存方法 MOC
平文保存 (絶対禁止)
ハッシュ化 (Hashing)
- ソルト (Salt) の使用 (レインボーテーブル攻撃対策)
- ストレッチング (Stretching) / キー派生関数 (KDF) (ブルートフォース攻撃対策)
bcrypt
scrypt
Argon2 (現在の推奨)
PBKDF2
(オプション) ペッパー (Pepper) の使用
- パスワードポリシーの設計 (長さ、複雑性、有効期限の是非)
- 安全なパスワードリセット機能の実装 (トークンベースのリセットフロー)
- パスワードベース認証への攻撃
ブルートフォース攻撃 (Brute-force Attack)
辞書攻撃 (Dictionary Attack)
クレデンシャルスタッフィング (Credential Stuffing)
キーロガー (Keylogger)
フィッシング (Phishing)
- ブルートフォース攻撃対策
アカウントロックアウト
CAPTCHA / reCAPTCHA
レート制限
2.3. 多要素認証 (MFA - Multi-Factor Authentication) MOC
- MFAの定義と重要性
二要素認証 (2FA - Two-Factor Authentication)
- MFAの要素と手法
SMS/電話認証 (利便性とSIMスワップのリスク)
ワンタイムパスワード (OTP - One-Time Password)
TOTP (Time-based OTP) (Google Authenticator, Microsoft Authenticatorなど)
HOTP (HMAC-based OTP)
プッシュ通知認証 (Push Notification)
ハードウェアトークン / セキュリティキー (FIDO/U2F)
生体認証 (指紋, 顔など)
MFAの実装とユーザーオンボーディング
リカバリーコード
2.4. パスワードレス認証 (Passwordless Authentication) MOC
- パスワードレス認証の概念と利点
- パスワードレス認証の手法
マジックリンク (Magic Links)
OTPによるログイン
- FIDO (Fast IDentity Online) / WebAuthn (Web Authentication) MOC
FIDO2 (WebAuthn + CTAP)
公開鍵暗号に基づく強力な認証
フィッシング耐性
生体認証による直接ログイン
2.5. トークンベース認証 (Token-based Authentication) MOC
- トークンベース認証の仕組み (ステートレス認証)
- JSON Web Token (JWT) MOC
[[JWTの構造 (Header, Payload, Signature)]]
JWTのクレーム (Claims - iss, sub, aud, exp, nbf, iat, jti)
署名アルゴリズム (HMAC - HS256, RSA - RS256)
アクセストークン (Access Token) とリフレッシュトークン (Refresh Token)
JWTのセキュリティ考慮事項 (alg:none, 署名検証, 有効期限, 失効, XSS対策)
JWTのストレージ (Cookie vs. localStorage)
セッションベース認証 vs. トークンベース認証
2.6. シングルサインオン (Single Sign-On - SSO) MOC
- SSOの定義と利点 (利便性向上、パスワード管理の軽減、セキュリティ強化)
- SSOの仕組み (代理認証)
- IdP (Identity Provider) と SP (Service Provider)
- SSOの実現プロトコル
SAML (Security Assertion Markup Language) (詳細は後述)
OpenID Connect (OIDC) (詳細は後述)
Kerberos (詳細は後述)
ソーシャルログイン (Social Login)
2.7. フェデレーション認証 (Federated Authentication) MOC
- フェデレーションの定義 (異なる組織・ドメイン間でのID連携)
- 信頼の輪 (Circle of Trust)
- フェデレーションとSSOの関係
2.8. API認証 (API Authentication) MOC
[[APIキー (API Keys)]] (単純だがセキュリティは限定的)
Basic認証 (Basic Authentication) (非推奨)
HMAC認証 (HMAC Authentication)
OAuth 2.0によるAPI認証
mTLS (Mutual TLS) によるクライアント認証
3.1. 認可の基本概念 MOC
プリンシパル (Principal), パーミッション (Permission), リソース (Resource)
アクセスポリシー (Access Policy)
[[最小権限の原則 (Principle of Least Privilege)]] (再掲・認可文脈)
デフォルト拒否 (Default Deny)
3.2. アクセスコントロールモデル (Access Control Models) MOC
- 任意アクセス制御 (DAC - Discretionary Access Control)
リソースの所有者がアクセス権を制御 (例: ファイルシステムのパーミッション)
- 強制アクセス制御 (MAC - Mandatory Access Control)
システム管理者がセキュリティポリシーに基づいてアクセス権を強制 (例: SELinux)
- ロールベースアクセス制御 (RBAC - Role-Based Access Control) (最も一般的)
ユーザー → ロール → パーミッションの割り当て
RBACの実装パターン
- 属性ベースアクセス制御 (ABAC - Attribute-Based Access Control)
ユーザー、リソース、環境の属性に基づいた動的なアクセス制御
ポリシー言語 (XACMLなど)
(オプション) ACL (Access Control List) vs. Capability-based Security
(オプション) 関係ベースアクセス制御 (ReBAC - Relationship-Based Access Control) (Google Zanzibarなど)
3.3. OAuth 2.0 MOC (委譲認可のフレームワーク)
OAuth 2.0の目的 (ユーザーの同意に基づき、サードパーティアプリケーションに限定的なリソースアクセス権限を与える)
- OAuth 2.0のロール
リソースオーナー (Resource Owner) (ユーザー)
[[クライアント (Client)]] (アプリケーション)
認可サーバー (Authorization Server)
リソースサーバー (Resource Server)
- OAuth 2.0のトークン
アクセストークン (Access Token)
リフレッシュトークン (Refresh Token)
- OAuth 2.0の認可フロー (Grant Types) MOC
- 認可コードフロー (Authorization Code Flow) (サーバーサイドWebアプリ向け)
PKCE (Proof Key for Code Exchange) による拡張 (モバイル/SPA向け)
インプリシットフロー (Implicit Flow) (レガシー、非推奨)
リソースオーナー・パスワード・クレデンシャルフロー (Resource Owner Password Credentials Flow) (非推奨)
クライアント・クレデンシャルフロー (Client Credentials Flow) (M2M通信向け)
(オプション) デバイス認可フロー (Device Authorization Flow)
- スコープ (Scopes) (権限の範囲)
- OAuth 2.0のセキュリティ考慮事項
[[リダイレクトURIの厳格な検証]]
[[stateパラメータによるCSRF対策]]
[[トークン漏洩対策]]
4. 主要なプロトコルと標準 MOC
4.1. OpenID Connect (OIDC) MOC
OIDCの定義 (OAuth 2.0を基盤とした認証レイヤー)
OIDCとOAuth 2.0の違い (認証 vs. 認可)
- IDトークン (ID Token)
IDトークンの形式 (JWT)
IDトークンのクレーム (iss, sub, aud, exp, iatなど)
- OIDCのフロー
認可コードフロー (Authorization Code Flow)
インプリシットフロー (Implicit Flow) (一部非推奨)
ハイブリッドフロー (Hybrid Flow)
- OIDCのエンドポイント
認可エンドポイント (Authorization Endpoint)
トークンエンドポイント (Token Endpoint)
UserInfoエンドポイント (UserInfo Endpoint)
OIDCのメタデータ (.well-known/openid-configuration)
OIDCのユースケース (ソーシャルログイン、SSO)
4.2. SAML (Security Assertion Markup Language) MOC
SAMLの定義 (XMLベースの認証・認可情報交換標準)
SAMLのユースケース (エンタープライズSSO)
- SAMLの主要コンポーネント
アサーション (Assertion)
プロトコル (Protocol)
バインディング (Binding)
- SAMLのフロー (SP-Initiated SSO, IdP-Initiated SSO)
SAMLとOIDCの比較
4.3. Kerberos MOC
Kerberosの定義 (チケットベースのネットワーク認証プロトコル)
Kerberosのアーキテクチャ (KDC, AS, TGS)
Kerberosの認証フロー
Kerberosの利用例 (Active Directory)
4.4. LDAP (Lightweight Directory Access Protocol) MOC
LDAPの定義 (ディレクトリサービスへのアクセスプロトコル)
LDAPのデータモデル (DIT, DN, RDN, エントリ, 属性)
LDAPの操作 (bind, search, add, modify, delete)
LDAPの利用例 (中央集権的なユーザー情報管理)
4.5. FIDO / WebAuthn MOC (再掲・プロトコルとして)
FIDO Allianceの役割
WebAuthn (W3C標準) と CTAP (Client to Authenticator Protocol)
公開鍵暗号に基づく認証の仕組み
5. 実装と運用 MOC
- ID管理 (Identity Management - IdM) / Identity and Access Management (IAM)
- IAMシステムの機能 (IDライフサイクル管理, プロビジョニング, 認証, 認可, 監査)
Cloud IAM (AWS, Azure, GCP)
- セキュアな実装プラクティス
実績のあるライブラリやフレームワークの利用
認証・認可ロジックの集中管理
タイミング攻撃対策
- セッション管理のセキュリティ (再掲・重要)
セキュアなCookie属性 (HttpOnly, Secure, SameSite)
セッション固定化対策
セッションハイジャック対策
- Identity as a Service (IDaaS)
IDaaSの定義と利点
主要なIDaaSプロバイダー (Okta, Auth0 (by Okta), Microsoft Entra ID, Ping Identity)
- ロギング、監査、監視
認証成功/失敗、認可失敗、パスワード変更などのイベントをログに記録
不審なアクティビティの監視とアラート
監査証跡 (Audit Trail)
6. 将来のトレンドと高度なトピック MOC
- 分散型ID (Decentralized Identity - DID)
自己主権型アイデンティティ (Self-Sovereign Identity - SSI)
検証可能なクレデンシャル (Verifiable Credentials - VCs)
ブロックチェーンとDID
- 継続的認証 (Continuous Authentication) / Risk-Based Authentication
行動パターンやコンテキストに基づいた継続的なリスク評価
- パスワードレス認証のさらなる普及
- IoTデバイスの認証・認可
- AI/MLを活用した異常検知と認証
- プライバシー保護とID管理
7. 認証・認可アンチパターン MOC
パスワードの平文保存
不安全なパスワードリセット
セッションIDのURL埋め込み
エラーメッセージによるユーザー存在有無の漏洩
クライアント側のみでの認可チェック
長時間有効なアクセストークン
リフレッシュトークンの不適切な管理
OAuth 2.0のImplicitフローの不適切な使用
自作の暗号/認証プロトコルの使用