質問: 以前、同じような質問があったようです^^; SSLを利用したWebサービスでログインパスワードを安全に保存するには? 質問者が非常に真面目な方のようで、活発な意見交換がなされており、勉強になりました。
回答: こんにちは。 自分はWebの技術者でもないですが、同じ疑問と提案をずっと持っていたので、この質問には注目しています。 個人的な意見の一つですが。 いくら経路をHTTPSで保護しているからといって、そのパイプを生パスワードが通るというのは少し気持ち悪く感じています。サービス提供者がパスワードを適切に扱っていることを完全に信頼しないといけないというのは、利用者としては若干負担があると思います。 しかし、もしクライアントサイドでの一次ハッシュ化を行うとすると、実用上では、サーバ側が指定されたパスワードの健全性を確認することができなくなるというサービスの問題が発生することがわかります。例えばパスワードがただ一文字`a`であったとしても、ハッシュとしては健全なパラメータに見えてしまいます。こちらは、殆どのサービスでパスワードの検証が行われるため、大きなデメリットに見えます。 また、クライアントから送られてきたハッシュ値が正しくハッシュ関数を通したものであるかを検証することができません。この場合はユーザのパスワードが文字列ではなくなるだけで、運用上は問題ないと思いますが。 最後に、WebUIを介さないアクセスを行う際に、サービスを利用する開発者がパスワードのハッシュ化処理を実装しなければならなくなることです。こちらは利用するハッシュ化関数を公開しておけば、多少実装の手間が掛かる程度でしょう。 どちらにせよ、サーバ側で受け取ったハッシュにソルトを付けて二次ハッシュ化は必須です。サーバで生保存してしまうと平文となんの違いもありません。 個人的には、上記のデメリットを差し引いても、クライアント側での一次ハッシュ化はアリだと考えています。「サーバが決して生パスワードを保存しない」ということをソースコード上に記述できるというのはユーザ目線での安心感が段違いです。