3 Minutes NetWorking Supplement
No.05

3Minutes NetWorking Supplement

補講第5回Kerberos(2) 鍵配布センター

■ 共通鍵暗号化方式と認証

おねーさん

おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3 Minutes Networking、

ほげたん

Supplement !!

おねーさん

さてさて〜。前回に引き続き、認証プロトコルのKerberosですよ〜?

ほげたん

冥界の3つ首の番犬だねっ!! 冥界に来た死者と生者を「見分ける」。

おねーさん

そういうこと。それが名前の由来。Kerberosで「認証」するってこと。

ほげたん

ってことは。「認可(承認)」はダレがするんだろね?

おねーさん

冥界の王、ハデスじゃない?

ほげたん

うまいこというね。

おねーさん

でしょ。
ま、それはともかく、今回は「どうやって相手を確認しているか」、つまりどう認証するかを説明しましょ。

ほげたん

よく使われているのは、ユーザIDとパスワード、だよね。
PPPで使われてるPAPやCHAPはそうだよね。

おねーさん

そうね。だけど、Kerberosはパスワード、もしくはパスワードから生成されたものを相手に送って認証する、という方式ではないわ。
パスワードもしくはそれに類するものをネットワーク上に流さないのよ。

ほげたん

へ〜、それはなんかセキュリティが高いっぽいよね。どんなの?

おねーさん

ほげたんは、共通鍵暗号化方式って知ってる?

ほげたん

ん? 知ってるよ。双方が同じ暗号鍵を持つことによって「暗号化」「復号化」する方式だよね。
一般的に「暗号化」といったらコレだよね。3DESとかAESとかRC4とか。

おねーさん

うん、それそれ。
Kerberosはそれで認証を行うの。

ほげたん

……、は?
やだなぁ、おね〜さん。共通鍵暗号化方式は暗号化だよ? 通信の秘匿だよ? 認証じゃないよ。

おねーさん

ふふふ。つまり、こう。

[FigureSP05-01:共通鍵暗号化方式を使った『認証』]

ほげたん

え、え? えええええ?

おねーさん

だってそうでしょう? 送られてきたデータを、「私とほげたんしか知らない」鍵で暗号化できたのは「ほげたんだけ」なんだから。

ほげたん

2本しかない鍵がない錠前があって。その錠前が閉じられています。閉じたのはだ〜れ?
そりゃ鍵を持ってる人、だよな〜……。

おねーさん

でしょ? 復号化できるということは共通鍵を持っている人が暗号化したという証明になるのよ。

ほげたん

よって、「暗号化したデータを送ってきた人」=「鍵を持っている人」という認証になる…と。

おねーさん

そういうこと。実際はもうちょっとあるけど、基本はこれね。

ほげたん

なるほど〜。なんか「暗号化」っていたら通信の秘匿しかイメージなかったけど、こういう使い方もあるんだねぇ。

■ 共通鍵暗号化方式とKDC

おねーさん

さてさて、共通鍵暗号化方式によって認証ができることはわかったけど。
共通鍵暗号化方式って致命的な欠点があるわよね?

ほげたん

え? あるの?

おねーさん

1つ。「共通鍵をいかに両方が持つか」。

ほげたん

あぁ、そうだね。共通鍵は「2人しか知らない」ことが全体だもんね。
内緒に受け渡ししないと、意味がなくなっちゃうよね。

おねーさん

まぁ、これに関しては解決策がないのでどうしようもないといえばないんだけどね。

ほげたん

ないんだ。

おねーさん

ないわね〜。あるとすれば、公開鍵暗号化方式を使って受け渡しするくらい?
あとは、何か他に安全な方法でやりとりする、とか。

ほげたん

リムーバブルディスクに入れて、物理的に運ぶとかだね。

おねーさん

ちなみにKerberosは、パスワード文字列を暗号鍵に変換して使ってるわ。

ほげたん

へ〜……、ってあれ? パスワードもしくはそれに類するものをネットワーク上に流さないっていってなかったっけ?

おねーさん

ほげたん? あくまでもパスワードは鍵を生成するために使うの。
ネットワーク上を流れるのはその鍵を使って暗号化したデータよ?

ほげたん

あ、あぁ。そうか。

おねーさん

そして、共通鍵暗号化方式の2つ目、それは管理する鍵の数よ。
暗号化してやりとりする相手が増えれば増えるほど、それぞれに対する鍵が必要になってくるから。

共通鍵の数の問題

[FigureSP05-02:共通鍵の数の問題]

おねーさん

事前にアクセスするホストの数だけ、それぞれの鍵を用意しておくなんて大変よね。

ほげたん

みんな同じ鍵ってわけにはいかないもんね。

おねーさん

そういうこと。これにさっきの「鍵の受け渡し問題」も加わってもう大変。

ほげたん

大量の鍵を、事前に安全に交換しなきゃいけなくなるんだよね。面倒くさいよね。

おねーさん

まぁ、これが公開鍵暗号化方式が主流になった遠因になったりならなかったり。どうしても大規模なネットワークでは使いづらいのよ。

ほげたん

うん、確かにそうなるね。

おねーさん

そこで、Kerberosは、鍵の集中管理を行う第三者を共通鍵暗号化方式を使った認証で登場させるわけ。
この第三者はネットワーク上の認証を必要とするサーバ・クライアントの全部の鍵を持つの。これにより各ホストは自分の鍵のみを管理するだけでよくなるのよ。

ほげたん

鍵の集中管理を行う第三者?

おねーさん

そう、KerberosではKDCと呼ばれるわ。

ほげたん

鍵配布センター? ……え、ちょっとちょっと待ってよ、おね〜さん。共通鍵暗号化方式を使った認証は、「双方が秘密の鍵を共有している」ことで行われるんだよ?
KDCが鍵を全部持っているのはともかく、相手の鍵を持っていなかったらダメじゃん?

おねーさん

それは、1978年に公開された「Needham-Schroederのプロトコル」ってのが解決するわ。
これ自体には脆弱性があったりしてるんだけど、これがKerberosの基礎になっているわ。

■ Kerberosの基礎

おねーさん

さて、Kerberosでどうやって認証するか。共通鍵暗号化方式の弱点を克服し、信頼された第三者を使った認証方式ってのを説明するわね。

ほげたん

うん。「信頼された第三者」ってのがかなり謎だよ。

おねーさん

で、実際のKerberos5での細かい話は後でまたやるとして、今から説明するのはその基本の話だからね。

ほげたん

うんうん、はやくはやく。

[FigureSP05-03:Kerberosによる認証]

おねーさん

と、こんな感じ。
実際は、もうちょっといろいろあるけど、Kerberosの認証の動作の基本はコレね。

ほげたん

う、う〜ん。なんかややこしいね。

おねーさん

そうねぇ、どうしてもKDCが入っちゃうから、単純な共通鍵を使った認証ってわけにはいかないかもね。ちょっと分解してみましょう。

KDCへの認証

[FigureSP05-04:KDCへの認証]

おねーさん

まず、クライアントはKDCに認証してもらうわけよね。
クライアントとの共通鍵で暗号化した新たな共通鍵を渡す、と。この鍵はセッション鍵と呼ばれるわ。

ほげたん

セッション鍵?

おねーさん

そう、一時的なやりとりでしか使わない鍵よ。使用できる有効期限があって、その間しかKDC-クライアント間でつかわれないからね。
一方、最初から保持してるパスワードを元にした共通鍵は「長期鍵」とも呼ばれるわ。

ほげたん

で、この鍵を持つ=この鍵の入った通信を復号化できる=クライアントである、ってことで「認証」されるわけだね。

おねーさん

そうね、KDCから見れば、「セッション鍵を復号化できる」ということはクライアントの証明だからね。
実際、途中で盗聴とかそういうのがあったとしてもあくまでも「セッション鍵を保持できる」のはクライアントだけ、だから。

ほげたん

クライアント以外、クライアントの鍵を持っていないから復号化できない、ってことでセッション鍵をもてないからだね。

サーバとのアクセス認証要求

[FigureSP05-05:サーバとのアクセス認証要求]

おねーさん

クライアントはサーバと通信するので、認証して欲しいことをKDCに伝える。
これは、先ほどのセッション鍵で暗号化されてる。

ほげたん

セッション鍵で暗号化できる=クライアントである、だからクライアントからの要求だよってことを証明してるわけだよね。

おねーさん

そゆこと。で、KDCはこれに対し新しくセッション鍵を作って、その鍵を2つともクライアントに渡す。

ほげたん

1つはクライアントとのセッション鍵で暗号化した鍵。
もう1つはサーバの共通鍵で暗号化した鍵?

おねーさん

そう、クライアントはサーバの共通鍵をもたないから、それは復号化できない。
でもこれを持っていることは、KDCから貰ったことを示すのよ。

ほげたん

KDC以外サーバの共通鍵を持っていないから、だね。

おねーさん

そう。そしてそれをそのままサーバに渡す。

サーバへのアクセス要求

[FigureSP05-06:サーバへのアクセス要求]

おねーさん

サーバはこれで、アクセス要求を認証するわけだけど。
まず、もらったセッション鍵がKDCから正しく配布されたものだとわかる。

ほげたん

サーバの共通鍵で暗号化されてるからだね。
サーバ以外でサーバの共通鍵を持つのはKDCだけだから。

おねーさん

そう。ただ、これだけだと、KDC-クライアント間の通信を盗聴して、その部分を入手しただけかもしれないでしょ?
だからもう1つ、クライアントはKDCからもらった新しいセッション鍵で暗号化して送る。

ほげたん

そうすると、サーバは新しいセッション鍵はKDCから正しく配布された鍵だとわかってる。
それで復号化できるってことは、KDCと正しく通信してセッション鍵を貰ったクライアントであるってことがわかるのか。

おねーさん

そうそう、盗聴しただけの人は、セッション鍵を入手できないからね。

ほげたん

へ〜、なんかすごいというか、面倒くさいというか。

おねーさん

でも、この方法ならちゃんと共通鍵で認証できるし。
さらに、各ホストは自分の共通鍵だけ保持していればいいわけでしょ?

ほげたん

そうだね。
あとは一時的に保持するセッション鍵を持っていればいいわけだし。

おねーさん

KerberosのKDCが「認証サーバ」と呼ばれず、なんでKDCと呼ばれるかという理由もわかるでしょ?

ほげたん

鍵配布センター……。
認証に必要なセッション鍵を配るから?

おねーさん

うん、そう。よくできました。

ほげたん

ほえ〜。なるほどだよ。

おねーさん

さて、これはあくまでも「Kerberosの動作の基本」。 実際のKerberos5の動作は……。

ほげたん

動作は?

おねーさん

また次回っと。
おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3分間ネットワーク、

ほげたん

サプリメントでした〜〜〜っ!!
まった次回〜〜〜〜!!

共通鍵暗号化方式
[Shared Key Encryptosystem]
「秘密鍵暗号化方式」「共有鍵暗号化方式」「秘密鍵暗号化方式」「対称鍵暗号化方式」などとも呼ばれる。
3DES
[Triple Data Encryption Standard]
アメリカ政府標準技術局によってアメリカ連邦政府の標準暗号になった暗号化方式のDESを3重にかける暗号化方式。
読みは「とりぷるです」。
AES
[Advanced Encryption Standard]
強度に問題があったDESの替わりに新たにアメリカ連邦政府の標準暗号になった暗号化方式。
RC4
[Rivest's Cipher 4]
RSA Security社の共通鍵暗号化方式。SSLやWindowsのKerberosで使用されている。
公開鍵暗号化方式
[Public Key Cryptosystem]
「非対称鍵暗号化方式」とも呼ばれる、復号鍵と暗号鍵が異なる方式。RSA暗号が有名。
パスワード文字列を暗号鍵に変換
正確にはユーザ名+レルム名+パスワードの文字列を変換。
String-to-Key変換と呼ばれる。
KDC
[Key Distribution Center]
「鍵配布センター」と訳される。
Needham-Schroederのプロトコル
「信頼された第三者機関による認証方式[Trusted Third Party Authentication]」。
ほげたんほげたんの今日のポイント
  • 共通鍵を使ってKerberosは認証を行う。
  • 各ホストの鍵を集中管理し、認証を行うのがKDC。
  • 認証をされたいクライアントはKDCと通信を行う
    • KDCとの認証にセッション鍵を入手する
    • サーバとの認証に別のセッション鍵を入手する

3 Minutes NetWorking Supplement No.05

管理人:aji-ssz(at)selene.is.dream.jp