見出し画像

ハッシュ値を使って「なりすまし」を防げ:認証プロトコル「CHAP」

はい、こんにちは。前回記事の続きです。

前回は、「PAP」という規格をご紹介しました。PPPというプロトコルで通信する際の標準プロトコルの一つでした。ただ、シンプルで実装しやすいものの、パスワードが平文という欠点がありました。セキュリティがあまり気にされない時代に生まれたのですから、仕方ないですね。

続いて今回は、もう一つの標準規格「CHAP」についてご紹介します。認証情報をもう少し安全に送るように考えられた規格です。これで「なりすまし」などが防げます。

一体どういう仕組みでしょうか?さっそく見てみましょう!

パスワードを送らずに認証する仕組み

CHAPというこの規格。読み方が気になりますが、チャップと発音すればOKです。読みやすくて覚えやすい!OFDMとか、OSPFとか、読みにくい=覚えにくい頭字語もいっぱいありますからね…。

CHAPは、Challenge Handshake Authentication Protocolの略です。認証プロトコルであることはすぐに分かりますが、Challengeって何なのよ?という感じですね。

では、全体のイメージを掴むために絵にしました!次の図をご覧ください。

CHAPの概念図

注目していただきたいのは、「パスワード」そのものは伝送路上で送信されていないということです。代わりに「チャレンジ」と「ハッシュ値」が送信されています。こんなんで認証できるのか?

これが分かればCHAPの秘密が解けそうですね!

順を追ってみていきましょう!

パスワードを割り出すのはとても難しい

1.認証サーバに「ID」と「パスワード」を事前に登録しておく

いってみれば、ユーザ登録ですね。認証サーバは、あらかじめ「ID」と「パスワード」の組み合わせを知っていることを念頭に入れておきましょう。(ユーザ登録時にどう「パスワード」を安全に送るかは分かりませんが…)

2.ユーザがIDを認証サーバに送信

ユーザが「認証してほしい!」とIDを送ります。ID自体が、盗聴されてもすぐには問題になりません。

3.認証サーバが「チャレンジ」を生成

認証サーバが、ランダムな文字列を生成します。これが、「チャレンジ」です。チャレンジは、「課題」と訳すとしっくりきます。これをユーザに送ります。チャレンジが盗聴されても、ただの乱数ですから問題ありません。

4.「ハッシュ値」を作って送信

ユーザはチャレンジを受け取ったら、ハッシュ関数に「パスワード」と「チャレンジ」を投入して、「ハッシュ値」を得ます。これを認証サーバへ送り返します。

「ハッシュ」とは、「ズタズタに刻む」という意味です。ハッシュ関数が出力する「ハッシュ値」から、入力値を効率的に割り出すのは困難です。

ですから、「ハッシュ値」や「ID」を盗聴したところで、結局、認証に必要なパスワードが得られません。

5.サーバもハッシュ値を算出

サーバ側でも、「パスワード」と「チャレンジ」を投入して、「ハッシュ値」を計算しておきます。この値を、ユーザから届いたハッシュ値と完全に一致するか比較します。

パスワードを知るものしか、このハッシュ値を作れないはずですから、一致すれば、認証OKです。


はい、以上がCHAPという認証プロトコルの解説でした。初めてCHAPを知った時はちょっと感動しました。これで「なりすまし」が防げるではないかと。ですが、CHAPにも脆弱性が指摘されています。

かくして、次のオプション規格、「EAP」が登場するというわけです。

次回から、IEEE802.1X認証、すなわち、「EAP」による認証の話に戻りましょう。

では!





この記事が気に入ったらサポートをしてみませんか?