Yahoo!のログイン画面で、いつの間にか非SSLでのログインが廃止されていた。 前は、SSLでのログインと非SSLでのログイン両方ができた。 たぶん企業によっては、SSLでのアクセスを許可してないとかの理由だったんだと思うけど、これも時代の流れか。
この辺はセキュリティ的によくある(まだ両方用意しているサイトとか見るけど。そしてそういうサイトに限って、フォームの送信前の画面が非SSLだったり)話だけど、Yahoo!の非SSLでのログイン画面ですごいなと思ったのは、非SSLのログインページでも通信の暗号化がされていたこと。
「httpsじゃないログイン画面でもセキュリティを保つ方法はあることはある」で知ったのだが、CHAP認証を使ってちゃんと暗号化されていた。
具体的には、
- ログイン画面にアクセス
- そのページにランダムな文字列が含まれている(チャレンジ)
- レスポンス=md5(md5(入力されたパスワード)+チャレンジ)
- submitでユーザ名とレスポンスをサーバへPOST
- サーバ側で、同じ計算をしてPOSTされたデータと同じ結果になればログイン可
というようにパスワードが平文で送信されない流れになっていた。 最初にサーバ側から送信されるチャレンジコードは毎回ランダムに変わるので、送信結果は毎回異なる。
SSLでのログインに比べればセキュリティ的には劣るけど、それでも平文で送信するより優れているのは確か。 クライアント側でのハッシュの計算はJavascriptのライブラリで行っていた。
さすがにここまでやるのは自社サービスだからだろう。受託じゃここまで工数取れません…
それにしてもハッシュ関数考えた人って本当に天才だと思う。