1

私はスタンフォード大学の JavaScript 暗号化ライブラリを調べていて、クライアントでハッシュ化できることに気付きました。

以前は、1 つのコマンドである crypt() で簡潔な PHP crypt() を使用していました。これは、crypt() という 1 つのコマンドで、crypt タイプ、ランダム ソルト、ハッシュの両方を生成し、これら 3 つの項目を文字列 ( md5、高速ですが、今のところは問題ありません。ここをお読みください)。

次のようになります。

crypt() MD5 hash example:          $1$rasmusle$rISCgZzpwk3UhDidwXvin0

ただし、スタンフォードの Crypto Libraryを使用してクライアントで暗号化し、 SHA-256 の実装を利用すると、サーバーへの転送中にパスワードを非表示にするという追加の利点があります。

ただし、パスワードを非表示にしている間、SQL ルックアップを実行するために実際に使用される転送中のハッシュが公開されます。

この問題を解決するために、クライアントとサーバーの両端でハッシュすることができました。これはやり過ぎだろうか。

パスワードをハッシュするための標準的で安全な方法は何ですか?

4

2 に答える 2

2

本音をいうと?サーバー側でパスワードをハッシュするのが最善です。次に、アプリがHTTPS (SSL/TLS) を使用していることを確認して、攻撃者がネットワークを盗聴し、転送中のプレーンテキスト パスワードを取得できないようにします。ログインページでは、以下を使用して訪問者に HTTPS の使用を強制できます。

<Location /login.php>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Location>

明らかに、これによりセキュリティが提供される前に、SSL 用に Web サーバーを構成する必要があります。

于 2012-11-30T20:43:35.500 に答える
1

ハッシュが最初に保護する唯一のことは、スヌーパーがユーザーのパスワードのクリアテキストを取得することです。そのユーザーがそのパスワードを他の場所で使用している場合、これは良いことと見なすことができます。スヌーパーは、スニッフィングされたパスワード ハッシュを渡すことで、POST を複製できます。

ルックアップの問題を解決するには、パスワード ハッシュを使用してルックアップを行わないでください。代わりに、ユーザー名を使用してルックアップを行い、データが戻ってきたら、パスワード ハッシュを比較します。それらが一致する場合、有効なログインがあります。そうでなければ、あなたはしません。

サーバー側でハッシュを再度ハッシュして、保存されたハッシュを誰も知らないことを確認することもできます。セキュリティに関しては、やり過ぎはありません。

しかし、これらすべては、POST されるべき値をすでに持っている詮索好きから保護することはできません。

標準的な解決策については、解決策の数だけ標準があると思います。

于 2012-11-30T20:51:29.633 に答える