Kerberos(ケルベロス)とは:MIT発の認証プロトコル—仕組み・鍵配布・相互認証
Kerberos(ケルベロス)とはMIT発の認証プロトコル。相互認証や鍵配布、リプレイ防止などの仕組みと実装をわかりやすく解説。
Kerberos(ケルベロス、発音:/ˈkɜrbərəs// "kur-ber-uhs")は、コンピュータネットワークの認証プロトコルであり、ネットワーク上で安全にユーザーやサービスの身元を検証するために設計された仕組みです。たとえば、Gmail のユーザであるモハメドハサン(例示)とサービス側(サーバーの)がお互いのアイデンティティを確認できるように、安全な通信を実現します。Kerberos は、当初マサチューセッツ工科大学(MIT)で開発され、同大学から提供されているフリーソフトウェアのスイートとしても広く利用されています。
基本概念
Kerberos は、安全でないネットワーク上を移動するパケットが読み取られ、変更され、挿入されることを前提に、暗号や共有秘密を用いて、信頼された第三者による認証を提供します。主に対称鍵を用いる設計で、中央に配置された鍵配布センター(KDC: Key Distribution Center)を必要とします。必要に応じて、Kerberos の拡張で公開鍵暗号の技術を一部の段階で用いることも可能です。
主要コンポーネント
- クライアント:認証を受けるユーザーまたはアプリケーション(例: モハメドハサン)。
- サーバ(サービス):利用したいリソースやサービスを提供する側。
- KDC(鍵配布センター):認証を行う中心的なサーバで、通常は Authentication Server (AS) と Ticket Granting Server (TGS) の役割を持ちます。
- チケット(Ticket):クライアントがサービスに対して提示する認証情報。暗号化され、有効期限やセッション鍵を含みます。
- セッション鍵:クライアントとサービス間での通信を保護するために一時的に生成される鍵。
認証の基本的な流れ(簡略)
- クライアントは AS に対して認証要求を送る(通常はユーザー名など)。
- AS はクライアントを検証し、クライアントに Ticket Granting Ticket(TGT) とセッション鍵を返す。TGT は TGS にのみ復号可能な形式で暗号化されている。
- クライアントは TGT を用いて TGS に対してサービスチケットの発行を要求する。
- TGS はサービス用のチケット(およびサービスとのセッション鍵)を発行する。
- クライアントはサービスにチケットを提示し、サービスはチケットを検証してクライアントを認可する。
セキュリティ上の特徴
- 相互認証:クライアントとサービスの両方が互いに正当であることを確認できます(中間者攻撃の抑止)。
- リプレイ防止:タイムスタンプやノンス(nonce)を用いて、過去のメッセージの再利用(リプレイ攻撃)を防ぎます。
- 一時鍵(セッション鍵):長期鍵をそのまま使わず、短命のセッション鍵を用いることで露見時のリスクを限定します。
実装・応用
代表的な実装には MIT Kerberos や Heimdal、商用では Microsoft の Active Directory(Kerberos を採用)があり、クライアント-サーバー型の認証基盤として広く使われています。ファイル共有(NFSv4)、ディレクトリサービス(LDAP)、SSH の GSSAPI 経由認証、シングルサインオン(SSO)など、多くのサービスと統合可能です。
制約と運用上の注意点
- 時刻同期:Kerberos はタイムスタンプを用するため、クライアント・サーバ間の時刻同期が必須(通常は数分以内のズレ許容)です。
- KDC の単一障害点:KDC が利用不可になると認証ができなくなるため冗長化や保護が必要です。
- 長期鍵の保護:ユーザーのパスワードやサービスの長期鍵が破られると、チケット発行の偽造やパスワード推測攻撃につながります。
- 暗号方式の選択:古いバージョンや設定では時代遅れの暗号が使われている場合があり、適切な暗号スイートへの更新が必要です。
拡張と歴史
Kerberos はバージョン4からバージョン5へと改良され(現在の標準は RFC 4120 に基づく Kerberos v5)、認証の特定の段階で公開鍵暗号の使用を可能にする PKINIT のような拡張もあります。また、クロスレルム認証(異なる Kerberos レルム間での認証)や委任(delegation)など、企業環境で必要な機能も備えています。
まとめると、Kerberos は中央の KDC とチケットベースの仕組みによって、安全な相互認証とシングルサインオンを実現する広く普及した認証プロトコルです。運用には時刻同期や鍵の保護といった注意点が伴いますが、適切に構成された環境では高い利便性とセキュリティを提供します。
歴史と発展
MITは、Project Athenaによって提供されるネットワークサービスを保護するためにKerberosを開発しました。このプロトコルは、ギリシャ神話のキャラクターであるケルベロス(またはケルベロス)にちなんで名付けられたもので、ギリシャ神話ではハーデスの怪物的な3つの頭を持つ番犬として知られています。プロトコルにはいくつかのバージョンが存在します。
Kerberos バージョン 4 (DES 暗号化アルゴリズムに 56 ビットの鍵を使用した) の主要設計者である Steve Miller と Clifford Neuman は、1989 年にそのバージョンを公開したが、彼らは主にプロジェクト Athena のためにそれを目標としていた。
ジョン・コールとクリフォード・ニューマンによって設計されたバージョン5は、バージョン4の制限とセキュリティの問題を克服することを意図して、1993年にRFC1510として登場しました(2005年にRFC4120によって廃止されました)。MITは、BSDライセンスと同様のソフトウェアライセンスの下で、Kerberos Version 5の実装を自由に利用できるようにしています。
いくつかの企業が、以下のような商用ソフトウェアでKerberos Version 5を使用していました。
· Microsoft の Windows 2000 以降では、デフォルトの認証方法として Kerberos を使用しています。Kerberos プロトコル群にマイクロソフトが追加したもの
は、RFC 3244「Microsoft Windows 2000 Kerberos Change Password and Set Password Protocols」で文書化されています。
RFC 4757 は、Microsoft が RC4 暗号を使用していること
を文書化しています。マイクロソフトはKerberosプロトコルを使用していますが、MITソフトウェアは使用していません[1]。
· AppleのMac OS Xもクライアント版とサーバ版の両方でKerberosを使用しています。
· Red Hat Linux バージョン 4 以降では、クライアントとサーバーの両方で Kerberos を使用しています。
2005年、IETF Kerberosワーキンググループは、Kerberosバージョン5 [2]のための新しい更新された仕様を導入しました。
· "Encryption and Checksum Specifications" (RFC 3961)。
· "Advanced Encryption Standard (AES) Encryption for Kerberos 5" (RFC 3962)。
· Kerberosバージョン5仕様「The Kerberos Network Authentication Service (V5)」(RFC 4120)の新版。このバージョンでは、RFC 1510 を削除し、プロトコルの側面と使用目的をより詳細に明確に説明しています。
· GSS-API仕様の新版"The Kerberos Version 5 Generic Security Service Application Program Interface (GSS-API) Mechanism.バージョン2"(RFC 4121)を参照してください。
2007年、MITは開発継続のためにKerberosコンソーシアムを結成しました。
プロトコル
Kerberos は、Needham-Schroeder プロトコルをベースにしている。これは、「鍵配布センター(KDC)」として知られる信頼された第三者認証を利用しており、2つの論理的に分離した部分から構成されています。Kerberosは、ユーザの身元を証明するための「チケット」(Kerberosチケットと呼ばれる)に基づいて動作します。
Kerberos データベース。ネットワーク上の各エンティティ(クライアントであれサーバであれ)は、自分自身とKDCだけが知っている秘密鍵を共有する。この鍵の知識は、各エンティティの身元を証明するのに役立つ。2 つのエンティティ間の通信では、KDC はセッション鍵を生成し、これを使用して通信の安全性を確保する。
用語「Kerberosサーバ」は、一般的にKDCを指す。信頼性のために、バックアップのKDCを持つことが可能です。これらは「Kerberosスレーブサーバ」と呼ばれています。すべてのスレーブは、マスターのKerberosサーバからデータベースを同期させます。
用語「Kerberized application server」は、一般に、認証のためにKerberosチケットを使用してクライアントが通信するKerberizedプログラムを指します。例えば、Kerberos telnet サーバは、Kerberized アプリケーションサーバの一例です。用語 "Kerberizedアプリケーション"は、Kerberizedアプリケーションサーバのクライアント側を参照するために使用されている間 , 例えば、Kerberos telnetクライアントは、Kerberizedアプリケーションの例です .
プロトコルのセキュリティは大きく依存しています。
- ゆるやかに同期した時間を維持している参加者。
- 正真正銘の短命宣言:ケルベロスのチケット。
プロトコルの簡単な説明
以下のような略語を使用します。
· AS = 認証サーバ
· TGS = チケット付与サーバー
· SSまたはサーバ=サービスサーバ(プリントサーバ、ファイルサーバなど、そのサービスを要求するサーバ利用者。
· TGT = Ticket Granting Ticket (TGS用のKerberosチケット。ASが作成し、TGSとの通話に使用)。
簡単に言えば、クライアントは長期的な共有秘密を使ってASに認証し、ASからチケットを受け取ります。その後、クライアントはこのチケットを使用して、同じ共有秘密を使用してSSに対する追加のチケットを取得することができます。これらのチケットは、SSへの認証を証明するために使用することができます。
より詳細なプロトコル
ユーザークライアントベースのログオンステップ。
- ユーザーは、クライアントマシン上でユーザー名とパスワードを入力します。
- クライアントは入力されたパスワードに対して一方向関数(主にHash関数)を実行し、これがクライアント/ユーザの秘密鍵となります。
クライアント認証のステップ。
- クライアントは、ユーザーに代わってサービスを要求するクリアテキストメッセージをASに送信します。
メッセージの例。"ユーザーXYZはサービスを要求したいと考えています。
注意: 秘密鍵もパスワードもASには送信されません。 - ASはクライアントがデータベースにあるかどうかを確認します。存在する場合、ASは以下の2つのメッセージをクライアントに送り返します。
- メッセージA:クライアント/ユーザーの秘密鍵を使用して暗号化されたクライアント/TGSセッション鍵。
- メッセージB:TGT(クライアントID、クライアントネットワークアドレス、チケット有効期間、クライアント/TGSセッションキーを含む)をTGSの秘密鍵で暗号化したもの。
- クライアントはメッセージAとBを受信すると、メッセージAを復号化してクライアント/TGSセッションキーを取得します。このセッションキーはTGSとの通信に使用されます。この時点で、クライアントは TGS に対して自分自身を認証するのに十分な情報を持っています。
注: メッセージBはTGSの秘密鍵を使って暗号化されているため、クライアントはメッセージBを復号化することができません。
クライアントサービスの承認ステップ。
- サービスを依頼する場合、クライアントは以下の2つのメッセージをTGSに送信します。
- メッセージC:メッセージBのTGTと要求されたサービスのIDで構成されます。
- メッセージ D.クライアントIDとタイムスタンプで構成される認証機能で、クライアント/TGSセッションキーを使用して暗号化されています。
- メッセージ C と D を受信すると、TGS はメッセージ C からメッセージ B を取り出します。これにより、クライアント/TGS セッションキーが与えられる。このキーを使用して、TGSはメッセージD(Authenticator)を復号化し、以下の2つのメッセージをクライアントに送信する。
- メッセージE:クライアント間チケット(クライアントID、クライアントネットワークアドレス、有効期間、クライアント/サーバセッションキーを含む)をSS秘密鍵を使用して暗号化したもの。
- メッセージF:クライアント/サーバセッションキーをクライアント/TGSセッションキーで暗号化しました。
クライアントサービスリクエストのステップ。
- TGSからメッセージEとFを受信すると、クライアントはSSに自分自身を認証するのに十分な情報を持っています。クライアントはSSに接続し、以下の2つのメッセージを送信します。
- メッセージE: 前のステップ(クライアント間のチケット、SS秘密鍵を使って暗号化されたもの)からのメッセージです。
- メッセージ G: クライアント ID、タイムスタンプを含む新しい Authenticator で、クライアント/サーバー セッションキーを使用して暗号化されています。
- SS は自身の秘密鍵を使用してチケットを復号化し、クライアント/サーバー セッション キーを取得します。セッションキーを使用して、SSはAuthenticatorを復号化し、クライアントに以下のメッセージを送信して、クライアントの真のアイデンティティとクライアントにサービスを提供する意思を確認します。
- メッセージ H: クライアントの Authenticator で検出されたタイムスタンプに 1 を加えたもので、クライアント/サーバー セッション キーを使用して暗号化されています。
- クライアントは、クライアント/サーバセッションキーを使用して確認書を復号化し、タイムスタンプが正しく更新されているかどうかを確認します。もし更新されていれば、クライアントはサーバを信頼し、サーバにサービスリクエストを発行することができます。
- サーバは要求されたサービスをクライアントに提供します。
欠点
- 単一障害点。中央サーバの継続的な可用性が必要です。Kerberosサーバがダウンすると、誰もログインできなくなります。これは、複数のKerberosサーバと緊急認証メカニズムを使用することで解決できます。
- Kerberosは、関係するすべてのホストのクロックを同期させる必要があります。チケットには利用可能な時間帯があり、ホストのクロックがKerberosサーバのクロックと同期していない場合、認証は失敗します。デフォルトの設定では、クロックの時間が10分以上離れていないことが要求されます。実際には、すべてのホストの同期を保つために、通常は Network Time Protocol (NTP) が使用されます。
- 管理プロトコルは標準化されておらず、サーバの実装間で異なります。パスワードの変更についてはRFC 3244に記載されています。
- すべてのユーザの秘密鍵は中央サーバに保存されているため、そのサーバが侵害されると、すべてのユーザの秘密鍵が侵害されることになります。
- 危殆化したクライアントは、ユーザーのパスワードを危殆化させます。
関連ページ
- アイデンティティ管理
- セキュアリモートパスワードプロトコル(SRP)
- 汎用セキュリティサービスアプリケーションプログラムインタフェース(GSS-API)
質問と回答
Q:Kerberosとは何ですか?
A: Kerberosは、安全でないネットワーク上で通信する人々が、互いに身元を安全に証明することを可能にするコンピュータネットワーク認証プロトコルです。
Q:Kerberosを設計したのは誰ですか?
A:Kerberosの設計者は、主にクライアント・サーバーモデルを目指しており、彼らはマサチューセッツ工科大学(MIT)の出身でした。
Q:Kerberosは、どのように相互認証を行うのですか?
A:暗号化された共有秘密は、ユーザーとサーバーの両方が互いの身元を確認することを可能にします。
Q:Kerberosは、どのように諜報活動やリプレイ攻撃から守っているのですか?
A:ユーザー間で送信されるメッセージは暗号化されており、第三者が読んだり変更したりすることはできません。
Q:Kerberosはどのような暗号化を使用していますか?
A:共通鍵暗号を使用しているため、鍵の配布センターが必要です。
Q: Kerberosは公開鍵暗号化方式に対応していますか?
A: はい、プロトコルの拡張により、認証の特定の段階での使用が可能になる場合があります。
百科事典を検索する