[解決済み] クライアント側でパスワードをハッシュ化する価値はあるのか
質問
ログインシステムを導入したい場合、与えられたパスワードのMD5と、サーバー側のusersテーブルの値を必ず比較するようにしています。
しかし、友人から「クリアパスワードは、ネットワークソフトで盗聴される可能性がある」と聞いたことがあります。
そこで質問ですが、クライアント側でパスワードをハッシュ化するのは良いアイデアなのでしょうか?サーバー側でハッシュ化するよりも良いのでしょうか?
どのように解決するのですか?
基本的には、あなたの友人の言うとおりです。しかし、クライアント側で単にパスワードをハッシュ化するだけでは ただ サーバーにプレーンテキストで送信するよりも優れています。あなたのプレーンテキストのパスワードを盗聴できる人は、ハッシュ化されたパスワードも盗聴でき、盗聴したハッシュを使ってあなたのサーバに対して認証することができます。
このため、より安全な認証プロトコルは、このようなリプレイ攻撃が機能しないように、通常、クライアントにランダムビットの束を選択させ、それをパスワードと一緒にハッシュ化し、サーバーに平文で送信させるなど、多くの手段を講じています。
サーバーで
- 数ビットのランダムな
- これらのビットを(平文で)クライアントに送信します。
クライアントで
- いくつかのランダムビットを生成する
- パスワード、サーバーのランダムビット、クライアントのランダムビットを連結する。
- 上記のハッシュを生成
- ランダムビット(平文)とハッシュをサーバに送信する。
サーバーは自分自身のランダムな情報とクライアントのランダムなビット(クリアテキストとして取得)を知っているので、基本的に同じ変換を実行することができます。このプロトコルは、握手をするたびに両者が異なるノイズビットを生成する限り、この会話を聞いている誰も、記録された情報を使って後で偽の認証を行うことはできません(非常に弱いアルゴリズムが使われた場合は別ですが・・・)。
編集 これらのすべては、エラーが発生しやすく、面倒で、正しく(安全に)行うのがやや困難です。可能であれば、知識のある人たち(私とは違います!上記は昔読んだ本の記憶だけです)が既に書いた認証プロトコルの実装を使うことを検討してください。 通常、これを自分で書くのは本当に嫌ですよね。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン