Kerberos

直接Plan 9に関係する話題じゃないけど、Plan 9の認証でも基盤になる技術なのでKerberosについて少し調べてみた。

KerberosはMITで開発された認証方式で、WindowsMac OS Xなどでも使われている。Kerberosという用語はプロトコルだけでなくサービスやソフトウェアもろもろを含んでいるらしいのだが、ここではKerberosの認証プロトコルに着目したい。Plan 9のp9sk1共有鍵プロトコルはKerberosプロトコルを参考に作られている。

Kerberosは共通秘密鍵を使って認証を行う。一般的に秘密鍵を用いる場合、ホスト数に対するスケーラビリティと鍵の安全な交換が問題となる。そこで信頼できる第三者機関である鍵配信センター(KDC: Key Distribution Center)がすべての鍵をデータベースで集中管理し、セッション毎に一時的な秘密鍵であるセッション鍵を使用することで問題を解決している。このようなやり方はNeedham-Shroeder認証プロトコルと呼ばれていて、Kerberosもこれに基づいている。

KerberosではKDCの役割を認証サーバ(AS)とチケット交付サービス(TGS: Ticket Granting Service)の二つに分離している。ASはその名の通りクライアントを認証するもので、TGSはクライアントが認証されていることを証明するチケットを発行するものだ。クライアント・サーバ間の認証はこのチケットを受け渡すことで行われる。具体的にチケットとはセッション鍵にいくつかの付加的な情報を加えたものをサーバの秘密鍵で暗号化したものである。

単純な(Kerberosを使わない)クライアントサーバシステムでは、クライアントはサーバ毎にユーザ名とパスワードを入力して認証を行う。一方、Kerberosシステムでは、クライアントは一度ASから認証を受けると、TGSから発行されるチケットを利用して複数のサーバにアクセスできるようになる。つまり、シングルサインオンが実現するわけだ。なお、クライアントの秘密鍵はパスワードを変換して生成している。したがって、パスワードがばれてしまうとセキュリティは破綻する。

もう少し詳しく動作を追ってみると、クライアントAは認証サーバ(AS)から認証された結果、イニシャルチケットを受け取る。イニシャルチケットは一定期間クライアントに保持される。クライアントAがサーバBにログインする場合は、TGSからイニシャルチケットと引き替えに、サービスチケットを受け取る。クライアントAはこのサービスチケットを使ってサーバBにログインできるようになる。ここで2種類のチケットが出てきたが、イニシャルチケットはTGSに対して、サービスチケットはサービス提供者であるサーバBに対してクライアントAの身元を証明するものである。