[Php] 多くのハッシュ反復:毎回塩を追加しますか?


Answers

それを複数回再ハッシュすることに加えて、パスワード/ユーザーごとに異なる塩を使用します。 私は5000の反復が少しすぎると思っていますが、低い数値を試してみてください。 ここにはトレードオフがあります。 あなたのニーズとハードウェアに合わせて調整する必要があります。

各パスワードごとに異なる塩を使用すると、攻撃者は虹のテーブルを構築する代わりに個々のパスワードを個別にブルートフォースする必要があり、作業負荷が大幅に増加します。

いつものように、ここではこれをお勧めします: ちょうどハッシュが十分ではありませ

編集:繰り返しハッシュは完全に有効な戦術です。 トレードオフがありますが、すべてにはトレードオフがあります。 計算時間が心配な方は、平文のパスワードを保存するだけではいかがですか?

Question

私は長い間無塩のmd5 / sha1を使用してきましたが、この方法は実際には安全ではありません(時間が経つにつれて安全性が低下しています)ので、塩漬けsha512に切り替えることにしました。 さらに、私は多くの反復(例えば100)を使ってハッシュの生成を遅くしたいと思っています。

私の質問は、すべての反復に塩を追加するのか、最初に1回だけ追加するのかです。 次に2つのコードを示します。

毎回追加:

// some nice big salt
$salt = hash($algorithm, $salt);

// apply $algorithm $runs times for slowdown
while ($runs--) {
    $string = hash($algorithm, $string . $salt, $raw);
}

return $string;

1回追加:

// add some nice big salt
$string .= hash($algorithm, $salt);

// apply $algorithm $runs times for slowdown
while ($runs--) {
    $string = hash($algorithm, $string, $raw);
}

return $string;

私は最初に2番目のバージョン(1回追加)を使用したかったのですが、そのたびに塩を追加するスクリプトを見つけました。

だから、それを追加するたびにハッシュに力が加わるのだろうかと思う。 たとえば、攻撃者がsha512を100回実行するよりも速い100timesSha512機能を作成するための賢明な方法を見つけた可能性はありますか?




反復ハッシングの理由は、プロセスを可能な限り遅くすることです。 だからあなたはもっとうまくいくことができます:繰り返しごとに異なる塩を使います。 これは固定キーとソルト値でXORすることで元のデータを何度も何度も何度も暗号化することで実現できます。




Links