学んだこと。

後輩に、情報の授業の課題でわからんことがあるから教えてくださいと頼まれたものの、
恥ずかしながら知らなかったというhttp認証の話w


httpの認証
webページにパスワードをかけるって話です。
web サーバが行っていることは、
◎認証が必要なページに Authorization ヘッダなしでリクエストしてきた場合、401 を返す
◎認証が必要なページに Authorization ヘッダ付きでリクエストしてきた場合、 (ユーザ名・パスワードが正しければ) ページ内容を表示する
※これはログイン、ログアウトではない。

どうやらそのパスワードのかけかたには主に2つの方式がある。

BASE64というエンコードでパスワードとログイン名をエンコードする。
それをリクエストのヘッダに張り付けて送っているだけなので、そのパケットを盗聴してデコードすればパスワードが簡単にわかる。
basic認証は設定が簡単だが、絶対もれてはいけない情報には使えない。

  • digest認証

MD5のハッシュで暗号化たもので認証する。
サーバ側でパスワードをハッシュしたもの(Xとする)を保持しておき、クライアントから認証の要求があれば、ランダム文字列(Yとする)をクライアントに送る。
クライアントはパスワード入力して、クライアント側でそれをハッシュする(Xになるはず)。
それに、受け取ったランダム文字列Yをくっつけて、XYという状態でサーバに送る。
サーバ上でもXとYをくっつけて、XYを生成できるので、この文字列と同じかどうかで認証を行う。


この方式の場合、ネット上を流れるのはXYであるが、ハッシュは逆引きするのがtoo hard(probably impossible)、かつ、よくわからん文字列もくっついてるので、
盗聴しても解析不可能というわけである。


設定が少々たいへんだが、セキュリティの高い認証といえる。



参考URL:http://x68000.q-e-d.net/~68user/net/http-auth-1.html
     http://x68000.q-e-d.net/~68user/net/http-auth-2.html