ハッシュ値を使って「なりすまし」を防げ:認証プロトコル「CHAP」
はい、こんにちは。前回記事の続きです。
前回は、「PAP」という規格をご紹介しました。PPPというプロトコルで通信する際の標準プロトコルの一つでした。ただ、シンプルで実装しやすいものの、パスワードが平文という欠点がありました。セキュリティがあまり気にされない時代に生まれたのですから、仕方ないですね。
続いて今回は、もう一つの標準規格「CHAP」についてご紹介します。認証情報をもう少し安全に送るように考えられた規格です。これで「なりすまし」などが防げます。
一体どういう仕組みでしょうか?さっそく見てみましょう!
パスワードを送らずに認証する仕組み
CHAPというこの規格。読み方が気になりますが、チャップと発音すればOKです。読みやすくて覚えやすい!OFDMとか、OSPFとか、読みにくい=覚えにくい頭字語もいっぱいありますからね…。
CHAPは、Challenge Handshake Authentication Protocolの略です。認証プロトコルであることはすぐに分かりますが、Challengeって何なのよ?という感じですね。
では、全体のイメージを掴むために絵にしました!次の図をご覧ください。
注目していただきたいのは、「パスワード」そのものは伝送路上で送信されていないということです。代わりに「チャレンジ」と「ハッシュ値」が送信されています。こんなんで認証できるのか?
これが分かればCHAPの秘密が解けそうですね!
順を追ってみていきましょう!
パスワードを割り出すのはとても難しい
1.認証サーバに「ID」と「パスワード」を事前に登録しておく
いってみれば、ユーザ登録ですね。認証サーバは、あらかじめ「ID」と「パスワード」の組み合わせを知っていることを念頭に入れておきましょう。(ユーザ登録時にどう「パスワード」を安全に送るかは分かりませんが…)
2.ユーザがIDを認証サーバに送信
ユーザが「認証してほしい!」とIDを送ります。ID自体が、盗聴されてもすぐには問題になりません。
3.認証サーバが「チャレンジ」を生成
認証サーバが、ランダムな文字列を生成します。これが、「チャレンジ」です。チャレンジは、「課題」と訳すとしっくりきます。これをユーザに送ります。チャレンジが盗聴されても、ただの乱数ですから問題ありません。
4.「ハッシュ値」を作って送信
ユーザはチャレンジを受け取ったら、ハッシュ関数に「パスワード」と「チャレンジ」を投入して、「ハッシュ値」を得ます。これを認証サーバへ送り返します。
「ハッシュ」とは、「ズタズタに刻む」という意味です。ハッシュ関数が出力する「ハッシュ値」から、入力値を効率的に割り出すのは困難です。
ですから、「ハッシュ値」や「ID」を盗聴したところで、結局、認証に必要なパスワードが得られません。
5.サーバもハッシュ値を算出
サーバ側でも、「パスワード」と「チャレンジ」を投入して、「ハッシュ値」を計算しておきます。この値を、ユーザから届いたハッシュ値と完全に一致するか比較します。
パスワードを知るものしか、このハッシュ値を作れないはずですから、一致すれば、認証OKです。
はい、以上がCHAPという認証プロトコルの解説でした。初めてCHAPを知った時はちょっと感動しました。これで「なりすまし」が防げるではないかと。ですが、CHAPにも脆弱性が指摘されています。
かくして、次のオプション規格、「EAP」が登場するというわけです。
次回から、IEEE802.1X認証、すなわち、「EAP」による認証の話に戻りましょう。
では!
この記事が気に入ったらサポートをしてみませんか?