量子時代に向けて設計
UniAuthは、セキュリティを後付けではなく既定として、一から設計されています。すべてのハッシュ、すべてのトークン、すべてのセッションは、今日と明日の攻撃の両方に耐える暗号で保護されています。
暗号の基盤
保存時のAES-256-GCM暗号化
あらゆる機密値 — TOTPシークレット、OAuthアクセストークン、PQC秘密鍵、LDAPバインドパスワード — は、データベースに触れる前にAES-256-GCMで暗号化されます。形式: iv:tag:ciphertext。
暗号化キーは独立した256ビットのシークレット(ENCRYPTION_KEY)であり、JWTシークレットから派生したものではありません。一方をローテーションしてももう一方が危険にさらされることはありません。
ML-DSA-44セッション署名
すべてのセッションはポスト量子デジタル署名(FIPS 204 ML-DSA-44、旧称CRYSTALS-Dilithium)を保持します。リクエストごとにtouchSession()が署名を検証し、不一致があれば直ちにセッションを失効させ、イベントを記録します。
従来のECDSAやRSA署名が量子コンピューターによって破られたとしても、ML-DSAセッションは安全なままです。
Argon2idパスワードハッシュ化
新しいパスワードはArgon2id(OWASP推奨: メモリ64MB、3回の反復、並列度4)を使用します。レガシーのbcryptハッシュはログイン時に透過的に移行されます。パスワードの強度はzxcvbnで評価され(スコア≥ 2が必須)、HaveIBeenPwnedのk-匿名性APIと照合されます。
ペアワイズのサブジェクト識別子
連携アプリがあなたの本当のUUIDを見ることはありません。各アプリは一意で決定的、アプリ固有の識別子を受け取ります: HMAC-SHA256(userId:clientId, secret)。アプリはサービスをまたいでユーザーを関連付けることができません — あなたのプライバシーはポリシーではなく構造によって守られています。
実行時の保護
適応型脅威検知
6つの要素にわたるログインリスクの統計的スコアリング: 新しいIP、新しいユーザーエージェント、異常な時間帯、失敗試行の連続、地理的異常、デバイスの信頼性。リスクの高いログインは、自動的にステップアップ2FAまたはCAPTCHAを発動します。
段階的なアカウントロック
5回の失敗=1分、10回=5分、15回=15分、20回以上=1時間。汎用的な401を返します(アカウント列挙なし)。認証に成功するとリセットされます。ロックはパスワード、パスキー、マジックリンクのフローに等しく適用されます。
セッションのライフサイクル
24時間の非アクティブタイムアウト+30日間の絶対有効期間。SHA-256フィンガープリント(IP+UA)をリクエストごとに検証し、不一致があれば直ちにセッションを終了します。ユーザーあたり最大10の同時セッションで、最も古いものから破棄されます。
SSRF対策済みの外向き通信
すべての外向きHTTPリクエスト(ウェブフック、OIDCディスカバリー、バックチャネルログアウト)はsafeFetchを経由します — DNS解決され、検証済みのIPアドレスに固定されます。チェックとソケット接続の間でのDNSリバインディングは不可能です。
CORS+CSP+レート制限
すべてのAPIルートで厳格な同一オリジンCORS。frame-ancestors 'none'のCSP。二層のレート制限(インメモリ+Redisのスライディングウィンドウ)。各エンドポイントのリスクプロファイルに合わせて調整したルートごとのしきい値。
すべてをタイミングセーフに
ハッシュの比較、トークンの検証、バックアップコードのチェック、SCIMトークンの照合はすべてcrypto.timingSafeEqualを使用します。タイミングのサイドチャネルはどこにもありません。
コンプライアンスと監査
すべての操作が記録され、すべてのチェーンが検証され、すべてのエクスポートが秘匿処理されます。