12

私はPHPを使用しています。以前は、ネイティブの mysql 関数 password() を使用してパスワードを保存していました。password() はもう安全ではないと言われました。パスワードをPHPに保存する最良の方法は何ですか? MD5ですか?

4

6 に答える 6

24

更新された回答 2016:

PHC (パスワード ハッシング コンペティション)の勝者はArgon2 でした。Argon2 でパスワードをハッシュすることは、2016 年現在のベスト プラクティスです。

PHC は 2013 年から 2015 年まで、NIST の AES および SHA-3 コンペティションと同じ種類のプロセスであり、暗号標準を開発する最も効果的な方法であるオープン コンペティションとして開催されました。多くの優れたデザインを含む 24 の候補があり、1 つの勝者 Argon2 が選ばれました。Argon2 は、ルクセンブルグ大学の Alex Biryukov、Daniel Dinu、および Dmitry Khovratovich によって設計されたアルゴリズムです。

従来のアルゴリズムではなく Argon2 を使用することをお勧めします。

リファレンス実装はGitHub で入手できます

更新された回答 2012:

以下に示した元の回答は、かつてベストプラクティスと見なされていました。ただし、ハッシュ コンピューティング テクノロジの進歩により、これらのスキームは脆弱になりました。今後、唯一の安全なパスワード ハッシュ スキームは、bcryptPBKDF2などの反復ハッシュです。完全な議論については、Jeff Atwood の分析を参照してください。

元の回答 2009:

最初にソルト値をパスワードの先頭に追加し、続いて得られた文字列をSHA256のようなかなり強力なハッシュ関数でハッシュすることをお勧めします。これにより、明白なパスワード (平文のパスワード) とそれほど明白でないパスワード ( Rainbow テーブルを使用した攻撃) から保護されます。

この方法でパスワードを保存すると、失われたユーザーのパスワードを取得できなくなることに注意してください。彼らはパスワードをリセットすることしかできません。これは、一方向ハッシュを使用するためです。しかし、この制限は、より安全なパスワード ストレージ システムと引き換えに一般的に価値があります。データベースが危険にさらされたとしても、ユーザーのパスワードは依然として非常に困難であり、おそらく攻撃者が回復することは実際的ではありません.

于 2009-10-20T05:22:29.547 に答える
4

実際には bcrypt の方が安全です。参照:レインボー テーブルについてはもう十分: 安全なパスワード スキームについて知っておくべきこと

于 2011-05-13T11:23:38.297 に答える
2

パスワードをソルトする必要があります。

vBulletin は、パスワードの保存に非常に優れています。md5(md5(パスワード) + ソルト);

于 2009-10-20T05:20:27.117 に答える
2

もう 1 つの答えに反論すると、VBulletin はパスワードのハッシュという恐ろしい仕事をします。それらのソルトの長さはわずか 3 文字であり、アプリケーションのセキュリティをわずかに向上させるだけです。

http://www.openwall.com/phpass/をチェックしてください。彼らは、各パスワードに固有の長いハッシュを使用し、パスワードを md5 で何千回も実行するという優れた仕事をしています。これは、PHP 用の最高のハッシュ システムの 1 つです。

于 2009-10-20T05:23:35.830 に答える
0

ソルトとハッシュ。

通常、ソルトとしてランダムGUIDを使用し、次にハッシュにSHA512を使用します。

于 2009-11-14T17:25:04.640 に答える
0

ユーザーパスワードの保存を避けることができれば、それが最善の選択肢です。OpenId (Stackoverflow など) を使用してユーザーを認証します。またはライブ認証 ( http://dev.live.com/liveid/ )。本当に、本当にユーザーを自分で認証する必要がある場合。アサフが彼の答えで言ったことをしてください。:)

于 2009-10-20T06:11:53.403 に答える