ケルベロス認証という名前は何度も聞いたことがある。
Windowsサーバーの認証で使用されていると聞いている。
Windowsサーバーの認証というのは、
Windowsサーバーにログインする際の認証ではなく、
Windowsサーバーが管理しているユーザーの認証のことである。
ケルベロス認証はよく聞く言葉ではあるが、
認証といえばケルベロスというほどメジャーでもない。
認証といえば、無線のpsk,
WPAパーソナル、WPAエンタープライズ
RADIUSサーバー
oauth
などがある。
私が把握している認証方式にRADIUS認証がある。
radiusではサプリカントとクライアントとサーバがいて、
サプリカントがクライアントにアクセスすると、
クライアントがサーバと通信して認証要求を出して許可を得る。
ケルベロスとradiusは何が違うのだろうか?
そしてなぜwindowsではケルベロス認証を使用しているのか?
まずケルベロスという名前にヒントがあるだろうと考えられる。
というか、認証方式の特徴をあらわすのにちょうどいいからケルベロスと呼んだのだろう。
ケルベロスというのは、頭が3つある番犬である。
おそらく、認証する際に3つのことなる役割を持つ機能があって、
その3つの役割とユーザが交渉というか検査というか、なんらかのやり取りをするだろうと予想できる。
Key Distribution Center (KDC) データベース
Authentication Server (AS) 認証サーバー
Ticket Granting Server (TGS) チケット発行サーバー
Ticket Granting Ticket (TGT) チケット
3つのアタマとは、KDC, AS, TGSをさすのだろう。
チケットというのが、ほかの認証では出てこない考えである。
チケットは何のために発行されどのように認証に使用されるのか?
---
1. ASに対してユーザー認証情報を送信
2. KDCによってユーザー情報とサーバー利用資格をチェック
3. 問題なければASからTGTチケットを払いだす
4. TGTチケットをTGSに送信し、利用したいサーバー用のチケットを要求
5. TGSから利用したいサーバー用のチケットを発行
6. 利用したいサーバーに対して、TGSから発行されたチケットを送信
7. チケットに問題がなければサーバーが利用可能となる
---
https://cybersecurity-jp.com/column/38350 より
1.は問題ない。
どんな認証方式でもこれは行われるだろう。
2.も必須だ。
3.がケルベロス特有である。チケットを払い出す。なんだこれは?
払い出すのはどこに対して?ユーザー?TGS?
4.の、送信する主体は誰だろう?
ユーザー?チケットをTGSに送信する。
5.TGSがチケットを発行したらそのチケットは誰に与えられる?
6.これも誰がどこへがわからない。
infraexpertを参照
1.ユーザがAG/TGSに対して認証要求を送信
2.AG/TGSが要求を許可すると、
3.AG/TGSがTGTをユーザへ送信
4.ユーザがチケットを保管する。
5.TGTを使用してアクセスしたいサーバ用のチケットを要求
6.AS/TGSがチケットの内容を確認
7.AS/TGSがユーザがアクセスしたいサーバ用のチケットを送信
8.ユーザがアクセスしたいサーバ用のチケットを入手
9.ユーザがアクセスしたいサーバにチケットを提出
10.ユーザがアクセスしたいサーバはチケットを確認してアクセスを許可する。
上記を参考にさっきのシーケンスを書き直す
---
1. ユーザが認証サーバに対して認証情報を送信する。
2. 認証サーバのASがKDCによってユーザー情報とサーバー利用資格をチェックする。
3. 問題なければ認証サーバの[TGS]がTGTチケットをユーザに払いだす。
4. ユーザはTGTチケットを認証サーバに送信し、利用したいサーバー用のチケットを要求する。
5. 認証サーバのTGSが、ユーザが利用したいサーバー用のチケットを発行してユーザに送信する。
6. ユーザが利用したいサーバーに対して、TGSから発行されたチケットを送信する。
7. チケットに問題がなければサーバーが利用可能となる
---
ユーザが認証を要求し許可をもらうのは頭が3つある番犬である。
ユーザにとって認証してもらう相手は一人というか一頭であるが、その相手に頭が3つあって、
役割がわかれているのである。
そして役割をわけているのはチケットを発行するためなのがわかる。
チケットを発行する理由は、いったんチケットを発行したらそのチケットが有効である間は
再度認証を受ける必要がないということである。
これが他の認証と違うところである。
また、これをする必要があるのは、複数のアクセス対象に対して認証が必要だからである。
たとえるなら、ディズニーランドで入場時にフリーパスを買えば、個々のアトラクション利用時に入場券を買う必要がない、みたいなことだろうか。