1

重複の可能性:
PHPでSQLインジェクションを防ぐための最良
の方法ハッシュのソルトを非表示にする必要性

私はMySQLとPHPに非常に慣れていないので、ここ数日で独学を始めました。今日はパスワードなどの暗号化を検討していました。このトピックに関する情報を含む多くのWebページを調べてきました。彼らはテーブルのすべてのエントリに対してランダムなソルトを生成すると言っています(私は理解していますが、すべてのエントリに同じソルトは必要ありません)。このソルトはエントリと一緒にテーブルに保存する必要があります。

私が理解したこと(間違っている場合は訂正してください)から、パスワードの暗号化はハッカーがパスワードにアクセスするのを妨げることはなく、データベースにアクセスした場合に真の値をマスクするだけです。確かに、これが当てはまる場合は、ソルトをテーブルにも保存したくないでしょう。ハッカーがデータベースにアクセスして暗号化されたデータを見ることができる場合、ソルトを表示すると、復号化の作業が非常に簡単になりますか?

4

4 に答える 4

3

ソルトは暗号化には使用されません。代わりに、(パスワードと一緒に)ハッシュ関数に入ります。そうすれば、誰も(アプリケーションでさえも) パスワードを判別できませんが、パスワードを確認することはできます。

次に、ソルトを使用して、攻撃者に各パスワード ハッシュを個別に攻撃するよう要求します (攻撃者がパスワードを 1 つだけ必要とする場合、ソルトは何の役にも立ちません)。レインボー テーブルのおかげで、一般的なパスワードのハッシュ関数の出力を簡単に計算できます。

ソルト値は秘密ではなく、MySQL データベースに安全に格納できます (または公開することもできます)。

于 2012-07-29T20:44:56.417 に答える
2

ソルトの目的は、Rainbow テーブルの使用を防ぐことです。これにより、ハッカーは特定のパスワードに対して事前に生成されたハッシュを大量に生成することができます。パスワードをハッシュする前にソルトを追加することにより、ハッシュは元のパスワードとは完全に異なります。

password => 5f4dcc3b5aa765d61d8327deb882cf99
password+saltvalue => 1d7dc54c316b11f3a38cc24fa68e2b6a

したがって、ソルト値ごとにハッシュを再作成する必要がありますが、これは非現実的です。

于 2012-07-29T20:45:06.473 に答える
2

あなたが計画している方法で塩を保管することはまったく問題ありません. 実際、攻撃者にソルトを見せても問題ありません。ソルトの目的は、メッセージ スペースのサイズを拡張することによって、レインボー テーブルと呼ばれる事前に作成されたルックアップ テーブルを使用できないようにすることです。ソルトが行うことは、事前計算を破棄して問題全体を解決することだけです。これには時間がかかりますが、確実に可能です (特に md5 のようなハッシュの場合は、sha256 に移行する必要があります)。

ユーザーごとに異なるソルトを使用して、攻撃者が単一のソルトに基づいて新しいテーブルを生成するだけでなく、回復するパスワードごとにすべての作業を行わなければならないようにする必要があります。

于 2012-07-29T20:47:40.360 に答える
-1

塩は「半固有」のものと見なすことができます。実際には、塩と呼ばれる追加の列である必要はありません。ユーザー名、ユーザーの電子メールも一種のソルトです。したがって、それらは実際には、ハッシュされたパスワードの隣のデータベースに保存されます。このアプローチの問題の 1 つは、ユーザーがユーザー名または電子メールを変更することを決定したときに発生します。

于 2012-07-29T20:52:59.700 に答える