■ 共通鍵暗号化方式と認証
おね〜さんと、
ほげたんのっ!!
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が入っちゃうから、単純な共通鍵を使った認証ってわけにはいかないかもね。ちょっと分解してみましょう。
[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との認証にセッション鍵を入手する
- サーバとの認証に別のセッション鍵を入手する