11

私のmysqlデータベースには、パスワード列を持つユーザーテーブルがあります。現在、MD5 アルゴリズムを使用してユーザーのパスワードをハッシュし、データベースに保存しています。今、私は自分が安全意識の高い人だと思いたいです。MySQL のドキュメントを読んでいるときに、MD5 や SHA/SHA1 ハッシュ メソッドは推奨されていませんが、代替手段は提供されていないことに気付きました。

MySQL でパスワードをハッシュする最良の方法は何ですか? PHP と MySQL の両方でネイティブにサポートされている関数は理想的であり、現在の実装では必要です。

ありがとう!

4

5 に答える 5

11

必ずしも MD5 を使用してはならないというわけではありませんが、 MD5だけを使用してはならないのと同様に、レインボー テーブル攻撃に対して脆弱になるためです (レインボー テーブルは、事前に計算されたハッシュ値のテーブルです - パスワードが偶数の場合)リモートで一般的または単純な場合、攻撃者はハッシュを調べるだけで平文のパスワードを知っています。)

少なくとも、すべてのパスワードにソルトを追加して、既存のレインボー テーブルが役に立たないようにし、攻撃者がパスワードのデータベースのためだけに新しいレインボー テーブル全体を生成するように強制する必要があります。

さらに良いのは、データベース内のパスワードごとに異なるソルトを使用することです。たとえば、関連付けられているユーザー名などです。これにより、攻撃者はデータベース全体のレインボー テーブルを生成することさえできず、各エントリを個別にクラックする必要があります。

MD5 も非常に高速なアルゴリズムです。クラッキングの敵は速度です。ハッシュの生成に時間がかかるほど、ハッカーが試行するたびに時間がかかります。毎回新しいソルトを追加してプレーンテキストを 100 回ハッシュするような単純なことは、サイトにログインしているユーザーには (たとえあったとしても) ほとんど認識されませんが、パスワードをブルート フォースするのにかかる時間が同じだけ増加します。 100回。

詳細はこちら: http://www.codinghorror.com/blog/archives/000953.html

于 2008-12-03T00:28:31.990 に答える
4

MD5 は、今日の基準では弱いと見なされています。MD5 で作成されたハッシュをクラックするにはまだ多少の作業が必要ですが、力ずくでパスワードを推測するよりも数倍簡単です。理想的には、ハッシュのクラックはブルート フォースよりも簡単であってはなりません。

また、SHA1 は、力ずくでパスワードを推測するよりも簡単にクラックできると考えられています。

私は実際に、OpenSSL から SHA224、SHA256、SHA384、および SHA512 関数を明らかにするために、MySQL にパッチを提供しました。これらは、パスワードハッシュ用に NIST によって推奨されています (実際には SHA256 以上)。

私のパッチは MySQL のエンジニアによって完成されており、思い出せば MySQL 6.0.5 以降に含まれています。

以前のバージョンの MySQL を使用している場合 (使用していない場合) は、ホスト言語で強力なハッシュ関数の実装を使用できる可能性があります。hash()たとえば、PHPには関数があります。アプリケーションでハッシュを実行し、結果のメッセージ文字列をデータベースに保存できます。

塩漬けも忘れずに!

于 2008-12-03T00:29:46.357 に答える
2

この質問は7歳です。その間に、MD5 と SHA1 が最新のコンピューターによって簡単に破られるところまでコンピューティングが進歩しました。これらは今すぐ避けるべきです。

PHP 5.5では、はるかに安全な bcrypt アルゴリズムを使用するpassword_hashが導入されました。MySQL は bcrypt を暗号化/復号化できますが、データベース層に大きな計算負荷がかかる可能性があるだけでなく、ハッシュされていないパスワードがログに保存される可能性があるため、これはひどい解決策です。

クエリ レベルであっても、平文のパスワードが MySQL にヒットすることはありません。そうしないと、ログにパスワードを書き込む危険があります (クエリ ログ、一般ログ、スロー クエリ ログなど)。これは恐ろしいことです。いいえ、気にしないでください...

于 2016-02-17T21:24:19.280 に答える
1

MD5SHA-1は、既知の攻撃のため、おそらく推奨されなくなりました。ただし、ほとんどのユースケースでは一般的に十分です。

より多くのオプションを探している場合は、PHP のハッシュ関数を使用してください。そこにはたくさんのオプションがあります。

于 2008-12-03T00:26:39.857 に答える
-3

組み合わせて使用​​しています。たとえば、SHA1(MD5())は正常に動作しています。

于 2016-02-17T10:20:23.123 に答える