ログインスクリプトのセキュリティを向上させるために、ログインから処理ページに POST メソッドを介してパスワードを送信する前に、bcrypt でパスワードをハッシュする方法があるかどうかを知りたいです。そのために SSL 保護を使用することはできません。
2 に答える
残念ながら、あなたが提案したことを行ったとしても、安全な接続にはならず、中間者攻撃に対して脆弱になります. 以下のコメントで説明されているように、クライアント側でハッシュを行うと、パスワードが無意味になります。これは、別のハッシュ サーバー側と比較するために、ネットワーク経由でハッシュを送信する必要があるためです。この場合、攻撃者 (MitM) はハッシュを使用して認証することができます。
安全な通信が必要な場合は、(少なくとも) TLS/SSL を実装する必要があります。
十分に強力なパスワードとソルトを指定して、bcrypt でパスワードをハッシュした場合、パスワードは安全です。
渡されたハッシュがサーバー上のハッシュと一致しない場合、アクセスを拒否できます。
ただし、設計の主な問題は、システムへのアクセスにパスワードが不要になったことです。認証に必要なのはハッシュだけです。したがって、ハッシュはパスワードの適切な代替手段になりました。さて、あなたはその疑似パスワードをオープンで暗号化せずに未確認のサーバーに渡しました。
パスワードは、bcrypt などを使用してサーバーに保存する前にハッシュする必要があります。ただし、クライアントが実際にパスワードを知っていることを確認できるように、通常はパスワードを (暗号化された接続を介して平文で) サーバーに渡し、そこでハッシュする必要があります。
SSL の代わりに考えられる方法の 1 つとしてダイジェスト認証がありますが、これはサーバーへのすべての呼び出しが再認証されるためにのみ機能します。任意の種類のトークン ベースのセッションを使用する場合、リプレイおよび MitM 攻撃に使用できる可能性があるため、暗号化する必要があります。また、ダイジェスト認証は古く、TLS ほど暗号的に安全ではなく、サーバー ID 検証がないため、依然として HTTPS (SSL/TLS) に戻っています。
HTTPS (SSL/TLS) は、サーバー識別検証を提供し、完全なエンド ツー エンド暗号化を提供します。これを使用する必要があります。SSL が提供するすべての保護を模倣することもできますが、既に存在し、簡単に実装できるものを実行しようとすると、多くの作業が必要になるようです。