---
title: 認証フレームワーク
url: https://doc.liz6.com/ja/networking/12-security-protocols/03-authentication-frameworks
locale: ja
area: networking
tags:
- networking
- security-protocols
date: 2026-06-30
modified: 2026-07-19
description: Kerberos（対称鍵＋チケット）、SAML（フェデレーションID＋XMLアサーション）、WebAuthn（公開鍵＋ローカル生体認証）——3つの認証フレームワークは、それぞれドメイン内、クロスドメイン、フィッシング対策という異なる3つのシナリオを解決します。LDAPとRADIUSは、インフラストラクチャ層でディレクトリおよびネットワークアクセス制御を提供します。
---

# 認証フレームワーク

> Kerberos（対称鍵＋チケット）、SAML（フェデレーションID＋XMLアサーション）、WebAuthn（公開鍵＋ローカル生体認証）——3つの認証フレームワークは、それぞれドメイン内、クロスドメイン、フィッシング対策という異なる3つのシナリオを解決します。LDAPとRADIUSは、インフラストラクチャ層でディレクトリおよびネットワークアクセス制御を提供します。

## 概要

「認証」が常に答えなければならない問いは同じです——**いかにして自分が自分であることを証明するか**。しかし、異なるプロトコルは「証明」を異なる位置に配置しており、それによっていくつかの世代に分かれます：

| プロトコル | 年代 | 資格情報の形態 | 信頼の置かれる場所 | 主な戦場 |
|---|---|---|---|---|
| Kerberos | 1988 | 対称チケット | 中央KDC | 企業内網 / AD |
| LDAP bind | 1993 | ユーザー名＋パスワード | ディレクトリサーバー | 内部ディレクトリ / バックエンドストレージ |
| SAML 2.0 | 2005 | 署名付きXMLアサーション | IdP | 企業Web SSO |
| RADIUS | 1991 | 共有キー + EAP | AAAサーバー | ネットワークアクセス (WiFi/VPN) |
| WebAuthn | 2019 | 非対称鍵ペア | ユーザーデバイス | フィッシング耐性のあるパスワードレスログイン |

理解すべき主軸は一つだけです：**パスワードは負債である**。パスワードは再利用され、フィッシングの餌食となり、辞書攻撃を受け、伝送中や保存中に漏洩します。後続の各世代のプロトコルは、パスワードの出現回数を減らす方法を模索してきました——Kerberosはパスワードをローカルでの派生に1回だけ使用し、それ以降はネットワークに送信しません。SAML/OIDCは、パスワードをIdPという1か所にのみ渡すようにします。WebAuthnは、デバイス内のエクスポート不可能な秘密鍵を用いてパスワードを完全に置き換えます。選択の本質は、**既存のインフラストラクチャと脅威モデルにおいて、パスワードをどの程度排除できるか**にあります。

## Kerberos — チケットによるシングルサインオン

Active Directoryドメインログインの基盤です。核心的な思想は、ユーザーがログイン時にのみパスワードから1回鍵を派生し、その後は**期限付きの対称暗号化チケット**によって各サービスにアクセスし、パスワードはネットワークを通過しないというものです。

<svg viewBox="0 0 720 330" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,'Source Han Sans CN','Microsoft YaHei',sans-serif" role="img" aria-label="Kerberos 3段階チケット認証フロー">
  <defs><marker id="kbah1" markerWidth="10" markerHeight="8" refX="8" refY="3" orient="auto"><path d="M0,0 L8,3 L0,6 Z" fill="#475569"/></marker></defs>
  <rect width="720" height="330" fill="#ffffff"/>
  <text x="360" y="28" text-anchor="middle" font-size="17" font-weight="700" fill="#1f2933">Kerberos 3段階: 1回のログインで、その後はすべてチケットに依存</text>
  <text x="360" y="46" text-anchor="middle" font-size="11" fill="#64748b">役割: KDC = AS(認証サーバー) + TGS(チケット付与サーバー); クライアント; サービス</text>

  <rect x="24" y="60" width="200" height="26" rx="6" fill="#4f46e5"/>
  <text x="124" y="78" text-anchor="middle" font-size="12" font-weight="700" fill="#ffffff">① AS-REQ/REP · 1回のログイン</text>
  <rect x="24" y="94" width="200" height="120" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="34" y="114" font-size="10.5" fill="#3730a3">Client → AS: 「私はaliceです」</text>
  <text x="34" y="132" font-size="10.5" fill="#3730a3">AS → Client: TGT(TGS鍵</text>
  <text x="34" y="147" font-size="10.5" fill="#3730a3">で暗号化) + セッション鍵(パスワード派生</text>
  <text x="34" y="162" font-size="10.5" fill="#3730a3">鍵で暗号化)</text>
  <text x="34" y="185" font-size="10.5" font-weight="700" fill="#0f766e">→ パスワード自体はネットワークに送信されない</text>

  <line x1="228" y1="150" x2="256" y2="150" stroke="#475569" stroke-width="1.6" marker-end="url(#kbah1)"/>

  <rect x="260" y="60" width="200" height="26" rx="6" fill="#4f46e5"/>
  <text x="360" y="78" text-anchor="middle" font-size="12" font-weight="700" fill="#ffffff">② TGS-REQ/REP · 各アクセスごと</text>
  <rect x="260" y="94" width="200" height="120" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="270" y="114" font-size="10.5" fill="#3730a3">Client → TGS: TGTを提示、</text>
  <text x="270" y="129" font-size="10.5" fill="#3730a3">「fileserverにアクセスしたい」</text>
  <text x="270" y="150" font-size="10.5" fill="#3730a3">TGS → Client: サービスチケット</text>
  <text x="270" y="165" font-size="10.5" fill="#3730a3">(fileserver鍵で暗号化)</text>
  <text x="270" y="180" font-size="10.5" fill="#3730a3">+ 新しいセッション鍵</text>

  <line x1="464" y1="150" x2="492" y2="150" stroke="#475569" stroke-width="1.6" marker-end="url(#kbah1)"/>

  <rect x="496" y="60" width="200" height="26" rx="6" fill="#4f46e5"/>
  <text x="596" y="78" text-anchor="middle" font-size="12" font-weight="700" fill="#ffffff">③ AP-REQ/REP · サービスアクセス</text>
  <rect x="496" y="94" width="200" height="120" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="506" y="114" font-size="10.5" fill="#3730a3">Client → fileserver: サービスチケット</text>
  <text x="506" y="129" font-size="10.5" fill="#3730a3">+ authenticator(タイムスタンプ、</text>
  <text x="506" y="144" font-size="10.5" fill="#3730a3">リプレイ攻撃防止)</text>
  <text x="506" y="165" font-size="10.5" fill="#3730a3">fileserverがチケットを解読 → 信頼</text>
  <text x="506" y="180" font-size="10.5" fill="#3730a3">KDCの裏書き → (オプション) AP-REP</text>
  <text x="506" y="195" font-size="10.5" fill="#3730a3">双方向認証</text>

  <rect x="24" y="232" width="672" height="60" rx="8" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="40" y="256" font-size="12.5" fill="#3730a3">サーバーはKDCに連絡する必要もなく、ユーザーのパスワードを保存することなくクライアントを検証できる——「自分の鍵で</text>
  <text x="40" y="278" font-size="12.5" fill="#3730a3">暗号化されたチケット」を解読できれば、そのチケットがKDCによって発行されたことが証明される。パスワードはログイン時の1回の派生にのみ関与し、それ以降はネットワークに送信されない。</text>
</svg>

なぜこのように設計されたのか：サーバーは**KDCに連絡する必要もなく、ユーザーのパスワードを保存することなく**クライアントを検証できる——「自分の鍵で暗号化されたチケット」を解読できれば、そのチケットがKDCによって発行されたことが証明される。代償と脅威：

- **時刻同期**：authenticatorはタイムスタンプによってリプレイ攻撃を防ぐため、ドメイン全体の時刻のずれは通常5分未満でなければならない（そのためADはNTPに強く依存する）。
- **KDCは高価値の単一障害点**：`krbtgt` アカウントのハッシュを取得すれば、任意のTGTを偽造できる（**Golden Ticket**）。あるサービスの鍵を取得すれば、そのサービスのチケットを偽造できる（Silver Ticket）。
- **Kerberoasting**：サービスチケットはサービスアカウントのパスワードから派生した鍵で暗号化されるため、攻撃者はチケットを要求してからオフラインで弱いパスワードのサービスアカウントを爆破できる——そのため、サービスアカウントには強力なランダムパスワードまたはgMSAを使用する必要がある。

## LDAP — ディレクトリおよびbind認証

LDAP（RFC 4511）はまず**階層型ディレクトリ**（`cn=alice,ou=users,dc=example,dc=com`）であり、ユーザー、グループ、デバイスおよびその属性を格納する。その「認証」とは、**bind**操作のことである：DNとパスワードを使用してサーバーから「許可/拒否」を取得する。

<svg viewBox="0 0 720 300" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,'Source Han Sans CN','Microsoft YaHei',sans-serif" role="img" aria-label="LDAP search-then-bind 2段階アクセスと2つのbind方式の比較">
  <defs><marker id="ldah1" markerWidth="10" markerHeight="8" refX="8" refY="3" orient="auto"><path d="M0,0 L8,3 L0,6 Z" fill="#475569"/></marker></defs>
  <rect width="720" height="300" fill="#ffffff"/>
  <text x="360" y="28" text-anchor="middle" font-size="17" font-weight="700" fill="#1f2933">LDAP アプリケーションアクセス: search-then-bind 2段階</text>

  <rect x="20" y="46" width="330" height="26" rx="6" fill="#4f46e5"/>
  <text x="185" y="64" text-anchor="middle" font-size="12" font-weight="700" fill="#ffffff">① サービスアカウントによるbind</text>
  <rect x="20" y="78" width="330" height="50" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="34" y="98" font-size="11" fill="#3730a3">アプリケーションがサービスアカウントでbind</text>
  <text x="34" y="116" font-size="11" fill="#3730a3">→ aliceの完全なDNを検索</text>

  <line x1="354" y1="103" x2="366" y2="103" stroke="#475569" stroke-width="1.6" marker-end="url(#ldah1)"/>

  <rect x="370" y="46" width="330" height="26" rx="6" fill="#0d9488"/>
  <text x="535" y="64" text-anchor="middle" font-size="12" font-weight="700" fill="#ffffff">② ユーザーDN + パスワードによるbind</text>
  <rect x="370" y="78" width="330" height="50" rx="6" fill="#f0fdfa" stroke="#99f6e4"/>
  <text x="384" y="98" font-size="11" fill="#115e59">aliceのDN + 彼女が入力したパスワードで</text>
  <text x="384" y="116" font-size="11" fill="#115e59">bindを再度実行 → 成功すればパスワードは正しい</text>

  <text x="360" y="150" text-anchor="middle" font-size="12" font-weight="700" fill="#1f2933">bind方式の比較</text>

  <rect x="20" y="164" width="330" height="70" rx="6" fill="#ffedd5"/>
  <text x="34" y="184" font-size="11.5" font-weight="700" fill="#9a3412">simple bind</text>
  <text x="34" y="202" font-size="10.5" fill="#c2410c">DN + 平文パスワード</text>
  <text x="34" y="218" font-size="10.5" fill="#c2410c">LDAPS/StartTLS上で実行する必要があり、</text>
  <text x="34" y="233" font-size="10.5" fill="#c2410c">そうでなければパスワードが平文で送信される</text>

  <rect x="370" y="164" width="330" height="70" rx="6" fill="#ccfbf1"/>
  <text x="384" y="184" font-size="11.5" font-weight="700" fill="#0f766e">SASL bind</text>
  <text x="384" y="202" font-size="10.5" fill="#115e59">GSSAPI(Kerberos)/ EXTERNAL(mTLS)</text>
  <text x="384" y="218" font-size="10.5" fill="#115e59">パスワードを送信しない、より強力</text>

  <rect x="20" y="246" width="680" height="42" rx="8" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="34" y="271" font-size="12.5" fill="#3730a3">LDAP自体はSSOプロトコルではない——「資格情報検証 + 身元データソース」であり、SAML/OIDC/RADIUSの背後に隠れてストレージとしてよく使用される。</text>
</svg>

位置づけの要点：LDAP自体は**SSOプロトコルではない**、それは「資格情報検証 + 身元データソース」であり、SAML/OIDC/RADIUSの背後に隠れてストレージとしてよく使用される。Active Directory ≈ LDAP（ディレクトリ）+ Kerberos（認証）+ DNS（ルーティング）の3点セットの組み合わせである。

## SAML 2.0 — 企業Web SSO

XML時代のブラウザ向けSSO標準（Okta、Azure AD、企業内網）。SP（サービスプロバイダ）は認証をIdP（アイデンティティプロバイダ）に「外部委託」し、IdPは**デジタル署名付きのアサーション（Assertion）**を返す。

<svg viewBox="0 0 720 380" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,'Source Han Sans CN','Microsoft YaHei',sans-serif" role="img" aria-label="SAML 2.0 SP開始型ログインフローとアサーションの重要フィールド">
  <rect width="720" height="380" fill="#ffffff"/>
  <text x="360" y="28" text-anchor="middle" font-size="17" font-weight="700" fill="#1f2933">SAML 2.0 SP開始型フロー (HTTPリダイレクト + フォームPOSTバインディング)</text>

  <rect x="24" y="46" width="672" height="30" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <circle cx="42" cy="61" r="11" fill="#4f46e5"/><text x="42" y="65" text-anchor="middle" font-size="11" font-weight="700" fill="#ffffff">1</text>
  <text x="62" y="66" font-size="11.5" fill="#3730a3">User → SP: 保護されたリソースにアクセス</text>

  <rect x="24" y="84" width="672" height="30" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <circle cx="42" cy="99" r="11" fill="#4f46e5"/><text x="42" y="103" text-anchor="middle" font-size="11" font-weight="700" fill="#ffffff">2</text>
  <text x="62" y="104" font-size="11.5" fill="#3730a3">SP → Browser: IdPへリダイレクト、AuthnRequest付き (HTTP-Redirectバインディング)</text>

  <rect x="24" y="122" width="672" height="30" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <circle cx="42" cy="137" r="11" fill="#4f46e5"/><text x="42" y="141" text-anchor="middle" font-size="11" font-weight="700" fill="#ffffff">3</text>
  <text x="62" y="142" font-size="11.5" fill="#3730a3">IdPがユーザーを検証（既存セッションを再利用する場合あり）→ Assertionを生成</text>

  <rect x="24" y="160" width="672" height="30" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <circle cx="42" cy="175" r="11" fill="#4f46e5"/><text x="42" y="179" text-anchor="middle" font-size="11" font-weight="700" fill="#ffffff">4</text>
  <text x="62" y="180" font-size="11.5" fill="#3730a3">IdP → Browser → SP: 自動POSTフォームでResponseを返送 (HTTP-POSTバインディング)</text>

  <rect x="24" y="198" width="672" height="30" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <circle cx="42" cy="213" r="11" fill="#4f46e5"/><text x="42" y="217" text-anchor="middle" font-size="11" font-weight="700" fill="#ffffff">5</text>
  <text x="62" y="218" font-size="11.5" fill="#3730a3">SPがXML署名 + 条件を検証 → ローカルセッションを確立</text>

  <rect x="24" y="244" width="672" height="26" rx="6" fill="#0d9488"/>
  <text x="360" y="262" text-anchor="middle" font-size="12" font-weight="700" fill="#ffffff">Assertionの重要フィールド</text>
  <rect x="24" y="274" width="672" height="92" rx="6" fill="#f0fdfa" stroke="#99f6e4"/>
  <text x="38" y="292" font-size="10.5" fill="#115e59">&lt;Issuer&gt; 誰が発行したか (SPの信頼リストに含まれている必要がある)</text>
  <text x="38" y="309" font-size="10.5" fill="#115e59">&lt;Subject&gt;&lt;NameID&gt; ユーザー識別子</text>
  <text x="38" y="326" font-size="10.5" fill="#115e59">&lt;Conditions NotBefore=".." NotOnOrAfter=".."&gt; 有効期限 → リプレイ攻撃防止</text>
  <text x="38" y="343" font-size="10.5" fill="#115e59">&lt;AttributeStatement&gt; email / groups / role など</text>
  <text x="38" y="360" font-size="10.5" fill="#115e59">&lt;ds:Signature&gt; XML-DSig署名 (アサーション全体またはResponse全体をカバー)</text>
</svg>

セキュリティの要点（SAMLの落とし穴のほとんどは署名検証にある）：

- **XML Signature Wrapping (XSW)**：攻撃者が合法な署名付き要素の位置をずらし、偽造されたアサーションを注入する。SPは「署名が適用されているのが、まさに信頼されるべき要素であること」を厳密に検証し、スキーマ解析を固定する必要がある——これがSAML実装で最も一般的なCVEの発生源である。
- **`Audience`（このアサーションは自分宛てであること）、`NotOnOrAfter`（期限切れでないこと）、`Recipient`および`InResponseTo`（リプレイ攻撃/注入防止）、`NameID`の単一消費**を検証する必要がある。
- なぜまだ生き残っているのか：純粋なブラウザリダイレクト、JavaScript不要、レガシーな企業IdPとの互換性が最高である。新規プロジェクトではOIDCが首选である。

## WebAuthn / Passkeys — フィッシング耐性のあるパスワードレス

FIDO2/WebAuthn（W3C）は**非対称鍵**のペアを用いてパスワードを置き換える：秘密鍵は生成後にデバイスのセキュリティユニットにロックされ、エクスポート不可であり、サーバーは公開鍵のみを保存する。

<svg viewBox="0 0 720 300" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,'Source Han Sans CN','Microsoft YaHei',sans-serif" role="img" aria-label="WebAuthn 登録と認証の2つのフロー比較">
  <defs><marker id="wbah1" markerWidth="10" markerHeight="8" refX="8" refY="3" orient="auto"><path d="M0,0 L8,3 L0,6 Z" fill="#475569"/></marker></defs>
  <rect width="720" height="300" fill="#ffffff"/>
  <text x="360" y="28" text-anchor="middle" font-size="17" font-weight="700" fill="#1f2933">WebAuthn: 非対称鍵ペアがパスワードを置き換え、秘密鍵はデバイスから出ない</text>

  <text x="24" y="58" font-size="12" font-weight="700" fill="#3730a3">登録 · navigator.credentials.create</text>
  <rect x="24" y="66" width="200" height="66" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="34" y="86" font-size="11" font-weight="700" fill="#3730a3">Server</text>
  <text x="34" y="103" font-size="10.5" fill="#3730a3">→ challenge (ランダム)</text>
  <line x1="228" y1="99" x2="252" y2="99" stroke="#475569" stroke-width="1.6" marker-end="url(#wbah1)"/>
  <rect x="256" y="66" width="240" height="66" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="266" y="86" font-size="11" font-weight="700" fill="#3730a3">Authenticator</text>
  <text x="266" y="103" font-size="10.5" fill="#3730a3">(RP ID=example.com)のために鍵ペアを生成、</text>
  <text x="266" y="119" font-size="10.5" fill="#3730a3">秘密鍵はローカルに保持 → credential_idを返す</text>
  <text x="266" y="135" font-size="10.5" fill="#3730a3">+ public_key + (オプション) attestation</text>
  <line x1="500" y1="99" x2="524" y2="99" stroke="#475569" stroke-width="1.6" marker-end="url(#wbah1)"/>
  <rect x="528" y="66" width="168" height="66" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="538" y="86" font-size="11" font-weight="700" fill="#3730a3">Server</text>
  <text x="538" y="103" font-size="10.5" fill="#3730a3">credential_idを保存</text>
  <text x="538" y="119" font-size="10.5" fill="#3730a3">↔ public_key</text>

  <text x="24" y="164" font-size="12" font-weight="700" fill="#0f766e">認証 · navigator.credentials.get</text>
  <rect x="24" y="172" width="200" height="66" rx="6" fill="#f0fdfa" stroke="#99f6e4"/>
  <text x="34" y="192" font-size="11" font-weight="700" fill="#115e59">Server</text>
  <text x="34" y="209" font-size="10.5" fill="#115e59">→ challenge + 許可された</text>
  <text x="34" y="224" font-size="10.5" fill="#115e59">credential_id</text>
  <line x1="228" y1="205" x2="252" y2="205" stroke="#475569" stroke-width="1.6" marker-end="url(#wbah1)"/>
  <rect x="256" y="172" width="240" height="66" rx="6" fill="#f0fdfa" stroke="#99f6e4"/>
  <text x="266" y="192" font-size="11" font-weight="700" fill="#115e59">Authenticator</text>
  <text x="266" y="209" font-size="10.5" fill="#115e59">ユーザー検証 (指紋/PIN) → 秘密鍵で</text>
  <text x="266" y="225" font-size="10.5" fill="#115e59">(challenge + origin + RP ID)に署名</text>
  <line x1="500" y1="205" x2="524" y2="205" stroke="#475569" stroke-width="1.6" marker-end="url(#wbah1)"/>
  <rect x="528" y="172" width="168" height="66" rx="6" fill="#f0fdfa" stroke="#99f6e4"/>
  <text x="538" y="192" font-size="11" font-weight="700" fill="#115e59">Server</text>
  <text x="538" y="209" font-size="10.5" fill="#115e59">公開鍵で署名を検証 + 確認</text>
  <text x="538" y="224" font-size="10.5" fill="#115e59">challenge + origin</text>

  <rect x="24" y="252" width="672" height="34" rx="8" fill="#f0fdfa" stroke="#99f6e4"/>
  <text x="38" y="273" font-size="12.5" fill="#115e59">署名はorigin/RP IDにバインドされる——Authenticatorは正しいドメインのみを認識するため、これはパスワードやOTPでは提供できないフィッシング耐性の保証である。</text>
</svg>

それ**が唯一真に重要な性質はフィッシング耐性である**：署名には`origin`/RP IDがバインドされており、ブラウザは`example.com`の資格情報を`example.com`に対してのみ使用する。ユーザーが`examp1e.com`に騙された場合でも、Authenticatorは一致する資格情報を見つけられず、有効な結果に署名できない——これはパスワード、OTP、プッシュ通知では提供できない保証である。その他の概念：

- **attestation**：「これは某モデルの正規品Authenticatorである」ことを証明する。消費シナリオでは通常検証しない（プライバシー + 互換性の理由）。
- **discoverable credential（resident key）**：ユーザーハンドルをAuthenticatorに保存し、「ユーザー名を入力せずにログインする」を実現する——これが**Passkey**の基盤である。
- **Passkey = 同期可能なdiscoverable資格情報**：iCloud Keychain / Google Password Managerを介してデバイス間で同期され、使いやすさが大幅に向上するが、信頼はクラウドアカウントに移行する。ハードウェアキー（device-bound）は同期されず、より強力だが紛失しやすい。

## RADIUS — ネットワークアクセスのAAA

RADIUS（RFC 2865）が管理するのは「ウェブサイトのログイン」ではなく、「**このネットワークに接続できるか**」——WiFi（WPA2/3-Enterprise）、VPN、スイッチポート（802.1X）である。AAAを行う：Authentication（認証）、Authorization（認可）、Accounting（監査）。

<svg viewBox="0 0 720 350" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,'Source Han Sans CN','Microsoft YaHei',sans-serif" role="img" aria-label="RADIUS ネットワークアクセスAAAアーキテクチャと802.1X 3者">
  <defs>
    <marker id="rdah1" markerWidth="10" markerHeight="8" refX="8" refY="3" orient="auto"><path d="M0,0 L8,3 L0,6 Z" fill="#475569"/></marker>
    <marker id="rdah1s" markerWidth="10" markerHeight="8" refX="2" refY="3" orient="auto"><path d="M8,0 L0,3 L8,6 Z" fill="#475569"/></marker>
  </defs>
  <rect width="720" height="350" fill="#ffffff"/>
  <text x="360" y="28" text-anchor="middle" font-size="17" font-weight="700" fill="#1f2933">RADIUS: ネットワークアクセス層のAAAフロントエンド</text>

  <rect x="30" y="52" width="230" height="50" rx="8" fill="#e2e8f0"/>
  <text x="145" y="72" text-anchor="middle" font-size="12" font-weight="700" fill="#334155">NAS</text>
  <text x="145" y="90" text-anchor="middle" font-size="10.5" fill="#475569">AP / スイッチ / VPNゲートウェイ</text>

  <rect x="460" y="52" width="230" height="50" rx="8" fill="#4f46e5"/>
  <text x="575" y="72" text-anchor="middle" font-size="12" font-weight="700" fill="#ffffff">RADIUSサーバー</text>
  <text x="575" y="90" text-anchor="middle" font-size="10.5" fill="#e0e7ff">Authentication/Authorization/Accounting</text>

  <text x="360" y="63" text-anchor="middle" font-size="10.5" fill="#64748b">UDP 1812/1813</text>
  <line x1="264" y1="77" x2="456" y2="77" stroke="#475569" stroke-width="1.6" marker-end="url(#rdah1)" marker-start="url(#rdah1s)"/>
  <text x="360" y="96" text-anchor="middle" font-size="10.5" fill="#64748b">共有シークレット (NAS↔サーバー)</text>

  <rect x="30" y="118" width="230" height="98" rx="8" fill="#f8fafc" stroke="#e2e8f0"/>
  <text x="42" y="138" font-size="10.5" font-weight="700" fill="#334155">EAPトンネルが実際の認証方法を担う</text>
  <text x="42" y="160" font-size="10.5" font-weight="700" fill="#166534">EAP-TLS = 証明書による双方向認証 (最強)</text>
  <text x="42" y="182" font-size="10.5" font-weight="700" fill="#9a3412">PEAP/TTLS = TLSトンネル内でさらに</text>
  <text x="42" y="200" font-size="10.5" font-weight="700" fill="#9a3412">MSCHAPv2などを実行</text>

  <line x1="575" y1="102" x2="575" y2="166" stroke="#475569" stroke-width="1.6" marker-end="url(#rdah1)"/>
  <text x="590" y="138" font-size="10.5" fill="#64748b">よく参照される</text>
  <rect x="460" y="170" width="230" height="46" rx="8" fill="#0d9488"/>
  <text x="575" y="198" text-anchor="middle" font-size="12" font-weight="700" fill="#ffffff">LDAP / AD / Kerberos</text>

  <text x="360" y="242" text-anchor="middle" font-size="12" font-weight="700" fill="#1f2933">802.1X 3者</text>
  <rect x="30" y="252" width="190" height="42" rx="8" fill="#e2e8f0"/>
  <text x="125" y="277" text-anchor="middle" font-size="11" fill="#334155">端末 (supplicant)</text>
  <line x1="224" y1="273" x2="256" y2="273" stroke="#475569" stroke-width="1.6" marker-end="url(#rdah1)"/>
  <rect x="260" y="252" width="200" height="42" rx="8" fill="#e2e8f0"/>
  <text x="360" y="277" text-anchor="middle" font-size="11" fill="#334155">スイッチ (authenticator)</text>
  <line x1="464" y1="273" x2="496" y2="273" stroke="#475569" stroke-width="1.6" marker-end="url(#rdah1)"/>
  <rect x="500" y="252" width="190" height="42" rx="8" fill="#4f46e5"/>
  <text x="595" y="277" text-anchor="middle" font-size="11" fill="#ffffff">RADIUS (server)</text>

  <rect x="30" y="306" width="660" height="34" rx="8" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="44" y="327" font-size="12" fill="#3730a3">RADIUSは単なるAAAフロントエンドであり、アクセス層とアイデンティティ層を分離する——実際のアカウントデータはLDAP/AD/Kerberosに残る。</text>
</svg>

要点：RADIUS自体は単なるAAAフロントエンドであり、アイデンティティデータは通常LDAP/ADにある。それは「アクセス層」と「アイデンティティ層」を分離する。コマンド単位での細粒度な認可と監査（ネットワーク機器の運用保守）が必要な場合は、**TACACS+**（コマンド単位認可、全体暗号化）に置き換える。

## 選択基準

| 要件 | 首选 | 主要な理由 |
|---|---|---|
| ADドメイン内のサービス相互認証 | Kerberos | チケットSSO、パスワードはネットワークに送信されない |
| 内部ディレクトリ / バックエンドアイデンティティソースとして | LDAP(S) | SSOではなくデータソースであり、他のプロトコルの背後に隠れる |
| 企業Web SSO（レガシーIdP） | SAML 2.0 | 純粋なブラウザ、互換性が最高 |
| モダンアプリ / モバイル / フェデレーションログイン | [OIDC](/networking/12-security-protocols/02-oauth2-and-openid-connect.md) | JSON/JWT、SAMLより軽量 |
| フィッシング耐性のあるユーザーログイン | WebAuthn/Passkey | originバインド、パスワードを排除 |
| WiFi / VPN / ポートアクセス制御 | RADIUS + EAP | ネットワークアクセス層のAAA |
| ネットワーク機器のコマンド単位認可監査 | TACACS+ | 細粒度 + 全体暗号化 |

実践では、これらは排他的選択ではなく階層的に組み合わせて使用される：典型的な組み合わせは、**WebAuthn/OIDCをユーザーログインのフロントエンドとして、LDAP/ADをアイデンティティソースとして、Kerberos/RADIUSを内網とアクセス制御として使用する**ものである。

## 参考

- **Kerberos**: RFC 4120 · MIT Kerberosドキュメント · 「Kerberos: The Definitive Guide」
- **WebAuthn**: w3c.github.io/webauthn · webauthn.guide · passkeys.dev
- **SAML**: OASIS SAML 2.0 Core · 「On Breaking SAML」（XSW攻撃論文）
- **統一プラットフォーム**: Keycloak（OIDC/SAML/LDAP/Kerberosのブローキングを同時に解説、実際に構築して読む価値あり）

*Keywords: Kerberos, KDC, TGT, Golden Ticket, Kerberoasting, LDAP, bind, SAML, Assertion, XML Signature Wrapping, WebAuthn, Passkey, FIDO2, phishing-resistant, RADIUS, EAP, 802.1X, TACACS+*
