ログイン システムを導入するときは、常に指定されたパスワードの MD5 をサーバー側のユーザー テーブルの値と比較します。
しかし、私の友人は、「クリア」パスワードはネットワーク ソフトウェアによって盗聴される可能性があると教えてくれました。
そこで質問なのですが、クライアント側でパスワードをハッシュするのは良い考えでしょうか?サーバー側でハッシュするよりも良いのでしょうか?
ベストアンサー1
基本的にはあなたの友人の言う通りです。しかし、クライアント側でパスワードをハッシュするだけではただプレーンテキストとしてサーバーに送信するよりも優れています。プレーンテキストのパスワードをリッスンできる人は、ハッシュ化されたパスワードもリッスンでき、キャプチャしたハッシュを使用してサーバーに対して認証できます。
この点に関して、より安全な認証プロトコルでは、通常、クライアントがランダムなビットの束を選択できるようにすることで、このようなリプレイ攻撃が機能しないようにするために、いくつかの手順を踏んでいます。ランダムなビットの束はパスワードとともにハッシュされ、サーバーに平文で送信されます。
サーバー上:
- いくつかのランダムビットを生成する
- これらのビットを(平文で)クライアントに送信する
クライアント側:
- いくつかのランダムビットを生成する
- パスワード、サーバーのランダムビット、クライアントのランダムビットを連結する
- 上記のハッシュを生成する
- ランダムビット(平文)とハッシュをサーバーに送信する
サーバーは自身のランダム情報とクライアントのランダム ビット (クリア テキストとして取得) を知っているため、基本的に同じ変換を実行できます。このプロトコルにより、この会話を聞いている誰も、後で記録された情報を使用して不正に認証することができなくなります (非常に弱いアルゴリズムが使用されている場合を除きます)。毎回、両方の当事者が異なる「ノイズ ビット」を生成する限り、ハンド シェイクが実行されます。
編集これらはすべて、エラーが発生しやすく、面倒で、正しく実行するのがやや困難です (つまり、安全です)。可能であれば、知識のある人 (私とは違います。上記は、私が以前読んだ本の記憶から得たものです) によって既に記述されている認証プロトコル実装を使用することを検討してください。通常、これを自分で記述することは望ましくありません。