私はPHPを使用しています。安全で高速なパスワード暗号化システムが必要です。パスワードを 100 万回ハッシュする方が安全かもしれませんが、速度も遅くなります。速度と安全性のバランスをどのように達成するか? PHPでの最適な暗号化方式とその適用方法を知りたいです。
4 に答える
新しいPHP 5.5 パスワード APIを使用することをお勧めします。十分に高速でありながら、パスワードをハッシュする安全な手段を提供します。
PHP 5.5 が利用できない場合は、 PHP 5.3.7+で動作するポリフィルがあります: https://github.com/ircmaxell/password_compat
SHA512 http://php.net/manual/en/function.hash.phpを使用します。SHA512 はクラックされていません。ソルトを使用することをお勧めします。ハッシュする前にパスワードに追加するランダムな文字列です。これにより、事前計算されたレインボー テーブルから保護できますが、攻撃者がパスワードとソルトを含むデータベースにアクセスした場合、辞書攻撃から保護することはできません。SHA512(パスワード + ソルト) --> ハッシュ ハッシュとソルトをDBに格納 パスワードを確認する際、ユーザーに対応するソルトを取得し、パスワードと連結してハッシュし、格納されているハッシュと比較します。こちらをお読みください:ソルト化された SHA-512 ハッシュをブルート フォースするのにかかる時間は? (お塩はご用意しております)
あなたの質問、特にあなたの声明について考えてみてください。実際、ハッシュを繰り返し行うと、ディクショナリ内のすべてのハッシュを計算する計算コストが法外に高くなるため、ディクショナリ攻撃から保護されます。ここでは何も教えていません。私が提供した最初のリンクから、比較的長い SHA512 ハッシュを計算するのに約 46 ミリ秒かかりました。手に負えないほど、軍拡競争の状況であなたの決定に影響を与える可能性のある次の要因を考えることができます: - 計算能力の向上 (より多くの CPU コアと GPU 計算) - 時間の経過とともに改善されたアルゴリズム - 攻撃者が利用できる金額 -クラックされた場合にサイトから抜け出す価値 (低い場合、努力する価値はありません) に対して - 自由に使える CPU パワーの量 経験則として、Web サイトのパフォーマンスに影響を与えないように、できるだけ多くハッシュします。1 秒あたりのログイン数を考慮すると、サイトのパフォーマンスに影響を与えずに使用できる CPU パワーの量を大まかに計算できます。
最後のコメント: ハッカーが既にユーザー名とハッシュ化されたパスワードを含むテーブルにアクセスできると仮定すると、その時点で、ハッカーがサイトで行う可能性のあるすべての悪いことについてもっと心配するかもしれません.
暗号化を探しているのではなく、ハッシュを探しています。
openwalls phpass http://www.openwall.com/phpass/をお勧めします
PHP5.5を使用している場合、API http://uk3.php.net/passwordを持つパスワードがあります
詳細については。
MD5 (salt-less) はしばらく使用されており、多数のルックアップ リストが存在します。最新のハードウェアと組み合わせると、1 秒あたり 700K 以上のパスワードを取得するため、パスワードを「元に戻す」のにまったく時間がかかりません。
ソルトを使用すると、より安全になりますが、それでもすぐにクラックされる可能性があります