Kerberos認証の仕組みを徹底解説!安全な認証プロトコルの裏側
セキュリティキャンプの課題で、Kerberos認証について詳しく調べる機会があったのでついでにブログを書きました!全体を把握したい方、細かい用語なども知りたい方、ぜひご一読ください。
Kerberos認証とは
Kerberos認証は、ネットワーク上でユーザーやサービスを安全に認証するためのプロトコルです。主にActive Directoryで用いられる認証です。
シングルサインオンを実現し、パスワードがネットワーク上を流れることを防ぐため、多くの企業システムで採用されています。
ADについてはこちらのページをご参考ください。
主要な用語
クライアント: サービスを利用したいユーザ
サーバ: クライアントにサービスを提供するサーバ(例:ファイルサーバ、Webサーバなど)。
KDC (Key Distribution Center): Kerberos認証の中心となる、信頼された認証局です。KDCは、自身のサービスのために使用する特別なアカウント(SPN(Service Principal Name))を保持しており、それらは「krbtgt」と呼ばれます。
krbtgtは、各Kerberosドメイン(レルムと呼ばれる)に一つだけ存在します。これは、KDCの内部コンポーネントであり、レルムごとの秘密鍵の管理者だと認識してもらって問題ありません。
KDCはさらに以下の2つの論理コンポーネントに分けることができます。
・AS (Authentication Server): 認証サーバであり、クライアントの初期認証を担当。
・TGS (Ticket-Granting Server): チケット認可サーバで、クライアントがサービスを利用するためのチケット(サービスチケット)の発行の管理を行います。
これより、Kerberos認証の主要なステップを順を追って解説していきます。
✅ ステップ1:ASへの初期認証要求 (AS-REQ)
まず、クライアントはKDC(Key Distribution Center)内のAS (Authentication Server) に対して自身の認証を要求します。
この際、クライアントはパスワードそのものを送信するのではなく、パスワードから派生した秘密鍵を使ってタイムスタンプなどの情報を暗号化し、それを認証要求としてASに送信します。この秘密鍵は、クライアントとASの両方が共有している共通の秘密鍵です。暗号化には、DES, RC4, AES-128, AES-256などの暗号化アルゴリズムが用いられます。
🔑 ステップ2:ASによるTGT (Ticket-Granting Ticket)の発行と返却 (AS-REP)
ASは、ステップ1で送られてきた暗号化されたクライアントの情報を、自身が知っているクライアントの秘密鍵を使って検証します。この認証が成功した場合、ASは以下の2つの応答をクライアントに返します。
TGT (Ticket-Granting Ticket): クライアントがTGSからサービスチケットを受け取るための「許可証」のようなものです。このTGTはKDCのkrbtgtアカウントの秘密鍵によって暗号化されているため、クライアントは内容を見ることはできません。
TGSセッションキー: クライアントがTGSと安全に通信を行うための共通鍵です。この鍵はクライアントの秘密鍵によって暗号化されています。クライアントは自身の秘密鍵を使ってこれを復号し、TGSとの通信に利用します。
🎟 ステップ3:TGS (Ticket-Granting Server)へのサービスチケット要求 (TGS-REQ)
クライアントが何らかのサービスを利用したい場合、再びKDCにアクセスし、TGS (Ticket-Granting Server) にST (サービスチケット) の要求を行います。
この際、ステップ2で受け取ったTGTと、利用したいサービスのSPN (Service Principal Name) を添えて送信します。
🤝 ステップ4:TGSによるSTの発行と返却 (TGS-REP)
TGSは、受け取ったTGTを自身の秘密鍵 (krbtgtアカウントの秘密鍵) で復号し、その正当性を検証します。TGTが正当であると同時に、クライアントが要求したサービスにアクセスする権利があるかを確認します。これらの条件を満たす場合、TGSは以下の2つの応答をクライアントに返します。
ST (Service Ticket), サービスチケット: クライアントがサービスにアクセスするための「許可証」のようなものです。STはサービスサーバの秘密鍵で暗号化されており、基本的にはサービスサーバのみが内容を復号化できます。
サービスセッションキー: クライアントとサービスが安全に通信を行うための共通鍵です。この鍵はTGSセッションキーによって暗号化されます。ステップ2でクライアントはTGSセッションキーを受け取っているので、それを使い復号化を行い、サービスとの安全な通信に利用します。
✅ ステップ5:サービスの利用 (AP-REQ)
クライアントは、TGSから取得したSTとサービスセッションキーを使い、サービスサーバへアクセスを行います。
サービスサーバは受け取ったSTを自身の秘密鍵で復号し、クライアントの正当性を確認します。このSTに正当性が確認できれば、以降、クライアントはIDやパスワードを再認証することなくサービスにアクセスが可能となります。
💬 まとめ
Kerberos認証は、AS、TGS、そしてクライアントとサービスの間の巧妙な鍵のやり取りによって、安全かつ効率的な認証を実現しています。これにより、パスワードを直接ネットワークに流すことなく、シングルサインオン環境を構築できるのが大きな利点です。
この記事が、Kerberos認証の理解を深める一助となれば幸いです。もし、ご不明な点やさらに詳しく知りたい部分があれば、ぜひコメントでお知らせください!