認証プロトコルの全体像と実践的ガイド:仕組み・比較・設計時の注意点

はじめに:認証プロトコルとは何か

認証プロトコルは、ある主体(ユーザー、デバイス、サービス)が自分の身元を証明するためのルールと手順を定めたものです。ITシステムにおいては「誰がアクセスしているか」を確実に把握することがセキュリティの第一歩であり、適切な認証がなければアクセス制御や監査、責任追跡が成り立ちません。本稿では主要な認証プロトコルの仕組みを深掘りし、設計と実装で注意すべき点、攻撃ベクトルと対策、運用時のベストプラクティスまで詳述します。

認証の目的と脅威モデル

認証の主目的は「本人性の確認(authentication)」ですが、関連する要素として機密性(confidentiality)、完全性(integrity)、否認防止(non-repudiation)も考慮します。脅威モデルとしては、なりすまし(credential theft)、リプレイ攻撃、中間者攻撃(MITM)、トークン盗難、ブルートフォース、辞書攻撃、セッション固定化などが典型です。プロトコル設計時にはこれらの脅威を想定し、暗号、署名、タイムスタンプ、チャレンジ応答などで緩和する必要があります。

認証方式の分類

  • 知識情報(Knowledge):パスワード、PIN。
  • 所持情報(Possession):ワンタイムトークン、スマートカード、証明書(X.509)。
  • 固有情報(Inherence):生体認証(指紋、顔認識、虹彩)。
  • その他:デバイスの「持っていること」やリスクベース認証。

これらを組み合わせた多要素認証(MFA)が現代の推奨です。

主要な認証プロトコルと仕組み

  • パスワードベース(HTTPフォーム認証):最も古典的。平文送信は危険で、必須でTLSを用いる。サーバ側はbcrypt/Argon2等でハッシュ化したパスワードを保存する。
  • チャレンジ・レスポンス(例:Digest認証、SRP):サーバがチャレンジを送り、クライアントが秘密情報を用いて応答を生成する。パスワードを平文で送らない点が利点。
  • トークンベース(OAuth 2.0 / OpenID Connect):認可(OAuth 2.0)と認証(OpenID Connect, OIDC)を分離。アクセストークンとリフレッシュトークンを使用し、JWTがよく使われる。Bearerトークンは盗用されると第三者に悪用されやすいため細心の保護が必要。
  • SAML:主に企業のシングルサインオン(SSO)で使用されるXMLベースの認証アサーション。ブラウザリダイレクトでSAMLアサーションをやり取りする。
  • Kerberos:チケットベースの認証。TGT(Ticket Granting Ticket)とサービスチケットを用い、対称鍵暗号をベースにしたマルチステップの認証を行う。WindowsドメインやUNIXのKerberos環境で広く使われる。
  • TLSクライアント認証(mTLS):クライアントとサーバー双方がX.509証明書を提示して相互認証を行う。IoTやサービス間通信で強力。
  • RADIUS / Diameter:ネットワーク認証や認可に用いられるプロトコル。802.1XやVPN、WLAN認証のバックエンドとして機能する。
  • FIDO2 / WebAuthn:公開鍵基盤を用いたパスワードレス認証。プライベートキーはデバイス内で保護され、サーバーには公開鍵が保存される。フィッシング耐性が高い。

トークンの種類とセキュリティ上の注意

アクセストークン(Bearer)とMACトークン、署名付きトークン(JWT)は用途やセキュリティ特性が異なります。JWTは利便性が高く自己完結的ですが、署名アルゴリズムの弱体化や適切な検証を怠ると脆弱になります。よくあるミス:

  • 署名検証をスキップする(alg: none の脆弱性等)
  • 長期間有効なトークンを発行する
  • トークンをブラウザストレージ(localStorage)に保存しXSSに弱くする
  • HTTPのみ、または不十分なTLS設定で送信

対策としては短い有効期限、リフレッシュトークンの安全な保管、Secure/HttpOnlyなCookie利用、トークン失効(revocation)メカニズム、署名アルゴリズムの強化(RS256/ECDSA)があります。

実装上の暗号技術と運用上の注意

パスワードは単純なハッシュ保存では不十分で、bcrypt/Argon2等の遅延ハッシュを使い、固有のソルトを付け、可能ならpepper(サーバ/ハードウェアに保存される追加静的秘密)を併用します。TOTP(RFC 6238)は時間同期に依存するためクロックスキューに対する許容範囲を設ける必要があります。公開鍵基盤(PKI)を用いる場合は証明書失効リスト(CRL)やOCSPを用いて失効管理を行います。

攻撃事例と対策(実戦的)

  • フィッシング/クレデンシャル窃取:MFA(特にFIDO2等のフィッシング耐性の高い手段)を導入。認証フローでリダイレクト先の検証を行う。
  • リプレイ攻撃:チャレンジ値・ノンス、一回限りのトークン、有効期限を導入。
  • 中間者攻撃(MITM):常に最新のTLSを使い、証明書ピンニングやmTLSを検討。
  • ブルートフォース/クレデンシャルスタッフィング:レート制限、CAPTCHA、アカウントロック、異常検知、パスワード再利用検知。
  • XSSによるトークン盗難:Content Security Policy(CSP)、HttpOnlyかつSecureなCookieの利用、入力検証。

認証フロー設計時のチェックリスト

  • プロトコルは既存の標準(OIDC、SAML、FIDO2)を可能な限り利用する
  • 常にTLSを必須化し、古い暗号スイートを無効化する
  • 多要素認証を導入し、重要操作は再認証させる
  • パスワード管理は安全なハッシュ関数+ソルトで実装する
  • トークンの有効期限と失効戦略を設計する(短いアクセストークン+安全なリフレッシュ)
  • ログと監査を整備し、認証失敗のパターンを監視する
  • ユーザー向けの安全なパスワードリセットフローを設計する(秘密の質問は避ける)
  • 依存するIDプロバイダ(IdP)を選ぶ際はSLAとセキュリティ実装を確認する

規制とコンプライアンスの視点

金融や医療など規制業界では強い認証要件(多要素、ログ保存、認証履歴の保全など)が求められることがあります。国や業界のガイドライン(例:NIST SP 800-63シリーズ)に準拠した設計が推奨されます。

結論:現代の認証設計で重視すべきこと

単に「ログインできる」ことから「安全かつ使いやすい認証」への転換が重要です。MFAやFIDO2のようなフィッシング耐性の高い方式、TLSと適切なトークン管理、堅牢なパスワード保存と監視体制の整備が求められます。既存の標準を活用しつつ、自組織の脅威モデルに合わせた最小権限・最小露出の原則を徹底してください。

参考文献